⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialproc.cpp

📁 cdma无线通信转发程序 用于电力调度数据的转发
💻 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,
		&params,
		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 + -