nokia的例子在手机上直接用是成功不了的,经过多次测试修改。。。。最完美的带代理的cmwap接入点创建代码如下,中间还加入了机型判断。。。。。。总之。。。算是比较完美的版本了。
_LIT(KIapCMWAP,"cmwap");
_LIT(KAPNName,"CMWAP");
#define GPRS_IF_NAME _S("IfName")
#ifdef __WINS__
_LIT(KIP,"192.168.0.XXX");//你内网设置
#else
_LIT(KIP,"10.0.0.172");
#endif
// ---------------------------------------------------------------------------
// CIAPConnectEngine::CreateNewIapL(...)
//
// This function creates a new IAP record and insert it into the Comms
// database.
// ---------------------------------------------------------------------------
//
void CIAPConnectEngine::CreateNewIapL()
{
TInt error;
TUint32 gprsId;
TInt nId=0;
TUint32 iIapUid;
TCommDbOpeningMethod method;
CCommsDatabase* cdb=CCommsDatabase::NewL(EDatabaseTypeIAP,method);
CleanupStack::PushL(cdb);
TVersion version;
version = User::Version();
TInt vs = version.iBuild;
//iVersion = vs;
TInt mUid = 0;
HAL::Get(HALData::EManufacturer, mUid);
//iWhichWelcomeInfo=0;
CCommsDbTableView* view;
view = cdb->OpenViewMatchingTextLC(TPtrC(OUTGOING_GPRS),TPtrC(COMMDB_NAME),KAPNName);
error = view ->GotoFirstRecord();
if(error == KErrNone)
{
view ->ReadUintL(TPtrC(COMMDB_ID),gprsId);
TInt error1 = view ->UpdateRecord();
if(error1 == KErrNone)
{
view ->WriteTextL(TPtrC(GPRS_APN), KIapCMWAP);
view ->WriteTextL(TPtrC(GPRS_IF_PARAMS), _L(""));
if(vs < 400)
{
if(0x101F9072 == mUid)
{
view->WriteTextL(TPtrC(GPRS_IF_NAME),_L("ppp"));//gprs
}
else
{
view->WriteTextL(TPtrC(GPRS_IF_NAME),_L("pppgprs"));//
}
}
view ->PutRecordChanges();
}
}
else
{
error = view->InsertRecord(gprsId);
if(error != KErrNone)
{
CleanupStack::PopAndDestroy(view);
CleanupStack::PopAndDestroy(cdb);
return;
}
view->WriteTextL(TPtrC(COMMDB_NAME), KAPNName);
view->WriteTextL(TPtrC(GPRS_APN), KIapCMWAP);
view->WriteBoolL(TPtrC(GPRS_IF_PROMPT_FOR_AUTH), ETrue);
view->WriteBoolL(TPtrC(GPRS_IP_ADDR_FROM_SERVER), ETrue);
view->WriteBoolL(TPtrC(GPRS_IP_DNS_ADDR_FROM_SERVER), ETrue);
view->WriteTextL(TPtrC(GPRS_IP_GATEWAY), _L("10.0.0.172"));
view->WriteTextL(TPtrC(GPRS_IF_AUTH_NAME), _L(""));
view->WriteTextL(TPtrC(GPRS_IF_AUTH_PASS),_L(""));
view->WriteUintL(TPtrC(GPRS_PDP_TYPE), 0);
view->WriteBoolL(TPtrC(GPRS_IF_PROMPT_FOR_AUTH), EFalse);
view->WriteTextL(TPtrC(GPRS_IF_NETWORKS), _L("ip"));
view->WriteBoolL(TPtrC(GPRS_HEADER_COMPRESSION), EFalse);
view->WriteBoolL(TPtrC(GPRS_DATA_COMPRESSION), EFalse);
view->WriteUintL(TPtrC(GPRS_REQ_PRECEDENCE), 0);
view->WriteUintL(TPtrC(GPRS_REQ_DELAY), 0);
view->WriteUintL(TPtrC(GPRS_REQ_RELIABILITY), 0);
view->WriteUintL(TPtrC(GPRS_REQ_PEAK_THROUGHPUT), 0);
view->WriteUintL(TPtrC(GPRS_REQ_MEAN_THROUGHPUT), 0);
view->WriteUintL(TPtrC(GPRS_MIN_PRECEDENCE), 0);
view->WriteUintL(TPtrC(GPRS_MIN_DELAY), 0);
view->WriteUintL(TPtrC(GPRS_MIN_RELIABILITY), 0);
view->WriteUintL(TPtrC(GPRS_MIN_PEAK_THROUGHPUT), 0);
view->WriteUintL(TPtrC(GPRS_MIN_MEAN_THROUGHPUT), 0);
view->WriteBoolL(TPtrC(GPRS_ANONYMOUS_ACCESS), EFalse);
if(vs >= 400)
{
view->WriteBoolL(TPtrC(GPRS_USE_EDGE), EFalse);
}
view->WriteBoolL(TPtrC(GPRS_ENABLE_LCP_EXTENSIONS), EFalse);
view->WriteBoolL(TPtrC(GPRS_DISABLE_PLAIN_TEXT_AUTH), EFalse);
view->WriteUintL(TPtrC(GPRS_AP_TYPE), 0);
if(vs >= 400)
{
view->WriteUintL(TPtrC(GPRS_QOS_WARNING_TIMEOUT), 50000000);
}
view->WriteUintL(TPtrC(GPRS_PDP_TYPE), 0);
view->WriteTextL(TPtrC(GPRS_PDP_ADDRESS), _L(""));
if(vs < 400)
{
if(0x101F9072 == mUid)
{
view->WriteTextL(TPtrC(GPRS_IF_NAME),_L("ppp"));//gprs
}
else
{
view->WriteTextL(TPtrC(GPRS_IF_NAME),_L("pppgprs"));//
}
}
view->WriteTextL(TPtrC(GPRS_IF_PARAMS), _L(""));
view->WriteUintL(TPtrC(GPRS_IF_AUTH_RETRIES), 0);
view->WriteTextL(TPtrC(GPRS_IP_NETMASK), _L(""));
view->WriteTextL(TPtrC(GPRS_IP_ADDR),_L("0.0.0.0"));
view->WriteTextL(TPtrC(GPRS_IP_NAME_SERVER1),_L("0.0.0.0"));
view->WriteTextL(TPtrC(GPRS_IP_NAME_SERVER2),_L("0.0.0.0"));
error = view->PutRecordChanges();
}
CleanupStack::PopAndDestroy(view);
//2)Add record to NETWORK
TUint32 networkId;
if(vs >= 400)
{
CCommsDbTableView* view2;
view2 = cdb->OpenViewMatchingTextLC(TPtrC(NETWORK),TPtrC(COMMDB_NAME),_L("CMWAP"));
error = view2 ->GotoFirstRecord();
if(error == KErrNone)
{
view ->ReadUintL(TPtrC(COMMDB_ID),networkId);
}
else
{
error = view2->InsertRecord(networkId);
if(error != KErrNone)
{
CleanupStack::PopAndDestroy(view2);
CleanupStack::PopAndDestroy(cdb);
return;
}
view2->WriteTextL(TPtrC(COMMDB_NAME), KAPNName);
error = view2->PutRecordChanges(EFalse, EFalse);
}
CleanupStack::PopAndDestroy(view2);
}
//3)SEARCH FOR Mobile LOCATION id
TInt result;
TUint32 locationId;
TUint32 mobileLocationId;
CCommsDbTableView* view3 = cdb->OpenTableLC(TPtrC(LOCATION));
result = view3->GotoFirstRecord();
TBuf<128> locationName;
while (result == KErrNone)
{
view3->ReadTextL(TPtrC(COMMDB_NAME), locationName);
view3->ReadUintL(TPtrC(LOCATION_MOBILE), locationId);
if (locationName.Match(_L("Mobile"))!= KErrNotFound)
mobileLocationId = locationId;
result = view3->GotoNextRecord();
}
CleanupStack::PopAndDestroy(view3);
//4)Create IAP
CCommsDbTableView* view4;
view4 = cdb->OpenViewMatchingTextLC(TPtrC(IAP),TPtrC(COMMDB_NAME),KAPNName);
error = view4 ->GotoFirstRecord();
if(error == KErrNone)
{
view4->ReadUintL(TPtrC(COMMDB_ID),iIapUid);
TInt error1 = view4 ->UpdateRecord();
if(error1 == KErrNone)
{
view4->WriteUintL(TPtrC(IAP_SERVICE), gprsId);
view4->PutRecordChanges(EFalse, EFalse);
}
}
else
{
error = view4->InsertRecord(iIapUid);
if(error != KErrNone)
{
CleanupStack::PopAndDestroy(view4);
CleanupStack::PopAndDestroy(cdb);
return;
}
view4->WriteTextL(TPtrC(COMMDB_NAME), KAPNName);
view4->WriteTextL(TPtrC(IAP_SERVICE_TYPE), TPtrC(OUTGOING_GPRS));
view4->WriteUintL(TPtrC(IAP_SERVICE), gprsId);
if(vs >= 400)
{
view4->WriteUintL(TPtrC(IAP_NETWORK_WEIGHTING), 0);
view4->WriteUintL(TPtrC(IAP_NETWORK), networkId);
//6600 is 0x101fb3dd 6630 is 0x101fbb55
if(0x101fbb55 == mUid || 0x101fb3dd == mUid) //3230 7610 is 2,6630 6600 is 1
{
view4->WriteUintL(TPtrC(IAP_BEARER), 1);
}
else
{
view4->WriteUintL(TPtrC(IAP_BEARER), 2);
}
view4->WriteTextL(TPtrC(IAP_BEARER_TYPE), TPtrC(MODEM_BEARER));
}
view4->WriteUintL(TPtrC(IAP_LOCATION), mobileLocationId);
error = view4->PutRecordChanges(EFalse, EFalse);
}
CleanupStack::PopAndDestroy(view4);
//5) CREATE WAP_ACCESS_POINT
TUint32 wapId;
CCommsDbTableView* view5 = cdb->OpenViewMatchingTextLC(TPtrC(WAP_ACCESS_POINT),
TPtrC(COMMDB_NAME),KAPNName);
error = view5 ->GotoFirstRecord();
if(error == KErrNone)
{
view5->ReadUintL(TPtrC(COMMDB_ID),wapId);
}
else
{
error = view5->InsertRecord(wapId);
if(error != KErrNone)
{
CleanupStack::PopAndDestroy(view5);
CleanupStack::PopAndDestroy(cdb);
return;
}
view5->WriteTextL(TPtrC(COMMDB_NAME), KAPNName);
view5->WriteTextL(TPtrC(WAP_CURRENT_BEARER), TPtrC(WAP_IP_BEARER));
view5->WriteTextL(TPtrC(WAP_START_PAGE), _L("http://www.unew.cn"));
error = view5->PutRecordChanges(EFalse, EFalse);
}
CleanupStack::PopAndDestroy(view5);
//6) Create WAP_IP_BEARER
TUint32 wapIPId;
CCommsDbTableView* view6 = cdb->OpenViewMatchingUintLC(TPtrC(WAP_IP_BEARER),
TPtrC(WAP_ACCESS_POINT_ID),wapId);
error = view6 ->GotoFirstRecord();
if(error == KErrNone)
{
view6->ReadUintL(TPtrC(COMMDB_ID),wapIPId);
TInt error1 = view6 ->UpdateRecord();
if(error1 == KErrNone)
{
view6->WriteUintL(TPtrC(WAP_ACCESS_POINT_ID), wapId);
view6->PutRecordChanges(EFalse, EFalse);
}
}
else
{
error = view6->InsertRecord(wapIPId);
if(error != KErrNone)
{
CleanupStack::PopAndDestroy(view6);
CleanupStack::PopAndDestroy(cdb);
return;
}
view6->WriteUintL(TPtrC(WAP_ACCESS_POINT_ID), wapId);
view6->WriteTextL(TPtrC(WAP_GATEWAY_ADDRESS), _L("0.0.0.0"));
view6->WriteUintL(TPtrC(WAP_WSP_OPTION),EWapWspOptionConnectionOriented);
view6->WriteBoolL(TPtrC(WAP_SECURITY), EFalse);
view6->WriteUintL(TPtrC(WAP_IAP),iIapUid);
if(vs >= 400)
{
view6->WriteUintL(TPtrC(WAP_PROXY_PORT), 0);
view6->WriteTextL(TPtrC(WAP_PROXY_LOGIN_NAME), _L(""));
view6->WriteTextL(TPtrC(WAP_PROXY_LOGIN_PASS), _L(""));
}
error = view6->PutRecordChanges(EFalse, EFalse);
}
CleanupStack::PopAndDestroy(view6);
CleanupStack::PopAndDestroy(cdb);
//7)) 代理
_LIT(KIP,"10.0.0.172");
TUint32 proxiesId;
CCommsDatabase* cdb7=CCommsDatabase::NewL(EDatabaseTypeIAP);
CleanupStack::PushL(cdb7);
CCommsDbTableView* view7 = cdb7->OpenTableLC(TPtrC(PROXIES));
User::LeaveIfError( view7->InsertRecord(proxiesId));
view7->WriteUintL(TPtrC(PROXY_ISP), gprsId);
view7->WriteTextL(TPtrC(PROXY_SERVICE_TYPE), TPtrC(OUTGOING_GPRS));
view7->WriteBoolL(TPtrC(PROXY_USE_PROXY_SERVER), ETrue);
view7->WriteLongTextL(TPtrC(PROXY_SERVER_NAME), KIP);
view7->WriteTextL(TPtrC(PROXY_PROTOCOL_NAME), _L("http"));
view7->WriteUintL(TPtrC(PROXY_PORT_NUMBER),80);
error = view7->PutRecordChanges(ETrue,EFalse);
if(error != KErrNone)
{
User::Leave(error);
}
CleanupStack::PopAndDestroy(2);
}