networkprotocolmodules/networkprotocolmodule/LbsProtocolModule/inc/cconfigmanager.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/networkprotocolmodules/networkprotocolmodule/LbsProtocolModule/inc/cconfigmanager.h Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,154 @@
+// Copyright (c) 2006-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:
+// This file defines the class that manages configuration of
+// Test Protocol Module operation.
+//
+//
+
+/**
+ @file
+ @internalComponent
+ @test
+*/
+
+#ifndef __CCONFIGMANAGER_H__
+#define __CCONFIGMANAGER_H__
+
+#include <e32base.h>
+
+// Table index values
+#define KMoLr 0
+#define KMtLr 1
+#define KEmergency 2
+#define KX3pLow 3
+#define KX3pMid 4
+#define KX3pHi 5
+#define KMaxOperationTypes 6
+
+/** Central repository UID
+This identifies the external data source for decision data
+*/
+#define KMyRepositoryUid 0x10281D6F
+
+/** Default decision
+Used if a decision value is not provided by external data, and also
+if a caller specifies an invalid type of current or new operation.
+*/
+#define KDefaultDecision EConflictRejectNew
+
+
+/** Configuration Manager
+This class manages the configuration of Test Protocol Module operation in
+relation to how to handle conflicting services.
+
+The class provides a method for the protocol manager to call in order
+to generate a decision for handling a new operation, with due consideration
+of any current active operation.
+
+Conflict decisions are taken from a Decision Table which is initialised from an
+external data source during construction. The table is represented as a matrix
+of decisions organised in rows and columns, representing current operation
+and new operation, respectively. The UID (unique identifiers) for the external
+data items are shown in this representation of the table.
+
+ New
+ Operation -->
+
+ MOLR MTLR EMRG X3Pl X3Pm X3Ph
+ -----------------------------
+ Current MOLR | 1 | 2 | 3 | 4 | 5 | 6 |
+ Operation |----|----|----|----|----|----|
+ | MTLR | 7 | 8 | 9 | 10 | 11 | 12 |
+ | |----|----|----|----|----|----|
+ v EMRG | 13 | 14 | 15 | 16 | 17 | 18 |
+ |----|----|----|----|----|----|
+ X3Pl | 19 | 20 | 21 | 22 | 23 | 24 |
+ |----|----|----|----|----|----|
+ X3Pm | 25 | 26 | 27 | 28 | 29 | 30 |
+ |----|----|----|----|----|----|
+ X3Ph | 31 | 32 | 33 | 34 | 35 | 36 |
+ -----------------------------
+
+X3Pl = low priority X3P
+X3Pm = medium priority X3P
+X3Ph = high priority X3P
+
+To retrieve a decision this class performs a table look-up according to the
+current operation and new operation specified by the caller. The index is
+calculated using row and column values according to the operation types.
+Note: the table index equates to (UID value - 1)
+
+*/
+NONSHARABLE_CLASS(CConfigManager) : public CBase
+ {
+public:
+
+ enum TConflictResult
+ {
+ EConflictNone,
+ EConflictRejectNew,
+ EConflictQueueNew,
+ EConflictCancelCurrent,
+ EConflictQueueCurrent
+ };
+
+ enum TConflictOp
+ {
+ EOpNone,
+ EOpMoLr, // MO-LR
+ EOpNbLr, // Net Based Loc
+ EOpMtLr, // MT-LR
+ EOpNiLr, // Net Induced
+ EOpX3p // X3P
+ };
+
+ enum TConflictPriority
+ {
+ EPriorityNone,
+ EPriorityLow,
+ EPriorityMedium,
+ EPriorityHigh,
+ EPriorityEmergency
+ };
+
+ class TConflictOperation
+ {
+ public:
+ TConflictOp iOperation;
+ TConflictPriority iPriority;
+ };
+
+public:
+
+ static CConfigManager* NewL();
+ ~CConfigManager();
+
+ TConflictResult ConflictDecision(const TConflictOperation& aCurrentOp,
+ const TConflictOperation& aNewOp) const;
+
+private:
+
+ CConfigManager();
+ void ConstructL();
+ void LoadDecisionDataL();
+
+ TInt DecisionTableIndex(const TConflictOperation& aOperation) const;
+
+private:
+
+ RArray<TConflictResult> iDecisionTable;
+
+ };
+
+#endif // __CCONFIGMANAGER_H__