supl/locationomasuplprotocolhandler/protocolhandler/src/epos_comasuplprotocolmanager.cpp
changeset 0 667063e416a2
child 4 42de37ce7ce4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationomasuplprotocolhandler/protocolhandler/src/epos_comasuplprotocolmanager.cpp	Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,764 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:   SUPL protocol manager implementation.i.e. OMA SUPL implementation 
+*
+*/
+
+
+#include <centralrepository.h>
+#include <ecom/ecom.h> 
+#include <flogger.h>
+#include <CoreApplicationUIsSDKCRKeys.h>
+
+#include "epos_csuplsessionbase.h"
+#include "epos_comasuplasnbase.h"
+#include "epos_comasuplasnmessagebase.h"
+#include "epos_csuplprotocolmanagerbase.h"
+#include "lbs/epos_comasuplposhandlerbase.h"
+#include "epos_suplconstants.h"
+#include "epos_csuplsettings.h"
+#include "epos_csuplsettingsinternal.h"
+#include "epos_suplterminalconstants.h"
+	
+#include "epos_comasuplprotocolmanager.h"
+#include "epos_csuplcommunicationmanager.h"
+#include "epos_comasuplsettings.h"
+#include "epos_omasuplconstants.h"
+#include "epos_comasupltrace.h"
+#include "epos_comasuplcommonconfig.h"
+#include "epos_comasuplinitilizerequestor.h"
+
+_LIT(KTraceFileName,"SUPL_OMA_PH::EPos_COMASUPLProtocolManager.cpp");
+
+const TInt KMaxIMSILen = 20;
+
+// -----------------------------------------------------------------------------
+// ResetAndDestroy()
+// Resets & destroys array if leave occurs
+// -----------------------------------------------------------------------------
+void ResetAndDestroy(TAny* aArray)
+	{
+	((RImplInfoPtrArray*)aArray)->ResetAndDestroy();
+	}
+
+// ============================ MEMBER FUNCTIONS ===============================    
+// Create instance of concrete ECOM interface implementation
+EXPORT_C COMASUPLProtocolManager* COMASUPLProtocolManager::NewL()
+	{
+	COMASUPLProtocolManager* self = new(ELeave) COMASUPLProtocolManager();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	} 
+ 
+// Destructor.
+EXPORT_C COMASUPLProtocolManager::~COMASUPLProtocolManager()
+	{
+    if( !isPH2Shared )
+        {
+        delete iOMASuplProtocolHandler1;
+        }
+    
+    delete iOMASuplProtocolHandler2;
+    iOMASuplProtocolHandler2 = NULL;
+
+	delete iCommonConfig;
+	iCommonConfig = NULL;
+	
+	delete iTrace;	
+	iTrace = NULL;
+	
+	delete iOMASuplAsnHandlerBaseImpl;
+	iOMASuplAsnHandlerBaseImpl = NULL;
+	
+	delete iOMASuplInitilizeRequestor;
+	iOMASuplInitilizeRequestor=NULL;
+	
+	delete iOMASuplDeInitilizer;
+	iOMASuplDeInitilizer = NULL;
+	
+	}
+
+// Constructor
+EXPORT_C COMASUPLProtocolManager::COMASUPLProtocolManager() : 
+										iTrace(NULL),  
+                                        iInitilizationRequestStatus(NULL),
+                                        iInitilizationRequestStatus2(NULL),
+                                        iDeInitRequestStatus(NULL),
+                                        iOMASuplInitilizeRequestor(NULL),
+                                        iOMASuplProtocolHandler1(NULL),
+                                        iOMASuplProtocolHandler2(NULL),
+                                        iCommonConfig(NULL),
+                                        iCommManager(NULL),
+                                        iIsInitilized(EFalse),
+                                        isPH2Shared(EFalse),
+                                        iIsPhDeinitialized1(EFalse),
+                                        iIsPhDeinitialized2(EFalse)
+                                        
+    {
+	// no implementation required
+	}
+
+// Second phase construction.
+void COMASUPLProtocolManager::ConstructL()
+	{
+    iTrace = COMASuplTrace::NewL();	
+	LoadOMASUPLPluginsL();
+	iTrace->Trace(_L("COMASUPLProtocolManager::ConstructL"), KTraceFileName, __LINE__);
+
+	iCommonConfig = COMASuplCommonConfig::NewL();
+	iOMASuplInitilizeRequestor = COMASuplInitilizeRequestor::NewL(
+										iCommonConfig->iPosHandler,
+										*this,
+										iCommonConfig->iSuplSettings);
+	
+	iOMASuplDeInitilizer = COMASuplDeInitilizer::NewL(*this);
+	
+	TRAPD(err,iOMASuplAsnHandlerBaseImpl = COMASuplAsnHandlerBase::NewL(1));
+    
+    if( KErrNone != err )
+        {
+        TRAP(err,iOMASuplAsnHandlerBaseImpl = COMASuplAsnHandlerBase::NewL(2));
+        }
+	}
+    
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::CreateNewSessionL, 
+// Creates new session 
+// it transfers ownership to callee
+// 
+// -----------------------------------------------------------------------------
+//    
+EXPORT_C CSuplSessionBase* COMASUPLProtocolManager::CreateNewSessionL(
+										CSUPLProtocolManagerBase::TSuplReqType aRequestType, 
+										TInt aIpcSessionId, 
+										RSuplTerminalSubSession::TSuplServiceType aSuplService)
+	{
+    if(!iIsInitilized) // if its not initilized, then leave with KErrSuplUnInitilized
+	    User::LeaveIfError(KErrOMASuplUnInitilized);
+    
+    if( aSuplService == RSuplTerminalSubSession::ESUPL_1_0 )
+	    {
+        if(iOMASuplProtocolHandler1)
+            {
+            return iOMASuplProtocolHandler1->CreateNewSessionL(
+            							aRequestType, 
+            							aIpcSessionId, 
+            							aSuplService);
+            }
+        return NULL;
+	    }
+		
+	else if( aSuplService == RSuplTerminalSubSession::ESUPL_2_0 )
+	    {
+	    if(iOMASuplProtocolHandler2)
+	        {
+	        return iOMASuplProtocolHandler2->CreateNewSessionL(
+	        							aRequestType, 
+	        							aIpcSessionId, 
+	        							aSuplService);
+	        }
+        return NULL;
+	    }
+	else
+	    {
+        return NULL;
+	    }
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::InitializeL 
+// Does the connect to ETel. 
+// Intilize POS if present 
+// 
+// -----------------------------------------------------------------------------
+//    
+EXPORT_C  void COMASUPLProtocolManager::InitializeL(
+										CSuplCommunicationManager* aCommManager,
+										TRequestStatus& aInitilizationRequestStatus)
+	{
+	iInitilizationRequestStatus = &aInitilizationRequestStatus;
+    *iInitilizationRequestStatus = KRequestPending;
+	if(iIsInitilized) 
+		{
+		CompleteInitilization(KErrNone);
+		return;	
+		}
+
+    iCommManager = aCommManager;			
+	iIsInitilized = EFalse;		    
+	   
+	if(!iCommManager) 
+		{
+		CompleteInitilization(KErrArgument);
+		return;	
+		}
+	
+	iOMASuplInitilizeRequestor->DoInitilizationL();
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::CancelInitialize 
+// Cancel Initilization of Protocol manager
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C  void COMASUPLProtocolManager::CancelInitialize() 
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager::CancelInitialize"), 
+										KTraceFileName, __LINE__);
+	
+	CompleteInitilization(KErrCancel);
+	iOMASuplInitilizeRequestor->Cancel();		
+	}
+   
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::RunSessionL
+// Starts the SUPL Sesssion for Terminal Initiated Location Request
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void COMASUPLProtocolManager::RunSessionL(
+											CSuplSessionBase *const  aSuplSession,
+											TRequestStatus& aStatus,
+											const TDesC& aHslpAddress, 
+											TBool aFallBack,
+											TBool aFirstReq,
+											TInt aAllowedCapabilities,
+											TInt aRequestID)
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager::RunSessionL"), KTraceFileName, __LINE__);
+	
+	aStatus = KRequestPending;
+	TRequestStatus *status = &aStatus; 
+	if( iIsInitilized && iOMASuplProtocolHandler1 )
+		{
+		iOMASuplProtocolHandler1->RunSessionL(      
+											aSuplSession,
+                                            aStatus,
+                                            aHslpAddress,
+                                            aFallBack,
+                                            aFirstReq,
+                                            aAllowedCapabilities,
+                                            aRequestID);
+		}    
+	else
+	    {
+	    User::RequestComplete(status,KErrOMASuplUnInitilized); 
+	    }
+	}
+	
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::RunSessionL
+// Starts the SUPL Sesssion for Terminal Initiated Location Request,with QoP support
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void COMASUPLProtocolManager::RunSessionL(
+                            CSuplSessionBase *const aSuplSession,
+                            TRequestStatus& aStatus,
+                            const TDesC& aHslpAddress, 
+                            TBool aFallBack,
+                            TBool aFirstReq,
+  							TInt aAllowedCapabilities,
+  							TSuplTerminalQop& aQop, 
+  							TInt aRequestID)
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager::RunSessionL"), KTraceFileName, __LINE__);
+	
+	aStatus = KRequestPending;
+	
+	TRequestStatus *status = &aStatus; 
+    if( iIsInitilized && iOMASuplProtocolHandler1 )
+        {
+        iOMASuplProtocolHandler1->RunSessionL(
+                                            aSuplSession,
+                                            aStatus,
+                                            aHslpAddress,
+                                            aFallBack,
+                                            aFirstReq,
+                                            aAllowedCapabilities,
+                                            aQop,
+                                            aRequestID);
+        }    
+    else
+        {
+        User::RequestComplete(status,KErrOMASuplUnInitilized); 
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::DestroySession
+// Deletes specified session & removes from array.
+// Returns System wide error,if any occurs
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt COMASUPLProtocolManager::DestroySession(CSuplSessionBase* aSuplSession)	
+	{
+	iTrace->Trace(_L("Start of COMASUPLProtocolManager::DestroySession"), KTraceFileName, __LINE__);
+	// Forward to PH1 first
+	TInt err = KErrNone;
+	if(iOMASuplProtocolHandler1)
+	    {
+	    err = iOMASuplProtocolHandler1->DestroySession(aSuplSession);
+	    }
+	// If session is not found in PH1 then forward it to PH2 else just return the error 
+	if( KErrArgument == err && iOMASuplProtocolHandler2)
+        {
+        return iOMASuplProtocolHandler2->DestroySession(aSuplSession);
+        }
+	return err;
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::HandlePacket
+// Handles Supl packets ,  received from SLP
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void COMASUPLProtocolManager::HandlePacket(const TDesC8& aPacket, TUint aPortNum)
+	{
+	iTrace->Trace(_L("Start of COMASUPLProtocolManager::HandlePacket"), 
+											KTraceFileName, __LINE__);
+	
+	TInt major;
+	TInt errorCode = GetSuplVersion(major,aPacket);
+	if(errorCode != KErrNone )		
+		{			
+		HandlePacketError(errorCode);
+		return;
+		} 
+	if( major == 1 )
+		{
+		if(iOMASuplProtocolHandler1)
+		    {
+		    iOMASuplProtocolHandler1->HandlePacket(aPacket,aPortNum);
+		    }
+		}
+	else 
+		{
+		if(iOMASuplProtocolHandler2)
+            {
+            iOMASuplProtocolHandler2->HandlePacket(aPacket,aPortNum);
+            }	
+		}			
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::HandlePacketError
+// Handles Supl packet receiving errors
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void COMASUPLProtocolManager::HandlePacketError(TInt /*aError*/)
+	{
+	// Do nothing for now
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::CancelRunSession
+// Cancels run session operation if its going on.
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void COMASUPLProtocolManager::CancelRunSession(CSuplSessionBase* aSuplSession)
+	{
+	// Log
+	iTrace->Trace(_L("COMASUPLProtocolManager::CancelRunSession"), KTraceFileName, __LINE__);
+	if(iOMASuplProtocolHandler1)
+	    {
+	    iOMASuplProtocolHandler1->CancelRunSession(aSuplSession);
+	    }
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::CompleteInitilization
+// Completes initilization AO with error or without error.
+// 
+// -----------------------------------------------------------------------------
+//
+void COMASUPLProtocolManager::CompleteInitilization(TInt aCompletionCode)
+	{	
+	if(iInitilizationRequestStatus)
+		User::RequestComplete(iInitilizationRequestStatus,aCompletionCode);
+	
+	iTrace->Trace(_L("COMASUPLProtocolManager::InitializeL"), KTraceFileName, __LINE__);
+	if(iOMASuplProtocolHandler1)
+	    {
+	    TRAP_IGNORE(iOMASuplProtocolHandler1->InitializeL(iCommManager,*iInitilizationRequestStatus2));
+	    }
+	if(iOMASuplProtocolHandler2)
+	    {
+	    TRAP_IGNORE(iOMASuplProtocolHandler2->InitializeL(iCommManager,*iInitilizationRequestStatus));
+	    }
+	iTrace->Trace(_L("InitializeL completed"), KTraceFileName, __LINE__);	
+	}
+    
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::InitilizationCompletedL
+// Informs to client about Initilization of POS ,thro' active object
+// 
+// -----------------------------------------------------------------------------
+//
+void COMASUPLProtocolManager::InitilizationCompletedL(TInt aError)
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager::InitilizationCompletedL Start"), 
+													KTraceFileName, __LINE__);
+	TInt networkMode  = GetNetworkModeL();
+	
+	if ( networkMode == ECoreAppUIsNetworkConnectionNotAllowed 
+			&& aError == KErrGeneral)
+		{
+		aError = KErrNone;
+		}
+
+	if(aError == KErrNone)
+		{   
+		iCommonConfig->iIMSI.Close();
+	    iCommonConfig->iIMSI.Create( KMaxIMSILen );
+	    aError = iOMASuplInitilizeRequestor->GetIMSI( iCommonConfig->iIMSI );
+
+	    if( aError == KErrNotSupported || aError == KErrNone 
+	    					|| (networkMode == ECoreAppUIsNetworkConnectionNotAllowed 
+	    						&& aError == KErrNotReady))
+	        {
+	        iIsInitilized = ETrue;	
+	        aError = KErrNone;
+	        }
+		}
+	
+	TBuf<64> buf(_L("COMASUPLProtocolManager::InitilizationCompletedL Error : "));
+	buf.AppendNum(aError);
+	iTrace->Trace(buf,KTraceFileName, __LINE__);
+	
+	SetCommonConfig(iCommonConfig);
+	CompleteInitilization(aError);
+	iTrace->Trace(_L("COMASUPLProtocolManager::InitilizationCompletedL End"), 
+						KTraceFileName, __LINE__);
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::HandleSuplMessageL
+// Informs to client about Initilization of POS ,thro' active object
+// 
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C void COMASUPLProtocolManager::HandleSuplMessageL(
+											CSuplSessionBase *const aSuplSession,
+											TRequestStatus& aStatus,HBufC8* aMessage)
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager::HandleSuplMessageL"), KTraceFileName, __LINE__);
+	
+	TRequestStatus* status =  &aStatus;
+
+	if(!aMessage)
+		{
+		iTrace->Trace(_L("Received packet is Empty."), KTraceFileName, __LINE__);
+		if(status)
+			User::RequestComplete(status,KErrBadDescriptor);
+		return;
+		}
+
+	TInt major = aSuplSession->GetSUPLVersion();	
+	if( major == 1 )
+		{
+		if(iOMASuplProtocolHandler1)
+		    {
+		    iOMASuplProtocolHandler1->HandleSuplMessageL(aSuplSession,aStatus,aMessage);
+		    }
+		}
+	else 
+		{
+		if(iOMASuplProtocolHandler2)
+		    {
+		    iOMASuplProtocolHandler2->HandleSuplMessageL(aSuplSession,aStatus,aMessage);
+		    }
+		}			
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::DeInitialize
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+void COMASUPLProtocolManager::DeInitialize(TRequestStatus& aDeInitRequestStatus)
+    {
+	iTrace->Trace(_L("COMASUPLProtocolManager::DeInitialize"), KTraceFileName, __LINE__);
+	iDeInitRequestStatus = &aDeInitRequestStatus;
+	
+	if(iOMASuplProtocolHandler1 && !iIsPhDeinitialized1)
+	    {
+	    iTrace->Trace(_L("COMASUPLProtocolManager::DeInitialize ph1 issued"), KTraceFileName, __LINE__);
+	    iIsPhDeinitialized1 = ETrue;
+	    iOMASuplDeInitilizer->Deinitialize(iOMASuplProtocolHandler1);
+	    }
+	else
+		{
+		iTrace->Trace(_L("COMASUPLProtocolManager::DeInitialize ph1 not present"), KTraceFileName, __LINE__);
+		DeInitilizationCompletedL( KErrNotFound ); //ph1 is not present.
+		}
+	
+    }            
+	
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::CancelDeInitialize
+// 
+// 
+// -----------------------------------------------------------------------------
+//	
+void COMASUPLProtocolManager::CancelDeInitialize()
+    {
+	iTrace->Trace(_L("COMASUPLProtocolManager::CancelDeInitialize"), KTraceFileName, __LINE__);
+	if(iOMASuplProtocolHandler1 && iIsPhDeinitialized1 )
+        {
+        iTrace->Trace(_L("COMASUPLProtocolManager::CancelDeInitialize ph1 issued"), KTraceFileName, __LINE__);
+        iOMASuplProtocolHandler1->CancelDeInitialize();
+        }
+	    
+	if(iOMASuplProtocolHandler2 && iIsPhDeinitialized2 )
+        {
+        iTrace->Trace(_L("COMASUPLProtocolManager::CancelDeInitialize ph2 issued"), KTraceFileName, __LINE__);
+        iOMASuplProtocolHandler2->CancelDeInitialize();
+        }	
+    }
+   
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::GetNetworkModeL
+// Logs
+// -----------------------------------------------------------------------------
+TInt COMASUPLProtocolManager::GetNetworkModeL()
+	{	
+	TInt networkMode;
+	// get network mode
+	CRepository* centralRepository = CRepository::NewLC(KCRUidCoreApplicationUIs);
+	User::LeaveIfError(centralRepository->Get(KCoreAppUIsNetworkConnectionAllowed, networkMode));
+    CleanupStack::PopAndDestroy(centralRepository);
+    return networkMode;
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::LoadOMASUPLPluginsL
+// 
+// -----------------------------------------------------------------------------
+//
+void COMASUPLProtocolManager::LoadOMASUPLPluginsL()
+    {
+	iTrace->Trace(_L("COMASUPLProtocolManager::LoadOMASUPLPlugins"), KTraceFileName, __LINE__); 
+	
+    const TUid KOMASUPLProtocolInterfaceUid 		= {0x102073CB};
+    
+    const TUid KOMASuplProtocolImplementationUid1 	= {0x2002678D};
+    
+    const TUid KOMASuplProtocolImplementationUid2 	= {0x2002678E};
+    
+    RImplInfoPtrArray pluginArray;
+    
+    REComSession& EComServerSession = REComSession::OpenL();
+    
+    CleanupStack::PushL(TCleanupItem(*ResetAndDestroy, &pluginArray));
+    REComSession::ListImplementationsL(KOMASUPLProtocolInterfaceUid, pluginArray);
+    
+    if(pluginArray.Count() > 0)    
+        {         
+        TRAPD(err1,iOMASuplProtocolHandler1 = 
+        				CSUPLProtocolManagerBase::NewL(KOMASuplProtocolImplementationUid1));
+        				
+        TBuf<64> buf(_L("OMA SUPL 1.0 Plugin loaded with error : "));
+        buf.AppendNum(err1);
+        iTrace->Trace(buf,KTraceFileName, __LINE__);        	
+
+        TRAPD(err2,iOMASuplProtocolHandler2 = 
+        				CSUPLProtocolManagerBase::NewL(KOMASuplProtocolImplementationUid2));
+        				
+        buf.Copy(_L("OMA SUPL 2.0 Plugin loaded with error : "));
+        buf.AppendNum(err2);
+        iTrace->Trace(buf,KTraceFileName, __LINE__);
+
+        // if PH1 is not available but PH2 is,then use PH2 whenever there is reference to PH1.
+        if( KErrNone != err1 && KErrNone == err2 )
+            {
+            isPH2Shared = ETrue;
+            iOMASuplProtocolHandler1 = iOMASuplProtocolHandler2;
+            }
+        }
+    else
+        {
+        iTrace->Trace(_L("No Plugins Found for OMA Implementation..."), KTraceFileName, __LINE__);
+        User::LeaveIfError(KErrArgument);
+        }   
+        
+    CleanupStack::PopAndDestroy(1);
+    EComServerSession.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::RunSuplTriggerSessionL
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void COMASUPLProtocolManager::RunSuplTriggerSessionL(
+  					CSuplSessionBase *const aSuplSession,
+  					TRequestStatus& aStatus,
+  					TSuplTerminalPeriodicTrigger& aPTrigger,
+  					const TDesC& aHslpAddress, 
+  					TBool aFallBack,
+  					TInt aAllowedCapabilities,
+  					TInt aRequestID
+  					)
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager::RunSuplTriggerSessionL"), KTraceFileName, __LINE__);
+	aStatus = KRequestPending;
+	TRequestStatus *status = &aStatus; 
+	if( iIsInitilized && iOMASuplProtocolHandler2 )
+        {
+        iOMASuplProtocolHandler2->RunSuplTriggerSessionL(
+                aSuplSession,
+                aStatus,
+                aPTrigger,
+                aHslpAddress,
+                aFallBack,
+                aAllowedCapabilities,
+                aRequestID);           
+        }    
+	else
+	    {
+	    User::RequestComplete(status,KErrOMASuplUnInitilized); 
+	    }	
+	} 
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::CancelTriggerringSession
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void COMASUPLProtocolManager::CancelSuplTriggerSession(CSuplSessionBase* aSuplSession)
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager::CancelSuplTriggerSession"), KTraceFileName, __LINE__);
+	if(iOMASuplProtocolHandler2)
+	    {
+	    iOMASuplProtocolHandler2->CancelSuplTriggerSession(aSuplSession);
+	    }
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::NotifyTriggerFired
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void COMASUPLProtocolManager::NotifyTriggerFiredL(
+    				 CSuplSessionBase *const aSuplSession,
+  					 TRequestStatus& aStatus, 
+        			 TSuplTriggerFireInfo& aFireInfo)
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager::NotifyTriggerFired"), KTraceFileName, __LINE__);
+	if(iOMASuplProtocolHandler2)
+        {
+        iOMASuplProtocolHandler2->NotifyTriggerFiredL(aSuplSession,aStatus,aFireInfo);
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::SetCommonConfig
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void COMASUPLProtocolManager::SetCommonConfig(COMASuplCommonConfig*& aCommmonConfig)
+    {
+    if(iOMASuplProtocolHandler1)
+        {
+        COMASUPLProtocolManager* ph1= (COMASUPLProtocolManager*) (iOMASuplProtocolHandler1);
+        ph1->SetCommonConfig(aCommmonConfig);
+        }
+    
+    if(iOMASuplProtocolHandler2)
+        {
+        COMASUPLProtocolManager* ph2= (COMASUPLProtocolManager*) (iOMASuplProtocolHandler2);
+        ph2->SetCommonConfig(aCommmonConfig);
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::GetSuplVersion
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+TInt COMASUPLProtocolManager::GetSuplVersion(TInt& aMajor,const TPtrC8& aSuplAsnMessage )
+    {     
+    if( !iOMASuplAsnHandlerBaseImpl )
+        {
+        return KErrNotFound;
+        }
+    TOMASuplVersion suplVersion;
+    TInt err1;
+    TRAP_IGNORE(suplVersion = iOMASuplAsnHandlerBaseImpl->GetSuplMessageVersionL(
+    										err1,
+    										aSuplAsnMessage));//Ignore err2                         
+              
+    if( err1 != KErrNone )      
+        {           
+        return err1;
+        } 
+
+    TInt minor,servInd;
+    suplVersion.SuplVersion(aMajor,minor,servInd);
+    return KErrNone;
+    }
+    
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::GetSUPLMessageVersionL
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt COMASUPLProtocolManager::GetSUPLMessageVersionL(
+											TInt& aMajorVersion, 
+											const TDesC8& aReceivedMessage)    
+	{
+	return GetSuplVersion(aMajorVersion,aReceivedMessage);
+	}
+
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager::DeInitilizationCompletedL
+// 
+// 
+// -----------------------------------------------------------------------------
+//
+void COMASUPLProtocolManager::DeInitilizationCompletedL(TInt /*aError*/)
+	{
+	iTrace->Trace(_L("COMASUPLProtocolManager::DeInitilizationCompletedL"), KTraceFileName, __LINE__);
+	iIsPhDeinitialized1 = EFalse;
+	if( !iIsPhDeinitialized2 )
+		{
+		if( iOMASuplProtocolHandler2 )
+		    {
+		    iTrace->Trace(_L("COMASUPLProtocolManager::DeInitilizationCompletedL ph2 issued"), KTraceFileName, __LINE__);
+		    iIsPhDeinitialized2 = ETrue;
+		    iOMASuplDeInitilizer->Deinitialize(iOMASuplProtocolHandler2);
+		    return;
+		    }
+		}
+	iTrace->Trace(_L("COMASUPLProtocolManager::DeInitilizationCompletedL complete"), KTraceFileName, __LINE__);
+	iIsPhDeinitialized2 = EFalse; //Reset the flag
+	User::RequestComplete( iDeInitRequestStatus,KErrNone );
+	}
+
+// end of file