diff -r 0659d0e1a03c -r 1d28c8722707 userlibandfileserver/fileserver/sfile/sf_notifier.h --- a/userlibandfileserver/fileserver/sfile/sf_notifier.h Wed Oct 20 13:58:28 2010 +0100 +++ b/userlibandfileserver/fileserver/sfile/sf_notifier.h Tue Nov 02 15:29:23 2010 +0000 @@ -51,12 +51,13 @@ class CFsNotificationPathFilter { public: - static CFsNotificationPathFilter* NewL(const TDesC& aPath, const TDesC& aFilename); + static CFsNotificationPathFilter* NewL(const TDesC& aPath, const TDesC& aFilename, TInt aDriveNum); ~CFsNotificationPathFilter(); private: - void ConstructL(const TDesC& aPath, const TDesC& aFilename); + void ConstructL(const TDesC& aPath, const TDesC& aFilename, TInt aDriveNum); CFsNotificationPathFilter(); public: + TInt iDriveNum; HBufC* iPath; HBufC* iFilename; }; @@ -119,7 +120,7 @@ /* * Returns the RArray for an index - * as returned from FsNotificationHelper::TypeToIndex() + * as returned from CFsNotificationInfo::TypeToIndex() */ TFsNotificationTypeArray* FilterTypeList(TInt aDrive,TInt aIndex); @@ -157,11 +158,8 @@ * notification of this operation to the client. * * Calling of this function means that we are notifying about this operation. (all checks passed) - * - * aRequest can be NULL when the request doesn't come from the file server - * (such as when a media card is removed) */ - TInt NotifyChange(CFsClientMessageRequest* aRequest, const TDesC& aName, TFsNotification::TFsNotificationType aNotificationType, CFsNotificationBlock& aBlock); + TInt NotifyChange(CFsNotificationInfo* aRequest, CFsNotificationBlock& aBlock); /* * This function performs the IPC to the client's buffer. @@ -174,6 +172,9 @@ //Simple getter TInt ClientMsgHandle(); + //Platsec needs to check against the path with a message of the *receiving* client. + const RMessage2& BufferMessage(); + private: CFsNotifyRequest(); void ConstructL(); @@ -216,15 +217,7 @@ * Each index of the TFsNotificationTypeDriveArray is a TFsNotificationTypeArray */ RHashMap iDrivesTypesFiltersMap; - - /* - * The iPathFilterList is an RPointerArray of CFsNotificationPathFilters. - * - * These are normally only accessed via a TFsNotificationTypeFilter (via iDrivesTypesFiltersMap), - * not via this array directly. - */ - RPointerArray iPathFilterList; - + RMessage2 iBufferMsg; //To update buffer RMessage2 iClientMsg; //client notification request @@ -270,24 +263,6 @@ }; /** - * Helper class to get certain attributes from or about a particular operation to used in a notification - * - * @internalTechnology - */ -class FsNotificationHelper - { -public: - static void NotificationType(TInt aFunction,TFsNotification::TFsNotificationType& aNotificationType); - static void PathName(CFsClientMessageRequest& aRequest, TDes& aName); - static void NewPathName(CFsClientMessageRequest& aRequest, TPtrC& aName); - static TInt NotificationSize(CFsClientMessageRequest& aRequest, TFsNotification::TFsNotificationType aNotificationType, const TDesC& aName); - static TInt TypeToIndex(TFsNotification::TFsNotificationType aType); - static TFsNotification::TFsNotificationType NotificationType(TInt& aIndex); - static TInt DriveNumber(const TPtrC& aPath); - static void Attributes(CFsClientMessageRequest& aRequest, TUint& aSet, TUint& aClear); - }; - -/** * The FsNotificationManager is a static object * *@internalTechnology @@ -307,26 +282,8 @@ * Work out which CFsNotifyRequests are interested * (if any) and call CFsNotifyRequest::NotifyChange. */ - static void HandleChange(CFsClientMessageRequest& aRequest); - - /* A change has occurred represented by this request. - * Work out which CFsNotifyRequests are interested - * (if any) and call CFsNotifyRequest::NotifyChange. - * - * This override is used directly when we want to force a particular notification type - */ - static void HandleChange(CFsClientMessageRequest& aRequest, TFsNotification::TFsNotificationType aType); + static void HandleChange(CFsNotificationInfo& aRequest); - /* - * This override is used directly when we want to specify the current operation's name (src) and notification type. - * - * aRequest can be NULL when the request doesn't come from the file server - * such as when a media card is removed, see LocalDrives::CompleteDriveNotifications - * - * @See LocalDrives::CompleteDriveNotifications(TInt aDrive) - */ - static void HandleChange(CFsClientMessageRequest* aRequest, const TDesC& aOperationName, TFsNotification::TFsNotificationType aType); - //Initialise iNotifyRequests and iStaticNotification static void OpenL(); static TBool IsInitialised(); @@ -350,7 +307,7 @@ static void SetFilterRegister(TUint aFilter, TBool aAdd, TInt aCount = 1); /* * Get the number of registers filters set up on a particular type. - * @param aIndex the TFsNotificationType's index as determined from FsNotificationHelper::TypeToIndex + * @param aIndex the TFsNotificationType's index as determined from CFsNotificationInfo::TypeToIndex */ static TInt& FilterRegister(TInt aIndex); @@ -386,13 +343,13 @@ /* * Checks whether aOperation matches the filter name and/or path set in aFilter. */ - static TFsNotificationFilterMatch DoMatchFilter(CFsClientMessageRequest* aRequest, const TDesC& aOperationName,CFsNotificationPathFilter& aFilter); + static TFsNotificationFilterMatch DoMatchFilter(const RMessage2& aMessage, const TDesC& aOperationName,CFsNotificationPathFilter& aFilter); /* * Iterates filters for a particular drive. * Called from HandleChange */ - static void DoHandleChange(TFsNotificationTypeArray* aFilterTypeArray, TInt& aSeenFilter, CFsClientMessageRequest* aRequest, CFsNotifyRequest* aNotifyRequest, const TDesC& aOperationName, TFsNotification::TFsNotificationType& aType); + static void DoHandleChange(TFsNotificationTypeArray* aFilterTypeArray, TInt& aSeenFilter, CFsNotificationInfo& aNotificationInfo, CFsNotifyRequest* aNotifyRequest); /* * Stores the CFsNotifyRequests