diff -r 000000000000 -r c6b0df440bee dbgsrv/coredumpserver/server/inc/coredumpsession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dbgsrv/coredumpserver/server/inc/coredumpsession.h Tue Mar 02 10:33:16 2010 +0530 @@ -0,0 +1,284 @@ +// Copyright (c) 2007-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: +// + + + +/** + @file + @internalTechnology + @released +*/ + +#ifndef CORE_DUMP_SESSION_H +#define CORE_DUMP_SESSION_H + +#include +#include +#include +#include +#include +#include + +#include + +// Project inclues +#include +#include "coredumpserver.h" +#include +#include +#include +#include "servercrashdatasource.h" +#include "flashdatasource.h" +#include "coretargetobserver.h" + +using namespace Debug; +using namespace BSUL; + + enum TPreProcessingActionType {ENoPreAction = 0, ESuspendThread = 0x1, ESuspendProcess = 0x2}; + enum TPostProcessingActionType {ENoPostAction = 0, EResumeThread = 0x1, EResumeProcess = 0x2, EKillProcess = 0x4, EDeleteCrashLog = 0x5}; + +/** +Core dump server session that handles messages from core dump clients. +@see CCoreDumpServer +@see RCoreDumpSession +*/ +class CCoreDumpSession : public CSession2 + { + public: // Construction + IMPORT_C static CCoreDumpSession* NewL( RSecuritySvrSession &aSecSess ); + + public: // Destruction + IMPORT_C ~CCoreDumpSession(); + + public: // CCoreDumpSession + IMPORT_C virtual void ServiceL (const RMessage2& aMessage); + + private: + CCoreDumpSession( RSecuritySvrSession &aSecSess ); + + protected: + void ConstructL(); + + private: // CCoreDumpSession + void PanicClient(const RMessage2& aMessage, TInt aPanic); + void DispatchMessageL(const RMessage2& aMessage); + + HBufC8 * MarshalListL( TListRequest & req, TAny * list ); + void GetListL( const RMessage2& aMessage ); + void ListInfoL( const RMessage2& aMessage ); + + //make sure that those calls leave + void GetPluginListL(const RMessage2& aMessage); + void PluginRequestL(const RMessage2& aMessage); + + // TInt StartDebugSessionL(const RMessage2& aMessage); + + void RefreshPluginListL(); + + void ObservationRequestL( const RMessage2 &aMessage ); + void AttachTargetL( const TDesC &aTargetName, const TDesC &aTargetOwnerName ); + void DetachTargetL( const TDesC &aTargetName, const TDesC &aTargetOwnerName ); + + TInt GetByPId( const TUint aPid ); + + void CreateFormatterL( const TUid loadRequestUid ); + void CreateWriterL( const TUid loadRequestUid ); + void DeleteFormatterL( const TUid freeRequestUid, const TUint index ); + void DeleteWriterL( const TUid freeRequestUid, const TUint index ); + + void BindPluginsL(const TUint aIndex, TUint aPair); + void SetPluginsL( const TUid aFormatterUID, + const TUid aWriterUID, + const TBool aLoad ); + + void GetNumberConfigParametersL( const RMessage2& aMessage ); + void GetConfigParameterL( const RMessage2& aMessage ); + void SetConfigParameterL( const RMessage2& aMessage ); + void SetConfigParameterL( const TInt aIndex, + const TInt32 & aValue, + const TDesC & aDescValue ); + + void UpdateConfigParametersL( ); + + + void LoadConfigFileL( const RMessage2* aMessage = NULL ); + void SaveConfigFileL( const RMessage2* aMessage = NULL ); + + + enum TCoreDumpIniKey + { + EIniKeyType, + EIniKeyIndex, + EIniKeyValue + }; + + HBufC * GenerateKeyStringLC( TUint aIndex, + TCoreDumpIniKey aKey ); + + void RecreateConfigurationL( BSUL::CIniDocument16 * aPersistConfigData ); + + void ChangeConfigParamsL( const COptionConfig::TParameterSource aSource, + BSUL::CIniDocument16 * aPersistConfigData, + const TInt aIndex = -1); + + void SaveConfigParamL( const COptionConfig * aParam, + const TPtrC & aSectName, + const TInt aSaveIndex, + BSUL::CIniDocument16 * aPersistConfigData ); + + void OpenIniFileLC( const RMessage2 * aMessage, + const TBool aSaving, + RFs & aFsSession, + HBufC *& aFileName, + BSUL::CIniDocument16 *& aPersistConfigData ); + + void OpenIniFileLC( const TBool aSaving, + RFs & aFsSession, + HBufC *& aFileName, + BSUL::CIniDocument16 *& aPersistConfigData ); + + void ReadPluginUidFilesL( ); + +// void ReadSCMConfigListL(); +// void WriteSCMConfigListL(); + //void UpdateSCMConfigParameterL( TConfigItem::TSCMDataType aDataType, const TInt32 & aPriority ); + + void ValidatePluginL( const TUid aPluginUid ) const; + void SetCrashEventsL(CTargetObserver &aObserver, TKernelEventAction aAction); + + void RefreshCrashListFromFlashL(); + void GetCrashInfoL(TInt aCrashId, TCrashInfo& aCrashInfo); + void DeleteCrashLogL(const RMessage2& aMessage); + void DeleteCrashPartitionL(); + void ProcessCrashLogL(const RMessage2& aMessage); + void ProcessCrashLogAsyncL(const RMessage2& aMessage); + void CancelProcessCrashLogAsync(const RMessage2& aMessage); + void UpdateProgressL(const TDesC &aProgress) const; + + public: + CCrashDataSource* DataSource() const {return iDataSource;}; + CFlashDataSource* FlashDataSource() const {return iFlashDataSource;}; + CCoreDumpFormatter* GetValidFormatter(const TUint aCount); + TInt32 PreProcessingAction() const; + TInt32 PostProcessingAction() const; + void SuspendProcessL(TUint64 aPid); + void KillProcessL(TUint64 aPid); + void ResumeProcessL(TUint64 aPid); + void ResumeThreadL(TUint64 aTid); + CCoreDumpServer& Server() const; + virtual void CreateL(); + + private: // Data members + RSecuritySvrSession &iSecSess; + + TUint iKeyEvent; + + /** keeps list of ECOM plugin types */ + RPluginList iPluginList; + + TUint iTotalThreadListDescSize; + RThreadPointerList iThreadPointerList; + HBufC8* iMarshalledThreadList; + + TUint iTotalProcessListDescSize; + RProcessPointerList iProcessPointerList; + HBufC8* iMarshalledProcessList; + + TUint iTotalExecutableListDescSize; + RExecutablePointerList iExecutablePointerList; + HBufC8* iMarshalledExecutableList; + + //this stores the crashes that are in the flash partition + TUint iTotalCrashInfoDescSize; + RCrashInfoPointerList iCrashList; + HBufC8* iMarshalledCrashList; + + typedef RPointerArray RFormatterPointerList; + + /** list of formatter plugin instances */ + RFormatterPointerList iFormatterPlugins; + + /** list of formatter plugin info objects coresponding to actual instances*/ + RPluginPointerList iFormatterInfos; + HBufC8* iMarshalledFormatterList; + TUint iTotalFormatterListDescSize; + + typedef RPointerArray RWriterPointerList; + + /** list of writer plugin instances */ + RWriterPointerList iWriterPlugins; + + /** list of writer plugin info objects coresponding to actual instances*/ + RPluginPointerList iWriterInfos; + HBufC8* iMarshalledWriterList; + TUint iTotalWriterListDescSize; + + CServerCrashDataSource* iDataSource; + CFlashDataSource* iFlashDataSource; + CCrashHandler* iCrashHandler; + + enum TCrashEventTypes + { + ECrashHwExc = 0x1, + ECrashKillThread = 0x2, + ECrashHwExcAndKillThread = 0x3 + }; + + typedef RPointerArray RObservationList; + + RObservationList iObservationList; + + private: + TInt32 iPreCrashEventAction; + TInt32 iPostCrashEventAction; + TInt32 iCrashEventTypes; + + + // Configuration parameters for current system. It is the collection + // of config params from CDS and currently loaded plugins + typedef RPointerArray RConfigParameterList; + RConfigParameterList iTotalConfigList; //no need to destroy the content + + /** The maximum size of the configuration parameter that was found + when the entire list iTotalConfigList was last updated. It is useful + when allocating descriptor for client/server transfer */ + TInt iMaxConfigParamSize; + + /** Configuration parameters for CDS. */ + RConfigParameterList iConfigList; + + /** configuration parameters for SCM configuration */ + RConfigParameterList iScmConfigList; + + + + TUid iOurSecureID; + RArray iAllowedPlugins; + + TUint32 iSpare0; + TUint32 iSpare1; + TUint32 iSpare2; + TUint32 iSpare3; + TUint32 iSpare4; + TUint32 iSpare5; + + private: + void PrintScmConfigL(); + + static void CleanupSCMConfiguration(TAny* ); +}; + +#endif // CORE_DUMP_SESSION_H +