messagingfw/alwaysonline/inc/AlwaysOnlineManagerServer.h
changeset 22 bde600d88860
parent 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/alwaysonline/inc/AlwaysOnlineManagerServer.h	Fri Jun 04 10:32:16 2010 +0100
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2002 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: 
+*     AlwaysOnline server. Governs always online plugins.
+*
+*/
+
+#ifndef __ALWAYSONLINEMANAGERSERVER_H__
+#define __ALWAYSONLINEMANAGERSERVER_H__
+
+#include <e32base.h>
+#include <msvapi.h>
+#include "AlwaysOnlineManagerCommon.h"
+#include "AlwaysOnlineManager.h"
+
+//constants
+const TInt KAlwaysOnlineMajorVersionNumber = 1;
+const TInt KAlwaysOnlineMinorVersionNumber = 0;
+const TInt KAlwaysOnlineVersionNumber = 0;
+
+class TOAManagerStartupSignaller;
+
+// Server's policy defitions
+const TUint KAOMServerRangeCount = 6;
+
+/* 
+Available commands from alwaysonlinemanagerclient.h header file.
+
+EServerAPIBaseCommand = 0,                  //common command IDs 0 - 999
+EServerAPIBaseCommandStart,
+EServerAPIBaseCommandStop,
+EServerAPIEmailBaseCommand = 1000,          //email specific commands 1000 - 1999
+EServerAPIEmailTurnOff,                     // 1001 switch off specified mailbox
+EServerAPIEmailTurnOn,                      // 1002 switch on specified mailbox
+EServerAPIEmailAgentRemove,                 // 1003 remove specified mailbox
+EServerAPIEmailEMNReceived,                 // 1004 EMN received for specified mailbox
+EServerAPIEmailUpdateMailWhileConnected,    // 1005 acts like imap connection except does not reconnect if connection dropped
+
+EServerAPIPecBaseCommand = 2000,            //Pec specific commands 2000 - 2999
+
+EServerAPIImBaseCommand = 3000              // IM specific commands 3000 - 3999
+*/
+
+const TInt KAOMServerRanges[KAOMServerRangeCount] = 
+    {
+    0, //range is 0-2 inclusive (EServerAPIBaseCommand, EServerAPIBaseCommandStart, EServerAPIBaseCommandStop)
+    3, //range is 3-999 inclusive (Common commands not yet defined --> Unsupported)
+    1000, //range is 1000-1005 inclusive (Email plugin commands)
+    2000, //range is 2000-2999 inclusive (Pec plugin commands)
+    3000, //range is 3000-3999 inclusive (IM plugin commands)
+    4000, //range is 4000-KMaxTInt inclusive
+    };
+
+const TUint8 KAOMServerElementsIndex[KAOMServerRangeCount] = 
+    {
+    0,                              //applies to 0th range (req num: 0-2)
+    CPolicyServer::ENotSupported,   //applies to 1st range (req num: 3-999)
+    0,                              //applies to 2nd range (req num: 1000-1999)
+    0,                              //applies to 2nd range (req num: 2000-2999)
+    0,                              //applies to 2nd range (req num: 3000-3999)
+    CPolicyServer::ENotSupported,   //applies to 4th range (req num: 4000-KMaxTInt)
+    };
+const CPolicyServer::TPolicyElement KAOMServerElements[] = 
+    {
+    {_INIT_SECURITY_POLICY_C1(ECapabilityWriteDeviceData), CPolicyServer::EFailClient} //policy "0"; fail call if WriteDeviceData not present
+    };
+    
+const CPolicyServer::TPolicy KAOMServerPolicy =
+    {
+    CPolicyServer::EAlwaysPass, //specifies all connect attempts should pass
+    KAOMServerRangeCount,           
+    KAOMServerRanges,
+    KAOMServerElementsIndex,
+    KAOMServerElements,
+    };
+
+
+/**
+* CAlwaysOnlineManagerServer
+* 
+* Always online server class. Server which is started at bootup and will stay running forever
+* in the background. Server controls "always online clients" ( ECom plugins )
+* which contain the actual implementation of always online functionality. 
+* Server's task is just to start things up and send messages to plugins allowing
+* or restricting online operation. 
+*/
+class CAlwaysOnlineManagerServer : public CPolicyServer
+    {
+public:
+	enum {EAlwaysOnlineManagerServerPriority=EPriorityBackground};
+
+public:										
+///////////////////////////////////////////////////////////////////////////////////////
+
+	/**
+	 * Start the server, returning an error if one occurs
+	 */
+	static TInt RunServer(TOAManagerStartupSignaller& aSignaller);
+
+	/**
+	 * Start the server, leaving if there's an error
+	 */
+	static void	RunServerL(TOAManagerStartupSignaller& aSignaller);
+
+//#if defined (__WINS__)
+
+	/**
+	 * In WINS, the EPOCEXE target is a DLL with an entry point called WinsMain,
+	 * taking no parameters and returning TInt. This is not really valid as a thread
+	 * function which takes a TAny* parameter which we need.
+	 * 
+	 * So the DLL entry-point WinsMain() is used to return a TInt representing the
+	 * real thread function within the DLL. This is good as long as
+	 * sizeof(TInt)>=sizeof(TThreadFunction).
+	 * 
+	 */
+	static TInt ServerThreadFunction(TAny* aParameters);
+
+//#endif
+    /*
+    * PanicServer
+    */
+	static void PanicServer(TAlwaysOnlineManagerPanic aPanic);
+
+    /*
+    * ThreadFunction
+    */
+	IMPORT_C static TInt ThreadFunction(TAny* aStarted);
+	
+    /*
+    * NewL constructor
+    */
+	IMPORT_C static CAlwaysOnlineManagerServer* NewL();
+
+    /*
+    * ConstructL 
+    */
+	void ConstructL();
+
+    /*
+    * ~CAlwaysOnlineManagerServer, destructor
+    */
+	~CAlwaysOnlineManagerServer();
+	
+    /**
+    * HandleClientCommandL
+    */
+    IMPORT_C void HandleClientCommandL( TAlwaysOnlineServerAPICommands aCommand, 
+    									TDes8& aParameter );
+
+	/*
+    * NewSessionL
+    */
+	virtual CSession2* NewSessionL( const TVersion& aVersion, 
+                                    const RMessage2& aMessage ) const;
+
+
+private:
+    /*
+    * CAlwaysOnlineManagerServer, c++ constructor
+    */
+	CAlwaysOnlineManagerServer( TInt aPriority );
+
+
+	//data
+private:
+    CAlwaysOnlineManager* iManager;
+
+    };
+
+
+#endif
+//EOF