📄 dialproc.cpp
字号:
#include "stdafx.h"
#include "MainFrm.h"
#include "DialProc.h"
extern CMainFrame *MainFrame;
extern int live_flag;
//----------------------------------------------------------------------------------
BOOL QueryConnections(RASENTRYNAME *RasEntry,char *msg)
{
LPRASENTRYNAME lpRasEntry;
DWORD cbBuf;
DWORD cEntry;
DWORD dwRet;
char szMessage[256];
cbBuf = sizeof(RASENTRYNAME);
lpRasEntry = (LPRASENTRYNAME) new char[cbBuf];
if (NULL == lpRasEntry) return FALSE;
ZeroMemory(lpRasEntry, cbBuf);
lpRasEntry->dwSize =cbBuf;
dwRet = RasEnumEntries(NULL, NULL, lpRasEntry, &cbBuf, &cEntry);
if (ERROR_BUFFER_TOO_SMALL == dwRet)
{
delete lpRasEntry;
lpRasEntry = NULL;
lpRasEntry = (LPRASENTRYNAME) new char[cbBuf];
if (NULL != lpRasEntry)
{
ZeroMemory(lpRasEntry, cbBuf);
for(int i=0;i<(int)cEntry;i++)
{
(lpRasEntry+i)->dwSize = sizeof(RASENTRYNAME);
}
dwRet = RasEnumEntries(NULL, NULL, lpRasEntry, &cbBuf, &cEntry);
}
else
dwRet = ERROR_NOT_ENOUGH_MEMORY;
}
if (0 != dwRet)
{
if (0 != RasGetErrorString((UINT)dwRet, szMessage, 256))
{
//wsprintf((LPSTR)szMessage, sss);
sprintf(msg,"未知错误!");
return FALSE;
}
else
{
sprintf(msg,szMessage);
return FALSE;
}
}
if (0 == cEntry)
{
delete lpRasEntry ;
return FALSE;
}
BOOL bSet = FALSE;
if (0 == dwRet) // No errors
{
for (DWORD k=0; k<cEntry; k++)
{
if ( strstr((lpRasEntry+k)->szEntryName, G_Channel.dialPara.DialName ))
{
memcpy(&G_Channel.dialData.RasEntry, (lpRasEntry+k), sizeof(RASENTRYNAME));
}
}
memcpy(RasEntry,lpRasEntry,sizeof(RASENTRYNAME));
}
if (0 == cEntry)
{
if (lpRasEntry)
{
delete lpRasEntry;
lpRasEntry = NULL;
}
return FALSE;
}
if (lpRasEntry)
{
delete lpRasEntry;
lpRasEntry = NULL;
}
return TRUE;
//delete lpRasEntry ;
}
//-------------------------------------------------------------------------------
BOOL LoadDefautPhoneNumber(CString sEntryName,char * Phone)
{
//
typedef DWORD (WINAPI* RGEPA)
(LPCTSTR lpszPhonebook, // pointer to full path and filename of
// phone-book file
LPCTSTR lpszEntry, // pointer to an entry name
LPRASENTRY lpRasEntry, // buffer that receives entry information
LPDWORD lpdwEntryInfoSize, // size, in bytes, of the lpRasEntry
// buffer
LPBYTE lpbDeviceInfo, // buffer that receives device-specific
// configuration information
LPDWORD lpdwDeviceInfoSize // size, in bytes, of the
// lpbDeviceInfo buffer
);
// load library
HINSTANCE hLib = LoadLibrary(_T("RASAPI32.DLL"));
if (NULL == hLib) return FALSE;
RGEPA rgepa = (RGEPA) GetProcAddress(hLib, "RasGetEntryPropertiesA");
if (NULL == rgepa)
{
::FreeLibrary(hLib);
return FALSE;
}
RASENTRY RasEntry;
DWORD dw = sizeof(RASENTRY);
ZeroMemory(&RasEntry, dw);
RasEntry.dwSize = dw;
DWORD ret = rgepa(NULL, sEntryName, &RasEntry, &dw, NULL, NULL);
::FreeLibrary(hLib);
if (ret != 0) return FALSE;
CString phone;
if (RasEntry.dwfOptions & RASEO_UseCountryAndAreaCodes)
{
phone = "8w";
phone += RasEntry.szAreaCode;
phone += RasEntry.szLocalPhoneNumber;
}
else
phone = RasEntry.szLocalPhoneNumber;
UINT pn = 1;
strcpy(Phone,phone);
// theApp.SetIniString(sEntryName, "Phones", L2S(pn));
// theApp.SetIniString(sEntryName,"Phone" + L2S(pn), phone);
return TRUE;
}
//--------------------------------------------------------------
char phone[20];
char* QueryPhones(CString sEntryName)
{
//char phone[20];
memset(phone,0,sizeof(phone));
if(sEntryName=="") return "";
int bPhone = LoadDefautPhoneNumber(sEntryName,phone);
if(bPhone)
return phone;
else
return "";
}
//-----------------------------------------------------
CString GetIPAddress()
{
CString sss;
RASPPPIP pppip;
DWORD dw = sizeof(pppip);
ZeroMemory(& pppip, dw);
pppip.dwSize = dw;
DWORD ret = RasGetProjectionInfo(G_Channel.dialData.hRasConn, RASP_PppIp, & pppip, & dw);
if (ERROR_SUCCESS == ret)
sss = pppip.szServerIpAddress;
return sss;
}
void ProcessSendData(DWORD Length, char *Text)
{
HWND hWnd = ::FindWindow(NULL, "3104C数据转发--石家庄科林自动化有限公司");
G_cpData.dwData = Length;
G_cpData.cbData = Length;
G_cpData.lpData = Text;
::SendMessage(hWnd, WM_COPYDATA, (WPARAM)hWnd, (LPARAM)&G_cpData);
}
//-----------------------------------------------------------------------
void WINAPI RasDialFunc(UINT MSG,RASCONNSTATE rasconnstate,DWORD dwError)
{
char szRasString[256], DialMsgText[512]; // Buffer for storing the error string
memset(szRasString, 0, 256);
memset(DialMsgText, 0, 512);
CString str;
if (dwError) // Error occurred
{
RasGetErrorString((UINT)dwError, szRasString, 256);
if(!G_MsgFacFalseFlag)
{
str.Format("%s", szRasString);
ProcessSendData(str.GetLength(), szRasString);
G_MsgFacFalseFlag = TRUE;
return;
}
}
switch (rasconnstate)
{
// Running States
case RASCS_OpenPort:
{
if(!G_MsgFacFalseFlag)
{
sprintf(DialMsgText, "%s: %s", G_Channel.dialData.RasEntry.szEntryName, "正在打开端口...");
//AfxMessageBox(DialMsgText);
str.Format("%s", DialMsgText);
ProcessSendData(str.GetLength(), DialMsgText);
}
}
break;
case RASCS_PortOpened:
{
sprintf(DialMsgText, "%s: %s", G_Channel.dialData.RasEntry.szEntryName, "端口已打开!");
//AfxMessageBox(DialMsgText);
str.Format("%s", DialMsgText);
ProcessSendData(str.GetLength(), DialMsgText);
}
break;
case RASCS_Authenticated:
{
sprintf(DialMsgText, "%s: %s", G_Channel.dialData.RasEntry.szEntryName, "通过身份验证!");
//AfxMessageBox(DialMsgText);
str.Format("%s", DialMsgText);
ProcessSendData(str.GetLength(), DialMsgText);
}
break;
case RASCS_Connected:
{
sprintf(DialMsgText, "%s: %s", G_Channel.dialData.RasEntry.szEntryName, "拨号连接完成!");
//AfxMessageBox(DialMsgText);
str.Format("%s", DialMsgText);
ProcessSendData(str.GetLength(), DialMsgText);
G_MsgFacFalseFlag = FALSE;
}
break;
case RASCS_Disconnected:
{
//AfxMessageBox("Disconnecting...");
}
break;
case RASCS_ConnectDevice:
{
sprintf(DialMsgText, "%s: %s", G_Channel.dialData.RasEntry.szEntryName, "正在拨号....");
//AfxMessageBox(DialMsgText);
str.Format("%s", DialMsgText);
ProcessSendData(str.GetLength(), DialMsgText);
}
break;
case RASCS_DeviceConnected:
{
break;
}
case RASCS_AuthProject:
{
sprintf(DialMsgText, "%s: %s", G_Channel.dialData.RasEntry.szEntryName, "正在网上注册您的计算机...");
//AfxMessageBox(DialMsgText);
str.Format("%s", DialMsgText);
ProcessSendData(str.GetLength(), DialMsgText);
}
break;
case RASCS_Projected:
{
sprintf(DialMsgText, "%s: %s", G_Channel.dialData.RasEntry.szEntryName, "注册完成!");
//AfxMessageBox(DialMsgText);
str.Format("%s", DialMsgText);
ProcessSendData(str.GetLength(), DialMsgText);
}
break;
case RASCS_Authenticate:
{
CString ip=GetIPAddress(); //得到IP
}
break;
case RASCS_AllDevicesConnected:
{
CString ip=GetIPAddress();//得到IP
}
break;
case RASCS_AuthNotify:
{
CString ip=GetIPAddress();//得到IP
}
break;
default:
{
sprintf(DialMsgText, "%s: %s::%d ", G_Channel.dialData.RasEntry.szEntryName , "未知状态...",rasconnstate);
//AfxMessageBox(DialMsgText);
str.Format("%s", DialMsgText);
ProcessSendData(str.GetLength(), DialMsgText);
}
break;
}
return ;
}
//----------------------------------------------------------------
BOOL StartDial(char *name,char * phone,char * user,char * pass,char * domain,char * backnumber)
{
G_Channel.dialData.hRasConn=NULL;
RASDIALPARAMS params;
params.dwSize=sizeof(RASDIALPARAMS);
lstrcpy(params.szEntryName,name);
lstrcpy(params.szPhoneNumber,phone);
lstrcpy(params.szUserName,user);
lstrcpy(params.szPassword,pass);
lstrcpy(params.szDomain,domain);
lstrcpy(params.szCallbackNumber, backnumber);
char buf[256];
memset(buf,0,256);
int ret=RasDial(NULL,
NULL,
¶ms,
0,
&RasDialFunc,
&G_Channel.dialData.hRasConn);
if(ret!=0)
{
if ( RasGetErrorString( (UINT)ret,
(LPSTR)buf, 256 ) != 0)
wsprintf( (LPSTR)buf,
"Undefined RAS Dial Error ( %ld).", ret );
ProcessSendData(strlen(buf), buf);
G_Channel.dialData.bDialNow = FALSE;
return FALSE;
}
G_Channel.dialData.bDialNow = TRUE;
return TRUE;
}
//--------------------------------------------------------------------
BOOL HangUp()
{
DWORD dwRet;
RASCONNSTATUS rStatus;
ZeroMemory(&rStatus, sizeof(RASCONNSTATUS));
rStatus.dwSize = sizeof(RASCONNSTATUS);
dwRet = RasGetConnectStatus(G_Channel.dialData.hRasConn, &rStatus);
if ((dwRet != ERROR_INVALID_HANDLE) || (G_Channel.dialData.bDialNow))
{
G_Channel.dialData.bDialNow = FALSE;
RasHangUp(G_Channel.dialData.hRasConn);
dwRet = RasGetConnectStatus(G_Channel.dialData.hRasConn, &rStatus);
CTime t1 = CTime::GetCurrentTime();
CTimeSpan ts;
while (dwRet != ERROR_INVALID_HANDLE)
{
Sleep(100);
dwRet = RasGetConnectStatus(G_Channel.dialData.hRasConn, &rStatus);
ts = CTime::GetCurrentTime() - t1;
if (ts.GetTotalSeconds() > 3) break;
}
}
G_Channel.dialData.bDialNow = FALSE;
Sleep(500);
return TRUE;
}
UINT FrontProcess(void *arg)
{
//判断、处理前置机状态
while(live_flag)
{
if(G_Channel.autoDial==0)
{
Sleep(1000);
continue;
}
ZeroMemory(&G_Channel.dialData.rStatus, sizeof(RASCONNSTATUS));
G_Channel.dialData.rStatus.dwSize = sizeof(RASCONNSTATUS);
DWORD dWret=RasGetConnectStatus(G_Channel.dialData.hRasConn, &G_Channel.dialData.rStatus);
if(dWret!=0)
{
HangUp();
StartDial(G_Channel.dialPara.DialName, "", G_Channel.dialPara.UserName, G_Channel.dialPara.Password, "*", "*");
}
Sleep(1000);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -