SBinetURL.h
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:5k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /****************License************************************************
  2.  * Vocalocity OpenVXI
  3.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  18.  * registered trademarks of Vocalocity, Inc. 
  19.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  20.  * by Vocalocity.
  21.  ***********************************************************************/
  22. #ifndef __SBINETURL_H_                   /* Allows multiple inclusions */
  23. #define __SBINETURL_H_
  24. #include "VXItypes.h"
  25. #include "VXIvalue.h"
  26. #include "VXIinet.h"
  27. #include "SBinetString.hpp"
  28. #define SB_BOUNDARY "osb_inet_multipart_boundary"
  29. #define SB_MULTIPART "multipart/form-data; boundary=osb_inet_multipart_boundary"
  30. #define SB_URLENCODED "application/x-www-form-urlencoded"
  31. #define CRLF "rn"
  32. class SBinetURL
  33. {
  34. public:
  35.   enum Protocol {
  36.     UNKNOWN_PROTOCOL = 0,
  37.     FILE_PROTOCOL = 1,
  38.     HTTP_PROTOCOL = 2,
  39.     HTTPS_PROTOCOL = 3
  40.   };
  41.  public:
  42.   SBinetURL(const SBinetURL& url)
  43.   {
  44.     operator=(url);
  45.   }
  46.   ~SBinetURL()
  47.   {}
  48.   Protocol getProtocol() const
  49.   {
  50.     return _protocol;
  51.   }
  52.   const VXIchar * getAbsolute() const
  53.   {
  54.     return _absoluteURL.c_str();
  55.   }
  56.   const VXIchar * getBase() const
  57.   {
  58.     return _baseURL.c_str();
  59.   }
  60.   const VXIchar * getPath() const
  61.   {
  62.     return _strPath.c_str();
  63.   }
  64.   const VXIchar * getHost() const
  65.   {
  66.     return _host.c_str();
  67.   }
  68.   const char * getNAbsolute() const
  69.   {
  70.     return N_absoluteURL.c_str();
  71.   }
  72.   const char * getNBase() const
  73.   {
  74.     return N_baseURL.c_str();
  75.   }
  76.   const char * getNPath() const
  77.   {
  78.     return N_strPath.c_str();
  79.   }
  80.   const char * getNHost() const
  81.   {
  82.     return N_host.c_str();
  83.   }
  84.   SBinetURL& operator=(const SBinetURL& url);
  85.   bool operator==(const SBinetURL& url);
  86.   bool operator!=(const SBinetURL& url)
  87.   {
  88.     return !operator==(url);
  89.   }
  90.   static VXIinetResult create(const VXIchar* pszName,
  91.                               const VXIchar* pszUrlBase,
  92.                               SBinetURL *& url);
  93.   VXIinetResult parse(const VXIchar* pszName,
  94.                       const VXIchar* pszUrlBase);
  95.   void appendQueryArgsToURL(const VXIMap* _queryArgs);
  96.   VXIString *getContentTypeFromUrl() const;
  97.   SBinetNString queryArgsToNString(const VXIMap* queryArgs) const;
  98.   static bool requiresMultipart(const VXIMap* queryArgs);
  99.   SBinetNString queryArgsToMultipart(const VXIMap* queryArgs);
  100.  public:
  101.   int getPort() const
  102.   {
  103.     return _port;
  104.   }
  105.  private:
  106.   SBinetURL():
  107.     _absoluteURL(), _baseURL(), _host(), _strPath(), _protocol(UNKNOWN_PROTOCOL),
  108.     _port(-1)
  109.   {}
  110.   static SBinetNString valueToNString(const VXIValue* value);
  111.   // Multipart stuff.
  112.   static bool requiresMultipart(const VXIValue* value);
  113.   static bool requiresMultipart(const VXIVector* vxivector);
  114.   static void appendKeyToMultipart(SBinetNString& result, const char *key, bool appendFilename = true);
  115.   static void appendValueToMultipart(SBinetNString& result,
  116.      const SBinetNString& value);
  117.   static void appendQueryArgsMapToMultipart(SBinetNString& result,
  118.                                             const VXIMap *vximap,
  119.                                             SBinetNString& fieldName);
  120.   static void appendQueryArgsVectorToMultipart(SBinetNString& result,
  121.                                                const VXIVector *vxivector,
  122.                                                SBinetNString& fieldName);
  123.   static void appendQueryArgsToMultipart(SBinetNString& result,
  124.                                          const VXIValue *value,
  125.                                          SBinetNString& fieldName);
  126.  private:
  127.   SBinetString _absoluteURL;
  128.   SBinetString _baseURL;
  129.   SBinetString _host;
  130.   SBinetString _strPath;
  131.   SBinetNString N_absoluteURL;
  132.   SBinetNString N_baseURL;
  133.   SBinetNString N_host;
  134.   SBinetNString N_strPath;
  135.   Protocol _protocol;
  136.   int _port;
  137. };
  138. #endif