Exemple #1
0
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");
}