接入點處理

 

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);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章