htiui/HtiServicePlugins/HtiAppServicePlugin/inc/HtiAppControl.h
changeset 0 d6fe6244b863
child 3 2703485a934c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/htiui/HtiServicePlugins/HtiAppServicePlugin/inc/HtiAppControl.h	Tue Feb 02 00:17:27 2010 +0200
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 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:  Implementation of ECOM plug-in service interface providing
+*                process and application control service.
+*
+*/
+
+
+
+#ifndef HTIAPPSERVICEPLUGIN_H__
+#define HTIAPPSERVICEPLUGIN_H__
+
+//  INCLUDES
+#include <e32base.h>
+#include <apgcli.h>
+#include <w32std.h>
+#include <SWInstDefs.h>
+#include <swi/sisregistryentry.h>
+#include <HTIServicePluginInterface.h>
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CDesC8ArrayFlat;
+class TApaTask;
+
+// CLASS DECLARATION
+
+NONSHARABLE_CLASS (CHtiAppControl) : public CHTIServicePluginInterface
+    {
+protected:
+    //commands
+    enum TAppCommand
+        {
+        //commands
+        EProcessLastCommand = 0x0F, //!!! used to sort process control from
+                                    //!!! app control
+
+        //app control
+        EStartApp               = 0x10,
+        EStartApp_u             = 0x11,
+        EStartApp_uid           = 0x12,
+        EStartApp_uid_u         = 0x13,
+        EStartDoc               = 0x14,
+        EStartDoc_u             = 0x15,
+        EStatusApp              = 0x16,
+        EStatusApp_u            = 0x17,
+        EStatusDoc              = 0x18,
+        EStatusDoc_u            = 0x19,
+        EStatusApp_uid          = 0x1A,
+        EStopApp                = 0x1C,
+        EStopApp_u              = 0x1D,
+        EStopDoc                = 0x1E,
+        EStopDoc_u              = 0x1F,
+        EStopApp_uid            = 0x20,
+        EListApps               = 0x24,
+        EListApps_u             = 0x25,
+        EListInstalledApps      = 0x26,
+        EListInstalledApps_u    = 0x27,
+
+        EAppLastCommand     = 0x2F, //!!! used to sort process control from
+                                    //!!! app control
+        EInstall            = 0x30,
+        EInstall_u          = 0x31,
+        EUnInstall          = 0x32,
+        EUnInstallName_u    = 0x33,
+        EUnInstallName      = 0x34,
+
+        ESisLastCommand = 0x3F, //!!! used to sort sis control from
+                                //!!! app control
+        //responses
+        EOk             = 0xF0,
+        ENotFound       = 0xF1,
+        EAlreadyRunning = 0xF2,
+        EAlreadyStopped = 0xF3,
+        ERunning        = 0xF4,
+        EKilled         = 0xF5,
+        EPanic          = 0xF6
+        };
+
+public:
+    static CHtiAppControl* NewL();
+
+    // Interface implementation
+    void ProcessMessageL(const TDesC8& aMessage,
+                         THtiMessagePriority aPriority);
+
+protected:
+    CHtiAppControl();
+    void ConstructL();
+
+    virtual ~CHtiAppControl();
+    
+    void HandleAppControlL(const TDesC8& aMessage);
+    void HandleInstallerControlL( const TDesC8& aMessage );
+    /**
+    * Extracts string from incoming request and convert it to unicode
+    * for non-unicode request
+    * aResult should have enough maz length and it will contain
+    * Function returns either offset for a next parameter in aRequest
+    * or some symbian error code
+    */
+    TInt ParseString( const TDesC8& aRequest,
+                      TInt anOffset,
+                      TBool aUnicode,
+                      TDes& aResult);
+
+    //command handlers
+    void HandleStartProcessL( const TDesC& aProgramName,
+                              const TDesC& aCmdLine,
+                              TBool aStoreProcessHandle );
+
+    void HandleStopProcessL( RProcess& aProcess );
+    void HandleStatusProcessL( RProcess& aProcess );
+
+    void HandleListProcessesL( const TDesC& aMatch );
+
+    void HandleStartAppL( TApaAppInfo &aAppInfo, const TDesC& aDocName );
+
+    void HandleListAppsL( TBool aIncludeHidden,
+                          TBool aIncludeSystem,
+                          TBool aUnicode );
+
+    void HandleListInstalledAppsL( TBool aUnicode );
+
+    //construct and send short message
+    void SendMessageL(TAppCommand aResponseCode, const TDesC8& aMsg = KNullDesC8 );
+
+    /**
+    * Helper to send error message
+    * @return KErrNone or some system-wide error code
+    */
+    inline TInt SendErrorMsg( TInt anError, const TDesC8& aMsg );
+
+    /**
+    *
+    */
+    TInt OpenProcessL( RProcess& aProcess, const TDesC& aMatch );
+    TInt OpenProcessL( RProcess& aProcess, const TUint32 aProcessId );
+
+    SwiUI::TPolicy ConvertToPolicy( const TInt8 aValue );
+    TInt GetPackageUidL( const TDesC& aPackageName, TInt aMimeIndex );
+
+    TBool ValidateInstallParams( const TDesC8& aParams, TBool aIsUnicode );
+
+    /**
+    * Find application based on its full path name and fill in aAppInfo
+    * @return KErrNone or KErrNotFound
+    */
+    TBool FindAppL( TApaAppInfo &aAppInfo, const TDesC& aAppFullName );
+    TBool FindAppL( TApaAppInfo &aAppInfo, const TInt32 aUid );
+
+    /**
+     * Find a task running the application specified by the UID as a root app
+     * (i.e. not embedded.
+     * @param aAppUid the UID of the application to find
+     * @return the found task or an empty task if not found
+     */
+    TApaTask FindRunningRootApp( TUid aAppUid );
+
+    /**
+    * Convert string to T 32bit int (e.g. TUint, TInt32)
+    */
+    template<class T> T Parse32( const TDesC8& a32int);
+
+protected:
+
+    // Session to Window Server
+    RWsSession iWs;
+
+    // Session to Application Architecture Server
+    RApaLsSession iAppServer;
+
+    // A flag that is set to EFalse if connecting to Window Server or
+    // Application Architecture Server fails. In that case all application
+    // related commands will return a "not supported" error.
+    TBool iIsAppCmdsSupported;
+
+    // Container array for process handles for querying the process exit codes
+    RArray<RProcess> iProcessHandleArray;
+
+    // possible mimetypes for silent software uninstallation
+    CDesC8ArrayFlat* iMimeTypes;
+
+    SwiUI::TInstallOptions iInstOpts;
+    SwiUI::TInstallOptionsPckg iInstOptsPckg;
+    SwiUI::TUninstallOptions iUnInstOpts;
+    SwiUI::TUninstallOptionsPckg iUnInstOptsPckg;
+    RPointerArray<Swi::CSisRegistryPackage> iAugmentations;
+    TInt iAugmentationIndex;
+    };
+
+#endif
+
+// End of file