📄 updatepage.cpp
字号:
// error_code = FETCH_CONNECT_ABORT;
break;
case 12031:
tmp_msg = ("Connection Reset");
// error_code = FETCH_CONNECT_RESET;
break;
case 12033:
tmp_msg = ("Invalid Proxy Request");
break;
case 12034:
tmp_msg = ("Need UI");
break;
case 12035:
tmp_msg = ("Sec Cert Date Invalid");
break;
case 12038:
tmp_msg = ("Sec Cert CN Invalid");
break;
case 12044:
tmp_msg = ("Client Auth Cert Needed");
break;
case 12045:
tmp_msg = ("Invalid CA Cert");
break;
case 12046:
tmp_msg = ("Client Auth Not Setup");
break;
case 12150:
tmp_msg = ("HTTP Header Not Found");
// error_code = FETCH_BAD_HTTP;
break;
case 12152:
tmp_msg = ("Invalid HTTP Server Response");
// error_code = FETCH_BAD_HTTP;
break;
case 12153:
tmp_msg = ("Invalid HTTP Header");
// error_code = FETCH_BAD_HTTP;
break;
case 120154:
tmp_msg = ("Invalid Query Request");
// error_code = FETCH_BAD_HTTP;
break;
case 120156:
tmp_msg = ("Redirect Failed");
// error_code = FETCH_BAD_HTTP;
break;
case 120159:
tmp_msg = ("TCP/IP not installed");
break;
default:
tmp_msg = ("Error");
// error_code = FETCH_FAILURE;
}
}
void CALLBACK FtpCallbackStatus(HINTERNET hInternet,
DWORD dwContext,
DWORD dwInternetStatus,
LPVOID lpvStatusInformation,
DWORD dwStatusInformationLength)
{
// 获取上下文信息
CUpdatePage::REQUEST_CONTEXT * pcFtpMsg =
reinterpret_cast<CUpdatePage::REQUEST_CONTEXT*>(dwContext);
if(pcFtpMsg == NULL)
{
return;
}
LPDWORD pdwInformation(NULL);
CUpdatePage * pUpdate = (CUpdatePage *)pcFtpMsg->pUpdate;
char cout[255] = {0};
// 查询当前文件传输状态
switch(dwInternetStatus)
{
case INTERNET_STATUS_RESOLVING_NAME: // 10
sprintf(cout,"Looking up the IP address for %s", (LPCTSTR)lpvStatusInformation);
// sout.append(cout);
// pUpdate->AddEvent(0,sout);
break;
case INTERNET_STATUS_NAME_RESOLVED: // 11
sprintf(cout,"Name resolved %s", (LPCTSTR)lpvStatusInformation);
// sout.append(cout);
// pUpdate->AddEvent(0,sout);
break;
case INTERNET_STATUS_CONNECTING_TO_SERVER: // 20
// lpvStatusInformation是一个SOCKADDR的指针
sprintf(cout,"Connecting to server--%s...", (LPCTSTR)lpvStatusInformation);
// sout.append(cout);
// pUpdate->AddEvent(0,sout);
break;
case INTERNET_STATUS_CONNECTED_TO_SERVER: // 21
// lpvStatusInformation是一个SOCKADDR的指针
sprintf(cout,"Connected to server--%s", (LPCTSTR)lpvStatusInformation);
// sout.append(cout);
// pUpdate->AddEvent(0,sout);
break;
case INTERNET_STATUS_SENDING_REQUEST: // 30
break;
case INTERNET_STATUS_REQUEST_SENT: // 31
{
// 发送数据到服务器
if(pcFtpMsg->bBegin)
{
// 只有当处于上传状态的时候,才处理
if(pcFtpMsg->m_dwFtpHead > 0 && pcFtpMsg->m_dwFtpHead < 6)
{
// 5这个值是一个经验值,具体为什么,由于没有深入研究rfc的协议
// 所以还不知道,将来如果知道原因,可以补充上
pcFtpMsg->m_dwFtpHead ++;
}
pdwInformation = (LPDWORD)lpvStatusInformation;
if(pcFtpMsg->m_dwFtpHead == 6)
{
pcFtpMsg->dFinishLen += *pdwInformation;
pcFtpMsg->dTotalFinish += *pdwInformation;
// ATLTRACE("本次发送的数据大小为: %d,总共数据为:%d\n", *pdwInformation,
// pcFtpMsg->dFileLen);
if(pcFtpMsg->hWindow != NULL)
{
// 首先的第一选择是给窗口发送消息
// SendDlgItemMessage(pcFtpMsg->hWindow,IDC_PROGRESS_ONE,PBM_SETPOS,
// (pcFtpMsg->dFinishLen*100.0/pcFtpMsg->dFileLen),0);
// SendDlgItemMessage(pcFtpMsg->hWindow,IDC_PROGRESS_TOTAL,PBM_SETPOS,
// (pcFtpMsg->dTotalFinish*100.0/pcFtpMsg->dTotalLen),0);
}
}// End if 5,经验值
}// end if 文件上传
}
break;
case INTERNET_STATUS_RESPONSE_RECEIVED: // 41
{
// 从服务器接收到的响应
if(pcFtpMsg->bBegin)
{
// 只有当处于下载状态的时候,才处理
pdwInformation = (LPDWORD)lpvStatusInformation;
if(pcFtpMsg->m_dwFtpHead > 0 && pcFtpMsg->m_dwFtpHead < 6)
{
// 6这个值是一个经验值,具体为什么,由于没有深入研究rfc的协议
// 所以还不知道,将来如果知道原因,可以补充上
pcFtpMsg->m_dwFtpHead ++;
// ATLTRACE("在连接之后第%d次接收数据!\n", pcFtpMsg->m_dwFtpHead);
}
if(pcFtpMsg->m_dwFtpHead == 6)
{
pcFtpMsg->dFinishLen += *pdwInformation;
pcFtpMsg->dTotalFinish += *pdwInformation;
// ATLTRACE("本次发送的数据大小为: %d,总共数据为:%d\n", *pdwInformation,
// pcFtpMsg->dFileLen);
if(pcFtpMsg->hWindow != NULL)
{
// 首先的第一选择是给窗口发送消息
// SendDlgItemMessage(pcFtpMsg->hWindow,IDC_PROGRESS_ONE,PBM_SETPOS,
// (pcFtpMsg->dFinishLen*100.0/pcFtpMsg->dFileLen),0);
// SendDlgItemMessage(pcFtpMsg->hWindow,IDC_PROGRESS_TOTAL,PBM_SETPOS,
// (pcFtpMsg->dTotalFinish*100.0/pcFtpMsg->dTotalLen),0);
}
}// End if 6,经验值
}// End if 文件下载
}
break;
case INTERNET_STATUS_RECEIVING_RESPONSE: // 40
// 等待服务器的响应,lpvStatusInformation = NULL
break;
case INTERNET_STATUS_CTL_RESPONSE_RECEIVED: // 42
case INTERNET_STATUS_PREFETCH: // 43
case INTERNET_STATUS_CLOSING_CONNECTION: // 50
sprintf(cout,"Closing connection");
// sout.append(cout);
// pUpdate->AddEvent(0,sout);
break;
case INTERNET_STATUS_CONNECTION_CLOSED: // 51
sprintf(cout,"Connection closed");
// sout.append(cout);
// pUpdate->AddEvent(0,sout);
break;
case INTERNET_STATUS_HANDLE_CREATED: // 60
{
LPINTERNET_ASYNC_RESULT ptIAR =
reinterpret_cast<LPINTERNET_ASYNC_RESULT>(lpvStatusInformation);
// if(hInternet == pcFtpMsg->GetCurrentConnect())
{
// ATLTRACE("Connect Handle Created!\n");
pcFtpMsg->m_dwFtpHead = 1;
}
// else if(hInternet == pcFtpMsg->GetCurrentSession())
{
// ATLTRACE("Session handle created!\n");
}
}
break;
case INTERNET_STATUS_HANDLE_CLOSING: // 70
pcFtpMsg->m_dwFtpHead = 0;
// ATLTRACE("Handle closed with dif %d!\n",
// pcFtpMsg->GetCurrentFtpSize() - pcFtpMsg->GetTotalFileSize());
break;
case INTERNET_STATUS_DETECTING_PROXY: // 80
// ATLTRACE("Detecting proxy\n");
break;
case INTERNET_STATUS_REQUEST_COMPLETE: // 100
// 一个异步操作已经完成,lpvStatusInformation是INTERNET_ASYNC_RESULT的指针
{
LPINTERNET_ASYNC_RESULT ptIAR =
reinterpret_cast<LPINTERNET_ASYNC_RESULT>(lpvStatusInformation);
// ATLTRACE("一个异步操作完成,错误为:%d,结果为:%d\n",
// ptIAR->dwError, ptIAR->dwResult);
}
break;
case INTERNET_STATUS_REDIRECT: // 110
// ATLTRACE("HTTP request redirected to \n");
break;
case INTERNET_STATUS_INTERMEDIATE_RESPONSE: // 120
// ATLTRACE("Received intermediate status message from the server.\n");
break;
case INTERNET_STATUS_STATE_CHANGE: // 200
// ATLTRACE("'Moved between a secure and a nonsecure site\n");
{
LPDWORD pdwRead = (LPDWORD)lpvStatusInformation;
switch(*pdwRead)
{
case INTERNET_STATE_CONNECTED: // 0x00000001
// ATLTRACE("Connected state moved between secure and nonsecure site\n");
break;
case INTERNET_STATE_DISCONNECTED: // 0x00000002
// ATLTRACE("Disconnected from network\n");
break;
case INTERNET_STATE_DISCONNECTED_BY_USER: // 0x00000010
// ATLTRACE("Disconnected by user request\n");
break;
case INTERNET_STATE_IDLE: // 0x00000100
// ATLTRACE("No network requests are being made (by Wininet).\n");
break;
case INTERNET_STATE_BUSY: // 0x00000200
// ATLTRACE("Network requests are being made (by Wininet).\n");
break;
case INTERNET_STATUS_USER_INPUT_REQUIRED: // 0x00000040
// ATLTRACE("The request requires user input to complete\n");
break;
default:
break;
}
}
break;
default:
break;
}// End Ftp_CallbackStatus
}
//连接服务器
BOOL CUpdatePage::ConnectFtp(CString sServerName,UINT uServerPort,
CString sUserName,CString sUserPwd)
{
char buf[256] = {0};
try
{
m_hSession = InternetOpen( _T("Ftp_Ctrl"),
INTERNET_OPEN_TYPE_DIRECT,
"",
"",
INTERNET_FLAG_NO_CACHE_WRITE);
if(!m_hSession)
{
// GetLastError(buf);
return FALSE;
}
/* if(InternetSetStatusCallback(m_hSession, FtpCallbackStatus) ==
INTERNET_INVALID_STATUS_CALLBACK)
{
InternetCloseHandle(m_hSession);
GetLastError(buf);
AddEvent(-1,buf);
return FALSE;
}*/
m_hConnect = InternetConnect(m_hSession,
sServerName,
uServerPort,
sUserName,
sUserPwd,
INTERNET_SERVICE_FTP,
INTERNET_FLAG_PASSIVE |
INTERNET_FLAG_EXISTING_CONNECT,
(DWORD)&m_Request);
if(!m_hConnect)
{
// GetLastError(buf);
// AddEvent(-1,buf);
return FALSE;
}
}
catch(...)
{
// GetLastError(buf);
// AddEvent(-1,buf);
return FALSE;
}
return TRUE;
}
BOOL CUpdatePage::DownFtpFile(LPCTSTR lpszNewRemoteFile,LPCTSTR lpszLocalFile)
{
BOOL bResult = FtpGetFile(m_hConnect,lpszNewRemoteFile,lpszLocalFile,FALSE,
FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY,(DWORD)&m_Request);//上传
if(!bResult)
{
char buf[256] = {0};
// GetLastError(buf);
}
return bResult;
}
void CUpdatePage::DisFtpConnect()
{
// TODO: Add your implementation code here
if(m_hSession)
{
InternetCloseHandle(m_hSession);
m_hSession = NULL;
}
if(m_hConnect)
{
InternetCloseHandle(m_hConnect);
m_hConnect = NULL;
}
}
void CUpdatePage::TranslateCT()
{
CHeaderCtrl * pHeader = m_UpList.GetHeaderCtrl();
if (pHeader)
{
CString str = MiniCT_1700;
HDITEM hdi;
hdi.mask = HDI_TEXT;
hdi.pszText = (LPTSTR)((LPCTSTR)str);
pHeader->SetItem(0, &hdi);
str = MiniCT_1701;
hdi.pszText = (LPTSTR)((LPCTSTR)str);
pHeader->SetItem(1, &hdi);
str = MiniCT_1702;
hdi.pszText = (LPTSTR)((LPCTSTR)str);
pHeader->SetItem(2, &hdi);
str = MiniCT_1703;
hdi.pszText = (LPTSTR)((LPCTSTR)str);
pHeader->SetItem(3, &hdi);
str = MiniCT_1704;
hdi.pszText = (LPTSTR)((LPCTSTR)str);
pHeader->SetItem(4, &hdi);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -