1 #pragma once 2 3 #include <l4/sys/ipc.h> 4 5 #include "file_pager.h" 6 #include "opener_context_resource.h" 7 #include "opener_interface.h" 8 #include "pager.h" 9 #include "paging.h" 10 #include "pages.h" 11 #include "resource.h" 12 13 /* Support for providing access to files. */ 14 15 class OpenerResource : public Resource, public Opener 16 { 17 protected: 18 Paging *_paging; 19 Pages *_pages; 20 21 /* Convenience methods. */ 22 23 PageMapper *get_mapper(fileid_t fileid); 24 25 /* Configurable methods. */ 26 27 virtual fileid_t get_fileid(const char *path) = 0; 28 29 virtual Accessor *make_accessor(fileid_t fileid) = 0; 30 31 public: 32 explicit OpenerResource(Paging *paging, Pages *pages); 33 34 /* Server details. */ 35 36 int expected_items(); 37 38 ipc_server_handler_type handler(); 39 40 void *interface() 41 { return static_cast<Opener *>(this); } 42 43 /* Direct access methods. */ 44 45 FilePager *open(const char *path, flags_t flags); 46 47 /* Opener interface methods. */ 48 49 long context(l4_cap_idx_t *context); 50 }; 51 52 // vim: tabstop=4 expandtab shiftwidth=4