序言:当我们在手机上开发联网功能时,可以使用手机上设置好的接入点实现手机联网,但是有时候手机的设置不一定会正确,这时如果还是以手机的接入点来联网,程序有出错,我们可以通过程序在手机上创建接入点,然后再通过该接入点进行联网。
创建接入点
void CCommunicate::CreateAccessPoint()
{
CString strFavoriteXml =
L"<wap-provisioningdoc>"
L"<characteristic type=\"CM_Networks\">"
L"<characteristic type=\"Test_GPRS\">"
L"<parm name=\"DestId\" value=\"{D1D06580-C364-55ec-9421-6ACF34129C58}\" />"
L"</characteristic>"
L"</characteristic>"
L"<characteristic type=\"CM_GPRSEntries\">"
L"<characteristic type=\"Test_GPRS\">"
L"<parm name=\"DestId\" value=\"{D1D06580-C364-55ec-9421-6ACF34129C58}\" />"
L"<characteristic type=\"DevSpecificCellular\">"
L"<parm name=\"BearerInfoValid\" value=\"1\" />"
L"<parm name=\"GPRSInfoValid\" value=\"1\" />"
L"<parm name=\"GPRSInfoProtocolType\" value=\"2\" />"
L"<parm name=\"GPRSInfoL2ProtocolType\" value=\"PPP\" />"
L"<parm name=\"GPRSInfoAccessPointName\" value=\"cmwap\" />"
L"<parm name=\"GPRSInfoAddress\" value=\"\" />"
L"<parm name=\"GPRSInfoDataCompression\" value=\"1\" />"
L"<parm name=\"GPRSInfoHeaderCompression\" value=\"1\" />"
L"<parm name=\"GPRSInfoParameters\" value=\"\" />"
L"</characteristic>"
L"</characteristic>"
L"</characteristic>"
L"<characteristic type=\"CM_ProxyEntries\">"
L"<characteristic type=\"WAP\">"
L"<parm name=\"SrcId\" value=\"{D1D06580-C364-55ec-9421-6ACF34129C58}\" />"
L"<parm name=\"DestId\" value=\"{436EF144-B4FB-4863-A041-8F905A62C572}\" />"
L"<parm name=\"Proxy\" value=\"10.0.0.172:80\" />"
L"<parm name=\"Enable\" value=\"1\" />"
L"<parm name=\"Type\" value=\"1\" />"
L"</characteristic>"
L"</characteristic>"
L"</wap-provisioningdoc>";
LPWSTR pszwXMLout = NULL;
HRESULT hr = DMProcessConfigXML(strFavoriteXml, CFGFLAG_PROCESS, &pszwXMLout);
if ( pszwXMLout )
{
delete [] pszwXMLout;
pszwXMLout = NULL;
}
}
int CCommunicate::CreateConnection( HANDLE *phConnection )
{
HRESULT hResult;
// HANDLE phConnection;
DWORD dwStatus;
DWORD dwResult;
CONNMGR_DESTINATION_INFO cdi;
int i;
for(i = 0; SUCCEEDED(ConnMgrEnumDestinations(i, &cdi)); i++)
{
if (0 == wcscmp(cdi.szDescription, _T("Test_GPRS")))
break;
}
hResult = ConnMgrEnumDestinations(i, &cdi);
if (FAILED(hResult))
{
AfxMessageBox(L"ConnMgrEnumDestinations Error!");
return FALSE;
}
CONNMGR_CONNECTIONINFO ConnInfo;
ZeroMemory( &ConnInfo, sizeof( ConnInfo ) );
ConnInfo.cbSize = sizeof( ConnInfo );
ConnInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
ConnInfo.dwPriority = CONNMGR_PRIORITY_HIPRIBKGND;
ConnInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP | CONNMGR_FLAG_PROXY_WAP;
ConnInfo.bExclusive = FALSE;
ConnInfo.bDisabled = FALSE;
ConnInfo.guidDestNet = cdi.guid;
TRACE(_T("ConnectToHttpServer\n") );
dwStatus = CONNMGR_STATUS_CONNECTED;
hResult = ConnMgrEstablishConnectionSync( &ConnInfo, phConnection, 75000, &dwStatus );
if ( hResult != S_OK )
{
TRACE(_T("ConnMgrEstablishConnection is error\n") );
dwResult = GetLastError();
// for debug
CString tmp;
tmp.Format(_T("%ld"), dwStatus);
AfxMessageBox( tmp, MB_OK);
return S_FALSE;
}
else
{
AfxMessageBox(_T("ConnMgrEstablishEonnection is success\n"), MB_OK);
// do something
}
return S_OK;
}
void CCommunicate::ReleaseAccessPoint()
{
CString strFavoriteXml =
L"<wap-provisioningdoc>"
L"<characteristic type=\"CM_Networks\">"
L"<nocharacteristic type=\"Test_GPRS\"/>"
L"</characteristic>"
L"</wap-provisioningdoc>";
LPWSTR pszwXMLout = NULL;
HRESULT hr = DMProcessConfigXML(strFavoriteXml, CFGFLAG_PROCESS, &pszwXMLout);
if ( hr == S_OK)
{
AfxMessageBox( L"Delete access point success!");
}
else
{
AfxMessageBox( L"Delete access point failed!");
}
if ( pszwXMLout )
{
delete [] pszwXMLout;
pszwXMLout = NULL;
}
}