全測試過了,鑑於手機型號太多,沒有一一的測試。 找不到連接點,應該自動創建一個的,但這個需要證書,就沒寫了。
今天發現刷了機的一個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); }