/* * Copyright 2001-2009, Ingo Weinhold, ingo_weinhold@gmx.de. * Distributed under the terms of the MIT License. */ #ifndef USERLAND_FS_USERLAND_REQUEST_HANDLER_H #define USERLAND_FS_USERLAND_REQUEST_HANDLER_H #include "RequestHandler.h" namespace UserlandFSUtil { // FS class MountVolumeRequest; class UnmountVolumeRequest; class SyncVolumeRequest; class ReadFSInfoRequest; class WriteFSInfoRequest; // vnodes class LookupRequest; class GetVNodeNameRequest; class ReadVNodeRequest; class WriteVNodeRequest; class FSRemoveVNodeRequest; // asynchronous I/O class DoIORequest; class CancelIORequest; class IterativeIOGetVecsRequest; class IterativeIOFinishedRequest; // nodes class IOCtlRequest; class SetFlagsRequest; class SelectRequest; class DeselectRequest; class FSyncRequest; class ReadSymlinkRequest; class CreateSymlinkRequest; class LinkRequest; class UnlinkRequest; class RenameRequest; class AccessRequest; class ReadStatRequest; class WriteStatRequest; // files class CreateRequest; class OpenRequest; class CloseRequest; class FreeCookieRequest; class ReadRequest; class WriteRequest; // directories class CreateDirRequest; class RemoveDirRequest; class OpenDirRequest; class CloseDirRequest; class FreeDirCookieRequest; class ReadDirRequest; class RewindDirRequest; // attribute directories class OpenAttrDirRequest; class CloseAttrDirRequest; class FreeAttrDirCookieRequest; class ReadAttrDirRequest; class RewindAttrDirRequest; // attributes class CreateAttrRequest; class OpenAttrRequest; class CloseAttrRequest; class FreeAttrCookieRequest; class ReadAttrRequest; class WriteAttrRequest; class ReadAttrStatRequest; class WriteAttrStatRequest; class RenameAttrRequest; class RemoveAttrRequest; // indices class OpenIndexDirRequest; class CloseIndexDirRequest; class FreeIndexDirCookieRequest; class ReadIndexDirRequest; class RewindIndexDirRequest; class CreateIndexRequest; class RemoveIndexRequest; class ReadIndexStatRequest; // queries class OpenQueryRequest; class CloseQueryRequest; class FreeQueryCookieRequest; class ReadQueryRequest; class RewindQueryRequest; // node monitoring class NodeMonitoringEventRequest; class RequestAllocator; } // namespace UserlandFSUtil using namespace UserlandFSUtil; namespace UserlandFS { class FileSystem; class UserlandRequestHandler : public RequestHandler { public: UserlandRequestHandler(FileSystem* fileSystem); UserlandRequestHandler(FileSystem* fileSystem, uint32 expectedReply); virtual ~UserlandRequestHandler(); virtual status_t HandleRequest(Request* request); private: // FS status_t _HandleRequest(MountVolumeRequest* request); status_t _HandleRequest(UnmountVolumeRequest* request); status_t _HandleRequest(SyncVolumeRequest* request); status_t _HandleRequest(ReadFSInfoRequest* request); status_t _HandleRequest(WriteFSInfoRequest* request); // vnodes status_t _HandleRequest(LookupRequest* request); status_t _HandleRequest(GetVNodeNameRequest* request); status_t _HandleRequest(ReadVNodeRequest* request); status_t _HandleRequest(WriteVNodeRequest* request); status_t _HandleRequest(FSRemoveVNodeRequest* request); // asynchronous I/O status_t _HandleRequest(DoIORequest* request); status_t _HandleRequest(CancelIORequest* request); status_t _HandleRequest( IterativeIOGetVecsRequest* request); status_t _HandleRequest( IterativeIOFinishedRequest* request); // nodes status_t _HandleRequest(IOCtlRequest* request); status_t _HandleRequest(SetFlagsRequest* request); status_t _HandleRequest(SelectRequest* request); status_t _HandleRequest(DeselectRequest* request); status_t _HandleRequest(FSyncRequest* request); status_t _HandleRequest(ReadSymlinkRequest* request); status_t _HandleRequest(CreateSymlinkRequest* request); status_t _HandleRequest(LinkRequest* request); status_t _HandleRequest(UnlinkRequest* request); status_t _HandleRequest(RenameRequest* request); status_t _HandleRequest(AccessRequest* request); status_t _HandleRequest(ReadStatRequest* request); status_t _HandleRequest(WriteStatRequest* request); // files status_t _HandleRequest(CreateRequest* request); status_t _HandleRequest(OpenRequest* request); status_t _HandleRequest(CloseRequest* request); status_t _HandleRequest(FreeCookieRequest* request); status_t _HandleRequest(ReadRequest* request); status_t _HandleRequest(WriteRequest* request); // directories status_t _HandleRequest(CreateDirRequest* request); status_t _HandleRequest(RemoveDirRequest* request); status_t _HandleRequest(OpenDirRequest* request); status_t _HandleRequest(CloseDirRequest* request); status_t _HandleRequest(FreeDirCookieRequest* request); status_t _HandleRequest(ReadDirRequest* request); status_t _HandleRequest(RewindDirRequest* request); // attribute directories status_t _HandleRequest(OpenAttrDirRequest* request); status_t _HandleRequest(CloseAttrDirRequest* request); status_t _HandleRequest( FreeAttrDirCookieRequest* request); status_t _HandleRequest(ReadAttrDirRequest* request); status_t _HandleRequest(RewindAttrDirRequest* request); // attributes status_t _HandleRequest(CreateAttrRequest* request); status_t _HandleRequest(OpenAttrRequest* request); status_t _HandleRequest(CloseAttrRequest* request); status_t _HandleRequest(FreeAttrCookieRequest* request); status_t _HandleRequest(ReadAttrRequest* request); status_t _HandleRequest(WriteAttrRequest* request); status_t _HandleRequest(ReadAttrStatRequest* request); status_t _HandleRequest(WriteAttrStatRequest* request); status_t _HandleRequest(RenameAttrRequest* request); status_t _HandleRequest(RemoveAttrRequest* request); // indices status_t _HandleRequest(OpenIndexDirRequest* request); status_t _HandleRequest(CloseIndexDirRequest* request); status_t _HandleRequest( FreeIndexDirCookieRequest* request); status_t _HandleRequest(ReadIndexDirRequest* request); status_t _HandleRequest(RewindIndexDirRequest* request); status_t _HandleRequest(CreateIndexRequest* request); status_t _HandleRequest(RemoveIndexRequest* request); status_t _HandleRequest(ReadIndexStatRequest* request); // queries status_t _HandleRequest(OpenQueryRequest* request); status_t _HandleRequest(CloseQueryRequest* request); status_t _HandleRequest(FreeQueryCookieRequest* request); status_t _HandleRequest(ReadQueryRequest* request); status_t _HandleRequest(RewindQueryRequest* request); // node monitoring status_t _HandleRequest( NodeMonitoringEventRequest* request); status_t _SendReply(RequestAllocator& allocator, bool expectsReceipt); private: FileSystem* fFileSystem; bool fExpectReply; uint32 fExpectedReply; }; } // namespace UserlandFS using UserlandFS::UserlandRequestHandler; #endif // USERLAND_FS_USERLAND_REQUEST_HANDLER_H