228 lines
4.8 KiB
C++
228 lines
4.8 KiB
C++
|
// File : ATK_INET.CPP
|
||
|
// Author : Suresh Krishnan
|
||
|
// Date : 08/05/97
|
||
|
// Wrapper for INetCFG.DLL exported functions
|
||
|
// related function declarations
|
||
|
//
|
||
|
//
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <tchar.h>
|
||
|
#include <winnt.h>
|
||
|
#include <wininet.h>
|
||
|
#include <stdio.h>
|
||
|
#include "rw_common.h"
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
typedef HRESULT (WINAPI *INETGETPROXY)(LPBOOL lpfEnable, LPSTR lpszServer, DWORD cbServer, LPSTR lpszOverride, DWORD cbOverride);
|
||
|
typedef HRESULT (WINAPI *INETCONFIGSYSTEM) ( HWND hWndParent, DWORD dwfOptions, LPBOOL lpfNeedsRestart);
|
||
|
typedef HRESULT (WINAPI *INETGETAUTODIAL) (LPBOOL lpEnable, LPSTR lpszEntryName, DWORD cbEntryName);
|
||
|
typedef HRESULT (WINAPI *INETSETAUTODIAL) (BOOL fEnable, LPCSTR lpszEntryName);
|
||
|
|
||
|
#define ERROR_IN_SET -1
|
||
|
#define INET_DLL_FAILURE -1
|
||
|
|
||
|
static HINSTANCE hINetCfg= NULL;
|
||
|
static INETGETPROXY fpGetProxy=NULL;
|
||
|
static INETCONFIGSYSTEM fpGetConfigSystem=NULL;
|
||
|
static INETGETAUTODIAL fpGetAutoDial=NULL;
|
||
|
static INETSETAUTODIAL fpSetAutoDial=NULL;
|
||
|
static INETCONFIGSYSTEM fpInetConfig =NULL;
|
||
|
|
||
|
typedef struct {
|
||
|
char szActiveConnection[256];
|
||
|
BOOL fStatus;
|
||
|
enum ISPStateFlag {NotValidState,ValidState } iState ;
|
||
|
} ISPState;
|
||
|
|
||
|
static ISPState gIspState = { "",
|
||
|
0,
|
||
|
ISPState::NotValidState};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
int INetCfgSetup()
|
||
|
{
|
||
|
if(hINetCfg) {
|
||
|
return 1;
|
||
|
}
|
||
|
hINetCfg = LoadLibrary( _T("INETCFG.DLL") ); // Load INetCfg.DLL and store globally
|
||
|
if( !hINetCfg )
|
||
|
{
|
||
|
// return if the DLL can not loaded
|
||
|
//
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
fpGetProxy = (INETGETPROXY) GetProcAddress(hINetCfg,"InetGetProxy");
|
||
|
fpGetAutoDial = ( INETGETAUTODIAL) GetProcAddress(hINetCfg, "InetGetAutodial");
|
||
|
fpSetAutoDial = ( INETSETAUTODIAL) GetProcAddress(hINetCfg, "InetSetAutodial");
|
||
|
fpInetConfig = (INETCONFIGSYSTEM) GetProcAddress(hINetCfg, "InetConfigSystem");
|
||
|
return 1;
|
||
|
|
||
|
}
|
||
|
|
||
|
HRESULT ATK_InetGetAutoDial(LPBOOL lpEnable, LPSTR lpszEntryName, DWORD cbEntryName)
|
||
|
{
|
||
|
if(INetCfgSetup()) {
|
||
|
return (*fpGetAutoDial)(lpEnable, lpszEntryName, cbEntryName);
|
||
|
}else {
|
||
|
return INET_DLL_FAILURE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
HRESULT ATK_InetSetAutoDial(BOOL fEnable, LPCSTR lpszEntryName)
|
||
|
{
|
||
|
if(INetCfgSetup()) {
|
||
|
return (*fpSetAutoDial)(fEnable, lpszEntryName);
|
||
|
}else{
|
||
|
return INET_DLL_FAILURE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
HRESULT ATK_InetConfigSystem( HWND hwndParent,
|
||
|
DWORD dwfOptions,
|
||
|
LPBOOL lpfNeedsRestart)
|
||
|
{
|
||
|
if(INetCfgSetup()) {
|
||
|
return (*fpInetConfig)( hwndParent,dwfOptions,
|
||
|
lpfNeedsRestart);
|
||
|
}else{
|
||
|
return INET_DLL_FAILURE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
HRESULT ATK_InetGetProxy( LPBOOL lpfEnable,
|
||
|
LPSTR lpszServer,
|
||
|
DWORD cbServer,
|
||
|
LPSTR lpszOverride,
|
||
|
DWORD cbOverride)
|
||
|
{
|
||
|
if(INetCfgSetup()) {
|
||
|
return (*fpGetProxy)( lpfEnable,
|
||
|
lpszServer,
|
||
|
cbServer,
|
||
|
lpszOverride,
|
||
|
cbOverride);
|
||
|
}else{
|
||
|
return INET_DLL_FAILURE;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void GetAutoDialConfiguration()
|
||
|
{
|
||
|
|
||
|
DWORD dwError;
|
||
|
DWORD dwSz=256;
|
||
|
HRESULT hr;
|
||
|
ISPState *pS= &gIspState;
|
||
|
hr = ATK_InetGetAutoDial(&pS->fStatus,
|
||
|
pS->szActiveConnection,
|
||
|
dwSz);
|
||
|
if(hr) {
|
||
|
dwError = GetLastError();
|
||
|
|
||
|
RW_DEBUG << "\nGet AutoDial :***Error " <<hr << ":"<< dwError << flush;
|
||
|
pS->iState = ISPState::NotValidState;
|
||
|
}else {
|
||
|
pS->iState = ISPState::ValidState;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
DWORD SetAutoDialStateThread(void *vp)
|
||
|
{
|
||
|
ISPState *pState;
|
||
|
pState = (ISPState *) vp;
|
||
|
ATK_InetSetAutoDial(pState->fStatus,
|
||
|
pState->szActiveConnection);
|
||
|
RW_DEBUG <<"\nSet Auto Dial Configuration" << pState->szActiveConnection << " =>" << pState->fStatus << flush;
|
||
|
ExitThread(0);
|
||
|
return 0;
|
||
|
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// This function calls the ICW function InetSetAutoDial()
|
||
|
// this function waits for the above function to be over by 10 seconds
|
||
|
// if it does not complete then it calls terminate thread and abondens the operation
|
||
|
int ChangeInterNetAutoDial(ISPState *pStatus )
|
||
|
{
|
||
|
int iReturn;
|
||
|
DWORD dwTimeOut = 10*1000;
|
||
|
DWORD dwCreationFlags=0; // Start without CREATE_SUSPENDED
|
||
|
DWORD ThreadId;
|
||
|
|
||
|
iReturn = NO_ERROR;
|
||
|
|
||
|
HANDLE hParent = CreateThread(NULL,
|
||
|
0,
|
||
|
(LPTHREAD_START_ROUTINE) SetAutoDialStateThread,
|
||
|
(void *) pStatus,
|
||
|
dwCreationFlags,
|
||
|
&ThreadId );
|
||
|
iReturn = NO_ERROR;
|
||
|
|
||
|
DWORD dwRet = WaitForSingleObject(hParent,
|
||
|
dwTimeOut);
|
||
|
switch(dwRet) {
|
||
|
case WAIT_ABANDONED :
|
||
|
break;
|
||
|
case WAIT_OBJECT_0 :
|
||
|
CloseHandle(hParent);
|
||
|
break;
|
||
|
case WAIT_TIMEOUT :
|
||
|
//TerminateThread(hParent,0);
|
||
|
iReturn = ERROR_IN_SET;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
return iReturn;
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
int ResetAutoDialConfiguration()
|
||
|
{
|
||
|
int iRet;
|
||
|
iRet = NO_ERROR;
|
||
|
if(gIspState.iState == ISPState::NotValidState ){
|
||
|
//
|
||
|
// Not alid So No need to Reset
|
||
|
return iRet;
|
||
|
}
|
||
|
return ChangeInterNetAutoDial(&gIspState);
|
||
|
}
|
||
|
|
||
|
int DisableAutoDial()
|
||
|
{
|
||
|
ISPState IspState = { "",
|
||
|
0,
|
||
|
ISPState::NotValidState};
|
||
|
|
||
|
return ChangeInterNetAutoDial(&IspState);
|
||
|
}
|
||
|
|
||
|
void UnLoadInetCfgLib()
|
||
|
{
|
||
|
if(hINetCfg){
|
||
|
FreeLibrary(hINetCfg); // Load INetCfg.DLL and store globally
|
||
|
hINetCfg = NULL;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|