📄 dialup.cpp
字号:
// Dialup.cpp
#include "stdafx.h"
#include "Dialup.h"
char m_szStatus[500];
char m_szLastError[500];
VOID WINAPI RasDialFunc( UINT unMsg, RASCONNSTATE rasconnstate, DWORD dwError )
{
switch( rasconnstate ){
case RASCS_OpenPort:
strcpy( m_szStatus, "Opening the communication port" );
break;
case RASCS_PortOpened:
strcpy( m_szStatus, "The communication port has been openned" );
break;
case RASCS_ConnectDevice:
strcpy( m_szStatus, "A connection is being attempted" );
break;
case RASCS_DeviceConnected:
case RASCS_AllDevicesConnected:
strcpy( m_szStatus, "A connection has been made" );
break;
case RASCS_Authenticate:
strcpy( m_szStatus, "Authenticating user name and password" );
break;
case RASCS_AuthNotify:
strcpy( m_szStatus, "Notifying authorization" );
break;
case RASCS_AuthRetry:
strcpy( m_szStatus, "Authorization retry" );
break;
case RASCS_AuthCallback:
strcpy( m_szStatus, "Authorization callback" );
break;
case RASCS_AuthChangePassword:
strcpy( m_szStatus, "Authorization change password" );
break;
case RASCS_AuthProject:
strcpy( m_szStatus, "Authorization project" );
break;
case RASCS_AuthLinkSpeed:
strcpy( m_szStatus, "Authorization link speed" );
break;
case RASCS_AuthAck:
strcpy( m_szStatus, "Authorization acknowledgment" );
break;
case RASCS_ReAuthenticate:
strcpy( m_szStatus, "Re-authentication begun" );
break;
case RASCS_Authenticated:
strcpy( m_szStatus, "User has been authenticated" );
break;
case RASCS_PrepareForCallback:
strcpy( m_szStatus, "Preparing for callback" );
break;
case RASCS_WaitForModemReset:
strcpy( m_szStatus, "Waiting for modem reset" );
break;
case RASCS_WaitForCallback:
strcpy( m_szStatus, "Waiting for callback" );
break;
case RASCS_Projected:
strcpy( m_szStatus, "Projected" );
break;
case RASCS_StartAuthentication:
strcpy( m_szStatus, "Starting authentication" );
break;
case RASCS_CallbackComplete:
strcpy( m_szStatus, "Callback complete" );
break;
case RASCS_LogonNetwork:
strcpy( m_szStatus, "Logging on to network" );
break;
case RASCS_SubEntryConnected:
strcpy( m_szStatus, "Sub entry connected" );
break;
case RASCS_SubEntryDisconnected:
strcpy( m_szStatus, "Sub entry disconnected" );
break;
case RASCS_Interactive:
strcpy( m_szStatus, "Interactive" );
break;
case RASCS_RetryAuthentication:
strcpy( m_szStatus, "Authentication retry" );
break;
case RASCS_CallbackSetByCaller:
strcpy( m_szStatus, "Callback set by caller" );
break;
case RASCS_PasswordExpired:
strcpy( m_szStatus, "Password expired" );
break;
case RASCS_Connected:
strcpy( m_szStatus, "Connected to remote network" );
break;
case RASCS_Disconnected:
strcpy( m_szStatus, "Disconnected from remote network" );
break;
}
if( dwError != 0 )
RasGetErrorString( (UINT) dwError, (LPSTR) m_szLastError, sizeof( m_szLastError ) );
}
CDialup::CDialup()
{
m_szStatus[0] = 0;
m_szLastError[0] = 0;
m_bErrorFlag = FALSE;
m_hRasConn = NULL;
m_lpszDialupName = NULL;
}
CDialup::~CDialup()
{
if( m_lpszDialupName != NULL )
delete [] m_lpszDialupName;
}
BOOL CDialup::Connect( const char *lpszParameterFile, const char *lpszParameterSection, const char *lpszDialupName )
{
RASDIALPARAMS rdParams;
DWORD dwRet;
Disconnect();
memset( &rdParams, 0, sizeof( RASDIALPARAMS ) );
rdParams.dwSize = sizeof( RASDIALPARAMS );
lstrcpy( rdParams.szEntryName, lpszDialupName );
rdParams.szPhoneNumber[0] = '\0';
rdParams.szCallbackNumber[0] = '*';
rdParams.szCallbackNumber[0] = '\0';
::GetPrivateProfileString( lpszParameterSection, "mci_system_name", "",
rdParams.szUserName, sizeof( rdParams.szUserName ),
lpszParameterFile );
::GetPrivateProfileString( lpszParameterSection, "mci_chap_secret", "",
rdParams.szPassword, sizeof( rdParams.szPassword ),
lpszParameterFile );
::GetPrivateProfileString( lpszParameterSection, "Domain", "",
rdParams.szDomain, sizeof( rdParams.szDomain ),
lpszParameterFile );
m_lpszDialupName = new char [strlen(lpszDialupName)+10];
if( m_lpszDialupName != NULL )
strcpy( m_lpszDialupName, lpszDialupName );
dwRet = RasDial( NULL, NULL, &rdParams, 0L, (RASDIALFUNC) RasDialFunc, &m_hRasConn );
if( dwRet ){
if( RasGetErrorString( (UINT) dwRet, (LPSTR) m_szLastError, sizeof( m_szLastError ) ) != 0 )
wsprintf( (LPSTR) m_szLastError, "Undefined RAS Dial Error (%ld).", dwRet );
return( FALSE );
}
return( TRUE );
}
void CDialup::Disconnect( void )
{
if( m_hRasConn == NULL )
return;
RasHangUp( m_hRasConn );
m_hRasConn = NULL;
}
void CDialup::GetLastError( char *lpszErrorBuffer, int nLimit )
{
for( int i=0; i<nLimit-1; i++ ){
lpszErrorBuffer[i] = m_szLastError[i];
if( lpszErrorBuffer[i] == 0 )
break;
}
lpszErrorBuffer[nLimit-1] = 0;
}
void CDialup::GetLastError( CString& strError )
{
strError = m_szLastError;
}
void CDialup::GetStatus( char *lpszStatusBuffer, int nLimit )
{
for( int i=0; i<nLimit-1; i++ ){
lpszStatusBuffer[i] = m_szStatus[i];
if( lpszStatusBuffer[i] == 0 )
break;
}
lpszStatusBuffer[nLimit-1] = 0;
}
void CDialup::GetStatus( CString& strStatus )
{
strStatus = m_szStatus;
}
BOOL CDialup::HangupByDialupName( const char *lpszDialupName )
{
HRASCONN hRasConn = GetConnectionHandle( lpszDialupName );
if( hRasConn == NULL )
return( FALSE );
RasHangUp( hRasConn );
return( TRUE );
}
HRASCONN CDialup::GetConnectionHandle( const char *lpszDialupName )
{
RASCONN RasConn[20];
memset( RasConn, 0, sizeof( RASCONN ) * 20 );
DWORD dwSize = sizeof( RASCONN ) * 20, dwConnections = 0;
RasConn[0].dwSize = sizeof( RASCONN );
RasEnumConnections( RasConn, &dwSize, &dwConnections );
for( DWORD i=0; i<dwConnections; i++ ){
if( !strcmp( lpszDialupName, RasConn[i].szEntryName ) )
return( RasConn[i].hrasconn );
}
return( NULL );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -