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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? gatewayproxyweb.cpp

?? C++實(shí)現(xiàn)的brew程序管理器例子
?? CPP
字號(hào):
/////////////////////////////////////////////////////////////////////
// Project : GatewayProxy
// File: GatewayProxyWeb.c
// web module of this project
// 2005/03/27
/////////////////////////////////////////////////////////////////////

//---------------- Inculde ------------------
#include <AEESSL.h>
#include "GatewayProxyWeb.h"
#include "AppsViewer.h"
//-------------------------------------------

#define HTTP_PROXY_SERVER	"http://192.168.1.9:8080/jmsn/servlet/Proxy"		//通過(guò)Http服務(wù)器代理

#define WEB_RETRYCOUNT		1

CGatewayProxyWeb::CGatewayProxyWeb(CAppsViewer *pApp)
{
	//初始化類指針
	m_pShell = NULL;
	m_pWeb = new CWeb();
	m_pWebResp = new CWebResp();
	m_pSourceUtil = new CSourceUtil();
	m_pSource = new CSource();
	m_pApp = pApp;
	
	//初始化緩沖區(qū)
	m_pbRecvBuff = NULL;								//接收數(shù)據(jù)緩沖區(qū)
	m_nRecvSize = 0;
	m_nRecvMaxSize = 0;			
    
	m_pszSendBuff = NULL;								//發(fā)送緩沖區(qū)

	m_pszUrl = NULL;									//連接的Url

	m_bBusy = FALSE;

	//初始化回調(diào)
	CALLBACK_Init(&m_cbWebResp, GotWebResp, this);
	CALLBACK_Init(&m_cbRead, ReadSource, this);
}

CGatewayProxyWeb::~CGatewayProxyWeb(void)
{
	//清除Web的回調(diào)函數(shù)調(diào)用
	CALLBACK_Cancel(&m_cbWebResp);
	CALLBACK_Cancel(&m_cbRead);
	//
	if(m_pWeb)
		delete m_pWeb;
	//
	if(m_pWebResp)
		delete m_pWebResp;
	//
	if(m_pSourceUtil)
		delete m_pSourceUtil;
	//
	if(m_pSource)
		delete m_pSource;
	//清除Timer
	if(m_pShell)
		m_pShell->CancelTimer(NULL, this);
	//釋放緩沖區(qū)
	FREEIF(m_pbRecvBuff);
	FREEIF(m_pszSendBuff);
	FREEIF(m_pszUrl);
}
//-------------------------------------------------------------------
// Writer class operator new
//-------------------------------------------------------------------
void* CGatewayProxyWeb::operator new(unsigned int size)
{
    return MALLOC(size);
}
//-------------------------------------------------------------------
// Writer class operator delete
//-------------------------------------------------------------------
void CGatewayProxyWeb::operator delete(void * ptr)
{
    FREE(ptr);
}
// 創(chuàng)建WebAction對(duì)象
boolean CGatewayProxyWeb::Create(CShell *pShell, CWebUtil *pWebUtil)
{
	//指針判斷
	if(!pShell || !pWebUtil || !m_pWeb || !m_pWebResp || !m_pSourceUtil || !m_pSource)
		return FALSE;
	//
	m_pShell = pShell;
	m_pWebUtil = pWebUtil;
	//創(chuàng)建SourceUtil實(shí)例
	if(!m_pSourceUtil->GetHandle() && pShell->CreateInstance(AEECLSID_SOURCEUTIL, m_pSourceUtil) != SUCCESS)
		return FALSE;
	//
	m_nRecvSize = 0;

	return TRUE;
}
// 創(chuàng)建WebAction中的CWeb對(duì)象
boolean CGatewayProxyWeb::CreateWeb()
{
	if(!m_pShell || !m_pWeb)
		return FALSE;
	//刪除以前的句柄
	if(m_pWeb->GetHandle())
		m_pWeb->Release();
	//創(chuàng)建Web句柄
	if(m_pShell->CreateInstance(AEECLSID_WEB, m_pWeb) != SUCCESS)
		return FALSE;
	//
	return TRUE;
}
// 釋放網(wǎng)絡(luò)連接
void CGatewayProxyWeb::ReleaseWeb()
{
	//清除Web的回調(diào)函數(shù)調(diào)用
	CALLBACK_Cancel(&m_cbWebResp);
	CALLBACK_Cancel(&m_cbRead);
	//釋放WebResp
	if(m_pWebResp->GetHandle())
		m_pWebResp->Release();
	//釋放Web
	if(m_pWeb->GetHandle())
		m_pWeb->Release();
	//清除定時(shí)器
	m_pShell->CancelTimer(NULL, this);
}
// 設(shè)置Web連接的Url
boolean CGatewayProxyWeb::SetUrl(const char * pszUrl)
{
#ifdef _DEBUG
	if(!pszUrl)
	{
		DBGPRINTF("CGatewayProxyWeb::SetUrl param error");
		return FALSE;
	}
#endif
	//重新分配保存URL
	FREE(m_pszUrl);
	m_pszUrl = STRDUP(pszUrl);
	if(!m_pszUrl)
		return FALSE;
	//是否需要重新組織URL
#ifdef PROXY_WITH_HTTP
	return ReArrangeUrl();
#else
	return TRUE;
#endif
}
// 進(jìn)行Web連接
boolean CGatewayProxyWeb::WebConnect(const char * pszWeb, char *pszSendBuff)
{

	//設(shè)置發(fā)送緩沖區(qū)
	FREEIF(m_pszSendBuff);
	m_pszSendBuff = pszSendBuff;
	//制作Url
	if(!SetUrl(pszWeb))
		return FALSE;
	//初始化發(fā)送次數(shù)
	m_nSendCount = WEB_RETRYCOUNT;
	//調(diào)用內(nèi)部函數(shù)
	return HttpWebConnect();
}

// 進(jìn)行安全Web連接
boolean CGatewayProxyWeb::SSLWebConnect(const char *pszUrl, char *pszSendBuff)
{

	//設(shè)置發(fā)送緩沖區(qū)
	FREEIF(m_pszSendBuff);
	m_pszSendBuff = pszSendBuff;
	//設(shè)置Url
	if(!SetUrl(pszUrl))
		return FALSE;
	//初始化發(fā)送次數(shù)
	m_nSendCount = WEB_RETRYCOUNT;
#ifdef _DEBUG
	DBGPRINTF("Https,Url : %s", m_pszUrl);
//	OutputDebug(m_pszSendBuff, TRUE);
#endif
	//調(diào)用內(nèi)部函數(shù)
	return SSLHttpWebConnect();
}


// 內(nèi)部的普通HttpWeb連接
boolean CGatewayProxyWeb::HttpWebConnect()
{
	//組織參數(shù)
	WebOpt wo[3];
	int nIndex = 0;
	//Header回調(diào)函數(shù)參數(shù)指針
	//wo[nIndex].nId = WEBOPT_HANDLERDATA;
	//wo[nIndex++].pVal = this;
	//
	//wo[nIndex].nId = WEBOPT_USERAGENT;
	//wo[nIndex++].pVal = NULL;
	//Method
	wo[nIndex].nId = WEBOPT_METHOD;
	wo[nIndex++].pVal = (void *)"GET";
	wo[nIndex].nId = WEBOPT_HEADER;
	wo[nIndex++].pVal = (void*)"X-Method: GET\r\n";
	//發(fā)送的數(shù)據(jù)長(zhǎng)度
//	wo[nIndex].nId = WEBOPT_CONTENTLENGTH;
//	wo[nIndex++].pVal = (void *)STRLEN(m_pszSendBuff);
	//釋放原來(lái)的ISource
	if(m_pSource->GetHandle())
		m_pSource->Release();
	//創(chuàng)建ISource接口
//	if(m_pSourceUtil->SourceFromMemory(m_pszSendBuff, STRLEN(m_pszSendBuff), NULL, NULL, m_pSource) != SUCCESS)
//		return FALSE;
	//發(fā)送的數(shù)據(jù)
//	wo[nIndex].nId = WEBOPT_BODY;
//	wo[nIndex++].pVal = m_pSource->GetHandle();
	//結(jié)束
	wo[nIndex].nId = WEBOPT_END;
	//獲取Web回應(yīng)
	GetResponse(wo);

	return TRUE;
}

// 內(nèi)部的安全HttpWeb連接
boolean CGatewayProxyWeb::SSLHttpWebConnect()
{
	//組織參數(shù)
	WebOpt wo[4];
	int nIndex = 0;
	//SSL參數(shù)
	wo[nIndex].nId = WEBOPT_SSL_TRUST_MODE;
	wo[nIndex++].pVal = (void*)SSL_TRUST_MODE_IGNORE;
	/*
	//Header回調(diào)函數(shù)參數(shù)指針
	wo[nIndex].nId = WEBOPT_HANDLERDATA;
	wo[nIndex++].pVal = this;
	//
	wo[nIndex].nId = WEBOPT_USERAGENT;
	wo[nIndex++].pVal = NULL;
	*/
	//Method
	wo[nIndex].nId = WEBOPT_METHOD;
	wo[nIndex++].pVal = (void *)"GET";
	wo[nIndex].nId = WEBOPT_HEADER;
	wo[nIndex++].pVal = (void*)"X-Method: GET\r\n";
	//發(fā)送的數(shù)據(jù)長(zhǎng)度
//	wo[nIndex].nId = WEBOPT_CONTENTLENGTH;
//	wo[nIndex++].pVal = (void *)STRLEN(m_pszSendBuff);
	//釋放原來(lái)的ISource
//	if(m_pSource->GetHandle())
//		m_pSource->Release();
	//創(chuàng)建ISource接口
//	if(m_pSourceUtil->SourceFromMemory(m_pszSendBuff, STRLEN(m_pszSendBuff), NULL, NULL, m_pSource) != SUCCESS)
//		return FALSE;
	//發(fā)送的數(shù)據(jù)
//	wo[nIndex].nId = WEBOPT_BODY;
//	wo[nIndex++].pVal = m_pSource->GetHandle();
	//結(jié)束
	wo[nIndex].nId = WEBOPT_END;
	//獲取Web回應(yīng)
	GetResponse(wo);

	return TRUE;
}



// 獲取Web回應(yīng)
void CGatewayProxyWeb::GetResponse(WebOpt *pWebOpt)
{
	//釋放原來(lái)的WebResp
	if(m_pWebResp->GetHandle())
		m_pWebResp->Release();
	//
//	AECHAR szTemp[200], szTitle[] = {'t', 0};
//	STRTOWSTR(m_pszUrl, szTemp, 100);
//	m_pShell->MessageBoxText(szTitle, szTemp);
//	return;
	//
	m_pWeb->GetResponseV(m_pWebResp, &m_cbWebResp, m_pszUrl, pWebOpt);
	//發(fā)送次數(shù)減去1
	m_nSendCount -= 1;
	//設(shè)置當(dāng)前繁忙
	m_bBusy = TRUE;
	//
	m_nError = SUCCESS;
	//釋放接收緩沖區(qū)
	FREEIF(m_pbRecvBuff);
	
	m_nHeaderSize = 0;
}
//處理Web接收
void CGatewayProxyWeb::OnWebResp()
{
#ifdef _DEBUG
	DBGPRINTF("Web response");
	if(m_pszHeaderBuff && STRLEN(m_pszHeaderBuff) > 0)
		DBGPRINTF(m_pszHeaderBuff);
#endif
	//內(nèi)存不足?
	if(m_nError != SUCCESS)
	{
		EndWeb(EVT_APP_WEBERROR, m_nError);
		return;
	}
	//
	WebRespInfo* pWebRespInfo = m_pWebResp->GetInfo();
	ISource* pISource = pWebRespInfo->pisMessage;	
	if(!pISource || pWebRespInfo->lContentLength == -1)
	{
		//重發(fā)了WEB_RETRYCOUNT次?
		if(m_nSendCount > 0)
		{
			//延時(shí)1s重發(fā)
			int nReturn = m_pShell->SetTimer((WEB_RETRYCOUNT - m_nSendCount) * 1000, (PFNNOTIFY)ReSend, this);
			if(nReturn != SUCCESS)
				EndWeb(EVT_APP_WEBERROR, nReturn);
			else
			{
#ifdef _DEBUG
				DBGPRINTF("Web Error %x, Resend!", WEB_ERROR_MAP(pWebRespInfo->nCode));
#endif
			}
			return;
		}
		//重發(fā)了WEB_RETRYCOUNT次,還錯(cuò)誤,提示用戶
		EndWeb(EVT_APP_WEBERROR, WEB_ERROR_MAP(pWebRespInfo->nCode));
		return;
	}
	//分配接收緩沖區(qū)內(nèi)存
	if(!m_pbRecvBuff)
	{
		m_pbRecvBuff = (byte *)MALLOC(pWebRespInfo->lContentLength + 1);
		if(!m_pbRecvBuff)
		{
			//清除Web的回調(diào)函數(shù)調(diào)用
			EndWeb(EVT_APP_WEBERROR, ENOMEMORY);
			return;
		}
		m_nRecvMaxSize = uint16(pWebRespInfo->lContentLength + 1);
		m_nRecvSize = 0;
	}
	//讀取數(shù)據(jù)
	OnReadSource();
}
// 讀取Web返回的數(shù)據(jù)
void CGatewayProxyWeb::OnReadSource()
{
	WebRespInfo* pWebRespInfo = m_pWebResp->GetInfo();
	ISource* pISource = pWebRespInfo->pisMessage;	
	// 讀數(shù)據(jù)
	int nByteCount = ISOURCE_Read(pISource, (char*)(m_pbRecvBuff + m_nRecvSize), pWebRespInfo->lContentLength - m_nRecvSize);
	//根據(jù)返回值進(jìn)行處理
	switch (nByteCount)
	{
	case ISOURCE_WAIT:		// 繼續(xù)讀?
		ISOURCE_Readable(pISource, &m_cbRead);
		return;
	case ISOURCE_ERROR:		// 錯(cuò)誤?
#ifdef _DEBUG
		DBGPRINTF("ISource Read Error!");
#endif
		EndWeb(EVT_APP_WEBERROR, EFAILED);
		return;
	case ISOURCE_END:
		HandleRecv();
		return;
	default:
		//接收字節(jié)數(shù)
		m_nRecvSize = m_nRecvSize + (uint16)nByteCount;
		//已經(jīng)接收結(jié)束?
		if(m_nRecvSize == pWebRespInfo->lContentLength)
			HandleRecv();
		else	//繼續(xù)讀
			ISOURCE_Readable(pISource, &m_cbRead);
		return;
	}
}
// 處理接收到的數(shù)據(jù)
void CGatewayProxyWeb::HandleRecv()
{
	WebRespInfo* pWebRespInfo = m_pWebResp->GetInfo();	//Web Response Info
	//釋放內(nèi)存(URL)
	FREEIF(m_pszUrl);
	//釋放內(nèi)存(Send Buffer)
	FREEIF(m_pszSendBuff);
	//成功?
	if(pWebRespInfo->nCode == 200)
		EndWeb(EVT_APP_WEBSUCCEED, m_nRecvSize, (uint32)m_pbRecvBuff);
	else
		EndWeb(EVT_APP_WEBERROR, WEB_ERROR_MAP(pWebRespInfo->nCode), pWebRespInfo->nCode);
}
// 重發(fā)數(shù)據(jù)
void CGatewayProxyWeb::OnReSend()
{
	boolean bReturn;
	bReturn = HttpWebConnect();

	if(bReturn != TRUE)
		EndWeb(EVT_APP_WEBERROR, ENOMEMORY);
}

// 結(jié)束Web調(diào)用,返回結(jié)果
void CGatewayProxyWeb::EndWeb(AEEEvent evt, uint32 dwParam1, uint32 dwParam2)
{
	//清除Web的回調(diào)函數(shù)調(diào)用
	CALLBACK_Cancel(&m_cbWebResp);
	CALLBACK_Cancel(&m_cbRead);
	//釋放WebResp
	if(m_pWebResp->GetHandle())
		m_pWebResp->Release();
	//
	m_bBusy = FALSE;
	//返回
	if(m_pApp)
		m_pApp->OnWebEnd(evt, (uint16)dwParam1, dwParam2);
}
// 復(fù)制接收到的數(shù)據(jù)到指定緩沖區(qū),如果緩沖區(qū)太小,則擴(kuò)大緩沖區(qū)
boolean CGatewayProxyWeb::CopyRecv(char *&pszRecvBuff, int &nOrigDataSize, int &nBuffSize)
{
	//模塊變量判斷
	if(!m_pbRecvBuff || m_nRecvSize == 0)
		return TRUE;
	//是否需要重新分配內(nèi)存?
	if(nOrigDataSize + m_nRecvSize >= nBuffSize)
	{
		int nNewSize = nOrigDataSize + m_nRecvSize + 1;
		char *pszTemp = (char *)REALLOC(pszRecvBuff, nNewSize);
		if(!pszTemp)
			return FALSE;
		//設(shè)置新的內(nèi)存
		pszRecvBuff = pszTemp;
		nBuffSize = nNewSize;
	}
	//復(fù)制收到的數(shù)據(jù)
	MEMCPY(pszRecvBuff + nOrigDataSize, m_pbRecvBuff, m_nRecvSize);
	nOrigDataSize += m_nRecvSize;
	//釋放Web接收
	FREEIF(m_pbRecvBuff);
	m_nRecvSize = 0;

	return TRUE;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品水蜜桃| 亚洲美女区一区| 在线不卡一区二区| 欧美在线视频全部完| 99riav久久精品riav| jiyouzz国产精品久久| 北条麻妃一区二区三区| 99精品视频一区| 色美美综合视频| 欧美人伦禁忌dvd放荡欲情| 欧美日本一区二区三区| 欧美一级艳片视频免费观看| 日韩欧美激情四射| 国产拍揄自揄精品视频麻豆| 亚洲欧洲国产日本综合| 亚洲精品国产精品乱码不99| 天天做天天摸天天爽国产一区| 石原莉奈一区二区三区在线观看| 美女诱惑一区二区| 国产一区二区91| 91免费看片在线观看| 在线亚洲免费视频| 欧美一卡2卡三卡4卡5免费| 国产校园另类小说区| 亚洲欧美视频在线观看视频| 同产精品九九九| 国产成人免费高清| 在线欧美一区二区| 日韩精品一区二区三区在线| 中文字幕亚洲不卡| 蜜桃视频在线观看一区二区| 成人做爰69片免费看网站| 欧美视频在线一区二区三区| 精品国产sm最大网站| 亚洲精品乱码久久久久久久久| 美女视频黄a大片欧美| 欧美日韩国产系列| 337p日本欧洲亚洲大胆精品 | 一区二区三区精品久久久| 亚洲成人动漫一区| 国产精品一区二区久久不卡| 欧美人与z0zoxxxx视频| 国产精品久久久久9999吃药| 免费观看在线综合| 日本高清视频一区二区| 国产日产欧美一区| 蜜臀av性久久久久av蜜臀妖精| a美女胸又www黄视频久久| 91精品久久久久久久91蜜桃| 17c精品麻豆一区二区免费| 精品一区二区三区不卡 | 精品国产区一区| 亚洲综合清纯丝袜自拍| 国产精品中文字幕一区二区三区| 在线播放日韩导航| 亚洲免费在线观看视频| 国产福利一区二区三区视频| 日韩一区二区在线观看视频播放| 一区二区三区四区精品在线视频| 国产99久久久精品| 久久久国际精品| 麻豆精品国产传媒mv男同| 91福利在线观看| 一区二区在线观看av| 成人精品高清在线| 中文字幕国产一区| 国产电影一区在线| 国产人妖乱国产精品人妖| 另类调教123区 | 成人高清免费观看| 中文在线一区二区| 国产高清不卡一区| 国产欧美精品在线观看| 国产成人一区二区精品非洲| 久久伊99综合婷婷久久伊| 国产真实乱对白精彩久久| 精品少妇一区二区三区在线视频| 日韩黄色免费网站| 91精品国产乱码| 老司机精品视频一区二区三区| 欧美一区二区三区啪啪| 久久精品二区亚洲w码| 精品国产乱码久久久久久图片| 精品在线播放免费| 久久婷婷成人综合色| 成人在线视频一区| 亚洲欧美在线aaa| 色噜噜久久综合| 亚欧色一区w666天堂| 欧美一区二区三区免费| 国产麻豆精品久久一二三| 国产精品乱子久久久久| 91网站黄www| 亚洲mv在线观看| 欧美v国产在线一区二区三区| 国产精品99久久久| 亚洲精品伦理在线| 日韩三级伦理片妻子的秘密按摩| 精品一区二区精品| 综合欧美一区二区三区| 欧美日韩激情一区二区三区| 美女一区二区在线观看| 日韩av二区在线播放| 国产视频一区在线播放| 99re这里只有精品6| 日韩国产精品久久| 国产日韩欧美激情| 欧美色精品天天在线观看视频| 美腿丝袜亚洲三区| 亚洲国产成人自拍| 91精品一区二区三区在线观看| 国产一区在线观看麻豆| 一区二区三区欧美在线观看| 日韩亚洲欧美在线观看| 高清国产午夜精品久久久久久| 有坂深雪av一区二区精品| 精品国精品国产| 91麻豆免费观看| 国产一区在线看| 午夜精品久久久久久久99水蜜桃| 26uuu国产日韩综合| 欧美午夜精品理论片a级按摩| 国产美女av一区二区三区| 亚洲图片欧美色图| 中文字幕av在线一区二区三区| 91精品国产综合久久久久久漫画| 99久久综合国产精品| 久久av中文字幕片| 亚洲成人动漫av| 亚洲精品久久7777| 国产精品国产三级国产普通话99| 日韩欧美的一区| 在线不卡中文字幕| 欧美性猛交xxxxxx富婆| aaa欧美日韩| 成人h动漫精品| 国产69精品久久777的优势| 久久se精品一区精品二区| 午夜私人影院久久久久| 亚洲精品水蜜桃| 亚洲人吸女人奶水| 最近日韩中文字幕| 中文文精品字幕一区二区| 欧美精品一区二区三区很污很色的| 欧美少妇一区二区| 欧美在线不卡一区| 色嗨嗨av一区二区三区| 99久久精品国产精品久久 | 国产精品不卡在线观看| 久久精子c满五个校花| 精品av久久707| 欧美videossexotv100| 精品久久国产97色综合| 欧美精品一区二区不卡| 日韩免费福利电影在线观看| 欧美一级在线免费| 日韩精品一区二区在线观看| 日韩欧美一区在线观看| 日韩情涩欧美日韩视频| 精品国产乱码91久久久久久网站| 精品日韩在线观看| 久久精品日产第一区二区三区高清版 | 国产精品久久久久一区二区三区| 欧美国产视频在线| 亚洲私人影院在线观看| 亚洲精品日韩综合观看成人91| 亚洲韩国精品一区| 久久精品国产亚洲aⅴ| 狠狠色综合日日| 成人午夜视频在线| 欧洲色大大久久| 日韩一级黄色大片| 中文av字幕一区| 亚洲一区二区在线视频| 免费xxxx性欧美18vr| 国产盗摄精品一区二区三区在线| 久久久久久9999| 亚洲欧美在线观看| 日韩国产高清影视| 粉嫩13p一区二区三区| 日本高清不卡aⅴ免费网站| 欧美日韩不卡一区二区| 久久亚洲春色中文字幕久久久| 国产精品福利一区二区三区| 亚洲午夜三级在线| 国产一区二区视频在线| 在线免费观看不卡av| 亚洲精品一区二区三区影院| 亚洲欧洲韩国日本视频| 热久久国产精品| 97成人超碰视| 日韩你懂的在线观看| 中文字幕佐山爱一区二区免费| 日韩 欧美一区二区三区| 成人av一区二区三区| 日韩一区二区三区高清免费看看| 国产精品拍天天在线| 免费精品99久久国产综合精品| 91在线porny国产在线看| 精品国产一区二区三区久久久蜜月 |