1/* 2 * Copyright 2001-2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef USERLAND_FS_USERLAND_REQUEST_HANDLER_H 6#define USERLAND_FS_USERLAND_REQUEST_HANDLER_H 7 8#include "RequestHandler.h" 9 10namespace UserlandFSUtil { 11 12// FS 13class MountVolumeRequest; 14class UnmountVolumeRequest; 15class SyncVolumeRequest; 16class ReadFSInfoRequest; 17class WriteFSInfoRequest; 18// vnodes 19class LookupRequest; 20class GetVNodeNameRequest; 21class ReadVNodeRequest; 22class WriteVNodeRequest; 23class FSRemoveVNodeRequest; 24// asynchronous I/O 25class DoIORequest; 26class CancelIORequest; 27class IterativeIOGetVecsRequest; 28class IterativeIOFinishedRequest; 29// nodes 30class IOCtlRequest; 31class SetFlagsRequest; 32class SelectRequest; 33class DeselectRequest; 34class FSyncRequest; 35class ReadSymlinkRequest; 36class CreateSymlinkRequest; 37class LinkRequest; 38class UnlinkRequest; 39class RenameRequest; 40class AccessRequest; 41class ReadStatRequest; 42class WriteStatRequest; 43// files 44class CreateRequest; 45class OpenRequest; 46class CloseRequest; 47class FreeCookieRequest; 48class ReadRequest; 49class WriteRequest; 50// directories 51class CreateDirRequest; 52class RemoveDirRequest; 53class OpenDirRequest; 54class CloseDirRequest; 55class FreeDirCookieRequest; 56class ReadDirRequest; 57class RewindDirRequest; 58// attribute directories 59class OpenAttrDirRequest; 60class CloseAttrDirRequest; 61class FreeAttrDirCookieRequest; 62class ReadAttrDirRequest; 63class RewindAttrDirRequest; 64// attributes 65class CreateAttrRequest; 66class OpenAttrRequest; 67class CloseAttrRequest; 68class FreeAttrCookieRequest; 69class ReadAttrRequest; 70class WriteAttrRequest; 71class ReadAttrStatRequest; 72class WriteAttrStatRequest; 73class RenameAttrRequest; 74class RemoveAttrRequest; 75// indices 76class OpenIndexDirRequest; 77class CloseIndexDirRequest; 78class FreeIndexDirCookieRequest; 79class ReadIndexDirRequest; 80class RewindIndexDirRequest; 81class CreateIndexRequest; 82class RemoveIndexRequest; 83class ReadIndexStatRequest; 84// queries 85class OpenQueryRequest; 86class CloseQueryRequest; 87class FreeQueryCookieRequest; 88class ReadQueryRequest; 89class RewindQueryRequest; 90// node monitoring 91class NodeMonitoringEventRequest; 92 93class RequestAllocator; 94 95} // namespace UserlandFSUtil 96 97using namespace UserlandFSUtil; 98 99namespace UserlandFS { 100 101class FileSystem; 102 103class UserlandRequestHandler : public RequestHandler { 104public: 105 UserlandRequestHandler(FileSystem* fileSystem); 106 UserlandRequestHandler(FileSystem* fileSystem, 107 uint32 expectedReply); 108 virtual ~UserlandRequestHandler(); 109 110 virtual status_t HandleRequest(Request* request); 111 112private: 113 // FS 114 status_t _HandleRequest(MountVolumeRequest* request); 115 status_t _HandleRequest(UnmountVolumeRequest* request); 116 status_t _HandleRequest(SyncVolumeRequest* request); 117 status_t _HandleRequest(ReadFSInfoRequest* request); 118 status_t _HandleRequest(WriteFSInfoRequest* request); 119 120 // vnodes 121 status_t _HandleRequest(LookupRequest* request); 122 status_t _HandleRequest(GetVNodeNameRequest* request); 123 status_t _HandleRequest(ReadVNodeRequest* request); 124 status_t _HandleRequest(WriteVNodeRequest* request); 125 status_t _HandleRequest(FSRemoveVNodeRequest* request); 126 127 // asynchronous I/O 128 status_t _HandleRequest(DoIORequest* request); 129 status_t _HandleRequest(CancelIORequest* request); 130 status_t _HandleRequest( 131 IterativeIOGetVecsRequest* request); 132 status_t _HandleRequest( 133 IterativeIOFinishedRequest* request); 134 135 // nodes 136 status_t _HandleRequest(IOCtlRequest* request); 137 status_t _HandleRequest(SetFlagsRequest* request); 138 status_t _HandleRequest(SelectRequest* request); 139 status_t _HandleRequest(DeselectRequest* request); 140 status_t _HandleRequest(FSyncRequest* request); 141 status_t _HandleRequest(ReadSymlinkRequest* request); 142 status_t _HandleRequest(CreateSymlinkRequest* request); 143 status_t _HandleRequest(LinkRequest* request); 144 status_t _HandleRequest(UnlinkRequest* request); 145 status_t _HandleRequest(RenameRequest* request); 146 status_t _HandleRequest(AccessRequest* request); 147 status_t _HandleRequest(ReadStatRequest* request); 148 status_t _HandleRequest(WriteStatRequest* request); 149 150 // files 151 status_t _HandleRequest(CreateRequest* request); 152 status_t _HandleRequest(OpenRequest* request); 153 status_t _HandleRequest(CloseRequest* request); 154 status_t _HandleRequest(FreeCookieRequest* request); 155 status_t _HandleRequest(ReadRequest* request); 156 status_t _HandleRequest(WriteRequest* request); 157 158 // directories 159 status_t _HandleRequest(CreateDirRequest* request); 160 status_t _HandleRequest(RemoveDirRequest* request); 161 status_t _HandleRequest(OpenDirRequest* request); 162 status_t _HandleRequest(CloseDirRequest* request); 163 status_t _HandleRequest(FreeDirCookieRequest* request); 164 status_t _HandleRequest(ReadDirRequest* request); 165 status_t _HandleRequest(RewindDirRequest* request); 166 167 // attribute directories 168 status_t _HandleRequest(OpenAttrDirRequest* request); 169 status_t _HandleRequest(CloseAttrDirRequest* request); 170 status_t _HandleRequest( 171 FreeAttrDirCookieRequest* request); 172 status_t _HandleRequest(ReadAttrDirRequest* request); 173 status_t _HandleRequest(RewindAttrDirRequest* request); 174 175 // attributes 176 status_t _HandleRequest(CreateAttrRequest* request); 177 status_t _HandleRequest(OpenAttrRequest* request); 178 status_t _HandleRequest(CloseAttrRequest* request); 179 status_t _HandleRequest(FreeAttrCookieRequest* request); 180 status_t _HandleRequest(ReadAttrRequest* request); 181 status_t _HandleRequest(WriteAttrRequest* request); 182 status_t _HandleRequest(ReadAttrStatRequest* request); 183 status_t _HandleRequest(WriteAttrStatRequest* request); 184 status_t _HandleRequest(RenameAttrRequest* request); 185 status_t _HandleRequest(RemoveAttrRequest* request); 186 187 // indices 188 status_t _HandleRequest(OpenIndexDirRequest* request); 189 status_t _HandleRequest(CloseIndexDirRequest* request); 190 status_t _HandleRequest( 191 FreeIndexDirCookieRequest* request); 192 status_t _HandleRequest(ReadIndexDirRequest* request); 193 status_t _HandleRequest(RewindIndexDirRequest* request); 194 status_t _HandleRequest(CreateIndexRequest* request); 195 status_t _HandleRequest(RemoveIndexRequest* request); 196 status_t _HandleRequest(ReadIndexStatRequest* request); 197 198 // queries 199 status_t _HandleRequest(OpenQueryRequest* request); 200 status_t _HandleRequest(CloseQueryRequest* request); 201 status_t _HandleRequest(FreeQueryCookieRequest* request); 202 status_t _HandleRequest(ReadQueryRequest* request); 203 status_t _HandleRequest(RewindQueryRequest* request); 204 205 // node monitoring 206 status_t _HandleRequest( 207 NodeMonitoringEventRequest* request); 208 209 status_t _SendReply(RequestAllocator& allocator, 210 bool expectsReceipt); 211 212private: 213 FileSystem* fFileSystem; 214 bool fExpectReply; 215 uint32 fExpectedReply; 216}; 217 218} // namespace UserlandFS 219 220using UserlandFS::UserlandRequestHandler; 221 222#endif // USERLAND_FS_USERLAND_REQUEST_HANDLER_H 223