836 lines
20 KiB
C++
836 lines
20 KiB
C++
|
/*
|
||
|
|
||
|
File : Phone.CPP
|
||
|
*/
|
||
|
|
||
|
#include <windows.h>
|
||
|
#include <windowsx.h>
|
||
|
#include <stdio.h>
|
||
|
#include <tchar.h>
|
||
|
#include <ATK_RAS.H>
|
||
|
|
||
|
#include "cntryinf.h"
|
||
|
#include "resource.h"
|
||
|
#include "phonebk.h"
|
||
|
#include "util.h"
|
||
|
#include "rw_common.h"
|
||
|
|
||
|
|
||
|
#define TYPE_SIGNUP_ANY 0x82
|
||
|
#define MASK_SIGNUP_ANY 0xB2
|
||
|
|
||
|
#define TYPE_REGULAR_USAGE 0x42
|
||
|
#define MASK_REGULAR_USAGE 0x73
|
||
|
|
||
|
|
||
|
#define MAX_BUFFER 1024 * 5
|
||
|
#define RAS_ENTRY_NAME _T("REGWIZ")
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// This function expands and substitutes Environment variable
|
||
|
// in input string
|
||
|
//
|
||
|
//
|
||
|
static void GetAbsolutePath( LPTSTR input,LPTSTR output)
|
||
|
{
|
||
|
if(_tcschr(input,_T('%')) == NULL) {
|
||
|
_tcscpy(output, input);
|
||
|
return ;
|
||
|
}
|
||
|
|
||
|
if(input[0] == _T('%'))
|
||
|
{
|
||
|
LPTSTR token = _tcstok(input,_T("%"));
|
||
|
if(token != NULL)
|
||
|
{
|
||
|
LPTSTR sztemp;
|
||
|
sztemp = _tgetenv( token );
|
||
|
if(sztemp != NULL)
|
||
|
{
|
||
|
_tcscpy(output ,sztemp);
|
||
|
}
|
||
|
token = _tcstok(NULL,_T("\0"));
|
||
|
if(token != NULL)
|
||
|
{
|
||
|
_tcscat(output ,token);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
LPTSTR token = _tcstok(input,_T("%"));
|
||
|
if(token != NULL)
|
||
|
{
|
||
|
_tcscpy(output ,token);
|
||
|
token = _tcstok(NULL,_T("%"));
|
||
|
if(token != NULL)
|
||
|
{
|
||
|
LPTSTR sztemp;
|
||
|
sztemp = _tgetenv( token );
|
||
|
if(sztemp != NULL)
|
||
|
{
|
||
|
_tcscat(output ,sztemp);
|
||
|
}
|
||
|
token = _tcstok(NULL,_T("\0"));
|
||
|
if(token != NULL)
|
||
|
{
|
||
|
_tcscat(output ,token);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
GetAbsolutePath(output,output);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#define MAX_ALTERNATES 5
|
||
|
#define MAX_DUN_ENTRYNAME 256
|
||
|
class DUNFileProcess {
|
||
|
public :
|
||
|
DUNFileProcess(HINSTANCE hIns, TCHAR *czFile);
|
||
|
//~DUNFileProcess();
|
||
|
DWORD CreateRasEntry( RASENTRY *pRasEntry, // Pointer of the RASENTRY structre to be created
|
||
|
LPTSTR szUserName, // User name of the ISP
|
||
|
LPTSTR szPassword); // Password for the ISP
|
||
|
|
||
|
HINSTANCE m_hInstance;
|
||
|
TCHAR m_szDUNFile[MAX_PATH];
|
||
|
TCHAR m_szDunEntry[MAX_ALTERNATES][MAX_DUN_ENTRYNAME];
|
||
|
TCHAR * GetDunFileRoot();
|
||
|
TCHAR * GetFromResource(int iResId);
|
||
|
|
||
|
};
|
||
|
|
||
|
DUNFileProcess :: DUNFileProcess (HINSTANCE hIns, TCHAR *czFileName)
|
||
|
{
|
||
|
m_hInstance = hIns;
|
||
|
_tcscpy(m_szDUNFile,GetDunFileRoot());
|
||
|
_tcscat(m_szDUNFile, _T("\\"));
|
||
|
_tcscat(m_szDUNFile,czFileName);
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// This gets the directory from where the ICWIP.DUN can be found
|
||
|
// The default is the C:\Progra~1\ICW-IN~1\\
|
||
|
//
|
||
|
TCHAR * DUNFileProcess :: GetDunFileRoot()
|
||
|
{
|
||
|
HKEY hKey;
|
||
|
LONG regStatus;
|
||
|
TCHAR czTemp[256];
|
||
|
//TCHAR uszRegKey[]="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\ICWCONN1.EXE";
|
||
|
//TCHAR uszR[ ]= "Path";
|
||
|
DWORD dwInfoSize;
|
||
|
static TCHAR szDunRoot[256] = _T("c:\\Progra~1\\ICW-IN~1\\");
|
||
|
|
||
|
dwInfoSize = 256;
|
||
|
regStatus = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
|
||
|
GetFromResource(IDS_ICW_DIRECTORY_ENTRY),
|
||
|
0,KEY_READ ,&hKey);
|
||
|
if (regStatus == ERROR_SUCCESS) {
|
||
|
// Get The Path
|
||
|
dwInfoSize = MAX_PATH;
|
||
|
RegQueryValueEx(hKey,
|
||
|
GetFromResource(IDS_ICW_DIRECTORY_ENTRY_VALUE),
|
||
|
NULL,0,
|
||
|
(LPBYTE) czTemp,
|
||
|
&dwInfoSize);
|
||
|
GetAbsolutePath(czTemp,szDunRoot);
|
||
|
size_t sLen = _tcslen(szDunRoot);
|
||
|
szDunRoot[sLen-1] = _T('\0');
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
;
|
||
|
}
|
||
|
return szDunRoot;
|
||
|
|
||
|
}
|
||
|
|
||
|
TCHAR * DUNFileProcess ::GetFromResource(int iResId)
|
||
|
{
|
||
|
|
||
|
|
||
|
static int iCount=0;
|
||
|
if(iCount == MAX_ALTERNATES ) {
|
||
|
iCount = 0;
|
||
|
}
|
||
|
LoadString(m_hInstance,iResId,m_szDunEntry[iCount],
|
||
|
MAX_DUN_ENTRYNAME);
|
||
|
|
||
|
return m_szDunEntry[iCount++];
|
||
|
}
|
||
|
|
||
|
void FillIpAddress1(_TCHAR *czStr, RASIPADDR * pRE )
|
||
|
{
|
||
|
|
||
|
_TCHAR czTemp[4];
|
||
|
int iCount=0;
|
||
|
int iIndex=0;
|
||
|
int Location =0;
|
||
|
for(int Addr=0; Addr< 4; Addr++) {
|
||
|
iCount = 0;
|
||
|
for( ;czStr[iIndex] !=_T('.') && iCount <3; )
|
||
|
{
|
||
|
czTemp[iCount] = czStr[iIndex];
|
||
|
iCount += _tcslen( czTemp + iCount );
|
||
|
iIndex += _tcslen( czStr + iIndex );
|
||
|
|
||
|
}
|
||
|
iIndex += _tcslen( czStr + iIndex );
|
||
|
czTemp[iCount] = _T('\0');
|
||
|
|
||
|
switch(Addr) {
|
||
|
case 0:
|
||
|
pRE->a = (BYTE) _ttoi(czTemp);
|
||
|
break;
|
||
|
case 1:
|
||
|
pRE->b = (BYTE) _ttoi(czTemp);
|
||
|
break;
|
||
|
case 2:
|
||
|
pRE->c = (BYTE) _ttoi(czTemp);
|
||
|
break;
|
||
|
case 3:
|
||
|
pRE->d = (BYTE) _ttoi(czTemp);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
void FillIpAddress(_TCHAR *czStr, RASIPADDR * pRE )
|
||
|
{
|
||
|
_TCHAR czTemp[4];
|
||
|
int iCount=0;
|
||
|
int iIndex=0;
|
||
|
int Location =0;
|
||
|
for(int Addr=0; Addr< 4; Addr++) {
|
||
|
iCount = 0;
|
||
|
for( ;czStr[iIndex] != _T('.') && iCount <3; ) {
|
||
|
czTemp[iCount++] =
|
||
|
czStr[iIndex];
|
||
|
iIndex++;
|
||
|
|
||
|
}
|
||
|
iIndex++;
|
||
|
czTemp[iCount] = _T('\0');
|
||
|
switch(Addr) {
|
||
|
case 0:
|
||
|
pRE->a = (BYTE) _ttoi(czTemp);
|
||
|
break;
|
||
|
case 1:
|
||
|
pRE->b = (BYTE) _ttoi(czTemp);
|
||
|
break;
|
||
|
case 2:
|
||
|
pRE->c = (BYTE) _ttoi(czTemp);
|
||
|
break;
|
||
|
case 3:
|
||
|
pRE->d = (BYTE) _ttoi(czTemp);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Returns 1 if successful
|
||
|
// 0 failure
|
||
|
//
|
||
|
DWORD DUNFileProcess :: CreateRasEntry(
|
||
|
RASENTRY *pRasEntry,
|
||
|
LPTSTR szUserName,
|
||
|
LPTSTR szPassword)
|
||
|
{
|
||
|
TCHAR szSection[MAX_PATH];
|
||
|
TCHAR szValue[MAX_PATH];
|
||
|
TCHAR szScript[MAX_PATH];
|
||
|
TCHAR szWinPath[MAX_PATH];
|
||
|
DWORD dwRead;
|
||
|
|
||
|
BOOL bRet= FALSE;
|
||
|
|
||
|
pRasEntry->dwSize = sizeof(RASENTRY);
|
||
|
|
||
|
pRasEntry->dwfOptions = RASEO_UseCountryAndAreaCodes |
|
||
|
RASEO_ModemLights;
|
||
|
|
||
|
|
||
|
|
||
|
// Framing
|
||
|
//
|
||
|
pRasEntry->dwFrameSize = 0;
|
||
|
_tcscpy(pRasEntry->szScript, _T(""));
|
||
|
|
||
|
// Auto-Dial
|
||
|
//
|
||
|
_tcscpy(pRasEntry->szAutodialDll, _T(""));
|
||
|
_tcscpy(pRasEntry->szAutodialFunc, _T(""));
|
||
|
|
||
|
// Device
|
||
|
//
|
||
|
_tcscpy(pRasEntry->szDeviceType, RASDT_Modem);
|
||
|
// _tcscpy(pRasEntry->szDeviceName, GetModemDeviceInformation(m_hInstance));
|
||
|
// The Modem entry will be created before creating the Phone book entry
|
||
|
|
||
|
// X.25
|
||
|
//
|
||
|
_tcscpy(pRasEntry->szX25PadType, _T(""));
|
||
|
_tcscpy(pRasEntry->szX25Address, _T(""));
|
||
|
_tcscpy(pRasEntry->szX25Facilities, _T(""));
|
||
|
_tcscpy(pRasEntry->szX25UserData, _T(""));
|
||
|
pRasEntry->dwChannels = 0;
|
||
|
|
||
|
// Phone
|
||
|
//
|
||
|
_tcscpy(szSection,GetFromResource(IDS_DUN_PHONE_SECTION));
|
||
|
|
||
|
// Area Code
|
||
|
DWORD dwAreaCode = GetPrivateProfileInt (szSection,
|
||
|
GetFromResource(IDS_DUN_PHONE_AREACODE),
|
||
|
0,
|
||
|
m_szDUNFile);
|
||
|
_tprintf(pRasEntry->szAreaCode, "%d", dwAreaCode);
|
||
|
|
||
|
// Country Code
|
||
|
pRasEntry->dwCountryCode = GetPrivateProfileInt (szSection,
|
||
|
GetFromResource(IDS_DUN_PHONE_COUNTRY),
|
||
|
1, m_szDUNFile);
|
||
|
RW_DEBUG <<"\n Country Code " << pRasEntry->dwCountryCode;
|
||
|
pRasEntry->dwCountryID = GetPrivateProfileInt (szSection, _T("Country_ID"), 1, m_szDUNFile);
|
||
|
|
||
|
RW_DEBUG <<"\n Country ID " << pRasEntry->dwCountryID;
|
||
|
//
|
||
|
GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_PHONE_DIALAS),
|
||
|
GetFromResource(IDS_DUN_VALUE_YES),
|
||
|
szValue, sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
pRasEntry->dwAlternateOffset=0;
|
||
|
|
||
|
// TODO : Set Phone No from Phone Book
|
||
|
_tcscpy(pRasEntry->szLocalPhoneNumber,_T(""));
|
||
|
|
||
|
// Server
|
||
|
//
|
||
|
|
||
|
// Framing Protocol
|
||
|
_tcscpy(szSection,GetFromResource(IDS_DUN_SERVER_SECTION));
|
||
|
GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_SERVER_TYPE),
|
||
|
GetFromResource(IDS_DUN_SERVER_TYPE_PPP), // PPP
|
||
|
szValue, sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
|
||
|
if(!_tcsicmp(szValue,GetFromResource(IDS_DUN_SERVER_TYPE_PPP))) {
|
||
|
pRasEntry->dwFramingProtocol = RASFP_Ppp;
|
||
|
}
|
||
|
|
||
|
|
||
|
// SW Compression
|
||
|
GetPrivateProfileString (szSection,GetFromResource(IDS_DUN_SERVER_SW_COMPRESS),
|
||
|
GetFromResource(IDS_DUN_VALUE_YES),
|
||
|
szValue, sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
|
||
|
if(!_tcsicmp(szValue,GetFromResource(IDS_DUN_VALUE_YES))) {
|
||
|
pRasEntry->dwfOptions |=RASEO_SwCompression;
|
||
|
}
|
||
|
|
||
|
// Negociate TCP
|
||
|
GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_SERVER_TCPIP),
|
||
|
GetFromResource(IDS_DUN_VALUE_YES),
|
||
|
szValue, sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
|
||
|
if(!_tcsicmp(szValue,GetFromResource(IDS_DUN_VALUE_YES))) {
|
||
|
pRasEntry->dwfNetProtocols = RASNP_Ip;
|
||
|
}
|
||
|
|
||
|
// Disable LCP
|
||
|
|
||
|
GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_SERVER_LCP),
|
||
|
GetFromResource(IDS_DUN_VALUE_YES),
|
||
|
szValue, sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
if(!_tcsicmp(szValue,GetFromResource(IDS_DUN_VALUE_YES))) {
|
||
|
pRasEntry->dwfOptions |=RASEO_DisableLcpExtensions;
|
||
|
}
|
||
|
|
||
|
|
||
|
// TCP/IP
|
||
|
_tcscpy(szSection, GetFromResource(IDS_DUN_TCP_SECTION));
|
||
|
GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_TCP_IPADDRESS),
|
||
|
GetFromResource(IDS_DUN_VALUE_NO),
|
||
|
szValue, sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
|
||
|
if(!_tcsicmp(szValue,GetFromResource(IDS_DUN_VALUE_YES))) {
|
||
|
pRasEntry->dwfOptions |=RASEO_SpecificIpAddr;
|
||
|
}
|
||
|
|
||
|
GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_TCP_SERVERADDRESS),
|
||
|
GetFromResource(IDS_DUN_VALUE_NO),
|
||
|
szValue, sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
if(!_tcsicmp(szValue,GetFromResource(IDS_DUN_VALUE_YES))) {
|
||
|
pRasEntry->dwfOptions |=RASEO_SpecificNameServers;
|
||
|
}
|
||
|
|
||
|
GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_TCP_HEADERCOMPRESSION),
|
||
|
GetFromResource(IDS_DUN_VALUE_NO),
|
||
|
szValue, sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
if(!_tcsicmp(szValue,GetFromResource(IDS_DUN_VALUE_YES))) {
|
||
|
pRasEntry->dwfOptions |=RASEO_IpHeaderCompression;
|
||
|
}
|
||
|
|
||
|
GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_TCP_GATEWAY),
|
||
|
GetFromResource(IDS_DUN_VALUE_NO),
|
||
|
szValue, sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
if(!_tcsicmp(szValue,GetFromResource(IDS_DUN_VALUE_YES))) {
|
||
|
pRasEntry->dwfOptions |=RASEO_RemoteDefaultGateway;
|
||
|
}
|
||
|
|
||
|
GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_TCP_SERVERADDRESS),
|
||
|
GetFromResource(IDS_DUN_VALUE_NO),
|
||
|
szValue, sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
if(!_tcsicmp(szValue,GetFromResource(IDS_DUN_VALUE_YES))) {
|
||
|
|
||
|
dwRead = GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_TCP_DNS),
|
||
|
_T("0"), szValue,
|
||
|
sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
if( dwRead >2) {
|
||
|
FillIpAddress(szValue,&pRasEntry->ipaddrDns);
|
||
|
}
|
||
|
//
|
||
|
// Get The Secondary Address
|
||
|
dwRead = GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_TCP_DNS_ALT),
|
||
|
_T("0"), szValue,
|
||
|
sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
if(dwRead > 2) {
|
||
|
FillIpAddress(szValue,&pRasEntry->ipaddrDnsAlt);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// User Section
|
||
|
_tcscpy(szSection,
|
||
|
GetFromResource(IDS_DUN_USER_SECTION));
|
||
|
GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_USER_NAME),
|
||
|
_T(""), szUserName, MAX_PATH, m_szDUNFile);
|
||
|
GetPrivateProfileString (szSection,
|
||
|
GetFromResource(IDS_DUN_USER_PASSWORD),
|
||
|
_T(""), szPassword, MAX_PATH, m_szDUNFile);
|
||
|
|
||
|
|
||
|
|
||
|
// Scripting
|
||
|
_tcscpy(szSection, _T("Scripting"));
|
||
|
GetPrivateProfileString (szSection, _T("Name"), _T(""), szScript, MAX_PATH, m_szDUNFile);
|
||
|
|
||
|
|
||
|
if ( lstrcmpi(szScript, _T("") ) != 0 ) {
|
||
|
if (!GetWindowsDirectory(szWinPath, MAX_PATH) )
|
||
|
{
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n CreateRasEntry : Error 1- Fail to Get Windows Directory" << flush;
|
||
|
#endif
|
||
|
return TRUE;
|
||
|
}
|
||
|
//APPCOMPAT:Needs specail procesing for win9x
|
||
|
if ( _T('\\') != szWinPath[_tcslen(szWinPath)-1])
|
||
|
{
|
||
|
lstrcat(szWinPath,_T("\\"));
|
||
|
}
|
||
|
lstrcat(szWinPath,szScript);
|
||
|
lstrcpy(szScript,szWinPath);
|
||
|
if (_tcslen(szScript) >=MAX_PATH)
|
||
|
{
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n CreateRasEntry : Error 1- Script File Path too long" << flush;
|
||
|
#endif
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
lstrcpy(pRasEntry->szScript,szScript);
|
||
|
|
||
|
// Script_File
|
||
|
TCHAR szScriptBuffer[MAX_BUFFER];
|
||
|
_tcscpy(szSection, _T("Script_File"));
|
||
|
GetPrivateProfileString (szSection, NULL, _T(""), szScriptBuffer, MAX_BUFFER, m_szDUNFile);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// Create the .SCP File and Dump the script data
|
||
|
PTSTR pKey=szScriptBuffer;
|
||
|
HANDLE fileHandle = CreateFile(pRasEntry->szScript, GENERIC_WRITE,0, 0, CREATE_ALWAYS, 0, 0);
|
||
|
if (fileHandle == INVALID_HANDLE_VALUE)
|
||
|
{
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n Load DUN Strings : Error 1- Fail to create Script File " << flush;
|
||
|
#endif
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
BOOL bWrite = TRUE;
|
||
|
DWORD numWrite;
|
||
|
while (*pKey && bWrite)
|
||
|
{
|
||
|
|
||
|
GetPrivateProfileString (szSection, pKey , _T(""), szValue, sizeof(szValue)/sizeof(TCHAR), m_szDUNFile);
|
||
|
_tcscat(szValue, _T("\x0d\x0a"));
|
||
|
#ifdef _UNICODE
|
||
|
char *czP;
|
||
|
czP = ConvertToANSIString(szValue);
|
||
|
bWrite = WriteFile(fileHandle, czP, strlen(czP)*sizeof(char), &numWrite, 0);
|
||
|
#else
|
||
|
bWrite = WriteFile(fileHandle, szValue, _tcslen(szValue)*sizeof(_TCHAR), &numWrite, 0);
|
||
|
#endif
|
||
|
while (*pKey)
|
||
|
{
|
||
|
pKey = _tcsinc(pKey);
|
||
|
}
|
||
|
pKey = _tcsinc(pKey);
|
||
|
}
|
||
|
CloseHandle(fileHandle);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
int GetDeaultCfgAreaCode(HINSTANCE hInstance, DWORD *CountryCode, DWORD *AreaCode)
|
||
|
{
|
||
|
HKEY hKey;
|
||
|
TCHAR szTel[256] = _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Telephony\\Locations");
|
||
|
TCHAR szCI [48] = _T("CurrentID");
|
||
|
TCHAR szNE [48] = _T("NumEntries");
|
||
|
TCHAR szID [48] = _T("ID");
|
||
|
TCHAR szCountryReg[48] = _T("Country");
|
||
|
_TCHAR szAreaCodeReg[48];
|
||
|
_TCHAR czLastStr[48];
|
||
|
_TCHAR czNewKey[256];
|
||
|
_TCHAR szAreaCode[48];
|
||
|
DWORD dwCurrentId;
|
||
|
DWORD dwNumEntries;
|
||
|
DWORD dwId;
|
||
|
|
||
|
LONG lStatus;
|
||
|
DWORD dwInfoSize = 48;
|
||
|
DWORD dwAreaCode = 0;
|
||
|
int iRetValue;
|
||
|
iRetValue =0;
|
||
|
*CountryCode=1; // Default USA
|
||
|
*AreaCode = 1; // Default Area Code
|
||
|
|
||
|
LoadString(hInstance,IDS_TELEPHONE_LOC,szTel,256);
|
||
|
LoadString(hInstance,IDS_TELEPHONE_CID,szCI,48);
|
||
|
LoadString(hInstance,IDS_TELEPHONE_NENT,szNE,48);
|
||
|
LoadString(hInstance,IDS_TELEPHONE_ID,szID,48);
|
||
|
LoadString(hInstance,IDS_TELEPHONE_COUNTRY,szCountryReg,48);
|
||
|
|
||
|
lStatus= RegOpenKeyEx(HKEY_LOCAL_MACHINE,szTel,0,KEY_READ,&hKey);
|
||
|
if (lStatus == ERROR_SUCCESS)
|
||
|
{
|
||
|
// Get Index
|
||
|
//
|
||
|
dwInfoSize = sizeof(dwCurrentId);
|
||
|
lStatus = RegQueryValueEx(hKey,szCI,NULL,0,( LPBYTE )&dwCurrentId,&dwInfoSize);
|
||
|
if( lStatus != ERROR_SUCCESS)
|
||
|
{
|
||
|
RegCloseKey(hKey);
|
||
|
return iRetValue;
|
||
|
}
|
||
|
//
|
||
|
/*dwInfoSize = sizeof(dwNumEntries);
|
||
|
lStatus = RegQueryValueEx(hKey,szNE,NULL,0,( LPBYTE )&dwNumEntries,&dwInfoSize);
|
||
|
if( lStatus != ERROR_SUCCESS)
|
||
|
{
|
||
|
RegCloseKey(hKey);
|
||
|
return iRetValue;
|
||
|
}*/
|
||
|
|
||
|
RegCloseKey(hKey);
|
||
|
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// Now Contine to scan
|
||
|
//for (int iCount =0; iCount < dwNumEntries; iCount ++ )
|
||
|
|
||
|
_stprintf(czLastStr,_T("\\Location%d"),dwCurrentId);
|
||
|
_tcscpy(czNewKey,szTel);
|
||
|
_tcscat(czNewKey,czLastStr);
|
||
|
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n RegKey Location:"<< czNewKey << flush;
|
||
|
#endif
|
||
|
|
||
|
lStatus= RegOpenKeyEx(HKEY_LOCAL_MACHINE,czNewKey,0,KEY_READ,&hKey);
|
||
|
|
||
|
if (lStatus == ERROR_SUCCESS)
|
||
|
{
|
||
|
dwInfoSize = sizeof(dwCurrentId);
|
||
|
/* lStatus = RegQueryValueEx(hKey,szID,NULL,0,( LPBYTE )&dwId,&dwInfoSize);
|
||
|
if( lStatus == ERROR_SUCCESS)
|
||
|
if(dwId == dwCurrentId)
|
||
|
dwInfoSize = sizeof(dwCurrentId);; */
|
||
|
lStatus = RegQueryValueEx(hKey,szCountryReg,NULL,0,( LPBYTE )CountryCode,&dwInfoSize);
|
||
|
|
||
|
LoadString(hInstance,IDS_TAPI_AREA_CODE,szAreaCodeReg,48);
|
||
|
dwInfoSize = 48;
|
||
|
lStatus = RegQueryValueEx(hKey,szAreaCodeReg,NULL,0,( LPBYTE )szAreaCode,&dwInfoSize);
|
||
|
if( lStatus == ERROR_SUCCESS)
|
||
|
{
|
||
|
*AreaCode = _ttol(szAreaCode);
|
||
|
}
|
||
|
|
||
|
RegCloseKey(hKey);
|
||
|
return dwAreaCode;
|
||
|
}
|
||
|
return iRetValue;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// returns 0 if Error
|
||
|
// 1 if Succesful
|
||
|
//
|
||
|
//
|
||
|
DWORD GetRASEntries(HINSTANCE hInstance,
|
||
|
RASENTRY *pRasEntry,
|
||
|
LPTSTR szUserName,
|
||
|
LPTSTR szPassword)
|
||
|
{
|
||
|
HKEY hKey;
|
||
|
DWORD_PTR dwPhoneID;
|
||
|
DWORD dwCountry;
|
||
|
DWORD dwCountryCode;
|
||
|
DWORD dwAreaCode = 0;
|
||
|
TCHAR szResEntry[256];
|
||
|
|
||
|
|
||
|
dwPhoneID = 0;
|
||
|
|
||
|
//LoadString(hInstance,IDS_PHONEBOOK_ENTRY,szResEntry,255);
|
||
|
//
|
||
|
// Presently this string is not passed as the Phone bokk is
|
||
|
// still not a UNICODE version CXG 6-0497
|
||
|
//
|
||
|
|
||
|
HRESULT hr = PhoneBookLoad("MSICW", &dwPhoneID);
|
||
|
if (!dwPhoneID)
|
||
|
{
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n Fn: GetRasEntries : Error-1 Unable to locate MSN.ISP " << flush;
|
||
|
#endif
|
||
|
return FALSE;
|
||
|
}
|
||
|
//if (!GetTapiCurrentCountry(m_hInst, &dwCountry)) { on6/4/97
|
||
|
if (!GetTapiCurrentCountry(hInstance, &dwCountry))
|
||
|
{
|
||
|
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n Fn: GetRasEntries : Error-2 Unable To Get Country Code " << flush;
|
||
|
#endif
|
||
|
return FALSE ;
|
||
|
}
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n Fn: GetRasEntries : Get Current Country " << dwCountry << flush;
|
||
|
#endif
|
||
|
|
||
|
GetDeaultCfgAreaCode(hInstance,&dwCountryCode,&dwAreaCode);
|
||
|
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n Fn: GetRasEntries : GetDeaultCfgAreaCode Country " << dwCountryCode << "Area " << dwAreaCode << flush;
|
||
|
RW_DEBUG << "\n Country ID: " << dwCountry << flush;
|
||
|
#endif
|
||
|
|
||
|
SUGGESTINFO SuggestInfo;
|
||
|
SuggestInfo.dwCountryID = dwCountry;
|
||
|
SuggestInfo.bMask = MASK_SIGNUP_ANY;
|
||
|
SuggestInfo.fType = TYPE_SIGNUP_ANY;
|
||
|
SuggestInfo.wAreaCode = dwAreaCode;
|
||
|
SuggestInfo.wNumber = 1;
|
||
|
|
||
|
int nIndex = PhoneBookSuggestNumbers(dwPhoneID, &SuggestInfo);
|
||
|
if (nIndex != 0)
|
||
|
{
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n Fn: GetRasEntries : Error-3 In Phone Suggest Number" << flush;
|
||
|
#endif
|
||
|
return FALSE;
|
||
|
}
|
||
|
PACCESSENTRY m_rgAccessEntry = *(SuggestInfo.rgpAccessEntry);
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n Fn: GetRasEntries : Phone Book Suggestions " << flush;
|
||
|
RW_DEBUG << "\n\t Index " << m_rgAccessEntry->dwIndex ;
|
||
|
RW_DEBUG << "\n\t Phone Number Type " << m_rgAccessEntry->fType;
|
||
|
RW_DEBUG << "\n\t StateId " << m_rgAccessEntry->wStateID;
|
||
|
RW_DEBUG << "\n\t CountryId " << m_rgAccessEntry->dwCountryID;
|
||
|
RW_DEBUG << "\n\t AreaCode " << m_rgAccessEntry->dwAreaCode ;
|
||
|
RW_DEBUG << "\n\t CityName " << m_rgAccessEntry-> szCity;
|
||
|
RW_DEBUG << "\n\t Access Number " << m_rgAccessEntry->szAccessNumber;
|
||
|
RW_DEBUG << "\n\t Actual Area Code " << m_rgAccessEntry->szAreaCode << flush;
|
||
|
#endif
|
||
|
|
||
|
//BOOL FillRASEntries(RASENTRY *pRasEntry);
|
||
|
|
||
|
DUNFileProcess dfp(hInstance,
|
||
|
ConvertToUnicode(m_rgAccessEntry->szDataCenter));
|
||
|
if(!dfp.CreateRasEntry(pRasEntry,szUserName,szPassword))
|
||
|
{
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n GetRas Entries -Error 4 : Processinfg DUN File " << flush;
|
||
|
#endif
|
||
|
return FALSE;
|
||
|
}
|
||
|
pRasEntry->dwCountryID = dwCountry;
|
||
|
GetCountryCodeUsingTapiId(dwCountryCode,&dwCountryCode) ;
|
||
|
pRasEntry->dwCountryCode =dwCountryCode;
|
||
|
|
||
|
_tcscpy(pRasEntry->szLocalPhoneNumber, ConvertToUnicode(m_rgAccessEntry->szAccessNumber));
|
||
|
_tcscpy(pRasEntry->szAreaCode,ConvertToUnicode(m_rgAccessEntry->szAreaCode));
|
||
|
|
||
|
RW_DEBUG << "\n Counntry ID " <<pRasEntry->dwCountryID << " Country Code " << pRasEntry->dwCountryCode << flush;
|
||
|
|
||
|
RW_DEBUG << "\n AreaCode: " << ConvertToANSIString(pRasEntry->szAreaCode);
|
||
|
RW_DEBUG << "Local No Real: " << m_rgAccessEntry->szAccessNumber << flush;
|
||
|
RW_DEBUG << "Local No: " << ConvertToANSIString(pRasEntry->szLocalPhoneNumber) << flush;
|
||
|
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
DWORD ConfigureDUN ( HWND hWnd, HINSTANCE hInstance,
|
||
|
RASENTRY *pRasEntry,
|
||
|
TCHAR *szUserName,
|
||
|
TCHAR *szPassword,
|
||
|
int iModemIndex)
|
||
|
{
|
||
|
|
||
|
DWORD dwEntrySize;
|
||
|
DWORD dwRet;
|
||
|
|
||
|
// Prepare RASENTRY for Dial-up
|
||
|
//
|
||
|
|
||
|
if(!GetRASEntries(hInstance,
|
||
|
pRasEntry,
|
||
|
szUserName,
|
||
|
szPassword) )
|
||
|
{
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n Fn : ConfigureDUN : Error3 Error Getting Ras Entries " << flush;
|
||
|
#endif
|
||
|
return FALSE;
|
||
|
}
|
||
|
_tcscpy(pRasEntry->szDeviceName, GetModemDeviceInformation(hInstance, iModemIndex));
|
||
|
|
||
|
#ifdef _WIN95
|
||
|
//
|
||
|
// remove Old entry
|
||
|
// Verify if name exists in Registry
|
||
|
// if so remove the name from Registry
|
||
|
//
|
||
|
//
|
||
|
//
|
||
|
HANDLE hRegKey ;
|
||
|
LONG regStatus;
|
||
|
DWORD dwInfoSize;
|
||
|
char szParam[512];
|
||
|
|
||
|
regStatus = RegOpenKeyEx(HKEY_CURRENT_USER,
|
||
|
"RemoteAccess\\Addresses",0,
|
||
|
KEY_READ,&hRegKey);
|
||
|
if (regStatus == ERROR_SUCCESS) {
|
||
|
// Key Exists so search if REG WIZ exists
|
||
|
dwInfoSize = 512;
|
||
|
regStatus = RegQueryValueEx(hRegKey,RAS_ENTRY_NAME,NULL,0,
|
||
|
(unsigned char*) szParam,&dwInfoSize);
|
||
|
if (regStatus == ERROR_SUCCESS)
|
||
|
{
|
||
|
// The Key Exits So delete the Entry
|
||
|
RegDeleteValue(hRegKey,RAS_ENTRY_NAME);
|
||
|
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\nRegistry Entry found " << RAS_ENTRY_NAME <<
|
||
|
" and Deleting the Entry " << flush;
|
||
|
#endif
|
||
|
|
||
|
}
|
||
|
RegCloseKey(hRegKey);
|
||
|
|
||
|
}
|
||
|
#else
|
||
|
ATK_RasDeleteEntry(NULL,RAS_ENTRY_NAME);
|
||
|
#endif
|
||
|
|
||
|
|
||
|
dwEntrySize = sizeof(RASENTRY);
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\nAfter Ras Get Properties :";
|
||
|
RW_DEBUG << "\n\t Device Name " << ConvertToANSIString(pRasEntry->szDeviceName) << flush;
|
||
|
#endif
|
||
|
|
||
|
dwRet = ATK_RasSetEntryProperties( NULL,
|
||
|
RAS_ENTRY_NAME,
|
||
|
pRasEntry,
|
||
|
dwEntrySize ,
|
||
|
NULL,
|
||
|
0);
|
||
|
|
||
|
if(dwRet == ERROR_CANNOT_OPEN_PHONEBOOK )
|
||
|
{
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\nFun ConfigureDUN : ERROR_CANNOT_OPEN_PHONEBOOK " << dwRet << flush;
|
||
|
#endif
|
||
|
return FALSE;
|
||
|
}
|
||
|
else
|
||
|
if(dwRet == ERROR_BUFFER_INVALID )
|
||
|
{
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\nFun ConfigureDUN : ERROR_BUFFER_INVALID " << dwRet << flush;
|
||
|
#endif
|
||
|
return FALSE;
|
||
|
}
|
||
|
else
|
||
|
if(dwRet)
|
||
|
{
|
||
|
#ifdef _LOG_IN_FILE
|
||
|
RW_DEBUG << "\n ConfigureDUN : Unknown/Undocumented Error " << dwRet << flush;
|
||
|
#endif
|
||
|
return FALSE;
|
||
|
}
|
||
|
return TRUE;
|
||
|
}
|