--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationsuplfw/gateway/src/epos_csuplipcsubsession.cpp Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,732 @@
+/*
+* Copyright (c) 2005-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: Base class for SUPL subsessions
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <s32mem.h>
+
+#include "epos_suplterminalipc.h"
+#include "epos_suplterminalerrors.h"
+#include "epos_csuplprotocolmanagerbase.h"
+#include "epos_suplterminalqop.h"
+#include "epos_suplterminal.h"
+#include "epos_csuplsessionmanager.h"
+#include "epos_csuplglobal.h"
+#include "epos_csuplserverpanic.h"
+#include "epos_csuplipcsubsession.h"
+#include "epos_suplparameters.h"
+#include "epos_csuplsettings.h"
+#include "epos_csuplsettingsinternal.h"
+#include "epos_csuplsettingparams.h"
+
+// CONSTANTS
+//#ifdef _DEBUG
+_LIT(KTraceFileName, "SUPL_GW::epos_csuplipcsubsession.cpp");
+//#endif
+
+// ==================== LOCAL FUNCTIONS ====================
+
+inline TPositionInfo& PositionInfo(HBufC8* aBuffer)
+ {
+ DEBUG_TRACE("PositionInfo", __LINE__)
+ return reinterpret_cast<TPositionInfo&>
+ (const_cast<TUint8&>(*aBuffer->Ptr()));
+ }
+
+inline TDes& ServerAddress(HBufC8* aBuffer)
+ {
+ DEBUG_TRACE("ServerAddress", __LINE__)
+ return reinterpret_cast<TDes&>
+ (const_cast<TUint8&>(*aBuffer->Ptr()));
+ }
+
+inline TSuplTriggerFireInfo& TriggerInfo(HBufC8* aBuffer)
+ {
+ DEBUG_TRACE("TriggerInfo", __LINE__)
+ return reinterpret_cast<TSuplTriggerFireInfo&>
+ (const_cast<TUint8&>(*aBuffer->Ptr()));
+ }
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CSuplIPCSubSession::CSuplIPCSubSession()
+ {
+ }
+
+// EPOC default constructor can leave.
+void CSuplIPCSubSession::ConstructL(CSuplSessionManager& aSessnMgr,
+ CSUPLProtocolManagerBase::TSuplReqType aReqType,
+ TInt aIpcSessionId,
+ RSuplTerminalSubSession::TSuplServiceType aSuplService)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::ConstructL", __LINE__)
+ iSuplService = aSuplService;
+ iSuplSession = aSessnMgr.CreateNewSessionL(aReqType, aIpcSessionId, aSuplService);
+ iSuplSessnReq = CSuplSessionRequest::NewL(aSessnMgr, iSuplSession, this);
+ iReqType=0;
+ if(!iSuplSession)
+ User::Leave(KErrGeneral);
+ }
+
+// Two-phased constructor.
+CSuplIPCSubSession* CSuplIPCSubSession::NewLC(CSuplSessionManager& aSessnMgr,
+ CSUPLProtocolManagerBase::TSuplReqType aReqType,
+ TInt aIpcSessionId,
+ RSuplTerminalSubSession::TSuplServiceType aSuplService)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::NewLC", __LINE__)
+ CSuplIPCSubSession* self = new (ELeave) CSuplIPCSubSession();
+ CleanupClosePushL(*self);
+ TInt err=KErrNone;
+ TRAP(err, self->ConstructL(aSessnMgr, aReqType, aIpcSessionId, aSuplService));
+ if(err!=KErrNone)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::Could Not Create Session", __LINE__)
+ return NULL;
+ }
+ return self;
+ }
+
+// Destructor
+CSuplIPCSubSession::~CSuplIPCSubSession()
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::~CSuplIPCSubSession", __LINE__)
+ delete iSuplSessnReq;
+ if( iPositionBuffer )
+ delete iPositionBuffer;
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::ServiceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::ServiceL(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::ServiceL", __LINE__)
+
+ switch (aMessage.Function())
+ {
+ case ESuplTerminalSubssnSyncRunsession:
+ {
+ iReqType=ESuplTerminalSubssnSyncRunsession;
+ iMessage=aMessage;
+ HandleRunSessionL(aMessage);
+ }
+ break;
+ case ESuplTerminalSubssnAsyncRunsession:
+ {
+ iMessage=aMessage;
+ iReqType=ESuplTerminalSubssnAsyncRunsession;
+ HandleRunSessionL(aMessage);
+ }
+ break;
+ case ESuplTerminalSubssnAsyncRunsessionWithQop:
+ {
+ iMessage=aMessage;
+ iReqType=ESuplTerminalSubssnAsyncRunsessionWithQop;
+ HandleRunSessionL(aMessage);
+ }
+ break;
+ case ESuplTerminalSubssnSyncRunsessionWithQop:
+ {
+ iMessage=aMessage;
+ iReqType=ESuplTerminalSubssnSyncRunsessionWithQop;
+ HandleRunSessionL(aMessage);
+ }
+ break;
+ case ESuplTerminalSubssnSyncRunsessionWithServernameQop:
+ {
+ iMessage=aMessage;
+ iReqType=ESuplTerminalSubssnSyncRunsessionWithServernameQop;
+ HandleRunSessionL(aMessage);
+ }
+ break;
+ case ESuplTerminalSubssnASyncRunsessionWithServernameQop:
+ {
+ iMessage=aMessage;
+ iReqType=ESuplTerminalSubssnASyncRunsessionWithServernameQop;
+ HandleRunSessionL(aMessage);
+ }
+ break;
+ case ESuplTerminalSubssnSyncRunsessionServernameWithoutQop:
+ {
+ iMessage=aMessage;
+ iReqType=ESuplTerminalSubssnSyncRunsessionServernameWithoutQop;
+ HandleRunSessionL(aMessage);
+ }
+ break;
+ case ESuplTerminalSubssnASyncRunsessionServernameWithoutQop:
+ {
+ iMessage=aMessage;
+ iReqType=ESuplTerminalSubssnASyncRunsessionServernameWithoutQop;
+ HandleRunSessionL(aMessage);
+ }
+ break;
+
+ case ESuplTerminalSubssnGetServerAddress:
+ HandleGetServerAddressL(aMessage);
+ break;
+
+ case ESuplTerminalSubssnGetPosition:
+ HandleGetPositionL(aMessage);
+ break;
+
+ case ESuplTerminalSubssnCancelRunsession:
+ HandleRunSessionCancelRequestL(aMessage);
+ break;
+
+ case ESuplTerminalSubssnStartPeriodicTrigger:
+ {
+ iMessage=aMessage;
+ iReqType=ESuplTerminalSubssnStartPeriodicTrigger;
+ HandlePeriodicTriggerSessionL(aMessage);
+ }
+ break;
+
+ case ESuplTerminalSubssnStartPeriodicTriggerWithServer:
+ {
+ iMessage=aMessage;
+ iReqType=ESuplTerminalSubssnStartPeriodicTriggerWithServer;
+ HandlePeriodicTriggerSessionWithServernameL(aMessage);
+ }
+ break;
+
+ case ESuplTerminalSubssnStopTriggerSession:
+ {
+ iReqType = ESuplTerminalSubssnStopTriggerSession;
+ HandleStopTriggerringSessionL(aMessage);
+ break;
+ }
+ case ESuplTerminalSubssnNotifyTriggerFired:
+ {
+ iMessage=aMessage;
+ iReqType = ESuplTerminalSubssnNotifyTriggerFired;
+ HandleNotifyTriggerFiredL(aMessage);
+ break;
+ }
+ default:
+ User::Leave(KErrNotSupported);
+ }
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::NotifyServerShutdown
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::NotifyServerShutdown()
+ {
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::DestroySession
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::DestroySession(CSuplSessionManager& aSessnMgr)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::DestryoSession", __LINE__)
+ TInt errCode = aSessnMgr.DestroySession(iSuplSession);
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::HandleRunSessionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::HandleRunSessionL(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::HandleRunSessionL", __LINE__)
+
+ if (iSuplSessnReq->IsActive())
+ {
+ SuplGlobal::RequestComplete(aMessage, KErrAlreadyExists);
+ }
+
+ TInt setCaps = aMessage.Int0();
+ TBool firstReq = EFalse;
+
+ if (setCaps & 0x1000 )
+ firstReq = ETrue;
+
+ setCaps &= 0x00FF;
+
+ if(iReqType==ESuplTerminalSubssnAsyncRunsession||iReqType==ESuplTerminalSubssnSyncRunsession)
+ iSuplSessnReq->MakeSuplSessionRequestL(iSuplSession, aMessage.Int0(), aMessage.Int1(), firstReq);
+ else
+ if(iReqType==ESuplTerminalSubssnSyncRunsessionWithQop)
+ {
+ HBufC8* qopBuf = SuplGlobal::CopyClientBuffer8LC(aMessage,2);
+
+ TUint bufferSize = qopBuf->Size();
+
+ TSuplTerminalQop& qop = reinterpret_cast
+ <TSuplTerminalQop&>(const_cast<TUint8&>(*qopBuf->Ptr()));
+
+ iSuplSessnReq->MakeSuplSessionRequestL(iSuplSession, aMessage.Int0(), aMessage.Int1(),qop, firstReq);
+ CleanupStack::PopAndDestroy(qopBuf);
+ }
+ else
+ if(iReqType==ESuplTerminalSubssnAsyncRunsessionWithQop)
+ {
+ HBufC8* clientBuf = SuplGlobal::CopyClientBuffer8LC(aMessage,2);
+
+ TSuplTerminalQop& qop1=reinterpret_cast<TSuplTerminalQop&>
+ (const_cast<TUint8&>(*clientBuf->Ptr()));
+
+ iSuplSessnReq->MakeSuplSessionRequestL(iSuplSession, aMessage.Int0(), aMessage.Int1(),qop1, firstReq);
+
+ CleanupStack::PopAndDestroy(clientBuf);
+ }
+ else
+ if(iReqType==ESuplTerminalSubssnSyncRunsessionWithServernameQop||iReqType==ESuplTerminalSubssnASyncRunsessionWithServernameQop)
+ {
+ HBufC8* clientBuf = SuplGlobal::CopyClientBuffer8LC(aMessage,2);
+
+ TSuplParameters& suplStruct=reinterpret_cast<TSuplParameters&>
+ (const_cast<TUint8&>(*clientBuf->Ptr()));
+
+ iSuplSessnReq->MakeSuplSessionRequestL(iSuplSession, suplStruct.HslpAddress, suplStruct.FallBack, aMessage.Int0(), aMessage.Int1(),suplStruct.qop, firstReq);
+
+ CleanupStack::PopAndDestroy(clientBuf);
+ }
+ else
+ if(iReqType==ESuplTerminalSubssnSyncRunsessionServernameWithoutQop||iReqType==ESuplTerminalSubssnASyncRunsessionServernameWithoutQop)
+ {
+ HBufC8* clientBuf = SuplGlobal::CopyClientBuffer8LC(aMessage,2);
+
+ TSuplParameters& suplStruct1=reinterpret_cast<TSuplParameters&>
+ (const_cast<TUint8&>(*clientBuf->Ptr()));
+
+ iSuplSessnReq->MakeSuplSessionRequestL(iSuplSession, suplStruct1.HslpAddress, suplStruct1.FallBack, aMessage.Int0(), aMessage.Int1(), firstReq);
+
+ CleanupStack::PopAndDestroy(clientBuf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::HandleGetPositionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::HandleGetPositionL(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::HandleGetPositionL", __LINE__)
+ TInt err;
+ if (iSuplSession)
+ {
+ delete iPositionBuffer;
+ iPositionBuffer = NULL;
+ HBufC8* clientBuf = SuplGlobal::CopyClientBuffer8LC(aMessage, 0);
+ CleanupStack::Pop(clientBuf);
+ iPositionBuffer = clientBuf;
+ TPositionInfo& info = PositionInfo(iPositionBuffer);
+ TUint32 classType = info.PositionClassType();
+ TUint32 generic = EPositionGenericInfoClass;
+
+ if (classType & generic)
+ {
+ HPositionGenericInfo& hGeneric = static_cast <HPositionGenericInfo&> (info);
+ err=iSuplSession->GetPosition(hGeneric);
+ }
+ else
+ {
+ err=iSuplSession->GetPosition(info);
+ }
+ }
+ else
+ err = KErrNotFound;
+
+ CompleteGetPositionRequest(aMessage, err);
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::HandleGetServerAddressL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::HandleGetServerAddressL(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::HandleGetServerAddressL", __LINE__)
+ TInt err;
+ if (iSuplSession)
+ {
+ delete iPositionBuffer;
+ iPositionBuffer = NULL;
+ HBufC8* clientBuf = SuplGlobal::CopyClientBuffer8LC(aMessage, 0);
+ CleanupStack::Pop(clientBuf);
+ iPositionBuffer = clientBuf;
+ TDes& info = ServerAddress(iPositionBuffer);
+
+ // Please check this call... Need Tbuf16 as a parameter
+ err = iSuplSession->GetServerAddressL(info);
+
+ CompleteGetServerAddress(aMessage, err);
+ }
+ else
+ err = KErrNotFound;
+ }
+
+//----------------------------------------------------------------------------------------------------------
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::HandleRunSessionCancelRequestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::HandleRunSessionCancelRequestL(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::HandleCancelRequestL", __LINE__)
+
+ if (!iSuplSessnReq->IsActive()
+ ||!(iReqType==ESuplTerminalSubssnAsyncRunsession
+ || iReqType==ESuplTerminalSubssnAsyncRunsessionWithQop
+ || iReqType==ESuplTerminalSubssnASyncRunsessionWithServernameQop
+ || iReqType==ESuplTerminalSubssnASyncRunsessionServernameWithoutQop))
+ {
+ User::Leave(KErrNotFound);
+ }
+ iSuplSessnReq->CancelRunSessionRequest();
+ SuplGlobal::RequestComplete(aMessage, KErrNone);
+ CompleteRunSession(KErrCancel);
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::CompleteRunSession
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::CompleteRunSession(TInt aReason)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::CompleteRunSession", __LINE__)
+ if (!iMessage.IsNull())
+ {
+ iMessage.Complete(aReason);
+ }
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::CompleteTriggerRunSession
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::CompleteTriggerRunSession(TInt aReason)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::CompleteTriggerRunSession", __LINE__)
+ if (!iMessage.IsNull())
+ {
+ iMessage.Complete(aReason);
+ }
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::CompleteGetPositionRequest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::CompleteGetPositionRequest(
+ const RMessage2& aMessage,
+ TInt aReason)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::CompleteGetPositionRequest", __LINE__)
+ if (aReason == KErrNone)
+ {
+ TInt err = PackPositionData(aMessage);
+ // err - client cannot receive result data
+ //CompleteRunSession((err != KErrNone) ? err : aReason);
+ if (err != KErrNone)
+ aMessage.Complete(err);
+ else
+ aMessage.Complete(aReason);
+ }
+ else
+ {
+ //CompleteRunSession(aReason);
+ aMessage.Complete(aReason);
+ }
+ delete iPositionBuffer;
+ iPositionBuffer = NULL;
+ iReqType=0;
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::CompleteTriggerFiredNotifyRequest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::CompleteTriggerFiredNotifyRequest(TInt aReason)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::CompleteGetPositionRequest", __LINE__)
+ if (aReason == KErrNone)
+ PackTriggerData(iMessage);
+
+ if (!iMessage.IsNull())
+ {
+ iMessage.Complete(aReason);
+ }
+ delete iPositionBuffer;
+ iPositionBuffer = NULL;
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::CompleteGetServerAddress
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::CompleteGetServerAddress(const RMessage2& aMessage, TInt aReason)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::CompleteGetServerAddress", __LINE__)
+ if (aReason == KErrNone)
+ {
+ TInt err = PackServerAddressData(aMessage);
+ // err - client cannot receive result data
+ //CompleteRunSession((err != KErrNone) ? err : aReason);
+ if (err != KErrNone)
+ aMessage.Complete(err);
+ else
+ aMessage.Complete(aReason);
+ }
+ else
+ {
+ //CompleteRunSession(aReason);
+ aMessage.Complete(aReason);
+ }
+ delete iPositionBuffer;
+ iPositionBuffer = NULL;
+ iReqType=0;
+ }
+
+//------------------------------------------------------------------------------------------------
+// ---------------------------------------------------------
+// CSuplIPCSubSession::PackPositionData
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+TInt CSuplIPCSubSession::PackPositionData(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::PackPositionData", __LINE__)
+ TPositionInfo& info = PositionInfo(iPositionBuffer);
+
+ TPtr8 ptrToBuffer = iPositionBuffer->Des();
+ return SuplGlobal::Write(aMessage, 0, ptrToBuffer);
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::PackServerAddressData
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CSuplIPCSubSession::PackServerAddressData(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::PackServerAddressData", __LINE__)
+ TDes& info = ServerAddress(iPositionBuffer);
+
+ TPtr8 ptrToBuffer = iPositionBuffer->Des();
+ return SuplGlobal::Write(aMessage, 0, ptrToBuffer);
+ }
+
+//---------------------------------------------------------------------------------------------------
+// ---------------------------------------------------------
+// CSuplIPCSubSession::PackTriggerData
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+TInt CSuplIPCSubSession::PackTriggerData(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::PackTriggerData", __LINE__)
+ TSuplTriggerFireInfo& info = TriggerInfo(iPositionBuffer);
+
+ TPtr8 ptrToBuffer = iPositionBuffer->Des();
+ return SuplGlobal::Write(aMessage, 2, ptrToBuffer);
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::ProtocolHUnloaded
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::ProtocolHUnloaded() //change here --- Subhra
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::ProtocolHUnloaded", __LINE__)
+ iSuplSessnReq->Cancel();
+ iSuplSessnReq->ProtocolHUnloaded();
+ CompleteRunSession(KErrCompletion);
+ iSuplSession = NULL;
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::HandlePeriodicTriggerSessionWithServernameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::HandlePeriodicTriggerSessionWithServernameL(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::HandlePeriodicTriggerSessionWithServernameL", __LINE__)
+
+ if (!aMessage.HasCapability(ECapabilityCommDD))
+ {
+ DEBUG_TRACE("HandlePeriodicTriggerSessionL, Client doesnt have CommDD capability", __LINE__)
+ SuplGlobal::RequestComplete(aMessage, KErrPermissionDenied);
+ }
+
+ if (iSuplSessnReq->IsActive())
+ {
+ DEBUG_TRACE("HandlePeriodicTriggerSessionWithServernameL, session active", __LINE__)
+ SuplGlobal::RequestComplete(aMessage, KErrAlreadyExists);
+ }
+
+ TInt setCaps = aMessage.Int0();
+ TInt requestId = aMessage.Int1();
+
+ DEBUG_TRACE("HandlePeriodicTriggerSessionWithServernameL, copying client buffer", __LINE__)
+ HBufC8* clientBuf = SuplGlobal::CopyClientBuffer8LC(aMessage,2);
+ DEBUG_TRACE("HandlePeriodicTriggerSessionWithServernameL, copy client buffer complete", __LINE__)
+
+ TSuplParameters& suplStruct=reinterpret_cast<TSuplParameters&>
+ (const_cast<TUint8&>(*clientBuf->Ptr()));
+
+ iSuplSessnReq->MakeSuplSessionTriggerringRequestL(
+ iSuplSession,
+ suplStruct.PeriodicTrigger,
+ suplStruct.HslpAddress,
+ suplStruct.FallBack,
+ setCaps,
+ requestId);
+
+ CleanupStack::PopAndDestroy(clientBuf);
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::HandlePeriodicTriggerSessionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::HandlePeriodicTriggerSessionL(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::HandlePeriodicTriggerSessionL", __LINE__)
+
+ if (!aMessage.HasCapability(ECapabilityCommDD))
+ {
+ DEBUG_TRACE("HandlePeriodicTriggerSessionL, Client doesnt have CommDD capability", __LINE__)
+ SuplGlobal::RequestComplete(aMessage, KErrPermissionDenied);
+ }
+
+ if (iSuplSessnReq->IsActive())
+ {
+ DEBUG_TRACE("HandlePeriodicTriggerSessionL, session active", __LINE__)
+ SuplGlobal::RequestComplete(aMessage, KErrAlreadyExists);
+ }
+
+ TInt setCaps = aMessage.Int0();
+ TInt requestId = aMessage.Int1();
+
+ DEBUG_TRACE("HandlePeriodicTriggerSessionL, copying client buffer", __LINE__)
+ HBufC8* pTriggerBuf = SuplGlobal::CopyClientBuffer8LC(aMessage,2);
+ DEBUG_TRACE("HandlePeriodicTriggerSessionL, copy client buffer complete", __LINE__)
+ TUint bufferSize = pTriggerBuf->Size();
+
+ TSuplTerminalPeriodicTrigger& pTrigger = reinterpret_cast
+ <TSuplTerminalPeriodicTrigger&>(const_cast<TUint8&>(*pTriggerBuf->Ptr()));
+
+ iSuplSessnReq->MakeSuplSessionTriggerringRequestL(
+ iSuplSession,
+ pTrigger,
+ setCaps,
+ requestId
+ );
+
+ CleanupStack::PopAndDestroy(pTriggerBuf);
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::HandleStopTriggerringSessionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::HandleStopTriggerringSessionL(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::HandleStopTriggerringSessionL", __LINE__)
+
+ if (!iSuplSessnReq->IsActive()||(iReqType!=ESuplTerminalSubssnStopTriggerSession))
+ {
+ User::Leave(KErrNotFound);
+ }
+ iSuplSessnReq->CancelTriggerringRequest();
+ SuplGlobal::RequestComplete(aMessage, KErrNone);
+ CompleteTriggerRunSession(KErrCancel);
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::HandleNotifyTriggerFiredL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::HandleNotifyTriggerFiredL(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::HandlerNotifyTriggerFired", __LINE__)
+
+ if (iSuplSessnReq->IsActive())
+ {
+ SuplGlobal::RequestComplete(aMessage, KErrAlreadyExists);
+ }
+
+ HBufC8* fireInfoBuf = SuplGlobal::CopyClientBuffer8LC(aMessage,2);
+ TUint bufferSize = fireInfoBuf->Size();
+
+ delete iPositionBuffer;
+ iPositionBuffer = NULL;
+
+ iPositionBuffer = fireInfoBuf;
+
+ TSuplTriggerFireInfo& fireInfo = reinterpret_cast
+ <TSuplTriggerFireInfo&>(const_cast<TUint8&>(*fireInfoBuf->Ptr()));
+
+ iSuplSessnReq->NotifyTriggerFiredRequestL(iSuplSession,fireInfo);
+
+ CleanupStack::Pop(fireInfoBuf);
+ }
+
+// End of File