Flush (work in progress)
[mono.git] / mono / io-layer / daemon-messages.h
1 /*
2  * daemon-messages.h:  Communications to and from the handle daemon
3  *
4  * Author:
5  *      Dick Porter (dick@ximian.com)
6  *
7  * (C) 2002 Ximian, Inc.
8  */
9
10 #ifndef _WAPI_DAEMON_MESSAGES_H_
11 #define _WAPI_DAEMON_MESSAGES_H_
12
13 #include <mono/io-layer/wapi-private.h>
14
15 typedef enum {
16         WapiHandleRequestType_Error,
17         WapiHandleRequestType_New,
18         WapiHandleRequestType_Open,
19         WapiHandleRequestType_Close,
20         WapiHandleRequestType_Scratch,
21         WapiHandleRequestType_ScratchFree,
22         WapiHandleRequestType_ProcessFork,
23         WapiHandleRequestType_ProcessKill,
24         WapiHandleRequestType_GetOrSetShare,
25         WapiHandleRequestType_SetShare
26 } WapiHandleRequestType;
27
28 typedef struct 
29 {
30         WapiHandleType type;
31 } WapiHandleRequest_New;
32
33 typedef struct 
34 {
35         guint32 handle;
36 } WapiHandleRequest_Open;
37
38 typedef struct 
39 {
40         guint32 handle;
41 } WapiHandleRequest_Close;
42
43 typedef struct
44 {
45         guint32 length;
46 } WapiHandleRequest_Scratch;
47
48 typedef struct
49 {
50         guint32 idx;
51 } WapiHandleRequest_ScratchFree;
52
53 typedef struct 
54 {
55         guint32 cmd;
56         guint32 env;
57         guint32 dir;
58         guint32 stdin_handle;
59         guint32 stdout_handle;
60         guint32 stderr_handle;
61         gboolean inherit;
62         guint32 flags;
63 } WapiHandleRequest_ProcessFork;
64
65 typedef struct {
66         pid_t pid;
67         gint32 signo;
68 } WapiHandleRequest_ProcessKill;
69
70 typedef struct 
71 {
72         dev_t device;
73         ino_t inode;
74         guint32 new_sharemode;
75         guint32 new_access;
76 } WapiHandleRequest_GetOrSetShare;
77
78 typedef struct
79 {
80         dev_t device;
81         ino_t inode;
82         guint32 sharemode;
83         guint32 access;
84 } WapiHandleRequest_SetShare;
85
86 typedef struct 
87 {
88         WapiHandleRequestType type;
89         union 
90         {
91                 WapiHandleRequest_New new;
92                 WapiHandleRequest_Open open;
93                 WapiHandleRequest_Close close;
94                 WapiHandleRequest_Scratch scratch;
95                 WapiHandleRequest_ScratchFree scratch_free;
96                 WapiHandleRequest_ProcessFork process_fork;
97                 WapiHandleRequest_ProcessKill process_kill;
98                 WapiHandleRequest_GetOrSetShare get_or_set_share;
99                 WapiHandleRequest_SetShare set_share;
100         } u;
101 } WapiHandleRequest;
102
103 typedef enum {
104         WapiHandleResponseType_Error,
105         WapiHandleResponseType_New,
106         WapiHandleResponseType_Open,
107         WapiHandleResponseType_Close,
108         WapiHandleResponseType_Scratch,
109         WapiHandleResponseType_ScratchFree,
110         WapiHandleResponseType_ProcessFork,
111         WapiHandleResponseType_ProcessKill,
112         WapiHandleResponseType_GetOrSetShare,
113         WapiHandleResponseType_SetShare
114 } WapiHandleResponseType;
115
116 typedef struct 
117 {
118         guint32 reason;
119 } WapiHandleResponse_Error;
120
121 typedef struct 
122 {
123         WapiHandleType type;
124         guint32 handle;
125 } WapiHandleResponse_New;
126
127 typedef struct 
128 {
129         WapiHandleType type;
130         guint32 handle;
131 } WapiHandleResponse_Open;
132
133 typedef struct 
134 {
135         gboolean destroy;
136 } WapiHandleResponse_Close;
137
138 typedef struct
139 {
140         guint32 idx;
141         gboolean remap;
142 } WapiHandleResponse_Scratch;
143
144 typedef struct
145 {
146         guint32 dummy;
147 } WapiHandleResponse_ScratchFree;
148
149 typedef struct
150 {
151         guint32 process_handle;
152         guint32 thread_handle;
153         guint32 pid;
154         guint32 tid;
155 } WapiHandleResponse_ProcessFork;
156
157 typedef struct
158 {
159         guint32 err;
160 } WapiHandleResponse_ProcessKill;
161
162 typedef struct
163 {
164         gboolean exists;
165         guint32 sharemode;
166         guint32 access;
167 } WapiHandleResponse_GetOrSetShare;
168
169 typedef struct
170 {
171         guint32 dummy;
172 } WapiHandleResponse_SetShare;
173
174 typedef struct
175 {
176         WapiHandleResponseType type;
177         union
178         {
179                 WapiHandleResponse_Error error;
180                 WapiHandleResponse_New new;
181                 WapiHandleResponse_Open open;
182                 WapiHandleResponse_Close close;
183                 WapiHandleResponse_Scratch scratch;
184                 WapiHandleResponse_ScratchFree scratch_free;
185                 WapiHandleResponse_ProcessFork process_fork;
186                 WapiHandleResponse_ProcessKill process_kill;
187                 WapiHandleResponse_GetOrSetShare get_or_set_share;
188                 WapiHandleResponse_SetShare set_share;
189         } u;
190 } WapiHandleResponse;
191
192 extern void _wapi_daemon_request_response (int fd, WapiHandleRequest *req,
193                                            WapiHandleResponse *resp);
194 extern void _wapi_daemon_request_response_with_fds (int fd,
195                                                     WapiHandleRequest *req,
196                                                     WapiHandleResponse *resp,
197                                                     int in_fd, int out_fd,
198                                                     int err_fd);
199 extern int _wapi_daemon_request (int fd, WapiHandleRequest *req, int *fds,
200                                  gboolean *has_fds);
201 extern int _wapi_daemon_response (int fd, WapiHandleResponse *resp);
202
203 #endif /* _WAPI_DAEMON_MESSAGES_H_ */