// RasEx.cpp: implementation of the CRasEx class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "RasEx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
UINT DialhreadProc(LPVOID lpvoid)
{
CRasEx* pRasEx=(CRasEx*)lpvoid;
pRasEx->Dial();
Sleep(100);
while(1){
if(pRasEx->IsConnected()){
Sleep(1000);
}
else{
pRasEx->ReDial();
}
}
}
CRasEx::CRasEx()
{
m_pDialThread = NULL;
m_hDialHandle = NULL;
}
CRasEx::~CRasEx()
{
}
/******************************************************************************
* Name:
* Function:
* -----------------------------------------------------------------------------
* Input:
*
*
* Output:
*
* -----------------------------------------------------------------------------
* Revision:
******************************************************************************/
BOOL CRasEx::Dial()
{
RETAILMSG(1,(TEXT("Dial\r\n")));
DWORD dwBegin = GetTickCount();
RASDIALPARAMS RasDialParams;
memset (&RasDialParams, 0, sizeof (RASDIALPARAMS));
DWORD dwError = 0xFFFFFFFF;
m_hDialHandle = NULL;
RasDialParams.dwSize = sizeof (RASDIALPARAMS);
RasDialParams.szPhoneNumber[0] = TEXT('\0');
RasDialParams.szCallbackNumber[0] = TEXT('\0');
#ifndef GX709
wcscpy (RasDialParams.szEntryName, L"shinco");
#else
wcscpy (RasDialParams.szEntryName, L"cmnet");
#endif
wcscpy (RasDialParams.szUserName, _T(""));
wcscpy (RasDialParams.szPassword, _T(""));
wcscpy (RasDialParams.szDomain, _T(""));
if ((dwError = RasDial (
NULL,
NULL,
&RasDialParams,
0xFFFFFFFF ,
NULL,
&m_hDialHandle)) != 0)
{
DWORD dwError = GetLastError();
dwBegin = GetTickCount() - dwBegin;
RETAILMSG(DEBUGOUT,(L"Time = %d\r\n",dwBegin));
RETAILMSG(DEBUGOUT,(L"Dial Error = %d\r\n",dwError));
return FALSE;
}
else
{
dwBegin = GetTickCount() - dwBegin;
RETAILMSG(DEBUGOUT,(L"Time = %d\r\n",dwBegin));
RETAILMSG(DEBUGOUT,(L"Dial Success\r\n"));
return TRUE;
}
}
/******************************************************************************
* Name:
* Function:
* -----------------------------------------------------------------------------
* Input:
*
*
* Output:
*
* -----------------------------------------------------------------------------
* Revision:
******************************************************************************/
BOOL CRasEx::IsConnected()
{
RASCONNSTATUS status;
status.dwSize = sizeof(RASCONNSTATUS);
if (!RasGetConnectStatus(m_hDialHandle, &status))
{
if (status.rasconnstate == RASCS_Connected)
{
// RETAILMSG(DEBUGOUT,(L"RASCS_Connected\r\n"));
return TRUE;
}
else
{
// RETAILMSG(DEBUGOUT,(L"RASCS_Disconnected\r\n"));
return FALSE;
}
}
else
{
// RETAILMSG(DEBUGOUT,(L"RasGetConnectStatus Error\r\n"));
return FALSE;
}
}
/******************************************************************************
* Name:
* Function:
* -----------------------------------------------------------------------------
* Input:
*
*
* Output:
*
* -----------------------------------------------------------------------------
* Revision:
******************************************************************************/
BOOL CRasEx::DisConnectGPRS()
{
if (m_pDialThread->m_hThread != NULL){
DWORD dwExitCode = 0;
::GetExitCodeThread(m_pDialThread->m_hThread,&dwExitCode);
if (dwExitCode == STILL_ACTIVE)
{
::SuspendThread(m_pDialThread->m_hThread);
}
::TerminateThread(m_pDialThread->m_hThread,dwExitCode);
delete m_pDialThread;
m_pDialThread = NULL;
}
RASCONNSTATUS status;
status.dwSize = sizeof(RASCONNSTATUS);
DWORD dwRresult = RasHangUp(m_hDialHandle);
if (dwRresult == 0)
{
//延时,判断连接是否关闭
while (RasGetConnectStatus(m_hDialHandle, &status) == 0 )
{
Sleep(10);
}
m_hDialHandle = NULL;
return TRUE;
}
else
{
return FALSE;
}
}
/******************************************************************************
* Name:
* Function:
* -----------------------------------------------------------------------------
* Input:
*
*
* Output:
*
* -----------------------------------------------------------------------------
* Revision:
******************************************************************************/
BOOL CRasEx::ReDial()
{
if(!IsConnected())
{
RASCONNSTATUS status;
RASDIALPARAMS RasDialParams;
status.dwSize = sizeof(RASCONNSTATUS);
memset (&RasDialParams, 0, sizeof (RASDIALPARAMS));
DWORD dwRresult = RasHangUp(m_hDialHandle);
if (dwRresult == 0)
{
//延时,判断连接是否关闭
while (RasGetConnectStatus(m_hDialHandle, &status) == 0 )
{
Sleep(10);
}
m_hDialHandle = NULL;
}
Dial();
}
return TRUE;
}
/******************************************************************************
* Name:
* Function:
* -----------------------------------------------------------------------------
* Input:
*
*
* Output:
*
* -----------------------------------------------------------------------------
* Revision:
******************************************************************************/
VOID CRasEx::ConnectGPRS()
{
m_pDialThread = AfxBeginThread(DialhreadProc,this);
}