222 lines
8.4 KiB
C++
222 lines
8.4 KiB
C++
#include "stdafx.h"
|
|
#include "InternetSessionEx.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[]=__FILE__;
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
#ifndef WM_FTP_STATUS
|
|
#define WM_FTP_STATUS WM_USER+130
|
|
#endif
|
|
|
|
|
|
CInternetSessionEx::CInternetSessionEx( LPCTSTR pstrAgent /* = NULL*/,
|
|
DWORD dwContext /*= 1*/,
|
|
DWORD dwAccessType/* = INTERNET_OPEN_TYPE_PRECONFIG*/,
|
|
LPCTSTR pstrProxyName/* = NULL*/,
|
|
LPCTSTR pstrProxyBypass/* = NULL*/,
|
|
DWORD dwFlags /* = 0 */)
|
|
: CInternetSession(pstrAgent, dwContext, dwAccessType, pstrProxyName, pstrProxyBypass, dwFlags)
|
|
{
|
|
m_hMainWnd = NULL;
|
|
}
|
|
|
|
CInternetSessionEx::~CInternetSessionEx()
|
|
{
|
|
}
|
|
|
|
void CInternetSessionEx::GetErrorString(DWORD dwErrorCode,CString& strResult)
|
|
{
|
|
switch(dwErrorCode)
|
|
{
|
|
case ERROR_INTERNET_OUT_OF_HANDLES:
|
|
strResult = _T("No more handles could be generated at this time.");
|
|
break;
|
|
case ERROR_INTERNET_TIMEOUT:
|
|
strResult = _T("The request has timed out.");
|
|
break;
|
|
case ERROR_INTERNET_EXTENDED_ERROR:
|
|
// An extended error was returned from the server. This is
|
|
// typically a string or buffer containing a verbose error
|
|
// message. Call InternetGetLastResponseInfo to retrieve the error text.
|
|
case ERROR_INTERNET_INTERNAL_ERROR:
|
|
strResult = _T("An internal error has occurred.");
|
|
break;
|
|
case ERROR_INTERNET_INVALID_URL:
|
|
strResult = _T("The URL is invalid.");
|
|
break;
|
|
case ERROR_INTERNET_UNRECOGNIZED_SCHEME:
|
|
strResult = _T("The URL scheme could not be recognized or is not supported.");
|
|
break;
|
|
case ERROR_INTERNET_NAME_NOT_RESOLVED:
|
|
strResult = _T("The server name could not be resolved.");
|
|
break;
|
|
case ERROR_INTERNET_PROTOCOL_NOT_FOUND:
|
|
strResult = _T("The requested protocol could not be located.");
|
|
break;
|
|
case ERROR_INTERNET_INVALID_OPTION:
|
|
strResult = _T("A request to InternetQueryOption or InternetSetOption specified an invalid option value.");
|
|
break;
|
|
case ERROR_INTERNET_BAD_OPTION_LENGTH:
|
|
strResult = _T("The length of an option supplied to InternetQueryOption or \
|
|
InternetSetOption is incorrect for the type of option specified.");
|
|
break;
|
|
case ERROR_INTERNET_OPTION_NOT_SETTABLE:
|
|
strResult = _T("The request option cannot be set, only queried.");
|
|
break;
|
|
case ERROR_INTERNET_SHUTDOWN:
|
|
strResult = _T("The Win32 Internet function support is being shut down or unloaded.");
|
|
break;
|
|
case ERROR_INTERNET_INCORRECT_USER_NAME:
|
|
strResult = _T("The request to connect and log on to an FTP server could \
|
|
not be completed because the supplied user name is incorrect.");
|
|
break;
|
|
case ERROR_INTERNET_INCORRECT_PASSWORD:
|
|
strResult = _T("The request to connect and log on to an FTP server could \
|
|
not be completed because the supplied password is incorrect.");
|
|
break;
|
|
case ERROR_INTERNET_LOGIN_FAILURE:
|
|
strResult = _T("The request to connect to and log on to an FTP server failed.");
|
|
break;
|
|
case ERROR_INTERNET_INVALID_OPERATION:
|
|
strResult = _T("The requested operation is invalid.");
|
|
break;
|
|
case ERROR_INTERNET_OPERATION_CANCELLED:
|
|
strResult = _T("The operation was canceled, usually because the handle on \
|
|
which the request was operating was closed before the operation completed.");
|
|
break;
|
|
case ERROR_INTERNET_INCORRECT_HANDLE_TYPE:
|
|
strResult = _T("The type of handle supplied is incorrect for this operation.");
|
|
break;
|
|
case ERROR_INTERNET_INCORRECT_HANDLE_STATE:
|
|
strResult = _T("The requested operation cannot be carried out because the \
|
|
handle supplied is not in the correct state. ");
|
|
break;
|
|
case ERROR_INTERNET_NOT_PROXY_REQUEST:
|
|
strResult = "The request cannot be made via a proxy.";
|
|
break;
|
|
case ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND:
|
|
strResult = _T("A required registry value could not be located.");
|
|
break;
|
|
case ERROR_INTERNET_BAD_REGISTRY_PARAMETER:
|
|
strResult = _T("A required registry value was located but is an incorrect type or has an invalid value.");
|
|
break;
|
|
case ERROR_INTERNET_NO_DIRECT_ACCESS:
|
|
strResult = _T("Direct network access cannot be made at this time.");
|
|
break;
|
|
case ERROR_INTERNET_NO_CONTEXT:
|
|
strResult = _T("An asynchronous request could not be made because a zero context value was supplied.");
|
|
break;
|
|
case ERROR_INTERNET_NO_CALLBACK:
|
|
strResult = _T("An asynchronous request could not be made because a callback function has not been set.");
|
|
break;
|
|
case ERROR_INTERNET_REQUEST_PENDING:
|
|
strResult = _T("The required operation could not be completed because one or more requests are pending.");
|
|
break;
|
|
case ERROR_INTERNET_INCORRECT_FORMAT:
|
|
strResult = _T("The format of the request is invalid.");
|
|
break;
|
|
case ERROR_INTERNET_ITEM_NOT_FOUND:
|
|
strResult = _T("The requested item could not be located.");
|
|
break;
|
|
case ERROR_INTERNET_CANNOT_CONNECT:
|
|
strResult = _T("The attempt to connect to the server failed.");
|
|
break;
|
|
case ERROR_INTERNET_CONNECTION_ABORTED:
|
|
strResult = _T("The connection with the server has been terminated.");
|
|
break;
|
|
case ERROR_INTERNET_CONNECTION_RESET:
|
|
strResult = _T("The connection with the server has been reset.");
|
|
break;
|
|
case ERROR_INTERNET_FORCE_RETRY:
|
|
strResult = _T("Calls for the Win32 Internet function to redo the request.");
|
|
break;
|
|
case ERROR_INTERNET_INVALID_PROXY_REQUEST:
|
|
strResult = _T("The request to the proxy was invalid.");
|
|
break;
|
|
case ERROR_INTERNET_HANDLE_EXISTS:
|
|
strResult = _T("The request failed because the handle already exists.");
|
|
break;
|
|
case ERROR_FTP_TRANSFER_IN_PROGRESS:
|
|
strResult = _T("The requested operation cannot be made on the FTP session \
|
|
handle because an operation is already in progress.");
|
|
break;
|
|
case ERROR_FTP_DROPPED:
|
|
strResult = _T("The FTP operation was not completed because the session was aborted.");
|
|
break;
|
|
}
|
|
}
|
|
|
|
//»Øµ÷·¢ËÍ´íÎóÐÅÏ¢
|
|
void CInternetSessionEx::OnStatusCallback(DWORD dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLen)
|
|
{
|
|
CString strStatus;
|
|
switch(dwInternetStatus)
|
|
{
|
|
case INTERNET_STATUS_STATE_CHANGE:
|
|
strStatus.Format(_T("[%d] Busy"), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
|
|
case INTERNET_STATUS_REQUEST_COMPLETE:
|
|
strStatus.Format(_T("[%d] request complete"), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
case INTERNET_STATUS_CONNECTING_TO_SERVER:
|
|
strStatus.Format(_T("[%d] Connecting to server..."), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
|
|
case INTERNET_STATUS_RESOLVING_NAME:
|
|
strStatus.Format(_T("[%d] resolving name for %s"), AfxGetThread()->m_nThreadID, lpvStatusInformation);
|
|
break;
|
|
|
|
case INTERNET_STATUS_NAME_RESOLVED:
|
|
strStatus.Format(_T("[%d] resolved name for %s!"), AfxGetThread()->m_nThreadID, lpvStatusInformation);
|
|
break;
|
|
|
|
case INTERNET_STATUS_CONNECTED_TO_SERVER:
|
|
strStatus.Format(_T("[%d] Connected to server!"), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
|
|
case INTERNET_STATUS_SENDING_REQUEST:
|
|
strStatus.Format(_T("[%d] Sending request..."), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
|
|
case INTERNET_STATUS_REQUEST_SENT:
|
|
strStatus.Format(_T("[%d] Request sent"), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
case INTERNET_STATUS_RECEIVING_RESPONSE:
|
|
strStatus.Format(_T("[%d] Receiving response..."), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
case INTERNET_STATUS_RESPONSE_RECEIVED:
|
|
strStatus.Format(_T("[%d] Response received!"), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
case INTERNET_STATUS_CLOSING_CONNECTION:
|
|
strStatus.Format(_T("[%d] Closing connection..."), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
case INTERNET_STATUS_CONNECTION_CLOSED:
|
|
strStatus.Format(_T("[%d] Connection close!"), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
case INTERNET_STATUS_HANDLE_CLOSING:
|
|
strStatus.Format(_T("[%d] Closing Connection..."), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
case INTERNET_STATUS_HANDLE_CREATED:
|
|
strStatus.Format(_T("[%d] Connection created!"), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
case INTERNET_STATUS_REDIRECT:
|
|
strStatus.Format(_T("[%d] Redirected to URL"), AfxGetThread()->m_nThreadID);
|
|
break;
|
|
|
|
case INTERNET_STATUS_CTL_RESPONSE_RECEIVED:
|
|
default:
|
|
strStatus.Format(_T("[%d] Unknown status: %d"), AfxGetThread()->m_nThreadID, dwInternetStatus);
|
|
break;
|
|
}
|
|
|
|
LPCTSTR line = strStatus;
|
|
if(m_hMainWnd != NULL)
|
|
{
|
|
::SendMessage(m_hMainWnd, WM_FTP_STATUS, 0,(LPARAM)line);
|
|
}
|
|
}
|