localconnectivityservice/dun/server/inc/DunServer.h
branchRCL_3
changeset 19 0aa8cc770c8a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/localconnectivityservice/dun/server/inc/DunServer.h	Tue Aug 31 16:03:15 2010 +0300
@@ -0,0 +1,361 @@
+/*
+* Copyright (c) 2006-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:  DUN server
+*
+*/
+
+
+#ifndef C_CDUNSERVER_H
+#define C_CDUNSERVER_H
+
+#include <e32base.h>
+#include "DunPlugin.h"
+#include "DunCloseWait.h"
+#include "dunserverdef.h"
+#include "dundomainpskeys.h"
+
+_LIT( KDunPluginBt,   "dunbt.dll"  );
+_LIT( KDunPluginIrda, "dunir.dll"  );
+_LIT( KDunPluginUsb,  "dunusb.dll" );
+
+class MDunSession;
+class MDunServerUtility;
+
+/**
+ *  Class used to store data needed for each separate plugin
+ *  One TDunConnectionData data contains objects needed for one plugin
+ *
+ *  @since S60 v3.2
+ */
+NONSHARABLE_CLASS( TDunConnectionData )
+    {
+
+public:
+
+    /**
+     * Pointer to plugin DLL
+     * Not own.
+     */
+    MDunLocalMediaPlugin* iLocalModulePtr;
+
+    /**
+     * Current state of plugin
+     */
+    TDunPluginState iPluginState;
+
+    /**
+     * DLL library server needed to open/close existing plugin
+     */
+    RLibrary iModuleLibrary;
+
+    /**
+     * Loaded plugin's UID
+     */
+    TUid iLocalModuleUid;
+
+    };
+
+/**
+ *  Main DUN server's class
+ *
+ *  @since S60 v3.2
+ */
+class CDunServer : public CPolicyServer,
+                   public MDunServerCallback,
+                   public MDunCloseWait
+    {
+
+    friend class CDunServerUtils;
+
+public:
+
+    /**
+     * Two-phased constructor.
+     * @return Instance of self
+     */
+    static CDunServer* NewL();
+
+    /**
+    * Destructor.
+    */
+    virtual ~CDunServer();
+
+    /**
+     * Notification to manage local media On request
+     * This comes from client
+     *
+     * @since S60 3.2
+     * @param aPluginUid UID of the local media plugin to open
+     * @return None
+     */
+    TInt NotifyMediaOpenRequest( TUid aPluginUid );
+
+    /**
+     * Notification to manage local media Off request
+     * This comes from client
+     *
+     * @since S60 3.2
+     * @param aPluginUid UID of the local media plugin to close
+     * @return None
+     */
+    TInt NotifyMediaCloseRequest( TUid aPluginUid );
+
+    /**
+     * Current active connection
+     * (For testing purposes only)
+     *
+     * @since S60 5.0
+     * @return Active connection, NULL otherwise
+     */
+    TConnId ActiveConnection();
+
+    /**
+     * Increases reference count made by sessions
+     * This comes from client
+     *
+     * @since S60 3.2
+     * @return None
+     */
+    void IncRefCount();
+
+    /**
+     * Decreases reference count made by sessions
+     * This comes from client
+     *
+     * @since S60 3.2
+     * @return None
+     */
+    void DecRefCount();
+
+// from base class CServer2 (CPolicyServer -> CServer2)
+
+    /**
+     * From CServer2 (CPolicyServer derived from CServer2).
+     * Creates a server-side client session object.
+     *
+     * @since S60 3.2
+     * @param aVersion Version information supplied by the client
+     * @return A pointer to the newly created server-side client session
+     */
+    CSession2* NewSessionL( const TVersion& aVersion, const RMessage2& ) const;
+
+private:
+
+    CDunServer( TInt aPriority );
+
+    void ConstructL();
+
+    /**
+     * Opens local media plugin by UID
+     *
+     * @since S60 3.2
+     * @param aPluginUid UID of local media plugin to open
+     * @param aDequeue ETrue if restarting of queued plugins and plugin
+     *                 dequeue wanted after successful plugin close
+     *                 (normal case, see also TryClosePlugin()),
+     *                 EFalse if no restarting of queued plugins and plugin
+     *                 dequeue wanted after successful plugin close
+     *                 (in this case caller is reopener itself, see also
+     *                 ReopenQeueuedPlugins())
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    TInt OpenMediaByUid( TUid aPluginUid, TBool aDequeue );
+
+    /**
+     * Closes local media plugin by UID
+     *
+     * @since S60 3.2
+     * @param aPluginUid UID of local media plugin to close
+     * @param aClearQueued ETrue if clear from plugin queue wanted,
+     *                     EFalse otherwise
+     * @param aClientClose ETrue if close originator is client
+     * @param aSelfDelete ETrue if plugin closes itself, EFalse otherwise
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    TInt CloseMediaByUid( TUid aPluginUid,
+                          TBool aClearQueued,
+                          TBool aClientClose,
+                          TBool aSelfDelete );
+
+    /**
+     * Reopens plugins from plugin queue
+     *
+     * @since S60 3.2
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    TInt ReopenQueuedPlugins();
+
+// from base class MDunServerCallback
+
+    /**
+     * From MDunServerCallback.
+     * Searches for plugin in connection data and returns its state
+     *
+     * @since S60 3.2
+     * @param aPluginUid UID of local media plugin to search for
+     * @return State of plugin
+     */
+    TDunPluginState GetPluginStateByUid( TUid aPluginUid );
+
+    /**
+     * From MDunServerCallback.
+     * Notification about request to change plugin state up by one level
+     *
+     * @since S60 3.2
+     * @param aPluginState New state to set for a local media plugin
+     * @param aPluginUid UID of the local media plugin whose state to change
+     * @return KErrNotFound if plugin not found by UID,
+               KErrNotSupported if unknown state,
+               KErrNone otherwise
+     */
+    TInt NotifyPluginStateChangeUp( TDunPluginState aPluginState,
+                                    TUid aPluginUid );
+
+    /**
+     * From MDunServerCallback.
+     * Notification about request to change plugin state down by one level
+     *
+     * @since S60 3.2
+     * @param aPluginState New state to set for a local media plugin
+     * @param aPluginUid UID of the local media plugin whose state to change
+     * @return KErrNotFound if plugin not found by UID,
+               KErrNotSupported if unknown state,
+               KErrNone otherwise
+     */
+    TInt NotifyPluginStateChangeDown( TDunPluginState aPluginState,
+                                      TUid aPluginUid );
+
+    /**
+     * From MDunServerCallback.
+     * Notification about plugin restart request
+     *
+     * @since S60 3.2
+     * @param aPluginUid UID of the local media plugin to restart
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    TInt NotifyPluginRestart( TUid aPluginUid );
+
+    /**
+     * From MDunServerCallback.
+     * Notification about plugin reopen request
+     *
+     * @since S60 3.2
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    TInt NotifyPluginReopenRequest();
+
+// from base class MDunPluginManager (MDunServerCallback->MDunPluginManager).
+
+    /**
+     * From MDunPluginManager (MDunServerCallback->MDunPluginManager).
+     * Notification about request to enqueue a plugin to plugin queue
+     *
+     * @since S60 3.2
+     * @param aPluginUid UID of the local media plugin to enqueue
+     * @return KErrNotFound = plugin not found by UID,
+               KErrAlreadyExists = plugin already in queue,
+               KErrNone otherwise
+     */
+    TInt NotifyPluginEnqueueRequest( TUid aPluginUid );
+
+    /**
+     * From MDunPluginManager (MDunServerCallback->MDunPluginManager).
+     * Notification about request to dequeue a plugin from plugin queue
+     * Just removes a found UID from the queue
+     *
+     * @since S60 3.2
+     * @param aPluginUid UID of the local media plugin to dequeue
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    TInt NotifyPluginDequeueRequest( TUid aPluginUid );
+
+    /**
+     * From MDunPluginManager (MDunServerCallback->MDunPluginManager).
+     * Notification about request to close a plugin
+     *
+     * @since S60 3.2
+     * @param aPluginUid UID of the local media plugin to close
+     * @param aSelfClose ETrue if plugin closes itself, EFalse otherwise
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    TInt NotifyPluginCloseRequest( TUid aPluginUid,
+                                   TBool aSelfClose );
+
+// from base class MDunCloseWait
+
+    /**
+     * From MDunCloseWait.
+     * Notification about request to close a plugin after wait
+     *
+     * @since S60 5.0
+     * @param aPluginsToClose Plugins to be closed
+     * @return Symbian error code on error, KErrNone otherwise
+     */
+    void NotifyPluginCloseAfterWait(
+        RPointerArray<MDunLocalMediaPlugin>& aPluginsToClose );
+
+private:  // data
+
+    /**
+     * Pointer to common utility class
+     * Own.
+     */
+    MDunServerUtility* iUtility;
+
+    /**
+     * Transporter to use for network side communication
+     * Own.
+     */
+    CDunTransporter* iTransporter;
+
+    /**
+     * Waiter for closing self-destruct plugins
+     * Own.
+     */
+    CDunCloseWait* iCloseWait;
+
+    /**
+     * Array of TDunConnectionData needed for each loaded plugin
+     */
+    RArray<TDunConnectionData> iConnData;
+
+    /**
+     * Array of plugin UIDs
+     * Used for queuing plugins that have no resources to use
+     * Used for dequeuing plugins when free resources detected
+     */
+    RArray<TUid> iPluginQueue;
+
+    /**
+     * Array of plugin UIDs
+     * Used for queuing plugins that were successfully closed outside
+     * this server. This is to avoid returning KErrNotFound to LOCOD
+     * when NotifyMediaCloseRequest() is caught
+     */
+    RArray<TUid> iClosedQueue;
+
+    /**
+     * Connection status of dialup: active or inactive
+     * Used for updating KPSUidDialupConnStatus Pub&Sub key
+     */
+    TDialupConnStatus iConnStatus;
+
+    /**
+     * Reference count of client sides
+     */
+    TInt iRefCount;
+
+    };
+
+#endif  // C_CDUNSERVER_H