亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? httputils.cpp

?? OSB-PIK-OpenVXI-3.0.0源代碼 “中國XML論壇 - 專業(yè)的XML技術討論區(qū)--XML在語音技術中的應用”
?? CPP
字號:
 /****************License************************************************  *  * Copyright 2000-2003.  ScanSoft, Inc.      *  * Use of this software is subject to notices and obligations set forth   * in the SpeechWorks Public License - Software Version 1.2 which is   * included with this software.   *  * ScanSoft is a registered trademark of ScanSoft, Inc., and OpenSpeech,   * SpeechWorks and the SpeechWorks logo are registered trademarks or   * trademarks of SpeechWorks International, Inc. in the United States   * and other countries.  *  ***********************************************************************/  #include "SBinetString.hpp" #include "HttpUtils.hpp" #include <ctype.h> #include <stdlib.h> #include <string.h> #include "ap_ctype.h"  #ifdef WIN32 #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <stdlib.h> #else #include <time.h> #include <sys/types.h> #include <sys/time.h> #include <sys/times.h> #include <unistd.h> #include <sys/select.h> #endif   static void escapeDataIntern(const VXIbyte *data,                              VXIulong size,                              SBinetHttpUtils::HttpUriEncoding mask,                              SBinetNString &result) {   /*    *	Bit 0		xalpha    *	Bit 1		xpalpha		-- as xalpha but with plus.    *	Bit 2 ...	path		-- as xpalpha but with /    */   static const VXIbyte isAcceptable[96] =     /*0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF */   {     0x0,0x0,0x0,0x0,0x0,0xE,0x0,0x0,0x0,0x0,0xF,0xE,0x0,0xF,0xF,0xC, /* 2x  !"#$%&'()*+,-./   */     0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0x8,0x0,0x0,0x0,0x0,0x0, /* 3x 0123456789:;<=>?   */     0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF, /* 4x @ABCDEFGHIJKLMNO   */     0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0x0,0x0,0x0,0x0,0xF, /* 5X PQRSTUVWXYZ[\]^_   */     0x0,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF, /* 6x `abcdefghijklmno   */     0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0xF,0x0,0x0,0x0,0x0,0x0  /* 7X pqrstuvwxyz{\}~DEL */   };    static const char *hexChar = "0123456789ABCDEF";    // Now perform the actual conversion   const VXIbyte *p;   VXIulong i;   for (i = 0, p = data; i < size; i++, p++)   {     VXIbyte a = *p;     if (a < 32 || a >= 128 || !(isAcceptable[a-32] & mask))     {       result += '%';       result += hexChar[a >> 4];       result += hexChar[a & 15];     }     else       result += static_cast<char>(*p);   } }  void SBinetHttpUtils::escapeString(const char *str, HttpUriEncoding mask, SBinetNString &result) {   result.clear();    if (str == NULL) return;    escapeDataIntern((const VXIbyte *) str, strlen(str), mask, result); }   void SBinetHttpUtils::escapeData(const void *data,                                  const int size,                                  HttpUriEncoding mask,                                  SBinetNString& result) {   result.clear();   if (data == NULL) return;   escapeDataIntern((const VXIbyte *) data, size, mask, result); }   void SBinetHttpUtils::utf8encode(const VXIchar *str, SBinetNString& result) {   result.clear();    if (str == NULL) return;    //  firstByteMark   //      A list of values to mask onto the first byte of an encoded sequence,   //      indexed by the number of bytes used to create the sequence.   static const char firstByteMark[7] = {  char(0x00), char(0x00), char(0xC0), char(0xE0),                                           char(0xF0), char(0xF8), char(0xFC) };    for (const VXIchar *p = str; *p; p++)   {     VXIchar c = *p;      if (c >= 0xD800 && c <= 0xDBFF)       break;      unsigned int encodedBytes;     if (c < 0x80)       encodedBytes = 1;     else if (c < 0x800)       encodedBytes = 2;     else if (c < 0x10000)       encodedBytes = 3;     else if (c < 0x200000)       encodedBytes = 4;     else if (c < 0x4000000)       encodedBytes = 5;     else if (c <= 0x7FFFFFFF)       encodedBytes = 6;     else     {       result.clear();       break;     }      //  And spit out the bytes. We spit them out in reverse order     //  here, so bump up the output pointer and work down as we go.     char buffer[7] = { 0, 0, 0, 0, 0, 0, 0 };      char * outPtr = buffer + encodedBytes;     switch (encodedBytes)     {      case 6 :        *--outPtr = char((c | 0x80) & 0xBF);       c >>= 6;      case 5 :        *--outPtr = char((c | 0x80) & 0xBF);       c >>= 6;      case 4 :        *--outPtr = char((c | 0x80) & 0xBF);       c >>= 6;      case 3 :        *--outPtr = char((c | 0x80) & 0xBF);       c >>= 6;      case 2 :        *--outPtr = char((c | 0x80) & 0xBF);       c >>= 6;      case 1 :        *--outPtr = char(c | firstByteMark[encodedBytes]);     }      for (int i = 0; buffer[i] != 0; i++)       result += buffer[i];   } } const char *SBinetHttpUtils::getToken(const char *str, SBinetNString& token) {   static const char *tspecials = "()<>@,;:\\\"/[]?={} \t";    const char *beg = str;    while (*beg && ap_isspace(*beg)) beg++;   if (!*beg) return NULL;    const char *end = beg;    while (*end && !strchr(tspecials, *end) && !ap_iscntrl(*end)) end++;   if (end == beg)   {     return NULL;   }    token.clear();   token.append(beg, end - beg);   return end; }  const char *SBinetHttpUtils::getQuotedString(const char *str, 					     SBinetNString& value) {   // skip leading '"'   ++str;   value.clear();    while (*str && *str != '"')   {     switch (*str)     {      case '\\':        str++;        if (*str) value += *str;        break;      default:        value += *str;        break;     }     str++;   }    if (*str == '"')     return ++str;    return NULL; }  const char *SBinetHttpUtils::getValue(const char *str, SBinetNString& value) {   const char *beg = str;   while (*beg && ap_isspace(*beg)) beg++;   if (!*beg) return NULL;    if (*beg == '"')   {     return getQuotedString(beg, value);   }   else   {     return getToken(beg, value);   } }  const char *SBinetHttpUtils::getCookieValue(const char *str, 					    SBinetNString& value) {   const char *beg = str;   while (*beg && ap_isspace(*beg)) beg++;   if (!*beg) return NULL;    if (*beg == '"')   {     return getQuotedString(beg, value);   }   else   {     // The specification says that a value is either a token or a quoted     // string.  However, a lot of broken servers just don't quote string     // containing blanks.  We have to include everything up to the semicolon. #ifdef NO_BROKEN_SERVER     return getToken(beg, value); #else     while (*beg && ap_isspace(*beg)) beg++;     if (!*beg) return NULL;     const char *end = beg;     while (*end && *end != ';')     {       // some really broken servers even put a comma in the value.  In this       // case, we scan the string to find the first occurence of a semi-colon       // or an equal sign.  If we find the semi-colon first, we assume that       // the comma is part of the value and the value terminates at the       // semi-colon location.  Otherwise, the value terminates with the comma.       if (*end == ',')       {         const char *orig_end = end;         while (*end && *end != ';' && *end != '=') end++;         if (*end == '=') end = orig_end;         break;       }       end++;     }      // removing trailing blanks.     const char *lastChar = end - 1;     while (lastChar >= beg && ap_isspace(*lastChar)) lastChar--;     lastChar++;      value.clear();     value.append(beg, lastChar - beg);     return end; #endif   } }  const char *SBinetHttpUtils::expectChar(const char *start, const char *delim) {   while (*start && ap_isspace(*start)) start++;    if (!*start || strchr(delim, *start))     return start;    return NULL; }   // Sleep with a duration in microseconds void SBinetHttpUtils::usleep(unsigned long microsecs) { #ifdef WIN32   Sleep (microsecs / 1000); #else   fd_set fdset;   struct timeval timeout;    FD_ZERO(&fdset);   timeout.tv_sec = microsecs / 1000000;   timeout.tv_usec = microsecs % 1000000;   select(0, &fdset, &fdset, &fdset, &timeout); #endif }   // Case insensitive compare int SBinetHttpUtils::casecmp(const wchar_t *s1, const wchar_t *s2) {   register unsigned int u1, u2;    for (;;) {     u1 = (unsigned int) *s1++;     u2 = (unsigned int) *s2++;     if (toUpper(u1) != toUpper(u2)) {       return toUpper(u1) - toUpper(u2);     }     if (u1 == '\0') {       break;     }   }    return 0; }   int SBinetHttpUtils::casecmp(const wchar_t *s1, const wchar_t *s2, 			     register size_t n) {   register unsigned int u1, u2;    for (; n != 0; --n) {     u1 = (unsigned int) *s1++;     u2 = (unsigned int) *s2++;     if (toUpper(u1) != toUpper(u2)) {       return toUpper(u1) - toUpper(u2);     }     if (u1 == '\0') {       break;     }   }    return 0; }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
无码av免费一区二区三区试看 | 亚洲人成伊人成综合网小说| 一区二区视频免费在线观看| 蜜臀国产一区二区三区在线播放| 国产成人啪免费观看软件| 欧美综合一区二区| 国产精品人成在线观看免费 | 亚洲一区二区影院| 懂色av一区二区夜夜嗨| 日韩欧美成人一区二区| 一区二区三区91| 国产·精品毛片| 26uuu亚洲| 看片的网站亚洲| 日韩午夜在线观看视频| 亚洲电影你懂得| 欧美最猛黑人xxxxx猛交| 中文字幕一区二区三区不卡| 国产白丝精品91爽爽久久| 欧美电影免费观看高清完整版在 | 91精品在线观看入口| 亚洲美女偷拍久久| 99天天综合性| 亚洲日本韩国一区| 91网站最新网址| 国产精品电影一区二区三区| 国产盗摄女厕一区二区三区| 久久久欧美精品sm网站| 国产一区二区免费看| 精品少妇一区二区| 国模娜娜一区二区三区| 久久婷婷国产综合精品青草| 久久91精品久久久久久秒播| 精品国产1区二区| 国产在线视频一区二区三区| 久久久久亚洲蜜桃| 国产成人精品免费网站| 国产精品久久久久久妇女6080| 高清国产一区二区三区| 国产精品理论在线观看| 欧美亚洲一区三区| 日韩电影免费在线观看网站| 欧美一区三区二区| 国产一区日韩二区欧美三区| 国产欧美精品一区二区三区四区| 盗摄精品av一区二区三区| 国产精品无遮挡| 在线观看av一区| 日本不卡一区二区| 久久精品视频一区二区三区| 成人美女在线视频| 亚洲专区一二三| 日韩免费性生活视频播放| 国产成人丝袜美腿| 一区二区三区在线看| 7777精品伊人久久久大香线蕉最新版| 蜜臀国产一区二区三区在线播放| www成人在线观看| 91日韩在线专区| 日韩国产精品久久久| 国产精品午夜在线| 欧美性大战久久久久久久蜜臀| 麻豆一区二区99久久久久| 中文字幕免费观看一区| 在线亚洲免费视频| 国内久久精品视频| 亚洲精品日日夜夜| 欧美精品一区二区在线观看| 91同城在线观看| 久久精品99久久久| 亚洲天堂福利av| 精品国精品自拍自在线| 91激情在线视频| 国产一区二区三区四区五区入口| 一区二区三区视频在线看| 精品国产免费久久 | 在线观看视频欧美| 国产剧情在线观看一区二区| 亚洲精品国产a久久久久久| 久久影院电视剧免费观看| 欧美性生活一区| 成年人国产精品| 精品无人区卡一卡二卡三乱码免费卡 | 99热精品国产| 美女视频黄频大全不卡视频在线播放| 成人免费在线视频| 久久久久久久久久电影| 欧美一区二区三区免费在线看| 91亚洲精品久久久蜜桃| 国产精品亚洲第一| 久久精品免费看| 午夜a成v人精品| 亚洲影院久久精品| 亚洲日穴在线视频| 国产精品久久久久久久久免费丝袜 | 亚洲sss视频在线视频| 中文字幕久久午夜不卡| 久久综合久久综合久久| 欧美一级高清片| 在线播放国产精品二区一二区四区| 91污片在线观看| 不卡的av电影| 成人avav影音| 成人毛片老司机大片| 国产不卡一区视频| 国产精品123区| 国产精品自在在线| 国产精品一品二品| 高清beeg欧美| 国产99精品视频| 成人自拍视频在线观看| 国产成人av电影在线| 粉嫩嫩av羞羞动漫久久久| 国产激情视频一区二区在线观看 | 国模冰冰炮一区二区| 九九九精品视频| 国产一区在线观看视频| 国产一二精品视频| 国产69精品久久久久777| 成人av电影在线播放| 91视频在线观看免费| 色综合天天综合狠狠| 91久久一区二区| 在线不卡的av| 精品免费视频一区二区| 久久精品水蜜桃av综合天堂| 亚洲国产精品成人综合| 中文字幕一区二区三区精华液| 亚洲免费视频成人| 亚洲福利视频一区二区| 久久精品国产在热久久| 国产激情一区二区三区桃花岛亚洲| 成人永久aaa| 欧美在线free| 欧美成人一区二区| 国产精品久久久久影院| 亚洲欧美一区二区三区极速播放| 一卡二卡三卡日韩欧美| 久久电影网电视剧免费观看| 成人一区二区三区视频在线观看 | 欧美日韩国产三级| 精品久久五月天| 日韩一区在线免费观看| 天天综合日日夜夜精品| 蜜臀国产一区二区三区在线播放| 久久精品免费观看| 成人综合在线视频| 欧美视频中文字幕| 国产日韩欧美不卡| 综合中文字幕亚洲| 毛片不卡一区二区| 91国偷自产一区二区使用方法| 欧美一区日韩一区| 亚洲视频一二三区| 老汉av免费一区二区三区| 91一区二区在线观看| 日韩免费在线观看| 亚洲国产日韩一级| 国产精品69毛片高清亚洲| 欧美日韩中字一区| 国产精品乱人伦| 美女在线视频一区| 色婷婷国产精品| 久久久国产精品不卡| 国产精品久线观看视频| 同产精品九九九| 99久久婷婷国产综合精品| 欧美大白屁股肥臀xxxxxx| 一区二区三区波多野结衣在线观看| 国产寡妇亲子伦一区二区| 日韩欧美一级精品久久| 秋霞午夜鲁丝一区二区老狼| 国产精品77777竹菊影视小说| 欧美一级精品在线| 五月天亚洲精品| 色香蕉久久蜜桃| 国产精品国产三级国产| 国产久卡久卡久卡久卡视频精品| 欧美丰满少妇xxxbbb| 一区二区三区日韩精品视频| 成人激情图片网| 日本一区二区免费在线观看视频| 另类的小说在线视频另类成人小视频在线 | 国产·精品毛片| 久久综合狠狠综合久久综合88| 香蕉影视欧美成人| 69堂成人精品免费视频| 日韩视频永久免费| 夜色激情一区二区| 成人97人人超碰人人99| 国产农村妇女精品| 国产一区二区成人久久免费影院| 欧美精品三级在线观看| 午夜精品久久久久久久久久 | 黑人精品欧美一区二区蜜桃| 欧美一区二区黄| 美洲天堂一区二卡三卡四卡视频| 欧美精品免费视频| 日韩黄色在线观看| 日韩一区二区麻豆国产|