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

📄 dialup.cpp

📁 网络自动拨号程序
💻 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 + -