diff -r b2826f67641f -r b5a01337d018 userlibandfileserver/fileserver/sfile/sf_std.h --- a/userlibandfileserver/fileserver/sfile/sf_std.h Tue Oct 26 12:49:20 2010 +0100 +++ b/userlibandfileserver/fileserver/sfile/sf_std.h Mon Nov 01 20:11:36 2010 +0000 @@ -34,7 +34,7 @@ #include "sf_func.h" #include #include "f32trace.h" - +#include "sf_pool.h" #define __PRINT1TEMP_ALWAYS(t,a) {{TBuftemp(a);RDebug::Print(t,&temp);}} #define __PRINT2TEMP_ALWAYS(t,a,b) {{TBuftemp(b);RDebug::Print(t,a,&temp);}} @@ -455,6 +455,8 @@ EFsObjectOpen, EContainerHeapCorruptionOnRemove, ESessionOpenError, + ENotifyPoolCreation, + ENotificationInfoDeletion }; @@ -1006,7 +1008,6 @@ TBool IsChangeNotify() const; TBool IsDiskSpaceNotify() const; TBool IsWrite() const; - TUint NotifyType() const; TBool IsCompleted() const; TBool IsOpenSubSess() const; //used to allocate for close as well as open task for subsessions TBool IsCloseSubSess() const; @@ -1209,8 +1210,10 @@ inline TInt FsFunction(); void Close(); // close the session & dispatch object this request is using -public: CFsRequest(); + + virtual TUid Uid(); + protected: inline void Set(const TOperation& aOperation,CSessionFs* aSession); inline void Set(CSessionFs* aSession); @@ -1262,8 +1265,7 @@ { public: void Set(const RMessage2& aMessage,CSessionFs* aSession); - void Set(const RMessage2& aMessage,const TOperation& aOperation,CSessionFs* aSession); - void Set(const TOperation& aOperation); + void Set(const RMessage2& aMessage,const TOperation& aOperation,CSessionFs* aSession, TUid aUid = TUid::Null()); inline void SetPostInitialise(TFsRequestFunc aCacheFunction); // inline void SetMessage(RMessage2& aMessage); @@ -1305,8 +1307,7 @@ TBool IsPluginRequest(); static inline CFsMessageRequest* RequestFromMessage(const RMessagePtr2& aMessage); - // UID of the process to touching the file. (To be used in notification framework). - // TUid iUID; + virtual TUid Uid(); private: void DoNotify(TInt aError); void DoNotifyDiskSpace(TInt aError); @@ -1327,6 +1328,7 @@ private: TMsgOperation* iCurrentOperation; TInt iLastError; + TUid iUID;//UID of the process this message belongs to }; @@ -1486,8 +1488,8 @@ { public: void Initialise(TNotifyType aChangeType,TRequestStatus* aStatus,const RMessagePtr2& aMessage,CSessionFs* aSession); - TUint RequestNotifyType(CFsRequest* aRequest); - TBool IsMatching(CFsRequest* aRequest); + TUint RequestNotifyType(CFsNotificationInfo* aRequest); + TBool IsMatching(CFsNotificationInfo* aRequest); protected: TNotifyType iChangeType; }; @@ -1496,7 +1498,7 @@ { public: void Initialise(TNotifyType aChangeType,TRequestStatus* aStatus,const RMessagePtr2& aMessage,CSessionFs* aSession,const TDesC& aName); - TBool IsMatching(CFsRequest* aRequest); + TBool IsMatching(CFsNotificationInfo* aRequest); private: TFileName iName; }; @@ -1557,7 +1559,7 @@ TInt AddNotify(CNotifyInfo* aInfo); TBool CancelSession(CSessionFs* aSession,TInt aCompletionCode,TRequestStatus* aStatus=NULL); void CancelAll(TInt aCompletionCode); - void CheckChange(CFsRequest* aRequest); + void CheckChange(CFsNotificationInfo& aNotificationInfo); TBool IsEmpty(); }; @@ -1598,6 +1600,30 @@ TBool HandlePendingDismount(CSessionFs* aSession, TInt aDrive); }; +class CFsNotificationInfo; + +class CFsNotificationInfoBody : public CBase + { +public: + CFsNotificationInfoBody(); +private: + TParsePtrC iSrc; + TBuf<2> iSrcBuf; + TParsePtrC iDest; + TBool iDestDriveStored; + TInt iDriveNumber; + TInt iFunction; + CFsRequest* iRequest; //Can be NULL + + //CFsNotify framework + TInt64 iData; + TNotificationType iNotificationType; + TUid iUid; + + friend class CFsNotificationInfo; + }; + + class FsNotify { public: @@ -1607,7 +1633,7 @@ static TInt AddDebug(CNotifyInfo* aDebugInfo); static TInt AddDismountNotify(CNotifyInfo* aDismountNotifyInfo); static void DiskChange(TInt aDrive); - static void HandleChange(CFsRequest* aRequest,TInt aDrive); + static void HandleChange(CFsNotificationInfo& aNotificationInfo); static void HandleDiskSpace(CFsRequest* aRequest,TInt aDrive); static void HandleDiskSpace(TInt aDrive, TInt64& aFreeSpace); static void HandleDebug(TUint aFunction); @@ -1689,6 +1715,7 @@ extern CFsObjectCon* RawDisks; extern CFsObjectCon* Extensions; extern CFsObjectCon* ProxyDrives; +extern CFsPool* NotificationInfoPool; extern CKernEventNotifier* TheKernEventNotifier; @@ -1767,18 +1794,18 @@ TBool CompareResource(const TDesC & aThePath); #ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__ - TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const char* aDiag); - TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, const char* aDiag); - TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath,const TSecurityPolicy* aCap, const char* aDiag, TBool aExactMatchAllowed = EFalse); + TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const char* aDiag); + TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, const char* aDiag); + TInt PathCheck(const RMessage2& aMessage, const TDesC& aThePath,const TSecurityPolicy* aCap, const char* aDiag, TBool aExactMatchAllowed = EFalse); #else //__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__ - TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, OnlyCreateWithNull aDiag); - TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, OnlyCreateWithNull aDiag); - TInt PathCheck(CFsRequest* aRequest, const TDesC& aThePath,const TSecurityPolicy* aCap, OnlyCreateWithNull aDiag, TBool aExactMatchAllowed = EFalse); + TInt PathCheck(const RMessage2& aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, OnlyCreateWithNull aDiag); + TInt PathCheck(const RMessage2& aRequest, const TDesC& aThePath, const TSecurityPolicy* aSysCap, const TSecurityPolicy* aPriCap, const TSecurityPolicy* aROCap, OnlyCreateWithNull aDiag); + TInt PathCheck(const RMessage2& aRequest, const TDesC& aThePath,const TSecurityPolicy* aCap, OnlyCreateWithNull aDiag, TBool aExactMatchAllowed = EFalse); #endif //!__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__ TBool ComparePrivate(const TDesC & aThePath); TBool CompareSystem(const TDesC & aThePath); - TBool SIDCheck(CFsRequest* aRequest, const TDesC& aThePath); + TBool SIDCheck(const RMessage2& aMessage, const TDesC& aThePath); TBool ComparePaths(const TDesC& aPath1,const TDesC& aPath2); TUint32 CalcNameHash(const TDesC& aName);