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

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

?? httpconnection.cpp.svn-base

?? wince c++ 下 開發的 rss 閱讀器源代碼
?? SVN-BASE
?? 第 1 頁 / 共 2 頁
字號:
}

// gzip /////////////////////////////////////////////////////////////////////

#define ASCII_FLAG   0x01 /* bit 0 set: file probably ascii text */
#define HEAD_CRC     0x02 /* bit 1 set: header CRC present */
#define EXTRA_FIELD  0x04 /* bit 2 set: extra field present */
#define ORIG_NAME    0x08 /* bit 3 set: original file name present */
#define COMMENT      0x10 /* bit 4 set: file comment present */
#define RESERVED     0xE0 /* bits 5..7: reserved */

static unsigned gz_magic[2] = {0x1f, 0x8b}; /* gzip magic header */

int CHttpConnection::CheckGzipHeader(unsigned char *iStr, BOOL *rs) {
	LOG0(5, "CHttpConnection::CheckGzipHeader()");

	enum  { GZIP_INIT = 0, GZIP_OS, GZIP_EXTRA0, GZIP_EXTRA1, GZIP_EXTRA2, GZIP_ORIG, GZIP_COMMENT, GZIP_CRC };
	char c;
	int mSkipCount = 0, mFlags = 0, hMode = GZIP_INIT, mLen = 0;

	*rs = TRUE;

	int streamLen = 0;
	DWORD read;
	BOOL mCheckHeaderDone = FALSE;

	while (!mCheckHeaderDone) {
		if (streamLen == 0) {
			if (!ReceiveBlock(iStr, CHUNK, &read)) {
				*rs = FALSE;
				return 0;
			}

			streamLen = read;
		}

		switch (hMode) {
			case GZIP_INIT:
				c = *iStr++;
				streamLen--;

				if (mSkipCount == 0 && ((unsigned) c & 0377) != gz_magic[0]) {
					*rs = FALSE;
					return 0;
				}

				if (mSkipCount == 1 && ((unsigned)c & 0377) != gz_magic[1]) {
					*rs = FALSE;
					return 0;
				}

				if (mSkipCount == 2 && ((unsigned)c & 0377) != Z_DEFLATED) {
					*rs = FALSE;
					return 0;
				}

				mSkipCount++;
				if (mSkipCount == 4) {
					mFlags = (unsigned) c & 0377;
					if (mFlags & RESERVED) {
						*rs = FALSE;
						return 0;
					}
					hMode = GZIP_OS;
					mSkipCount = 0;
				}
				break;

			case GZIP_OS:
				c = *iStr++;
				streamLen--;
				mSkipCount++;

				if (mSkipCount == 6)
					hMode = GZIP_EXTRA0;
				break;

			case GZIP_EXTRA0:
				if (mFlags & EXTRA_FIELD) {
					c = *iStr++;
					streamLen--;
					mLen = (uInt) c & 0377;
					hMode = GZIP_EXTRA1;
				}
				else
					hMode = GZIP_ORIG;
				break;

			case GZIP_EXTRA1:
				c = *iStr++;
				streamLen--;

				mLen = ((uInt) c & 0377) << 8;
				mSkipCount = 0;
				hMode = GZIP_EXTRA2;
				break;

			case GZIP_EXTRA2:
				if (mSkipCount == mLen)
					hMode = GZIP_ORIG;
				else {
					c = *iStr++;
					streamLen--;
					mSkipCount++;
				}
				break;

			case GZIP_ORIG:
				if (mFlags & ORIG_NAME) {
					c = *iStr++;
					streamLen--;
					if (c == 0)
						hMode = GZIP_COMMENT;
				}
				else
					hMode = GZIP_COMMENT;
				break;

			case GZIP_COMMENT:
				if (mFlags & GZIP_COMMENT) {
					c = *iStr++;
					streamLen--;
					if (c == 0) {
						hMode = GZIP_CRC;
						mSkipCount = 0;
					}
				}
				else {
					hMode = GZIP_CRC;
					mSkipCount = 0;
				}
				break;

			case GZIP_CRC:
				if (mFlags & HEAD_CRC) {
					c = *iStr++;
					streamLen--;

					mSkipCount++;
					if (mSkipCount == 2) {
						mCheckHeaderDone = TRUE;
						return read - streamLen;
					}
				}
				else {
					mCheckHeaderDone = TRUE;
					return read - streamLen;
				}
				break;
		} // switch
	} // while

	return read - streamLen;
}

BOOL CHttpConnection::ReceiveResponseBodyCompressed(CBufferedFile &file, EContentEncoding contentEnc) {
	LOG1(5, "CHttpConnection::ReceiveResponseBodyCompressed(, %d)", contentEnc);

	BOOL mDummyStreamInitialised = FALSE;

	int ret;
	unsigned have;
	z_stream strm;
	unsigned char in[CHUNK];
	unsigned char out[CHUNK];

	// allocate inflate state
	strm.zalloc = Z_NULL;
	strm.zfree = Z_NULL;
	strm.opaque = Z_NULL;

	int hdrLen = 0;
	if (contentEnc == CONTENT_ENCODING_GZIP) {
		BOOL rv;
		hdrLen = CheckGzipHeader(in, &rv);
		if (!rv)
			return FALSE;

		if (inflateInit2(&strm, -15) != Z_OK)
			return FALSE;

		strm.next_in  = in + hdrLen;
		strm.avail_in = (uInt) CHUNK - hdrLen;
	}
	else {
		// deflate
		if (inflateInit(&strm) != Z_OK)
			return FALSE;

		strm.avail_in = 0;
		strm.next_in = Z_NULL;
	}


	DWORD read;
	// decompress until deflate stream ends or end of file
	do {
		if (strm.avail_in == 0) {
			if (!ReceiveBlock(in, CHUNK, &read)) {
				(void) inflateEnd(&strm);
				return FALSE;
			}

			strm.avail_in = read;
			if (strm.avail_in == 0) {
				break;
			}
			strm.next_in = in;
		}

		// run inflate() on input until output buffer not full
		do {
			strm.avail_out = CHUNK;
			strm.next_out = out;
			ret = inflate(&strm, Z_NO_FLUSH);

			if (ret == Z_DATA_ERROR) {
				unsigned char *org_next_in = strm.next_in;
				uInt org_avail_in = strm.avail_in;

				// this is taken from firefox source code
				//
				// some servers (notably Apache with mod_deflate) don't generate zlib headers
				// insert a dummy header and try again
				static char dummy_head[2] = {
					0x8 + 0x7 * 0x10,
					(((0x8 + 0x7 * 0x10) * 0x100 + 30) / 31 * 31) & 0xFF,
				};
				inflateReset(&strm);
				strm.next_in = (Bytef*) dummy_head;
				strm.avail_in = sizeof(dummy_head);

				ret = inflate(&strm, Z_NO_FLUSH);
				if (ret != Z_OK)
					return FALSE;

				// stop an endless loop caused by non-deflate data being labelled as deflate
				if (mDummyStreamInitialised) {
					// endless loop detected
					return FALSE;
				}

				mDummyStreamInitialised = TRUE;
				// reset stream pointers to our original data
				strm.next_in = org_next_in;
				strm.avail_in = org_avail_in;
			}
			else if (ret == Z_MEM_ERROR) {
				(void) inflateEnd(&strm);
				return FALSE;
			}
			else if (ret == Z_OK || ret == Z_STREAM_END) {
				have = CHUNK - strm.avail_out;
				DWORD written;
				if (!file.Write(out, have, &written) || written != have) {
					(void) inflateEnd(&strm);
					return FALSE;
				}
			}
		} while (strm.avail_out == 0);

		// done when inflate() says it's done
	} while (ret != Z_STREAM_END);

	// clean up and return
	(void) inflateEnd(&strm);

	return ret == Z_STREAM_END ? TRUE : FALSE;
}

BOOL CHttpConnection::GetFile(CHttpResponse *res, const CString &fileName) {
	LOG0(5, "CHttpConnection::GetFile()");

	BOOL ret = FALSE;
	SysError = 0;

	// check response headers

	// Content-Encoding header
	EContentEncoding contentEncoding;
	CString sContentEncoding;
	if (res->GetHeader(_T("Content-Encoding"), sContentEncoding)) {
		if (sContentEncoding.Compare(_T("gzip")) == 0)
			contentEncoding = CONTENT_ENCODING_GZIP;
		else if (sContentEncoding.Compare(_T("deflate")) == 0)
			contentEncoding = CONTENT_ENCODING_DEFLATE;
		else
			contentEncoding = CONTENT_ENCODING_PLAIN;
	}
	else
		contentEncoding = CONTENT_ENCODING_PLAIN;

	// find Transfer-Encoding: chunked
	ChunkedTransfer = FALSE;
	CString sTransferEncoding;
	if (res->GetHeader(_T("Transfer-Encoding"), sTransferEncoding) &&
		sTransferEncoding.Compare(_T("chunked")) == 0) {
		ChunkedTransfer = TRUE;
		ChunkRemain = 0;
	}

	CString sContentLength;
	ResponseBodySize = 0;
	ResponseBodyDownloaded = 0;
	if (res->GetHeader(_T("Content-Range"), sContentLength)) {
		DWORD end;
		swscanf(sContentLength, _T("bytes %d-%d/%d"), &ResponseBodyDownloaded, &end, &ResponseBodySize);
	}
	else if (res->GetHeader(_T("Content-Length"), sContentLength)) {
		swscanf(sContentLength, _T("%d"), &ResponseBodySize);
	}

	BOOL append = res->GetStatusCode() == HTTP_STATUS_PARTIAL_CONTENT;

	// get file
	CBufferedFile file;
	DWORD dwCreationDispostion = append ? OPEN_EXISTING : CREATE_ALWAYS;
	if (file.Create(fileName, GENERIC_WRITE, FILE_SHARE_READ, dwCreationDispostion, FILE_ATTRIBUTE_NORMAL)) {
		if (append) file.Seek(0, FILE_END);

		switch (contentEncoding) {
			case CONTENT_ENCODING_GZIP:
			case CONTENT_ENCODING_DEFLATE:
				ret = ReceiveResponseBodyCompressed(file, contentEncoding);
				break;

			default:
				ret = ReceiveResponseBodyPlain(file);
				break;
		}

		if (!ret) SysError = GetLastError();

		file.Close();
	}
	else {
		SysError = GetLastError();
	}

	return ret;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲v日本v欧美v久久精品| 丁香啪啪综合成人亚洲小说| 国产在线精品免费| 色av成人天堂桃色av| 久久综合网色—综合色88| 亚洲免费伊人电影| 国产成人综合在线| 精品久久久久久无| 午夜欧美2019年伦理| 91免费版在线看| 国产欧美精品一区aⅴ影院 | 麻豆精品一区二区三区| 在线精品国精品国产尤物884a| 国产欧美日韩在线看| 精品一区二区三区香蕉蜜桃| 欧美一区在线视频| 亚洲第一成年网| 色综合久久综合中文综合网| 国产日韩欧美a| 精品一区二区在线免费观看| 3d动漫精品啪啪1区2区免费 | 欧美亚洲国产一区二区三区| 中文字幕在线不卡视频| 成人永久aaa| 日韩欧美在线一区二区三区| 偷窥少妇高潮呻吟av久久免费| 色一情一乱一乱一91av| 自拍偷拍亚洲激情| 91麻豆免费视频| 亚洲欧美另类综合偷拍| 色综合天天综合| 亚洲女与黑人做爰| 色88888久久久久久影院野外| 国产精品久久久久桃色tv| 不卡的av网站| 亚洲色图视频免费播放| 91福利国产成人精品照片| 亚洲自拍偷拍九九九| 欧美精品久久99久久在免费线| 偷拍自拍另类欧美| 日韩一区二区三免费高清| 狠狠色丁香婷婷综合| 久久久美女毛片| 波多野结衣在线一区| 亚洲色图20p| 欧美日韩成人综合在线一区二区| 天使萌一区二区三区免费观看| 4438成人网| 国产成人综合在线观看| 亚洲精品中文在线影院| 欧美日韩免费电影| 久久66热偷产精品| 国产精品免费看片| 欧美色网一区二区| 久久国产精品一区二区| 国产婷婷精品av在线| 91丨porny丨国产入口| 日本中文一区二区三区| 久久夜色精品国产噜噜av| 波多野结衣中文字幕一区二区三区| 亚洲综合色婷婷| 2017欧美狠狠色| 91黄视频在线观看| 国内精品第一页| 亚洲乱码国产乱码精品精可以看 | 无吗不卡中文字幕| 精品国产91九色蝌蚪| 99久久亚洲一区二区三区青草| 亚洲一区二区精品视频| 亚洲精品一区二区三区福利| 99国产精品国产精品久久| 日韩**一区毛片| 国产精品视频线看| 日韩欧美亚洲国产另类| 99re视频这里只有精品| 另类欧美日韩国产在线| 亚洲免费观看高清| 久久久久久久性| 欧美日韩一区二区三区在线看| 国产精品白丝av| 亚洲成人一二三| 中文字幕一区二区三区精华液 | 久久国产精品72免费观看| 亚洲欧美另类小说视频| 久久色.com| 3d成人动漫网站| 91麻豆国产自产在线观看| 紧缚捆绑精品一区二区| 亚洲18影院在线观看| 成人免费在线观看入口| 国产日韩亚洲欧美综合| 久久综合久久久久88| 久久久一区二区三区捆绑**| 欧美日本一区二区三区四区| 色婷婷亚洲综合| 99久久久无码国产精品| 成人性生交大片免费看视频在线 | 五月综合激情网| 亚洲欧美一区二区三区极速播放 | 亚洲国产精品久久人人爱| 国产精品每日更新| 久久午夜羞羞影院免费观看| 日韩欧美一区二区在线视频| 欧美性视频一区二区三区| 色婷婷精品久久二区二区蜜臀av | 国产在线国偷精品免费看| 视频一区二区欧美| 日韩精品每日更新| 亚洲高清在线精品| 亚洲高清一区二区三区| 亚洲成人av资源| 亚洲成人精品在线观看| 婷婷综合久久一区二区三区| 亚洲成a人v欧美综合天堂下载| 一区二区三区四区高清精品免费观看 | 玉米视频成人免费看| 中文字幕av一区二区三区免费看| 国产日韩精品一区二区浪潮av| 国产欧美日本一区二区三区| 欧美激情一二三区| 国产精品免费视频观看| 亚洲免费视频成人| 亚洲一二三四久久| 日韩黄色免费电影| 免费的成人av| 国产美女在线观看一区| 大美女一区二区三区| 97国产一区二区| 欧美中文一区二区三区| 91精品国模一区二区三区| 欧美xxxx老人做受| 亚洲国产精品ⅴa在线观看| 国产精品视频观看| 亚洲精品成人悠悠色影视| 亚洲综合区在线| 奇米影视一区二区三区小说| 国产精品一区二区久久精品爱涩| www.av亚洲| 欧美色中文字幕| 欧美精品一区二| ...av二区三区久久精品| 亚洲国产婷婷综合在线精品| 另类人妖一区二区av| av中文字幕不卡| 91麻豆精品国产91久久久使用方法| 26uuu精品一区二区在线观看| 中文字幕免费在线观看视频一区| 一区二区三区在线免费播放| 欧美96一区二区免费视频| 成人理论电影网| 欧美精品 国产精品| 国产喷白浆一区二区三区| 亚洲一区在线观看视频| 国产在线观看免费一区| 欧美伊人久久大香线蕉综合69 | 香蕉乱码成人久久天堂爱免费| 久久99精品久久久久久久久久久久| 成人一区二区三区视频在线观看| 色伊人久久综合中文字幕| 欧美tickling挠脚心丨vk| 亚洲欧美偷拍另类a∨色屁股| 精品亚洲国内自在自线福利| 91丨porny丨在线| 日韩免费观看高清完整版在线观看| 亚洲色大成网站www久久九九| 美女网站一区二区| 91国偷自产一区二区使用方法| 久久亚区不卡日本| 日韩av不卡一区二区| 色婷婷综合久久久中文字幕| 久久一二三国产| 美女脱光内衣内裤视频久久影院| 在线一区二区三区四区五区 | 欧美大片在线观看| 亚洲精品菠萝久久久久久久| 国产一区二区电影| 欧美一区永久视频免费观看| 亚洲午夜久久久久久久久久久 | 亚洲国产日韩精品| 成人国产精品免费网站| 精品国产乱码久久久久久浪潮| 亚洲v日本v欧美v久久精品| 色婷婷激情一区二区三区| 国产精品成人免费在线| 成人免费观看av| 久久久影院官网| 国产精品99久久久久久宅男| 精品捆绑美女sm三区| 蜜桃视频在线一区| 欧美日韩aaaaaa| 性感美女久久精品| 51精品秘密在线观看| 亚洲成人你懂的| 欧美狂野另类xxxxoooo| 午夜免费久久看| 91麻豆精品国产91久久久久久久久| 丝袜a∨在线一区二区三区不卡| 欧美老肥妇做.爰bbww视频| 图片区小说区区亚洲影院| 欧美一区二区在线播放|