networkprotocolmodules/networkprotocolmodule/LbsSuplTestProtocol/inc/lbssupltestmodule.h
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/networkprotocolmodules/networkprotocolmodule/LbsSuplTestProtocol/inc/lbssupltestmodule.h	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,219 @@
+// 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:
+//
+
+/**
+ @file
+ @internalTechnology
+ @test
+*/
+#ifndef LBS_SUPLTEST_H
+#define LBS_SUPLTEST_H
+
+
+//-----------------------------------------------------------------------------------
+#include <e32base.h>
+#include <lbs/lbsassistancedatasourcemodule.h>
+#include <es_sock.h>
+#include <in_sock.h>
+#include <lbs/test/suplmessage.h>
+#include <lbs/test/suplstart.h>
+#include <lbs/test/suplpos.h>
+#include <lbs/test/suplposinit.h>
+#include <lbs/test/rrcassistancedatadelivery.h>
+#include "lbssuplsocketlistener.h"
+//#include <suplresponse.h>
+#include <lbs/test/suplend.h>
+
+
+
+/**
+This class defines the LBS Assistance Data Source Module
+plug-in interface. It is used by the LBS Network Simulator.
+
+@see CAssistanceDataSourceModule
+
+The class also implements the internal MProtocolMgrObserver interface
+which is used to receive calls from within the protocol module.
+@see MProtocolMgrObserver
+*/
+NONSHARABLE_CLASS(CSuplProtocolSession)
+ : public CAssistanceDataSourceBase, public CActive
+	{
+
+public:
+
+    static CSuplProtocolSession* NewL(MLbsAssistanceDataSourceObserver& aObserver,RSocketServ& aSocketServer, const TInt16& aSessionNumber);
+	~CSuplProtocolSession();
+	
+	// Implementation of interface CAsssistanceDataSourceBase
+	void GetAssistanceData(RLbsAssistanceDataBuilderSet& aSet, const TLbsAssistanceDataGroup& aAssistanceDataFilter, const TCoordinate& aPosition);
+	void CancelGetAssistanceData();
+	
+	// Methods from CActive
+	void RunL();
+	void DoCancel();
+    TInt RunError(TInt aError);
+	
+	// Call back for timeouts
+	static TInt OnTimerEventL(TAny* aPtr);
+
+private:
+
+ 	/** SUPL session states
+	*/
+	enum TSuplSessionState
+		{
+		/**  */
+		EIdle,
+		/**  */
+		EConnectingToRemoteServer,
+		/**  */
+		EConnectedAwaitingRequest,
+		/** */
+		EAssistanceDataRequested,
+		/**  */
+		ESendingSuplStart,
+		/** */
+		EAwaitingSuplResponse,
+		/** */
+		ESuplResponseAvailable,
+		/** */
+		ESendingSuplPosInit,
+		/**  */
+		EAwaitingSuplPos,
+		/** */
+		ESuplPosAvailable,
+		/**  */
+		ERrcPayloadDecodeComplete,
+		/**  */
+		EDisconnectingFromServer,
+		/**  */
+		ENetworkTimeout,
+		/** */
+		EProtocolError,
+		/** */
+		EEndingSession,
+		/** */
+		ESuplEndSent,
+		};
+
+	CSuplProtocolSession(MLbsAssistanceDataSourceObserver& aObserver, const TInt16& aSessionNumber);
+	void ConstructL(RSocketServ& aSocketServerSession);
+
+	// Utility methods for creating messages for sending
+	void CreateSuplStartMessageL();
+	void CreatePosInitMessageL();
+	void CreateSuplEndMessageL();
+
+
+    void BuildCellInfoL(CSuplCellInfoContent* aContent, TCellInformationChoice aCellInfoChoice);
+	void BuildSetCapabilitiesL(CSuplSetCapabilitiesContent* aContent);
+	void BuildCommonPartL(CSuplMessageContent* aSuplMsgContent);
+	void BuildPositionInfoL(CSuplPositionContent* posContent);
+	
+	// Utility methods for decoding received messages
+	void DecodeSuplMessageL(TSuplMessageType aSuplMessageType);
+	TSuplMessageType DoDecodeMessageL();
+	void DecodeRRCPayloadL();
+    void TransitionAccordingToRequestAvailability();
+
+	// Asynchronous services requested by state machine
+	void ConnectToRemoteServer();
+	void ReadSuplMessage();
+	void SendSuplMessageL(TSuplMessageType aSuplMessageType);
+	
+	void PrepareSelfTransition();
+
+	// Process a timeout
+	void DoProcessTimeoutL();
+	
+private:
+
+	// From the Network Simulator
+	MLbsAssistanceDataSourceObserver* iObserver; // For callbacks into the NetSim
+	RLbsAssistanceDataBuilderSet* iBuilderSet; // Not owned, belongs to the NetSim
+	TInt16 iSessionNumber;
+	
+ 	// Passed in GetAssistanceData
+    TLbsAsistanceDataGroup iAssistanceDataFilter;
+    TCoordinate iPosition;
+    
+    // Used for sending/receiving messages
+    //
+	RBuf8 iTxBuf;
+	RBuf8 iRxBuf;
+	
+	RSocket iSocket;
+	TInetAddr iAddress; // Remote server IP address
+
+	CSuplSocketListener* iSuplSocketListener;
+	
+	// Used by the state machine
+	//
+	TBool iAssistanceDataRequestPending;
+	TSuplSessionState iSessionState;
+	CPeriodic* iTimer; 
+	
+	// Obtained from SUPL RESPONSE message
+	TBuf8<4> iSlpSessionId;
+	// Obtained from SUP POS message
+	TUint iRrcOffset; // offset to the RRC payload in an encoded SUPLPOS message	
+	};
+
+
+/**
+This class implements the LBS Assistance Data Source Module
+plug-in interface. It is used by the LBS Network Simulator.
+@see CAssistanceDataSourceModule
+
+
+@see 
+*/
+NONSHARABLE_CLASS(CSuplProtocolModule)
+ : public CAssistanceDataSourceModuleBase
+	{
+	
+public:
+
+	static CSuplProtocolModule* NewL(TAny* aParams);
+	~CSuplProtocolModule();
+
+    CAssistanceDataSourceBase* NewDataSourceL();
+
+private:
+
+	CSuplProtocolModule(TAny*);
+	CSuplProtocolModule();
+	void ConstructL();
+
+private:
+
+	/** Reference to this module's observer.
+	This is used to make callbacks into the Network Simulator.
+	*/
+	MLbsAssistanceDataSourceObserver& iObserver;
+
+	/** Socket Server Session.
+	This session with the Socket Server will be used
+	by the SUPL sessions to obtain their TCP/IP sockets.
+	*/
+	RSocketServ iSocketServerSession;
+
+	/* To be part of the session ID of the next SUPL
+	session that is created*/
+	TInt16 iNextSessionNumber;
+	};
+
+#endif //LBS_SUPLTEST_H