supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplconnrequestor.cpp
branchRCL_3
changeset 55 ea98413ce11f
parent 49 10852b179f64
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplconnrequestor.cpp	Wed Sep 15 12:40:28 2010 +0300
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplconnrequestor.cpp	Wed Oct 13 15:01:35 2010 +0300
@@ -47,8 +47,11 @@
     				 						 iCommMgr(aCommMgr), 
     				 						 iProtocolManager(aProtoMgr),
     				 						 iPort(aPort),
-    				 						 iObserver( aObserver),
-    				 						 iTriggerSession(EFalse)
+    				 						 iObserver( aObserver),    				 						  
+    				 						 iIapDialogShown(EFalse),
+    				 						 iIapDlgTimerExpired(EFalse),    				 			            
+    				 			             iIsTimeoutDialogTimerStarted(EFalse),
+											 iTriggerSession(EFalse)
     {
 			
     }
@@ -75,7 +78,7 @@
     	
     	iCurrentSLPId = KErrNotFound;
     	
-    
+    	iDialogTimer = COMASuplDialogTimer::NewL(*this);
     }
 
 // -----------------------------------------------------------------------------
@@ -105,8 +108,13 @@
 COMASuplConnRequestor::~COMASuplConnRequestor()
     {
     	Cancel();
-    
-	  	delete iSuplSettings;
+    	if(iDialogTimer)
+    	    {
+    	    iDialogTimer->Cancel();
+    	    delete iDialogTimer;
+    	    iDialogTimer = NULL;
+    	    }
+    	delete iSuplSettings;
     	delete iTrace;
     	delete iFallBackHandler;
     }
@@ -147,14 +155,27 @@
 						buffer.Copy(_L("No access point configured for "));
 						buffer.Append(iHostAddress);
 						iTrace->Trace(buffer,KTraceFileName, __LINE__); 				
-						buffer.Copy(_L("Calling CreateConnection with no IAP"));
-						iTrace->Trace(buffer,KTraceFileName, __LINE__);
-						iConnection = iCommMgr.CreateConnectionL(iHostAddress,iTls,iPskTls,iPort,-1);
-						OpenConnection();
+						if( isIapDialogShown )
+						    {
+						    TInt err = iProtocolManager.LaunchSettingsUI(this,iHostAddress);
+						    if(err != KErrNone)
+                                {
+                                buffer.Copy(_L("Error in launching UI : "));
+                                buffer.AppendNum(err);
+                                iTrace->Trace(buffer,KTraceFileName, __LINE__);                 
+                                iHostAddress.Zero();
+                                iObserver.OperationCompleteL(err);
+                                }
+						        else
+						        iIapDialogShown = ETrue;
+						    }
+						
 						
 					}
 				else
 				    {
+				    iIsTimeoutDialogTimerStarted = EFalse;
+    			    iDialogTimer->Cancel();
 				    buffer.Copy(_L("Connecting to "));
 				    buffer.Append(iHostAddress);
 				    iTrace->Trace(buffer,KTraceFileName, __LINE__); 				
@@ -174,8 +195,11 @@
 // COMASuplConnRequestor::OpenConnection
 // -----------------------------------------------------------------------------
 //    
-void COMASuplConnRequestor::CreateConnectionL(TInt /*aDialogTimeOutDelay*/, TBool aTriggerSession)
+void COMASuplConnRequestor::CreateConnectionL(TInt aDialogTimeOutDelay, TBool aTriggerSession)
     {
+    iIsTimeoutDialogTimerStarted = ETrue;
+    
+    iDialogTimer->StartTimer(aDialogTimeOutDelay); 
     CreateConnectionL(aTriggerSession);
     }
 // -----------------------------------------------------------------------------
@@ -452,7 +476,57 @@
 		return result;
 	}
 	
+// -----------------------------------------------------------------------------
+// COMASuplConnRequestor::SettingsUICompleted
+// 
+// -----------------------------------------------------------------------------
 
+void COMASuplConnRequestor::SettingsUICompletedL(TInt aError)
+	{
+		TBuf<128> buffer(_L("COMASuplConnRequestor:SettingsUICompleted Error: "));
+		buffer.AppendNum(aError);
+		iTrace->Trace(buffer,KTraceFileName, __LINE__); 
+		
+		if (iIsTimeoutDialogTimerStarted)
+		    {                
+		    iTrace->Trace(_L("COMASuplSession::SettingsUICompleted, stopping timer "), KTraceFileName, __LINE__);
+		    iIsTimeoutDialogTimerStarted = EFalse;                    
+		    iDialogTimer->StopTimer();
+		    }
+		if (iIapDlgTimerExpired)
+		    {
+		    iIapDlgTimerExpired = EFalse;
+		    iIapDialogShown = EFalse;
+		    iProtocolManager.LaunchSuplDialogTimeoutUI(this);
+		    iObserver.OperationCompleteL(KErrNone);
+		    return;
+		    }
+		if(aError == KErrNone)
+			{
+				TBuf<100> IapName;
+				TInt err = iProtocolManager.GetLastUsedAccessPoint(IapName,iIAPId);
+				 if(err == KErrNone)
+					{
+						buffer.Copy(_L("Connecting to "));
+						buffer.Append(iHostAddress);
+						buffer.Append(_L(" using IAP "));
+						buffer.Append(IapName);
+						iTrace->Trace(buffer,KTraceFileName, __LINE__); 				
+						iConnection = iCommMgr.CreateConnectionL(iHostAddress,iTls,iPskTls,iPort,iIAPId);
+						SaveAccessPoint(IapName);
+						OpenConnection();
+					}
+				 else
+				 	{
+				 		iObserver.OperationCompleteL(err);	
+				 	}	
+			}
+		else
+			{
+				iObserver.OperationCompleteL(aError);	
+			}	
+		
+	}
 
 // -----------------------------------------------------------------------------
 // COMASuplConnRequestor::SaveAccessPoint
@@ -520,13 +594,25 @@
 			iFallBackHandler->UpdateSLPListForHomeUsage(aHomeNetwork);
 }
 
+// -----------------------------------------------------------------------------
+// COMASuplConnRequestor::DialogTimerExpiredL
+// Checks whether UI is displayed or not previously
+// 
+// -----------------------------------------------------------------------------
+void COMASuplConnRequestor::DialogTimerExpiredL()
+{
+   iTrace->Trace(_L("COMASuplConnRequestor:Timer Expired for SUPL IAP Dialog"), KTraceFileName, __LINE__); 
+
+    if (!iIapDialogShown)
+        iProtocolManager.LaunchSuplDialogTimeoutUI(this);
+    else
+        iIapDlgTimerExpired = ETrue;  
+    return; 
+}
 
 TUint COMASuplConnRequestor::GetPortNumber()
 	{
-		if(iConnection)
-			return iConnection->GetPortNumberUsed();
-		else 
-			return 0;
+	return iConnection->GetPortNumberUsed();
 	}