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

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

?? httpconnection.cpp.svn-base

?? wince c++ 下 開發的 rss 閱讀器源代碼
?? SVN-BASE
?? 第 1 頁 / 共 2 頁
字號:
/**
 *  HttpConnection.cpp
 *
 *  Copyright (C) 2008  David Andrs <pda@jasnapaka.com>
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#if defined PRSSR_APP
	#include "../StdAfx.h"
	#include "../prssr.h"
	#include "../resource.h"
#endif

#include "HttpConnection.h"
#include "../../share/helpers.h"
#include "../../zlib/zlib.h"


#ifdef MYDEBUG
#undef THIS_FILE
static TCHAR THIS_FILE[] = _T(__FILE__);
#include "../debug/crtdbg.h"
#define new MYDEBUG_NEW
#endif

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

////

// for shutdown (from winsock2.h)
#define SD_RECEIVE      0x00
#define SD_SEND         0x01
#define SD_BOTH         0x02


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CHttpConnection::CHttpConnection(DWORD timeout/* = 12000*/) {
	LOG0(5, "CHttpConnection::CHttpConnection()");

	Terminated = FALSE;
	Socket.SetTimeout(timeout);
	Proxy = NULL;

	ResponseBodySize = 0;
	ResponseBodyDownloaded = 0;
}

CHttpConnection::~CHttpConnection() {
	LOG0(5, "CHttpConnection::~CHttpConnection()");

	Close();
	delete Proxy;
}

void CHttpConnection::Terminate() {
	LOG0(3, "CHttpConnection::Terminate()");

	Close();
	Terminated = TRUE;
}

BOOL CHttpConnection::IsTerminated() {
	return Terminated;
}

BOOL CHttpConnection::ReceiveLine(CString &sLine) {
	LOG0(5, "CHttpConnection::ReceiveLine()");

	sLine.Empty();
	
	char ch;
	while (TRUE) {
		int size = Socket.Receive(&ch, sizeof(ch));
		if (size > 0 && size != SOCKET_ERROR) {
			sLine += (TCHAR) ch;
			// althought lines should be terminated by CRLF, there are WEB servers that do not follow this fact
			if (ch == _T('\n'))
				return TRUE;
		}
		else {
			ShutdownConnection();
			return FALSE;
		}
	}

	return TRUE;
}

BOOL CHttpConnection::ShutdownConnection() {
	LOG0(5, "CHttpConnection::ShutdownConnection()");

	Socket.Shutdown();
	Socket.Close();

	return TRUE;
}

void CHttpConnection::SetProxy(CProxy *px) {
	delete Proxy;
	Proxy = NULL;

	if (px != NULL) {
		Proxy = new CProxy;
		*Proxy = *px;		// copy it
	}
}

BOOL CHttpConnection::Open(DWORD serviceType, const CString &serverName, int port) {
	LOG3(3, "CHttpConnection::Open(%d, '%S', %d)", serviceType, serverName, port);

	if (!Socket.Create())
		return FALSE;

	CConnectionProvider *provider = NULL;
	if (Proxy != NULL) {
		switch (Proxy->Type) {
			case PROXY_TYPE_SOCKS4: provider = new CSocks4ConnectionProvider(Proxy); break;
			case PROXY_TYPE_SOCKS5: provider = new CSocks5ConnectionProvider(Proxy); break;
			case PROXY_TYPE_HTTP:   provider = new CHttpProxyConnectionProvider(Proxy); break;
			default:                provider = new CConnectionProvider(); break;
		}
	}
	else
		provider = new CConnectionProvider();

	if (provider != NULL && provider->Connect(&Socket, serviceType, serverName, port)) {
		HostName = serverName;

		delete provider;
		return TRUE;
	}
	else {
		delete provider;

		Socket.Close();
		return FALSE;
	}
}

BOOL CHttpConnection::Close() {
	LOG0(3, "CHttpConnection::Close()");

	ShutdownConnection();
	return TRUE;
}

CHttpRequest *CHttpConnection::CreateRequest(const CString &object, EHttpMethod method/* = HTTP_METHOD_GET*/) {
	LOG0(3, "CHttpConnection::CreateRequest()");

	CHttpRequest *req = NULL;
	if (Proxy != NULL && Proxy->Type == PROXY_TYPE_HTTP)
		req = new CHttpRequest(method, object, HostName);
	else
		req = new CHttpRequest(method, object);

	req->SetHeader(_T("Host"), HostName);
	req->SetHeader(_T("Connection"), _T("close"));
	if (!UserAgent.IsEmpty()) req->SetHeader(_T("User-Agent"), UserAgent);
//	req->SetHeader(_T("Accept"), _T("text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"));
//	req->SetHeader(_T("Accept-Language"), _T("en-us,en;q=0.5"));
	req->SetHeader(_T("Accept-Encoding"), _T("gzip,deflate"));
	// for testing
////	req->SetHeader(_T("Accept-Encoding"), _T("gzip"));
////	req->SetHeader(_T("Accept-Encoding"), _T("deflate"));
//	req->SetHeader(_T("Accept-Charset"), _T("ISO-8859-1,utf-8;q=0.7,*;q=0.7"));

	return req;
}


void CHttpConnection::SendRequest(CHttpRequest *req, CStringArray *addHttpHeaders/* = NULL*/) {
	LOG0(3, "CHttpConnection::SendRequest()");

	req->Send(&Socket, addHttpHeaders);
}

CHttpResponse *CHttpConnection::ReceiveResponse() {
	LOG0(3, "CHttpConnection::ReceiveResponse()");

	CString sLine;
	if (!ReceiveLine(sLine))
		return NULL;

	CHttpResponse *res = new CHttpResponse();
	res->SetStartLine(sLine);

	do {
		if (!ReceiveLine(sLine)) {
			delete res;
			return NULL;
		}

		sLine.TrimLeft();
		sLine.TrimRight();

		int nPos = sLine.Find(':');
		if (nPos != -1) {
			CString value = sLine.Mid(nPos + 1);
			value.TrimLeft();
			value.TrimRight();

			res->AddHeader(sLine.Left(nPos), value);
		}
		else
			break;
	} while (!sLine.IsEmpty());

	return res;
}

BOOL CHttpConnection::ReceiveBlock(unsigned char *buffer, DWORD len, DWORD *received) {
	LOG0(5, "CHttpConnection::ReceiveBlock()");

	BOOL ret = TRUE;
	DWORD totalReceived = 0;

	if (ChunkedTransfer) {
		DWORD remain = len;
		char *buff = (char *) buffer;

		while (remain > 0) {
			if (ChunkRemain == 0) {
				// get chunk header (containing the length of the following chunk)
				CString chunkHead;
				if (ReceiveLine(chunkHead))
					swscanf(chunkHead, _T("%x"), &ChunkRemain);
				else
					return FALSE;

				if (ChunkRemain == 0) {
					// last chunk header read
					ret = TRUE;
					break;
				}
			}
			else {
				int toReceive = min(min(remain, ChunkRemain), SOCK_BUFFER_SIZE);
				int size = Socket.Receive(buff, toReceive);
				totalReceived += size;

				if (size == 0) {
					// end of transfer
					ret = TRUE;
					break;
				}
				else if (size == SOCKET_ERROR) {
					ret = FALSE;
					break;
				}
				else {
//					if (ResponseBodySize > 0)
						ResponseBodyDownloaded += size;

					buff += size;
					remain -= size;
					ChunkRemain -= size;

					if (ChunkRemain == 0) {
						// read to the end of line to get to the start of the next chunk header
						CString empty;
						ReceiveLine(empty);
					}
				}
			}
		}
	}
	else {
		DWORD remain = len;
		char *buff = (char *) buffer;
		while (remain > 0) {
			int toReceive = min(remain, SOCK_BUFFER_SIZE);
			int size = Socket.Receive(buff, toReceive);
			totalReceived += size;

			if (size == 0) {
				// end of transfer
				ret = TRUE;
				break;
			}
			else if (size == SOCKET_ERROR) {
				ret = FALSE;
				break;
			}
			else {
//				if (ResponseBodySize > 0)
					ResponseBodyDownloaded += size;

				buff += size;
				remain -= size;
			}
		}
	}

	if (received != NULL)
		*received = totalReceived;

	return ret;
}

#define CHUNK					2048

// plain ////

BOOL CHttpConnection::ReceiveResponseBodyPlain(CBufferedFile &file) {
	LOG0(5, "CHttpConnection::ReceiveResponseBodyPlain()");

	BOOL ret = FALSE;

	unsigned char in[CHUNK] = { 0 };
	DWORD read;
	while (ReceiveBlock(in, CHUNK, &read)) {
		if (read == 0) {
			ret = TRUE;			// end of transfer
			break;
		}
		else {
			if (!file.Write(in, read)) {
				ret = FALSE;
				break;
			}
		}
	}

	return ret;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩aaaaa| 国产成人鲁色资源国产91色综| 三级欧美在线一区| 精品一区二区三区不卡| 国产成人av福利| 欧美艳星brazzers| 精品福利在线导航| 日韩理论片在线| 日本不卡一二三区黄网| 国产高清不卡一区| 欧美亚洲一区二区在线| 久久综合久久综合亚洲| 一二三四区精品视频| 麻豆成人久久精品二区三区小说| 成人黄色小视频在线观看| 欧美日韩免费视频| 国产精品乱码一区二区三区软件| 亚洲成人动漫av| 国产99久久久国产精品免费看| 欧美日韩中文精品| 欧美激情中文字幕| 青椒成人免费视频| 色噜噜狠狠成人网p站| 日韩欧美精品在线| 亚洲综合一区在线| 东方欧美亚洲色图在线| 4438x亚洲最大成人网| 亚洲视频一区二区在线观看| 加勒比av一区二区| 欧美日韩国产在线观看| 中文字幕不卡在线观看| 久久爱另类一区二区小说| 欧美在线一区二区三区| 中文字幕在线一区二区三区| 久久精品国产在热久久| 欧美在线观看视频一区二区| 国产欧美综合色| 免费人成黄页网站在线一区二区| 91小视频免费看| 国产网站一区二区| 午夜精品成人在线视频| 91婷婷韩国欧美一区二区| 久久久精品国产免大香伊| 日韩经典中文字幕一区| 在线视频你懂得一区| 国产精品污www在线观看| 国产真实乱偷精品视频免| 777xxx欧美| 亚洲午夜电影网| 91免费视频网址| 国产精品乱码久久久久久| 国产精品一区免费视频| 日韩精品最新网址| 人人狠狠综合久久亚洲| 欧美日韩精品系列| 夜夜精品浪潮av一区二区三区| 成人av免费在线| 中文字幕精品一区| 成人蜜臀av电影| 国产欧美日韩三级| 国产成人一区二区精品非洲| 精品88久久久久88久久久| 久久se这里有精品| 精品国产一区二区精华| 久久精工是国产品牌吗| 日韩一区二区三区在线| 美女免费视频一区| 日韩女优av电影| 精品一区二区在线观看| 日韩美女视频在线| 蜜桃视频一区二区三区在线观看| 欧美一区二区三区日韩| 美女精品一区二区| 欧美va日韩va| 国产精品 欧美精品| 国产欧美一区二区三区鸳鸯浴 | 日本韩国欧美一区| 亚洲日本在线天堂| 色噜噜狠狠色综合欧洲selulu| 国产精品电影一区二区三区| 99天天综合性| 亚洲一区二区三区在线看| 在线国产电影不卡| 天堂精品中文字幕在线| 日韩手机在线导航| 国产一区二区伦理| 国产精品色婷婷久久58| 91免费看片在线观看| 亚洲电影在线免费观看| 日韩视频在线一区二区| 国产在线播放一区| 中文字幕欧美三区| 日本精品一级二级| 日本亚洲一区二区| 久久久久久久av麻豆果冻| 欧美美女直播网站| 日韩电影免费一区| 国产亚洲制服色| 日本精品一级二级| 日韩成人一级大片| 国产欧美日韩在线观看| 色先锋aa成人| 日韩av中文字幕一区二区三区| 精品国产一区二区三区忘忧草| youjizz国产精品| 午夜不卡在线视频| 精品福利一区二区三区免费视频| 暴力调教一区二区三区| 亚洲午夜久久久久久久久电影院| 精品美女一区二区| 91免费版pro下载短视频| 青青草97国产精品免费观看 | 国产乱淫av一区二区三区 | 日本韩国视频一区二区| 日韩黄色免费网站| 国产午夜精品一区二区三区四区 | 亚洲一区精品在线| 精品人伦一区二区色婷婷| jlzzjlzz亚洲女人18| 日韩成人免费在线| 国产精品国产三级国产aⅴ原创 | 日韩高清一区二区| 国产亚洲精品资源在线26u| 在线观看免费亚洲| 国产一区二区影院| 亚洲第一二三四区| 中文字幕乱码一区二区免费| 欧美网站大全在线观看| 国产69精品久久久久毛片| 亚洲成人资源网| 国产精品欧美一区喷水| 日韩视频免费观看高清完整版| 成人免费黄色大片| 老鸭窝一区二区久久精品| 亚洲精品久久嫩草网站秘色| 久久综合久久综合久久| 欧美日韩国产美| 波多野结衣在线一区| 蓝色福利精品导航| 亚洲午夜羞羞片| 综合分类小说区另类春色亚洲小说欧美| 欧美一级搡bbbb搡bbbb| 91视频91自| 国产成人午夜99999| 日本三级亚洲精品| 亚洲免费视频中文字幕| 国产性色一区二区| 日韩亚洲电影在线| 欧美视频一区在线| k8久久久一区二区三区 | 久久久99精品久久| 91麻豆精品国产91久久久资源速度| 99国产精品一区| 国产成人综合视频| 久草在线在线精品观看| 日欧美一区二区| 亚洲一区二区三区在线看| 中文字幕亚洲一区二区va在线| 精品成人一区二区三区四区| 欧美高清视频一二三区| 在线观看成人小视频| 91麻豆swag| 91色porny蝌蚪| 99久免费精品视频在线观看 | 中文字幕一区在线| 国产亚洲一本大道中文在线| 欧美一区二区三区免费在线看| 欧美系列亚洲系列| 欧美体内she精高潮| 91福利国产成人精品照片| 99久久精品国产导航| 99久久精品免费| av一区二区三区四区| 99热99精品| 91麻豆精品视频| 色美美综合视频| 欧美性生交片4| 欧美性色黄大片| 欧美吻胸吃奶大尺度电影| 欧美三日本三级三级在线播放| 色av一区二区| 欧美日韩视频在线第一区| 欧美系列一区二区| 欧美人伦禁忌dvd放荡欲情| 欧美性生活影院| 91.com视频| 精品国产1区二区| 国产午夜精品一区二区| 欧美国产精品v| 国产精品久久看| 亚洲柠檬福利资源导航| 一区二区三区在线播放| 亚洲一区在线视频| 日韩精品乱码免费| 极品少妇xxxx偷拍精品少妇| 久久成人免费网| 国产成人精品综合在线观看| 99久久99久久精品免费观看 | 亚洲成av人片www| 日韩av中文字幕一区二区三区|