--- a/supl/locationsuplfw/protocolhandlerapi/src/epos_csuplconnection.cpp Tue Sep 14 22:09:33 2010 +0300
+++ b/supl/locationsuplfw/protocolhandlerapi/src/epos_csuplconnection.cpp Wed Sep 15 12:40:28 2010 +0300
@@ -319,8 +319,10 @@
// Cancel Any outstanding request
Cancel();
- iTrace->Trace(_L("CSuplConnection::Destructor...Deleting Socket Reader"),
- KTraceFileName, __LINE__);
+ if (iTrace)
+ iTrace->Trace(_L(
+ "CSuplConnection::Destructor...Deleting Socket Reader"),
+ KTraceFileName, __LINE__);
//Delete the Socket Reader
delete iSocketReader;
@@ -967,7 +969,12 @@
{
aStatus = KRequestPending;
TRequestStatus *reqStatus = &aStatus;
- iConnArray.Append(reqStatus);
+ TInt error = iConnArray.Append(reqStatus);
+ if (error != KErrNone)
+ {
+ User::RequestComplete(reqStatus, error);
+ return;
+ }
}
if (!iConnectStarted)
@@ -983,14 +990,40 @@
iConnectStarted = ETrue;
#ifndef __WINS__
- TCommDbConnPref prefs;
- prefs.SetDialogPreference(ECommDbDialogPrefDoNotPrompt);
- prefs.SetDirection(ECommDbConnectionDirectionOutgoing);
- prefs.SetIapId(iIAPId);
+ TExtendedConnPref OCCPrefs;
+ TConnPrefList prefList;
+
+ OCCPrefs.SetForcedRoaming(EFalse); //do not switch networks during an ongoing connection
+ OCCPrefs.SetNoteBehaviour(TExtendedConnPref::ENoteBehaviourDefault);
+
+ if(iIAPId != -1) //if a IAP was configured
+
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect : IAP configured"), KTraceFileName, __LINE__);
+ OCCPrefs.SetIapId(iIAPId);
+ // since IAP Id is set SNAP purpose should not be set - set to unknown
+ OCCPrefs.SetSnapPurpose(CMManager::ESnapPurposeUnknown);
+ OCCPrefs.SetBearerSet(TExtendedConnPref::EExtendedConnBearerUnknown);
+ }
+ else
+ {
+ OCCPrefs.SetSnapPurpose(CMManager::ESnapPurposeInternet);
+ //WLAN and Cellular Networks allowed for connection
+ OCCPrefs.SetBearerSet(TExtendedConnPref::EExtendedConnBearerWLAN | TExtendedConnPref::EExtendedConnBearerCellular);
+
+ //if SNAP purpose is set IAP Id should be zero - zero by default not explicitly set
+ iTrace->Trace(_L("CSuplConnection::Connect : IAP not configured"), KTraceFileName, __LINE__);
+ }
+
+ TRAP_IGNORE(prefList.AppendL(&OCCPrefs));
TInt ret = iConnection.Open(iSocketServ);
+ if(ret != KErrNone)
+ iTrace->Trace(_L("RConnection Open returned error"), KTraceFileName, __LINE__);
+
+ iTrace->Trace(_L("RConnection Start Called, State is ERetriveIAP"), KTraceFileName, __LINE__);
// Start an Outgoing Connection with overrides
- iConnection.Start(prefs,iStatus);
+ iConnection.Start(prefList,iStatus);
// Set state to ERetriveIAP
iState = ERetriveIAP;
SetActive();
@@ -1019,92 +1052,99 @@
EXPORT_C void CSuplConnection::Connect(TRequestStatus &aStatus,
TBool aPrompt, TBool aWlanOnly)
{
+
// Log
- iTrace->Trace(_L("CSuplConnection::Connect"), KTraceFileName, __LINE__);
- iPrompt = aPrompt;
- iWlanOnly = aWlanOnly;
-
- if (iState == EConnected)
- {
- aStatus = KRequestPending;
- TRequestStatus *reqStatus = &aStatus;
- User::RequestComplete(reqStatus, KErrNone);
- iConnectClients++;
- return;
- }
+ iTrace->Trace(_L("CSuplConnection::Connect"), KTraceFileName, __LINE__);
+ iPrompt = aPrompt;
+ iWlanOnly = aWlanOnly;
+
+ aStatus = KRequestPending;
+ TRequestStatus *reqStatus = &aStatus;
+
+ if (iState == EConnected)
+ {
+ User::RequestComplete(reqStatus, KErrNone);
+ iConnectClients++;
+ return;
+ }
- // Check if Connect() is started. If started, add status to Q
- //if (iConnectStarted)
- // {
- aStatus = KRequestPending;
- TRequestStatus *reqStatus = &aStatus;
- iConnArray.Append(reqStatus);
- // }
-
- if (!iConnectStarted)
- {
- iTrace->Trace(_L("CSuplConnection::Connect : Connection not started"), KTraceFileName, __LINE__);
+ TInt error = iConnArray.Append(reqStatus);
+ if (error != KErrNone)
+ {
+ User::RequestComplete(reqStatus, error);
+ return;
+ }
+
+ if (!iConnectStarted)
+ {
+ iTrace->Trace(
+ _L("CSuplConnection::Connect : Connection not started"),
+ KTraceFileName, __LINE__);
// Connect only if not already connected
- if(iState == ENotConnected || iState == EFailure)
- {
- iTrace->Trace(_L("CSuplConnection::Connect : ENotConnected"), KTraceFileName, __LINE__);
+ if (iState == ENotConnected || iState == EFailure)
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect : ENotConnected"),
+ KTraceFileName, __LINE__);
iConnectStarted = ETrue;
#ifndef __WINS__
-
+
iTrace->Trace(_L("CSuplConnection::Connect ExtendedConnPref"), KTraceFileName, __LINE__);
-
+
TExtendedConnPref OCCPrefs;
TConnPrefList prefList;
- if(iWlanOnly)
- {
- iTrace->Trace(_L("CSuplConnection::Connect : iWLANOnly used"), KTraceFileName, __LINE__);
- OCCPrefs.SetBearerSet(TExtendedConnPref::EExtendedConnBearerWLAN);
- OCCPrefs.SetSnapPurpose(CMManager::ESnapPurposeInternet);
- }
- else
- {
- iTrace->Trace(_L("CSuplConnection::Connect using OCC"), KTraceFileName, __LINE__);
- iTrace->Trace(_L("CSuplConnection::Connect OCC GPRS Connection.."), KTraceFileName, __LINE__);
- OCCPrefs.SetBearerSet(TExtendedConnPref::EExtendedConnBearerCellular);
- OCCPrefs.SetSnapPurpose(CMManager::ESnapPurposeInternet);
- }
-
- if(!iPrompt)
- {
- iTrace->Trace(_L("CSuplConnection::Connect : silent connection"), KTraceFileName, __LINE__);
- OCCPrefs.SetNoteBehaviour(TExtendedConnPref::ENoteBehaviourConnSilent);
- }
- else
- {
- iTrace->Trace(_L("CSuplConnection::Connect : Dialog prompt"), KTraceFileName, __LINE__);
- OCCPrefs.SetNoteBehaviour(TExtendedConnPref::ENoteBehaviourDefault);
- }
-
-
-
+ if(iWlanOnly)
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect : iWLANOnly used"), KTraceFileName, __LINE__);
+ OCCPrefs.SetBearerSet(TExtendedConnPref::EExtendedConnBearerWLAN);
+ }
+ else
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect OCC GPRS Connection.."), KTraceFileName, __LINE__);
+ OCCPrefs.SetBearerSet(TExtendedConnPref::EExtendedConnBearerCellular);
+ }
+ OCCPrefs.SetSnapPurpose(CMManager::ESnapPurposeInternet);
+
+ if(!iPrompt)
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect : silent connection"), KTraceFileName, __LINE__);
+ OCCPrefs.SetNoteBehaviour(TExtendedConnPref::ENoteBehaviourConnSilent);
+ }
+ else
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect : Dialog prompt"), KTraceFileName, __LINE__);
+ OCCPrefs.SetNoteBehaviour(TExtendedConnPref::ENoteBehaviourDefault);
+ }
+
TRAP_IGNORE(prefList.AppendL(&OCCPrefs));
-
-
+
TInt ret = iConnection.Open(iSocketServ);
+ if( ret != KErrNone )
+ {
+ TRequestStatus* statusPtr = &aStatus;
+ User::RequestComplete( statusPtr,ret );
+ return;
+ }
// Start an Outgoing Connection with overrides
iConnection.Start(prefList,iStatus);
// Set state to ERetriveIAP
- iState = ERetriveIAP;
- SetActive();
-
-
-
+ iState = ERetriveIAP;
+ SetActive();
+
#else
ConnectIAP();
#endif
+ }
}
- }
- else
- iTrace->Trace(_L("CSuplConnection::Connect : Conn in progress, request queued"), KTraceFileName, __LINE__);
+ else
+ iTrace->Trace(
+ _L(
+ "CSuplConnection::Connect : Conn in progress, request queued"),
+ KTraceFileName, __LINE__);
// Log
- iTrace->Trace(_L("CSuplConnection::Connect:Exit"), KTraceFileName, __LINE__);
+ iTrace->Trace(_L("CSuplConnection::Connect:Exit"), KTraceFileName,
+ __LINE__);
}
// -----------------------------------------------------------------------------
@@ -1324,6 +1364,7 @@
SetActive();
}
}
+
// -----------------------------------------------------------------------------
// CSuplConnection::ConnectIAP
// Makes a socket connection to Network