--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/ltserver/ltserverlogic/src/lbtnotificationmap.cpp Tue Feb 02 01:06:48 2010 +0200
@@ -0,0 +1,273 @@
+/*
+* Copyright (c) 2007 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: Defines the notification map data structure used by Location
+* Triggering Server Logic to store notification request messages
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include "lbtnotificationmap.h"
+#include "lbtglobal.h"
+#include "lbtlogger.h"
+
+// ======== LOCAL FUNCTIONS ========
+
+TInt OrderNotifReqs(
+ const CLbtNotificationMap::TLbtNotificationReq& aLhs,
+ const CLbtNotificationMap::TLbtNotificationReq& aRhs)
+ {
+ FUNC_ENTER("CLbtNotificationMap::OrderNotifReqs");
+ const RMessage2& lhs = aLhs.iMsg;
+ const RMessage2& rhs = aRhs.iMsg;
+
+ if(lhs.SecureId() == rhs.SecureId())
+ {
+ return 0;
+ }
+ if(lhs.SecureId() < rhs.SecureId())
+ {
+ return -1;
+ }
+ else
+ {
+ return 1;
+ }
+ }
+
+
+TInt SecureIdCompare(CSession2** aSession, RMessage2& aMessage)
+ {
+ FUNC_ENTER("CLbtNotificationMap::SecureIdCompare");
+ if(aMessage.Session() == (*aSession))
+ {
+ return 0;
+ }
+ if(aMessage.Session() < (*aSession))
+ {
+ return -1;
+ }
+ else
+ {
+ return 1;
+ }
+ }
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CLbtNotificationMap::NewL
+// Symbian Two - phase constructor
+// ---------------------------------------------------------------------------
+//
+CLbtNotificationMap* CLbtNotificationMap::NewL()
+ {
+ FUNC_ENTER("CLbtNotificationMap::NewL");
+ CLbtNotificationMap* self = new ( ELeave ) CLbtNotificationMap;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CLbtNotificationMap::~CLbtNotificationMap
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CLbtNotificationMap::~CLbtNotificationMap()
+ {
+ FUNC_ENTER("CLbtNotificationMap::~CLbtNotificationMap");
+ Reset(KErrServerBusy);
+ iMessageArray.Close();
+ }
+
+// ---------------------------------------------------------------------------
+// CLbtNotificationMap::InsertL
+// ---------------------------------------------------------------------------
+//
+void CLbtNotificationMap::InsertL(
+ const RMessage2& aMessage,
+ CLbtServerLogicBase::TSubSessionType aType)
+ {
+ FUNC_ENTER("CLbtNotificationMap::InsertL");
+ TLbtNotificationReq req = { aMessage, aType };
+
+ //Insert in sorted order into to the message array
+ TLinearOrder<TLbtNotificationReq> OrderPredicate(OrderNotifReqs);
+ iMessageArray.InsertInOrderAllowRepeats(req, OrderPredicate);
+// iMessageArray.Append(req);
+ }
+
+// ---------------------------------------------------------------------------
+// CLbtNotificationMap::Retreive
+// ---------------------------------------------------------------------------
+//
+TInt CLbtNotificationMap::Retreive(RMessage2& aMessage,
+ TUint32 aSubSessionHandle,
+ TSecureId aSecureId,
+ TInt aServiceId,
+ CSession2* aSession)
+ {
+ FUNC_ENTER("CLbtNotificationMap::Retreive");
+ for(TInt i=0; i<iMessageArray.Count(); ++i)
+ {
+
+ RMessage2& msg = iMessageArray[i].iMsg;
+ if( msg.SecureId() == aSecureId &&
+ msg.Int3() == aSubSessionHandle &&
+ msg.Function() == aServiceId &&
+ msg.Session() == aSession )
+ {
+ aMessage = msg;
+ iMessageArray.Remove(i);
+ return KErrNone;
+ }
+ }
+
+ return KErrNotFound;
+ }
+
+// ---------------------------------------------------------------------------
+// CLbtNotificationMap::Retreive
+// ---------------------------------------------------------------------------
+//
+TInt CLbtNotificationMap::Retreive(RMessage2& aMessage,
+ TSecureId aSecureId,
+ TInt aServiceId)
+ {
+ FUNC_ENTER("CLbtNotificationMap::Retreive");
+ for(TInt i=0; i<iMessageArray.Count(); ++i)
+ {
+ RMessage2& msg = iMessageArray[i].iMsg;
+ if( msg.SecureId() == aSecureId &&
+ msg.Function() == aServiceId )
+ {
+ aMessage = msg;
+ iMessageArray.Remove(i);
+ return KErrNone;
+ }
+ }
+ return KErrNotFound;
+ }
+
+// ---------------------------------------------------------------------------
+// CLbtNotificationMap::Retreive
+// ---------------------------------------------------------------------------
+//
+TInt CLbtNotificationMap::Retreive(RMessage2& aMessage,
+ TInt aSubSessionHandle,
+ TSecureId aSecureId)
+ {
+ FUNC_ENTER("CLbtNotificationMap::Retreive");
+ for(TInt i=0; i<iMessageArray.Count(); ++i)
+ {
+ RMessage2& msg = iMessageArray[i].iMsg;
+ if( msg.SecureId() == aSecureId &&
+ msg.Int3() == aSubSessionHandle )
+ {
+ aMessage = msg;
+ iMessageArray.Remove(i);
+ return KErrNone;
+ }
+ }
+ return KErrNotFound;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CLbtNotificationMap::Retreive
+// ---------------------------------------------------------------------------
+//
+TInt CLbtNotificationMap::Retreive(RMessage2& aMessage,
+ TInt aServiceId,
+ CLbtServerLogicBase::TSubSessionType aType)
+ {
+ FUNC_ENTER("CLbtNotificationMap::Retreive");
+ for(TInt i=0; i<iMessageArray.Count(); ++i)
+ {
+ RMessage2& msg = iMessageArray[i].iMsg;
+ if( msg.Function() == aServiceId &&
+ iMessageArray[i].iType == aType )
+ {
+ aMessage = msg;
+ iMessageArray.Remove(i);
+ return KErrNone;
+ }
+ }
+ return KErrNotFound;
+ }
+
+// ---------------------------------------------------------------------------
+// CLbtNotificationMap::CompleteMessagesOfSubsession
+// ---------------------------------------------------------------------------
+//
+void CLbtNotificationMap::CompleteMessagesOfSubsession(const CSession2* aSession, const TInt aSubSessionHandle, TInt aErrorCode)
+ {
+ FUNC_ENTER("CLbtNotificationMap::CompleteMessagesOfSubsession");
+ for(TInt i=0;i<iMessageArray.Count();++i)
+ {
+ RMessage2& message = iMessageArray[i].iMsg;
+ if(message.Session() == aSession &&
+ message.Int3() == aSubSessionHandle)
+ {
+ LbtGlobal::RequestComplete(message, aErrorCode);
+ iMessageArray.Remove(i);
+ }
+ }
+ }
+// ---------------------------------------------------------------------------
+// CLbtNotificationMap::CompleteMessagesOfSubsession
+// ---------------------------------------------------------------------------
+//
+void CLbtNotificationMap::RemoveAllClientMessages(TSecureId aSecureId)
+ {
+ FUNC_ENTER("CLbtNotificationMap::RemoveAllClientMessages");
+ for(TInt i=0;i<iMessageArray.Count();i++)
+ {
+ RMessage2& message = iMessageArray[i].iMsg;
+ if(message.SecureId() == aSecureId)
+ {
+ LbtGlobal::RequestComplete(message,KErrDied);
+ iMessageArray.Remove(i);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CLbtNotificationMap::Reset
+// ---------------------------------------------------------------------------
+//
+void CLbtNotificationMap::Reset(TInt aErrorCode)
+ {
+ FUNC_ENTER("CLbtNotificationMap::Reset");
+ for(TInt i=0;i<iMessageArray.Count();++i)
+ {
+ const RMessage2& message = iMessageArray[i].iMsg;
+ LbtGlobal::RequestComplete(message, aErrorCode);
+ }
+ iMessageArray.Reset();
+ }
+
+// ---------------------------------------------------------------------------
+// CLbtNotificationMap::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CLbtNotificationMap::ConstructL()
+ {
+ FUNC_ENTER("CLbtNotificationMap::ConstructL");
+ }
+
+// end of file