📄 httpupdate.cpp
字号:
#include "WZ_UM.h"
WZ_DECLAREDLL CWZHttpUpdateModule::CWZHttpUpdateModule ()
{
m_enUpdateType = USING_HTTP;
}
WZ_DECLAREDLL CWZHttpUpdateModule::CWZHttpUpdateModule (LPSTR lpszIPADDR, WORD wPORT, LPSTR lpszID, LPSTR lpszPASS)
: CWZUpdateModule (lpszIPADDR, wPORT, lpszID, lpszPASS)
{
m_enUpdateType = USING_HTTP;
}
WZ_DECLAREDLL CWZHttpUpdateModule::~CWZHttpUpdateModule ()
{
}
WZ_DECLAREDLL BOOL CWZHttpUpdateModule::Connect ()
{
m_iCurrentState = STATE_CONNECTING;
// error check
if (! strcmp (m_szIPADDR, "")) {
m_iCurrentState = STATE_DISCONNECTED;
return FALSE;
}
if (! m_wPORT)
m_wPORT = PORT_HTTP;
m_hINET_SESSION = InternetOpen ("UPDATE_HTTP", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if (! m_hINET_SESSION) {
// "牢磐齿 楷搬 角菩"
m_iCurrentState = STATE_DISCONNECTED;
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
return FALSE;
}
m_hHTTP_CONNECTION =InternetConnect(m_hINET_SESSION, m_szIPADDR, m_wPORT, m_szID, m_szPASS, INTERNET_SERVICE_HTTP,0,0);
if (m_hHTTP_CONNECTION==NULL) {
// "HTTP 俊 立加且 荐 绝嚼聪促."
InternetCloseHandle(m_hINET_SESSION);
m_iCurrentState = STATE_DISCONNECTED;
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
return FALSE;
}
m_iCurrentState = STATE_CONNECTED;
return TRUE;
}
WZ_DECLAREDLL BOOL CWZHttpUpdateModule::Connect (LPSTR lpszIPADDR, WORD wPORT, LPSTR lpszID, LPSTR lpszPASS)
{
strcpy (m_szIPADDR, lpszIPADDR);
m_wPORT = wPORT;
if (!lpszID)
strcpy (m_szID, "");
else
strcpy (m_szID, lpszID);
if (!lpszPASS)
strcpy (m_szPASS, "");
else
strcpy (m_szPASS, lpszPASS);
return this->Connect();
}
WZ_DECLAREDLL VOID CWZHttpUpdateModule::Disconnect ()
{
m_iCurrentState = STATE_DISCONNECTED;
if( m_hHTTP_CONNECTION )
{
InternetCloseHandle(m_hHTTP_CONNECTION);
m_hHTTP_CONNECTION = NULL;
}
if( m_hINET_SESSION )
{
InternetCloseHandle(m_hINET_SESSION);
m_hINET_SESSION = NULL;
}
}
WZ_DECLAREDLL BOOL CWZHttpUpdateModule::DownloadFile (LPSTR lpszRemoteFilePath, LPSTR lpszLocalFilePath)
{
CHAR lpszRemoteFileName [MAX_PATH];
CHAR lpszRemoteFileEXE [MAX_PATH];
CHAR lpszRealLocalFilePath [MAX_PATH];
HINTERNET hHTTP_FILE_REQ = NULL;
HANDLE hLocalFile = INVALID_HANDLE_VALUE;
// 咯扁辑 肺拿 颇老捞抚捞 绝促搁 盔拜颇老捞抚苞 悼老窍霸 父电促.
_splitpath(lpszRemoteFilePath, NULL, NULL, lpszRemoteFileName, lpszRemoteFileEXE );
if ((!lpszLocalFilePath) || (! strcmp(lpszLocalFilePath, "")))
wsprintf (lpszRealLocalFilePath, ".\\%s%s", lpszRemoteFileName, lpszRemoteFileEXE);
else {
if (lpszLocalFilePath[strlen(lpszLocalFilePath)-1] != '\\')
wsprintf (lpszRealLocalFilePath, "%s\\%s%s", lpszLocalFilePath, lpszRemoteFileName, lpszRemoteFileEXE);
else
wsprintf (lpszRealLocalFilePath, "%s%s%s", lpszLocalFilePath, lpszRemoteFileName, lpszRemoteFileEXE);
}
wsprintf(m_strtUpdatingFileInfo.szFileName, "%s%s", lpszRemoteFileName, lpszRemoteFileEXE); // 颇老 惑怕 备炼眉俊 泅犁 罐阑 颇老捞抚 历厘
__try {
// 1 . 肺拿 颇老 父甸扁
hLocalFile = CreateFile (lpszRealLocalFilePath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if (hLocalFile == INVALID_HANDLE_VALUE) {
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
return FALSE;
}
// 2 . 盔拜瘤 颇老 凯扁
INT iCount = MAX_RETRY_DOWNLOADING;
while(iCount--)
{
if (!hHTTP_FILE_REQ)
hHTTP_FILE_REQ = HttpOpenRequest(m_hHTTP_CONNECTION, "GET", lpszRemoteFilePath, NULL, NULL, NULL, 0, 0);
if (! HttpSendRequest (hHTTP_FILE_REQ, NULL, 0, NULL, 0)) {
Sleep(100);
}
else break;
}
if( iCount < 1 )
{
// 颇老阑 茫阑荐 绝促.
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, m_strtUpdatingFileInfo.iErrorCode);
DeleteFile (lpszRealLocalFilePath);
return FALSE;
}
// 3 . 颇老 农扁 掘扁
DWORD dwFileLength = 0;
CHAR szBuffer [16];
DWORD dwBufferSize = sizeof (szBuffer), dwIndex = 0; // dwIndex 甫 0 栏肺 (吝夸 !!)
BOOL bResult = HttpQueryInfo(hHTTP_FILE_REQ, HTTP_QUERY_CONTENT_LENGTH, szBuffer, &dwBufferSize, &dwIndex);
if (!bResult) {
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
return FALSE;
}
dwFileLength = atoi (szBuffer);
DWORD dwNowRecvBytes, dwNowWrittenBytes, dwTotalWrittenBytes, dwAvailableSize;
dwNowRecvBytes = dwNowWrittenBytes = dwTotalWrittenBytes = dwAvailableSize = 0;
if(dwFileLength >= 0)
{
m_strtUpdatingFileInfo.uWholeFileSize = dwFileLength;
m_strtUpdatingFileInfo.uNowFileSize = 0;
AddEvent( EVENT_FILEDOWNLOAD_START );
while(TRUE)
{
if (! InternetQueryDataAvailable(hHTTP_FILE_REQ, & dwAvailableSize, 0, 0) ) {
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
return FALSE;
}
if (dwAvailableSize > sizeof (m_HTTP_cBUFFER))
dwAvailableSize = sizeof (m_HTTP_cBUFFER);
if (! InternetReadFile(hHTTP_FILE_REQ, m_HTTP_cBUFFER, dwAvailableSize, &dwNowRecvBytes) ) {
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
return FALSE;
}
if (! WriteFile (hLocalFile, m_HTTP_cBUFFER, dwNowRecvBytes, &dwNowWrittenBytes, NULL)) {
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
return FALSE;
}
dwTotalWrittenBytes += dwNowWrittenBytes;
m_strtUpdatingFileInfo.uNowFileSize = dwTotalWrittenBytes;
AddEvent( EVENT_FILEDOWNLOAD_WORKING );
if (!dwNowRecvBytes)
break;
if(dwTotalWrittenBytes >= dwFileLength)
break;
// 诀单捞飘 累诀捞 吝埃俊 秒家登菌促搁 唱埃促.
if( m_bCancelUpdate )
{
DeleteFile (lpszRealLocalFilePath);
m_bCancelUpdate = FALSE;
return FALSE;
}
}
}
else
{
// 盔拜瘤 颇老 农扁啊 0焊促 累促. (俊矾啊 酒匆 荐档 乐澜)
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
}
AddEvent( EVENT_FILEDOWNLOAD_END );
//m_strtUpdatingFileInfo.uNowFileNum++; // 捞扒 促款肺靛 颇老捞 己傍窍搁 观俊辑 秦霖促.
}
__finally {
if (hHTTP_FILE_REQ)
InternetCloseHandle(hHTTP_FILE_REQ);
if (hLocalFile != INVALID_HANDLE_VALUE)
CloseHandle(hLocalFile);
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -