accessoryservices/accessoryserver/inc/Server/AccServer.h
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/accessoryservices/accessoryserver/inc/Server/AccServer.h	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2002-2008 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:  Server's side server class
+*
+*/
+
+
+#ifndef CACCSERVER_H
+#define CACCSERVER_H
+
+// INCLUDES
+#include "AccClientServerMessages.h"
+#include "AsyProxyAPI.h"
+#include <e32base.h>
+
+// CONSTANTS
+// ----------------------------------------------------------------------------------------
+// Accessory Server's policy
+// ----------------------------------------------------------------------------------------
+
+//Total number of ranges
+const TUint KAccessoryServerRangeCount = 7;
+
+//Definition of the ranges of IPC numbers
+const TInt accessoryServerRanges[KAccessoryServerRangeCount] =
+    {
+    EAccSrvCreateSubSessionAccessoryMode,        //0th range. Accessory API;               EAccSrvCreateSubSessionAccessoryMode -> EAccSrvGetValueTDes8
+    EAccSrvCreateSubSessionAccessoryConnection,  //1st range. Accessory & Accessory Monitoring API; EAccSrvCreateSubSessionAccessoryConnection -> EAccSrvGetValueTInt
+    EAccSrvCreateSubSessionAccessoryControl,     //2nd range, Accessory Control API;       EAccSrvCreateSubSessionAccessoryControl -> EAccSrvSetAccessoryModeSettings
+    EAccSrvCreateSubSessionAccessoryBTControl,   //3rd range, Accessory BT Control API ;   EAccSrvCreateSubSessionAccessoryBTControl -> EAccSrvCancelNotifyBluetoothAudioLinkCloseReq
+    EAccSrvCreateSubSessionAccessoryAudioControl,//4th range, Accessory Audio Control API; EAccSrvCreateSubSessionAccessoryAudioControl->EAccSrvCancelNotifyAccessoryAudioLinkClosed
+    EAccSrvCreateSubSessionAccessoryAsyComms,    //5th range, Accessory Asy Comms API;     EAccSrvCreateSubSessionAccessoryAsyComms->EAccSrvProcessResponseTDes    
+    EAccSrvUnknown                               //6th range,                              non implemented function end of range check ; ENotSupported
+    };
+
+//Policy to implement for each of the above ranges
+const TUint8 accessoryServerElementsIndex[KAccessoryServerRangeCount] =
+    {
+    0,                           //applies to 0th range
+    CPolicyServer::EAlwaysPass,  //applies to 1st range
+    1,                           //applies to 2nd range
+    2,                           //applies to 3rd range
+    2,                           //applies to 4th range
+    3,                           //applies to 5th range    
+    CPolicyServer::ENotSupported //applies to 6th range (out of range IPC)
+    //ECustomCheck
+    //EAlwaysPass
+    };
+
+//Specific capability checks
+const CPolicyServer::TPolicyElement accessoryServerElements[] =
+    {
+    { _INIT_SECURITY_POLICY_C1( ECapabilityReadUserData ), CPolicyServer::EFailClient },     //policy "0"
+    { _INIT_SECURITY_POLICY_C3( ECapabilityReadUserData,
+                                ECapabilityReadDeviceData,
+                                ECapabilityWriteDeviceData
+                             /* ECapabilityDRM */
+                             /* ECapabilityLocalServices */), CPolicyServer::EFailClient },//policy "1"
+    { _INIT_SECURITY_POLICY_C4( ECapabilityReadUserData,
+                                ECapabilityReadDeviceData,
+                                ECapabilityWriteDeviceData,
+                             /* ECapabilityDRM */
+                             /* ECapabilityLocalServices */
+                                ECapabilitySurroundingsDD ), CPolicyServer::EFailClient },   //policy "2"
+    { _INIT_SECURITY_POLICY_S0( 0x10205030 ), CPolicyServer::EPanicClient },                 //policy "3", i.e. access is allowed only for AccServer.exe
+    };
+
+//Package all the above together into a policy
+const CPolicyServer::TPolicy accessoryServerPolicy =
+    {
+    CPolicyServer::EAlwaysPass,  //all connect attempts to Accessory Server pass
+    KAccessoryServerRangeCount,  //number of ranges
+    accessoryServerRanges,       //ranges array
+    accessoryServerElementsIndex,//elements<->ranges index
+    accessoryServerElements,     //array of elements
+    };
+
+// MACROS
+_LIT( KASYProxyNotFound, "ASYproxy not found" );
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CASYProxyStarter;
+class CAccSrvConnectionController;
+class CAccSrvServerModel;
+
+// CLASS DECLARATION
+/**
+*  Server's side server class
+*
+*  @lib AccServer.exe
+*  @since S60 3.1
+*/
+
+NONSHARABLE_CLASS( CAccServer ) : public CPolicyServer
+    {
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CAccServer* NewLC();
+
+        /**
+        * Destructor.
+        */
+        ~CAccServer();
+
+    public: // New functions
+
+        /**
+        * Main function for the server thread.
+        * @since S60 3.1
+        * @param void
+        * @return Error code
+        */
+        static TInt ThreadFunction();
+
+        /**
+        * Creates one CObjectCon object for every session.
+        * @since S60 3.1
+        * @param void
+        * @return a pointer to a CObjectCon
+        */
+        CObjectCon* NewContainerL();
+
+        /**
+        * Removes CObjectCon object from the container index and deletes the CObjectCon object.
+        * @since S60 3.2
+        * @param aObjectCon Object container to delete
+        */
+        void RemoveContainer( CObjectCon* aObjectCon );
+
+    public:    // Functions from base classes
+
+    protected: // New functions
+
+    protected: // Functions from base classes
+
+        /**
+        * From CActive Process any errors
+        */
+        TInt RunError( TInt aError );
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CAccServer(TInt aPriority, TServerType aType);
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Creates instance of ASYProxy
+        */
+        void CreateASYProxyL();
+
+        /**
+        * Raises panic for this server
+        */
+        static void PanicServer( TAccServerError aReason );
+
+        /**
+        * Constructs the server.
+        * Creates, initializes and starts the ActiveScheduler.
+        */
+        static void ThreadFunctionL();
+
+        /**
+        * Creates main session for server
+        */
+        CSession2* NewSessionL( const TVersion &aVersion,
+                                const RMessage2& aMessage ) const;
+
+    public:     // Data
+
+        // pointer to a CObjectConIx
+        CObjectConIx* iObjectConIx; // Owned
+
+    protected:  // Data
+
+    private:    // Data
+
+        CASYProxyAPI*                iProxy; // Owned
+        CASYProxyStarter*            iProxyStarter; // Owned
+
+        // Connection Controller is treated as singleton in Accessory Server.
+        // This ensures that only one Connection Controller object exist and
+        // its destructed properly.
+        CAccSrvConnectionController* iConnectionController; // Owned
+
+        // Server Model is treated as singleton in Accessory Server.
+        // This ensures that only one Server Model object exist and
+        // its destructed properly.
+        CAccSrvServerModel*          iServerModel; // Owned
+
+    public:     // Friend classes
+
+    protected:  // Friend classes
+
+    private:    // Friend classes
+
+    };
+
+#endif // CACCSERVER_H
+
+// End of File