全测试过了,鉴于手机型号太多,没有一一的测试。 找不到连接点,应该自动创建一个的,但这个需要证书,就没写了。
今天发现刷了机的一个5800连不上,在二级查找上,还需比较一下名字。
//寻找可用的连接点, UIQ与Symbian不同
TBool NewCClientEngine::FindIapId(TUint32& iapId)
{
iapId = 0;
#ifdef __WINS__
iapId = 1;
#elif UIQ30
jstring cmwapname;
//先找出APN
CCommsDatabase* const comm_db = CCommsDatabase::NewL(EDatabaseTypeIAP);
CleanupStack::PushL(comm_db);
CCommsDbTableView *iap_table_view = comm_db->OpenTableLC(TPtrC(OUTGOING_WCDMA));
TBuf<50> iap_name_buf;
TBuf<50> cmwap_str;
TBuf<32> apn;
TUint32 iap_id = -1;
TBuf<100> log;
// switch pointer to the first iap record
if(iap_table_view->GotoFirstRecord() == KErrNone)
{
// search comm_db for cmnet iap
do
{
// get the iap name from comm_db
iap_name_buf.SetLength(0);
iap_table_view->ReadTextL(TPtrC(COMMDB_NAME), iap_name_buf);
iap_table_view->ReadTextL(TPtrC(GPRS_APN), apn);
// test the cmnet iap name
DEBUGING(iap_name_buf);
DEBUGING(apn);
if( apn == _L("cmwap") )
{
cmwapname = iap_name_buf;
iap_table_view->ReadUintL(TPtrC(COMMDB_ID), iap_id);
log.Format(_L("id = %d"),iap_id);
DEBUGING(log);
break;
}
}while (KErrNone == iap_table_view->GotoNextRecord());
}
CleanupStack::PopAndDestroy(2, comm_db); // iap_table_view, comm_db
if(cmwapname != _L(""))
{
CCommsDatabase* database = CCommsDatabase::NewL(EDatabaseTypeIAP);
CleanupStack::PushL(database );
CCommsDbTableView* view = database->OpenTableLC(TPtrC(IAP));
if( view->GotoFirstRecord() == KErrNone )
{
do
{
TBuf<50> accessPointName;
view->ReadTextL(TPtrC(COMMDB_NAME),accessPointName);
DEBUGING(accessPointName);
if(cmwapname == accessPointName)
{
TUint32 id;
view->ReadUintL(TPtrC(COMMDB_ID),id);
log.Format(_L("iapid = %d"),id);
iapId = id;
DEBUGING(log);
break;
}
}while(view->GotoNextRecord()==KErrNone);
}
CleanupStack::PopAndDestroy(view);
CleanupStack::PopAndDestroy(database );
}
#else
CCommsDatabase* const comm_db = CCommsDatabase::NewL(EDatabaseTypeIAP);
CleanupStack::PushL(comm_db);
CCommsDbTableView *iap_table_view = comm_db->OpenTableLC(TPtrC(OUTGOING_WCDMA));
TBuf<20> iap_name_buf;
TBuf<20> iap_name_buf1;
TBuf<20> cmwap_str;
TBuf<100> cmwap_username;
TBuf<100> cmwap_userpass;
TBuf<32> apn;
TUint32 iap_id = -1;
TBuf<100> log;
// switch pointer to the first iap record
if(iap_table_view->GotoFirstRecord() == KErrNone)
{
// search comm_db for cmnet iap
do
{
// get the iap name from comm_db
iap_name_buf.SetLength(0);
iap_table_view->ReadTextL(TPtrC(COMMDB_NAME), iap_name_buf);
iap_table_view->ReadTextL(TPtrC(GPRS_APN), apn);
iap_table_view->ReadTextL(TPtrC(GPRS_IF_AUTH_PASS), cmwap_userpass);
iap_table_view->ReadTextL(TPtrC(GPRS_IF_AUTH_NAME), cmwap_username);
// test the cmnet iap name
DEBUGING(iap_name_buf);
DEBUGING(cmwap_userpass);
DEBUGING(cmwap_username);
DEBUGING(apn);
if( apn == _L("cmwap") && cmwap_userpass.Length()==0 && cmwap_username.Length()==0 )
{
iap_table_view->ReadUintL(TPtrC(COMMDB_ID), iap_id);
CCommsDbTableView* pIAPView = comm_db->OpenViewMatchingUintLC(TPtrC(IAP), TPtrC(IAP_SERVICE), iap_id);
TInt nErr = pIAPView->GotoFirstRecord();
while(nErr == KErrNone)
{
pIAPView->ReadTextL(TPtrC(COMMDB_NAME), iap_name_buf1);
DEBUGING(iap_name_buf1);
if(iap_name_buf1 == iap_name_buf)
{
pIAPView->ReadUintL(TPtrC(COMMDB_ID), iap_id);
iapId= iap_id;
DEBUGING(_L("find iap..."));
}
nErr = pIAPView->GotoNextRecord();
}
CleanupStack::PopAndDestroy(); //pIAPView
}
}while (KErrNone == iap_table_view->GotoNextRecord());
}
CleanupStack::PopAndDestroy(2, comm_db); // iap_table_view, comm_db
if( iap_id < 0)
{
ERRORING(_L("can't find iap"));
}
#endif
return (iapId > 0);
}
浙公网安备 33010602011771号