Files
Work/rasapi/RASAPI.HPP
2024-08-07 09:16:27 -04:00

208 lines
7.5 KiB
C++

#ifndef _RASAPI_RASAPI_HPP_
#define _RASAPI_RASAPI_HPP_
#ifndef _COMMON_WINDOWS_HPP_
#include <common/windows.hpp>
#endif
#ifndef _COMMON_RAS_HPP_
#include <common/ras.hpp>
#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