--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/headsetsimulator/core/inc/RemoteControl/hsremotecontrolserver.h Wed Sep 15 15:59:44 2010 +0200
@@ -0,0 +1,258 @@
+/*
+ * Component Name: Headset Simulator
+ * Author: Comarch S.A.
+ * Version: 1.0
+ * Copyright (c) 2010 Comarch S.A.
+ *
+ * This Software is submitted by Comarch S.A. to Symbian Foundation Limited on
+ * the basis of the Member Contribution Agreement entered between Comarch S.A.
+ * and Symbian Foundation Limited on 5th June 2009 (“Agreement”) and may be
+ * used only in accordance with the terms and conditions of the Agreement.
+ * Any other usage, duplication or redistribution of this Software is not
+ * allowed without written permission of Comarch S.A.
+ *
+ */
+
+#ifndef HSREMOTECONTROLSERVER_H
+#define HSREMOTECONTROLSERVER_H
+
+#include <bt_sock.h>
+#include <e32base.h>
+#include <es_sock.h>
+#include <btsdp.h>
+#include <hsclientobservers.h>
+
+class CHsCore;
+class CHsRemoteControlDataHandler;
+
+/**
+ * The id used for advertising and discovering the remote control service.
+ */
+const TUint32 KHsRemoteControlServiceID = 0xfabc234f;
+
+/** Avalaible service state */
+const TInt KServicAvailable = 0xFF;
+
+/** Unavalaible service state */
+const TInt KServiceUnavailable = 0x00;
+
+/** Buffer size */
+const TInt KHsRemoteControlBufferSize = 256;
+
+/** The number of connections allowed in the queue */
+const TInt KHsSizeOfListenQueue = 5;
+
+/** Useful constants */
+_LIT(KHsRFComm,"RFCOMM");
+_LIT(KServiceName, "HSControlServer");
+_LIT(KServiceDesc, "HSControlServer");
+
+/** Buffer for remote control */
+typedef TBuf8 <KHsRemoteControlBufferSize> THsRemoteControlBuffer;
+
+/**
+ * @brief Server for remote control requests
+ */
+class CHsControlServer : public CBase, public MBluetoothSocketNotifier
+{
+
+public:
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aSocketServ sesion to socket server
+ * @param aHsCore pointer to CHsCore
+ * @return class instance
+ */
+ static CHsControlServer* NewL( RSocketServ& aSocketServ, CHsCore* aHsCore );
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aSocketServ session to socket server
+ * @param aHsCore pointer to CHsCore
+ * @return class instance
+ */
+ static CHsControlServer* NewLC( RSocketServ& aSocketServ,
+ CHsCore* aHsCore );
+
+ /**
+ * Destructor.
+ */
+ ~CHsControlServer();
+
+public:
+
+ /**
+ * Turns on server for remote control
+ */
+ void StartRemoteControlServerL();
+
+ /**
+ * Stops remote control server. Cancels receiving and sending data, destroys
+ * all CBluetoothSockets
+ */
+ void CancelListen();
+
+ /**
+ * Setter for observer
+ *
+ * @param aConnectionObserver observer
+ */
+ void SetConnectionObserver(
+ MRemoteControllerConnectionObserver &aConnectionObserver );
+
+private:
+
+ /**
+ * Constructor for performing 1st stage construction
+ *
+ * @param aSocketServ sesion to socket server
+ * @param aHsCore pointer to CHsCore
+ */
+ CHsControlServer( RSocketServ& aSocketServ, CHsCore* aHsCore );
+
+ /**
+ * Default constructor for performing 2nd stage construction
+ */
+ void ConstructL();
+
+private:
+ /**
+ * Sends data to client.
+ *
+ * @param aData message to be send
+ *
+ * @return error code
+ */
+ TInt Send( const TDesC8& aData );
+
+ /**
+ * Receives data from listening socket.
+ */
+ void Receive();
+
+ /**
+ * Registers service in SDP database
+ *
+ * @param aChannel port number
+ * @return error code. KErrNone if success
+ */
+ void RegisterSdpL( TInt aChannel );
+
+ /**
+ * Updates availability of service registered in SDP database
+ *
+ * @param aAvailable service availability
+ */
+ void UpdateAvailabilityL( TBool aAvailable );
+
+ /**
+ * Deletes service record from SDP database
+ */
+ void DeleteRecordSdp();
+
+ /**
+ * Handles incoming remote control request
+ *
+ * @param aRequest 8-bit desciptor containing request
+ */
+ void HandleRequestL( TDes8& aRequest );
+
+ /**
+ * Retrieves 'HsTurnOn' command's data needed for HS's initialization
+ *
+ * @param aParams command's data
+ * @param aPluginCod Cod plugin's name
+ * @param aPluginSdp Sdp plugin's name
+ * @param aPluginName profile plugin's name
+ */
+ void RetrieveStartupParamsL( const TDesC8& aParams, RBuf8& aPluginCod,
+ RBuf8& aPluginSdp, RBuf8& aPluginProfile );
+
+private:
+ //Methods inherited from MBluetoothSocketNotifier
+
+ void HandleConnectCompleteL( TInt aErr );
+
+ void HandleAcceptCompleteL( TInt aErr );
+
+ void HandleShutdownCompleteL( TInt aErr );
+
+ void HandleSendCompleteL( TInt aErr );
+
+ void HandleReceiveCompleteL( TInt aErr );
+
+ void HandleIoctlCompleteL( TInt aErr );
+
+ void HandleActivateBasebandEventNotifierCompleteL( TInt aErr,
+ TBTBasebandEventNotification& aEventNotification );
+
+private:
+
+ /** States of the Remote control server */
+ enum THsRemoteControlState
+ {
+ /** Not initialized */
+ ENone = 1,
+ /** Connection attempt ongoing */
+ EConnecting,
+ /** Ready for clients */
+ EWaiting
+ };
+
+ /** Current state */
+ THsRemoteControlState iState;
+
+ /** Listening status */
+ TBool iInitialized;
+
+ /** Server port */
+ TInt iServerPort;
+
+ /** Service record state */
+ TInt iRecordState;
+
+ /** Data length */
+ TSockXfrLength iDataLength;
+
+ /** Holds received data */
+ THsRemoteControlBuffer iReceiveDataBuffer;
+
+ /** Used for buffering data */
+ THsRemoteControlBuffer iTempDataBuffer;
+
+ /** Holds data to be send */
+ THsRemoteControlBuffer iSendDataBuffer;
+
+ /** Service record */
+ TSdpServRecordHandle iSdpRecordHandle;
+
+ /** Service discovery database session */
+ RSdp iSdpServer;
+
+ /** Service discovery database subsession */
+ RSdpDatabase iSdpDB;
+
+ /** Creates subsession to socket server */
+ RSocketServ &iSocketServ;
+
+ /** Socket for listening for new connections */
+ CBluetoothSocket *iListenSocket;
+
+ /** Socket */
+ CBluetoothSocket *iSocket;
+
+ /** Pointer to CHsCore */
+ CHsCore *iHsCore;
+
+ /** Pointer to CHsRemoteControlDataHandler */
+ CHsRemoteControlDataHandler* iDataHandler;
+
+ /** Pointer to observer */
+ MRemoteControllerConnectionObserver *iConnectionObserver;
+
+};
+
+#endif // HSREMOTECONTROLSERVER_H