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

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 HTTPUTILS_HPP
  23. #define HTTPUTILS_HPP
  24. class SBinetNString;
  25. class SBinetHttpUtils
  26. {
  27.  public:
  28.   enum HttpCode
  29.   {
  30.     HTTP_CONTINUE = 100,                    /* Continue an operation */
  31.     HTTP_UPGRADE = 101,                     /* Switching protocols */
  32.     HTTP_OK = 200,                          /* Everything's OK */
  33.     HTTP_CREATED = 201,                     /* New object is created */
  34.     HTTP_ACCEPTED = 202,                    /* Accepted */
  35.     HTTP_NO_DATA = 204,                     /* OK but no data was loaded */
  36.     HTTP_RESET_CONTENT = 205,               /* Reset content */
  37.     HTTP_PARTIAL_CONTENT = 206,             /* Partial Content */
  38.     HTTP_MULTIPLE_CHOICES = 300,            /* Multiple choices */
  39.     HTTP_PERM_REDIRECT = 301,               /* Permanent redirection */
  40.     HTTP_FOUND = 302,                       /* Found */
  41.     HTTP_SEE_OTHER = 303,                   /* See other */
  42.     HTTP_NOT_MODIFIED = 304,                /* Not Modified */
  43.     HTTP_USE_PROXY = 305,                   /* Use Proxy */
  44.     HTTP_PROXY_REDIRECT = 306,              /* Proxy Redirect */
  45.     HTTP_TEMP_REDIRECT = 307,               /* Temporary redirect */
  46.     HTTP_NO_ACCESS = 401,                  /* Unauthorized */
  47.     HTTP_FORBIDDEN = 403,                  /* Access forbidden */
  48.     HTTP_NOT_FOUND = 404,                  /* Not found */
  49.     HTTP_METHOD_NOT_ALLOWED = 405,         /* Method not allowed */
  50.     HTTP_NOT_ACCEPTABLE = 406,             /* Not Acceptable */
  51.     HTTP_NO_PROXY_ACCESS = 407,            /* Proxy Authentication Failed */
  52.     HTTP_CONFLICT = 409,                   /* Conflict */
  53.     HTTP_LENGTH_REQUIRED = 411,            /* Length required */
  54.     HTTP_PRECONDITION_FAILED = 412,        /* Precondition failed */
  55.     HTTP_TOO_BIG = 413,                    /* Request entity too large */
  56.     HTTP_URI_TOO_BIG = 414,                /* Request-URI too long */
  57.     HTTP_UNSUPPORTED = 415,                /* Unsupported */
  58.     HTTP_BAD_RANGE = 416,                  /* Request Range not satisfiable */
  59.     HTTP_EXPECTATION_FAILED = 417,         /* Expectation Failed */
  60.     HTTP_REAUTH = 418,                     /* Reauthentication required */
  61.     HTTP_PROXY_REAUTH = 419,               /* Proxy Reauthentication required */
  62.     HTTP_SERVER_ERROR = 500,               /* Internal server error */
  63.     HTTP_NOT_IMPLEMENTED = 501,            /* Not implemented (server error) */
  64.     HTTP_BAD_GATEWAY = 502,                /* Bad gateway (server error) */
  65.     HTTP_RETRY = 503,                      /* Service not available (server error) */
  66.     HTTP_GATEWAY_TIMEOUT = 504,            /* Gateway timeout (server error) */
  67.     HTTP_BAD_VERSION = 505,                /* Bad protocol version (server error) */
  68.     HTTP_NO_PARTIAL_UPDATE = 506,          /* Partial update not implemented (server error) */
  69.     HTTP_INTERNAL = 900,                   /* Weird -- should never happen. */
  70.     HTTP_WOULD_BLOCK = 901,                /* If we are in a select */
  71.     HTTP_INTERRUPTED = 902,                /* Note the negative value! */
  72.     HTTP_PAUSE = 903,                      /* If we want to pause a stream */
  73.     HTTP_RECOVER_PIPE = 904,               /* Recover pipe line */
  74.     HTTP_TIMEOUT = 905,                    /* Connection timeout */
  75.     HTTP_NO_HOST = 906                     /* Can't locate host */
  76.   };
  77.   enum HttpUriEncoding
  78.   {
  79.     URL_XALPHAS = 0x1,                      /* Escape all unsafe characters */
  80.     URL_XPALPHAS = 0x2,                     /* As URL_XALPHAS but allows '+' */
  81.     URL_PATH = 0x4,                         /* As URL_XPALPHAS but allows '/' */
  82.     URL_DOSFILE = 0x8                       /* As URL_PATH but allows ':' */
  83.   };
  84.   /**
  85.    * Replace characters by their HEX encoding.
  86.    **/
  87.   static void escapeString(const char * str, HttpUriEncoding mask, SBinetNString& result);
  88.   static void escapeData(const void *data, const int size,
  89.   HttpUriEncoding mask, SBinetNString& result);
  90.   /**
  91.    * Performs a UTF-8 encoding of the wide string.
  92.    * If the string is invalid (contains character greater than 0x7FFFFFFF), an empty string is returned.
  93.    **/
  94.   static void utf8encode(const VXIchar *str, SBinetNString& result);
  95.   // HTTP parsing utilities.  They all advance str to the first character that
  96.   // does not compose the lexeme and return it.  The lexeme is returned by
  97.   // reference.
  98.   static const char *getToken(const char *str, SBinetNString& token);
  99.   static const char *getCookieValue(const char *str, SBinetNString& value);
  100.   static const char *getValue(const char *str, SBinetNString& value);
  101.   // advances to the next non-whitespace character and returns it, However, if
  102.   // the character found is not in delim, it returns NULL. Note that the ''
  103.   // character is always returned as is (it is always considered to be part of
  104.   // delim).
  105.   static const char *expectChar(const char *start, const char *delim);
  106.   // Avoid locale dependant ctype.h macros
  107.   static inline bool isSpace(const char c) {
  108.     return (((c == ' ') || (c == 't') || (c == 'n') || (c == 'r')) ?
  109.     true : false);
  110.   }
  111.   static inline bool isSpace(const wchar_t c) {
  112.     return (((c == L' ') || (c == L't') || (c == L'n') || (c == L'r')) ?
  113.     true : false);
  114.   }
  115.   static inline bool isAlpha(const wchar_t c) {
  116.     return ((((c >= L'a') && (c <= L'z')) || ((c >= L'A') && (c <= L'Z'))) ?
  117.     true : false);
  118.   }
  119.   static inline bool isDigit(const wchar_t c) {
  120.     return (((c >= L'0') && (c <= L'9')) ?  true : false);
  121.   }
  122.   static inline wchar_t toLower(const wchar_t c) {
  123.     return ((( c >= L'A' ) && ( c <= L'Z' )) ? c + (L'a' - L'A') : c);
  124.   }
  125.   static inline wchar_t toUpper(const wchar_t c) {
  126.     return ((( c >= L'a' ) && ( c <= L'z' )) ? c - (L'a' - L'A') : c);
  127.   }
  128.   // Sleep with a duration in microseconds
  129.   static void usleep(unsigned long microsecs);
  130.   // Case insensitive compares, can't use the C library versions as
  131.   // they are locale dependant (and some C libraries don't even have
  132.   // these as they are not ANSI/ISO C standard), and can't use
  133.   // "wcscasecmp" and "wcsncasecmp" as the names otherwise it
  134.   // conflicts with #defines for Microsoft Visual Studio C++
  135.   static int casecmp(const wchar_t *s1, const wchar_t *s2);
  136.   static int casecmp(const wchar_t *s1, const wchar_t *s2, register size_t n);
  137.  private:
  138.   // Disable constructor.
  139.   SBinetHttpUtils();
  140.   // Helper function used to parse a string that is known to be in quote.
  141.   static const char *getQuotedString(const char *str, SBinetNString& value);
  142. };
  143. #endif