blob: 845dc3af1efcf0dbf6b46d7ef858b92460b90993 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
// VFS.h
// Associate URI's to real path.
// Hash on URI.
// Maintain a table of files which are opened.
// Return a handle to the file, and provide I/O mechanisms for it.
#if !defined (VFS_H)
#define VFS_H
#include "JAWS/server/JXH_List.h"
#include "ace/Mem_Map.h"
#include "ace/Singleton.h"
#include "ace/Synch.h"
class JAWS_VFS_Node
{
public:
JAWS_VFS_Node (char *uri);
~JAWS_VFS_Node (void);
char const * URI (void) const;
int status (void) const;
void open (void);
// This if for TransmitFile.
int map_read (void);
// HTTP GET: File transfer without TransmitFile
int map_write (u_long size);
// HTTP PUT
void *addr (void) const;
// Address of memory mapped region
ACE_HANDLE get_handle (void) const;
// HTTP GET: TransmitFile
unsigned long size (void) const;
// File size
private:
void uritopath (void);
int open (int flags);
private:
ACE_Mem_Map file_mapping_;
char *uri_;
char path_[MAXPATHLEN+1];
// void *file_;
// char buf_[BUFSIZ];
struct stat stat_;
ACE_HANDLE handle_;
int status_;
enum { NOT_OPEN, OPENED, MAPPED_READ, MAPPED_READWRITE };
u_long map_state_;
};
class JAWS_VFS_Node_List : public JXH_List<JAWS_VFS_Node *>
{
public:
JAWS_VFS_Node_List (int sz);
};
#include "JAWS/server/VFS_T.h"
class JAWS_VFS_Hash_Table
{
public:
JAWS_VFS_Hash_Table ();
~JAWS_VFS_Hash_Table ();
JAWS_VFS_Node * operator[] (char *URI);
private:
int hashfunction (char *key) const;
private:
JAWS_VFS_Node_Bucket<ACE_Thread_Mutex> *ht_;
};
class JAWS_VFS
{
public:
int open (char *URI, JAWS_VFS_Node * &handle);
int close (JAWS_VFS_Node * &handle);
private:
JAWS_VFS_Hash_Table hash_;
};
typedef ACE_Singleton <JAWS_VFS, ACE_Thread_Mutex> VFS;
#endif /* VFS_H */
/// Local Variables:
/// mode: c++
/// End:
|