void Syscall::StartNetworkingL(ConnOp& connOp) { LOGST("StartNetworkingL"); DEBUG_ASSERT(gNetworkingState != EStarted); if(gNetworkingState == EStarting) { LOGST("SN pending"); connOp.iStatus = KRequestPending; connOp.SetActive(); gConnOpsWaitingForNetworkingStart.AppendL(&connOp); return; } gNetworkingState = EStarting; LHEL(gConnection.Open(gSocketServ)); TCommDbConnPref pref; #ifdef __SERIES60_3X__ if(gIapMethod == MA_IAP_METHOD_WLAN) { #if 0 // didn't work; prompted anyway. pref.SetBearerSet(KCommDbBearerWLAN); #endif RArray<TUint> iaps; if(gWlanAvailable) { LHEL(gWlanClient->GetAvailableIaps(iaps)); LOG("%i WLAN IAPs available.\n", iaps.Count()); } if(iaps.Count() > 0) { LOG("Picked IAP %i\n", iaps[0]); pref.SetIapId(iaps[0]); pref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); } else { LOG("No WLAN IAPs available. Failing...\n"); //connOp.SendResult(CONNERR_NETWORK); connOp.mConn.connErr = CONNERR_NETWORK; //connOp.RunL(); connOp.SetActive(); TRequestStatus* rsp = &connOp.iStatus; User::RequestComplete(rsp, KErrGeneral); return; } } else if(gIapMethod == MA_IAP_METHOD_STANDARD) #endif //__SERIES60_3X__ { bool hasSavedIap = getSavedIap(gIapId); if(hasSavedIap) { LOG("Saved IAP: %u\n", gIapId); pref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); pref.SetIapId(gIapId); DEBUG_ASSERT(pref.IapId() == gIapId); } else { LOG("No saved IAP, showing dialog...\n"); #ifdef __SERIES60_3X__ if(gIapFilter == MA_IAP_FILTER_NOT_WLAN) { // Note: doesn't work on E61i. WLAN is still displayed. LOG("Not wlan.\n"); pref.SetBearerSet(0xFF & ~KCommDbBearerWLAN); } else if(gIapFilter == MA_IAP_FILTER_WLAN) { LOG("Wlan only.\n"); pref.SetBearerSet(KCommDbBearerWLAN); } else { DEBUG_ASSERT(gIapFilter == MA_IAP_FILTER_ALL); } #endif //__SERIES60_3X__ pref.SetDialogPreference(ECommDbDialogPrefPrompt); } } #ifdef __SERIES60_3X__ else { DEBIG_PHAT_ERROR; } #endif //__SERIES60_3X__ gConnection.Start(pref, connOp.iStatus); connOp.SetActive(); LOGST("SN active"); }