⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 updatepage.cpp

📁 MiniCA V2.0版本源码。《小型CA系统V2.1含源码》发表以来
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	//	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 + -