#ifndef _RASAPI_RASAPI_HPP_ #define _RASAPI_RASAPI_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_RAS_HPP_ #include #endif class RasApi { public: RasApi(void); RasApi(const RasApi &someRasApi); virtual ~RasApi(); RasApi &operator=(const RasApi &someRasApi); DWORD rasDial(LPRASDIALEXTENSIONS lpRasDialExtensions,LPTSTR lpszPhonebook,LPRASDIALPARAMS lpRasDialParams,DWORD dwNotifierType,LPVOID lpvNotifier,LPHRASCONN lphRasConn); DWORD rasEnumConnections(LPRASCONN lprasconn,LPDWORD lpcb,LPDWORD lpcConnections); DWORD rasEnumEntries(LPTSTR reserved,LPTSTR lpszPhonebook,LPRASENTRYNAME lprasentryname,LPDWORD lpcb,LPDWORD lpcEntries); DWORD rasGetConnectStatus(HRASCONN hrasconn,LPRASCONNSTATUS lprasconnstatus); DWORD rasGetErrorString(UINT uErrorValue,LPTSTR lpszErrorString,DWORD cBufSize); DWORD rasHangUp(HRASCONN hrasconn); DWORD rasGetProjectionInfo(HRASCONN hrasconn,RASPROJECTION rasprojection,LPVOID lpprojection,LPDWORD lpcb); DWORD rasCreatePhonebookEntry(HWND hwnd,LPSTR lpszPhonebook); DWORD rasEditPhonebookEntry(HWND hwnd,LPSTR lpszPhonebook,LPSTR lpszEntryName); DWORD rasSetEntryDialParams(LPSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,BOOL fRemovePassword); DWORD rasGetEntryDialParams(LPTSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,LPBOOL lpfPassword); WORD isOkay(void)const; private: typedef DWORD (APIENTRY *LPFNRASDIAL)(LPRASDIALEXTENSIONS,LPSTR,LPRASDIALPARAMSA,DWORD,LPVOID,LPHRASCONN); typedef DWORD (APIENTRY *LPFNRASENUMCONNECTIONS)(LPRASCONNA,LPDWORD,LPDWORD); typedef DWORD (APIENTRY *LPFNRASENUMENTRIES)(LPSTR,LPSTR,LPRASENTRYNAMEA,LPDWORD,LPDWORD); typedef DWORD (APIENTRY *LPFNRASGETCONNECTSTATUS)(HRASCONN,LPRASCONNSTATUSA); typedef DWORD (APIENTRY *LPFNRASGETERRORSTRING)(UINT,LPSTR,DWORD); typedef DWORD (APIENTRY *LPFNRASHANGUP)(HRASCONN); typedef DWORD (APIENTRY *LPFNRASGETPROJECTIONINFO)(HRASCONN,RASPROJECTION,LPVOID,LPDWORD); typedef DWORD (APIENTRY *LPFNRASCREATEPHONEBOOKENTRY)(HWND,LPSTR); typedef DWORD (APIENTRY *LPFNRASEDITPHONEBOOKENTRY)(HWND,LPSTR,LPSTR); typedef DWORD (APIENTRY *LPFNRASSETENTRYDIALPARAMS)(LPSTR,LPRASDIALPARAMSA,BOOL); typedef DWORD (APIENTRY *LPFNRASGETENTRYDIALPARAMS)(LPSTR,LPRASDIALPARAMSA,LPBOOL); void loadRasLib(void); void freeRasLib(void); void getEntryPoints(void); HINSTANCE mhRasLib; LPFNRASDIAL mlpfnRasDial; LPFNRASENUMCONNECTIONS mlpfnRasEnumConnections; LPFNRASENUMENTRIES mlpfnRasEnumEntries; LPFNRASGETCONNECTSTATUS mlpfnRasGetConnectStatus; LPFNRASGETERRORSTRING mlpfnRasGetErrorString; LPFNRASHANGUP mlpfnRasHangup; LPFNRASGETPROJECTIONINFO mlpfnRasGetProjectionInfo; LPFNRASCREATEPHONEBOOKENTRY mlpfnRasCreatePhonebookEntry; LPFNRASEDITPHONEBOOKENTRY mlpfnRasEditPhonebookEntry; LPFNRASSETENTRYDIALPARAMS mlpfnRasSetEntryDialParams; LPFNRASGETENTRYDIALPARAMS mlpfnRasGetEntryDialParams; }; inline RasApi::RasApi(void) : mhRasLib(0), mlpfnRasDial(0), mlpfnRasEnumConnections(0), mlpfnRasEnumEntries(0), mlpfnRasGetConnectStatus(0), mlpfnRasGetErrorString(0), mlpfnRasHangup(0), mlpfnRasGetProjectionInfo(0), mlpfnRasCreatePhonebookEntry(0), mlpfnRasEditPhonebookEntry(0), mlpfnRasSetEntryDialParams(0), mlpfnRasGetEntryDialParams(0) { loadRasLib(); getEntryPoints(); } inline RasApi::RasApi(const RasApi &someRasApi) { *this=someRasApi; } inline RasApi::~RasApi() { freeRasLib(); } inline RasApi &RasApi::operator=(const RasApi &/*someRasApi*/) { loadRasLib(); getEntryPoints(); return *this; } inline void RasApi::loadRasLib(void) { freeRasLib(); mhRasLib=::LoadLibrary("RASAPI32"); if(!mhRasLib)return; } inline void RasApi::freeRasLib(void) { if(!mhRasLib)return; ::FreeLibrary(mhRasLib); mhRasLib=0; } inline void RasApi::getEntryPoints(void) { if(!mhRasLib)return; mlpfnRasDial=(LPFNRASDIAL)::GetProcAddress(mhRasLib,"RasDialA"); mlpfnRasEnumConnections=(LPFNRASENUMCONNECTIONS)::GetProcAddress(mhRasLib,"RasEnumConnectionsA"); mlpfnRasEnumEntries=(LPFNRASENUMENTRIES)::GetProcAddress(mhRasLib,"RasEnumEntriesA"); mlpfnRasGetConnectStatus=(LPFNRASGETCONNECTSTATUS)::GetProcAddress(mhRasLib,"RasGetConnectStatusA"); mlpfnRasGetErrorString=(LPFNRASGETERRORSTRING)::GetProcAddress(mhRasLib,"RasGetErrorStringA"); mlpfnRasHangup=(LPFNRASHANGUP)::GetProcAddress(mhRasLib,"RasHangUpA"); mlpfnRasGetProjectionInfo=(LPFNRASGETPROJECTIONINFO)::GetProcAddress(mhRasLib,"RasGetProjectionInfoA"); mlpfnRasCreatePhonebookEntry=(LPFNRASCREATEPHONEBOOKENTRY)::GetProcAddress(mhRasLib,"RasCreatePhonebookEntryA"); mlpfnRasEditPhonebookEntry=(LPFNRASEDITPHONEBOOKENTRY)::GetProcAddress(mhRasLib,"RasEditPhonebookEntryA"); mlpfnRasSetEntryDialParams=(LPFNRASSETENTRYDIALPARAMS)::GetProcAddress(mhRasLib,"RasSetEntryDialParamsA"); mlpfnRasGetEntryDialParams=(LPFNRASGETENTRYDIALPARAMS)::GetProcAddress(mhRasLib,"RasGetEntryDialParamsA"); } inline DWORD RasApi::rasDial(LPRASDIALEXTENSIONS lpRasDialExtensions,LPTSTR lpszPhonebook,LPRASDIALPARAMS lpRasDialParams,DWORD dwNotifierType,LPVOID lpvNotifier,LPHRASCONN lphRasConn) { if(!mlpfnRasDial)return ERROR_NOT_ENOUGH_MEMORY; return mlpfnRasDial(lpRasDialExtensions,lpszPhonebook,lpRasDialParams,dwNotifierType,lpvNotifier,lphRasConn); } inline DWORD RasApi::rasEnumConnections(LPRASCONN lprasconn,LPDWORD lpcb,LPDWORD lpcConnections) { if(!mlpfnRasEnumConnections)return ERROR_NOT_ENOUGH_MEMORY; return mlpfnRasEnumConnections(lprasconn,lpcb,lpcConnections); } inline DWORD RasApi::rasEnumEntries(LPTSTR reserved,LPTSTR lpszPhonebook,LPRASENTRYNAME lprasentryname,LPDWORD lpcb,LPDWORD lpcEntries) { if(!mlpfnRasEnumEntries)return ERROR_NOT_ENOUGH_MEMORY; return mlpfnRasEnumEntries(reserved,lpszPhonebook,lprasentryname,lpcb,lpcEntries); } inline DWORD RasApi::rasGetConnectStatus(HRASCONN hrasconn,LPRASCONNSTATUS lprasconnstatus) { if(!mlpfnRasGetConnectStatus)return ERROR_NOT_ENOUGH_MEMORY; return mlpfnRasGetConnectStatus(hrasconn,lprasconnstatus); } inline DWORD RasApi::rasGetErrorString(UINT uErrorValue,LPTSTR lpszErrorString,DWORD cBufSize) { if(!mlpfnRasGetErrorString)return ERROR_NOT_ENOUGH_MEMORY; return mlpfnRasGetErrorString(uErrorValue,lpszErrorString,cBufSize); } inline DWORD RasApi::rasHangUp(HRASCONN hrasconn) { if(!mlpfnRasHangup)return ERROR_NOT_ENOUGH_MEMORY; return mlpfnRasHangup(hrasconn); } inline DWORD RasApi::rasGetProjectionInfo(HRASCONN hrasconn,RASPROJECTION rasprojection,LPVOID lpprojection,LPDWORD lpcb) { if(!mlpfnRasGetProjectionInfo)return ERROR_NOT_ENOUGH_MEMORY; return mlpfnRasGetProjectionInfo(hrasconn,rasprojection,lpprojection,lpcb); } inline DWORD RasApi::rasCreatePhonebookEntry(HWND hwnd,LPSTR lpszPhonebook) { if(!mlpfnRasCreatePhonebookEntry)return ERROR_NOT_ENOUGH_MEMORY; return mlpfnRasCreatePhonebookEntry(hwnd,lpszPhonebook); } inline DWORD RasApi::rasEditPhonebookEntry(HWND hwnd,LPSTR lpszPhonebook,LPSTR lpszEntryName) { if(!mlpfnRasEditPhonebookEntry)return ERROR_NOT_ENOUGH_MEMORY; return mlpfnRasEditPhonebookEntry(hwnd,lpszPhonebook,lpszEntryName); } inline DWORD RasApi::rasSetEntryDialParams(LPSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,BOOL fRemovePassword) { if(!mlpfnRasSetEntryDialParams)return ERROR_NOT_ENOUGH_MEMORY; return mlpfnRasSetEntryDialParams(lpszPhonebook,lprasdialparams,fRemovePassword); } inline DWORD RasApi::rasGetEntryDialParams(LPTSTR lpszPhonebook,LPRASDIALPARAMS lprasdialparams,LPBOOL lpfPassword) { if(!mlpfnRasGetEntryDialParams)return ERROR_NOT_ENOUGH_MEMORY; return mlpfnRasGetEntryDialParams(lpszPhonebook,lprasdialparams,lpfPassword); } inline WORD RasApi::isOkay(void)const { return (mhRasLib?TRUE:FALSE); } #endif