4 * Copyright (C) 1999 Alexandre Julliard
7 #ifndef __WINE_SERVER_REQUEST_H
8 #define __WINE_SERVER_REQUEST_H
10 #ifndef __WINE_SERVER__
11 #error This file can only be used in the Wine server
16 /* max request length */
17 #define MAX_REQUEST_LENGTH 8192
19 /* exit code passed to remove_client on communication error */
20 #define OUT_OF_MEMORY -1
21 #define BROKEN_PIPE -2
22 #define PROTOCOL_ERROR -3
24 /* request handler definition */
25 #define DECL_HANDLER(name) void req_##name( struct name##_request *req, int fd )
27 /* request functions */
29 extern void fatal_protocol_error( struct thread
*thread
, const char *err
, ... );
30 extern void call_req_handler( struct thread
*thread
, enum request req
, int fd
);
31 extern void call_timeout_handler( void *thread
);
32 extern void call_kill_handler( struct thread
*thread
, int exit_code
);
33 extern void set_reply_fd( struct thread
*thread
, int pass_fd
);
34 extern void send_reply( struct thread
*thread
);
36 extern void trace_request( enum request req
, int fd
);
37 extern void trace_timeout(void);
38 extern void trace_kill( int exit_code
);
39 extern void trace_reply( struct thread
*thread
, unsigned int res
, int pass_fd
);
41 /* get the request buffer */
42 static inline void *get_req_ptr( struct thread
*thread
)
44 return thread
->buffer
;
47 /* get the remaining size in the request buffer for object of a given size */
48 static inline int get_req_size( const void *ptr
, size_t typesize
)
50 return ((char *)current
->buffer
+ MAX_REQUEST_LENGTH
- (char *)ptr
) / typesize
;
53 /* get the length of a request string, without going past the end of the request */
54 static inline size_t get_req_strlen( const char *str
)
57 while (*p
&& (p
< (char *)current
->buffer
+ MAX_REQUEST_LENGTH
- 1)) p
++;
61 /* Everything below this line is generated automatically by tools/make_requests */
62 /* ### make_requests begin ### */
64 DECL_HANDLER(new_process
);
65 DECL_HANDLER(new_thread
);
66 DECL_HANDLER(set_debug
);
67 DECL_HANDLER(init_process
);
68 DECL_HANDLER(init_thread
);
69 DECL_HANDLER(get_thread_buffer
);
70 DECL_HANDLER(terminate_process
);
71 DECL_HANDLER(terminate_thread
);
72 DECL_HANDLER(get_process_info
);
73 DECL_HANDLER(set_process_info
);
74 DECL_HANDLER(get_thread_info
);
75 DECL_HANDLER(set_thread_info
);
76 DECL_HANDLER(suspend_thread
);
77 DECL_HANDLER(resume_thread
);
78 DECL_HANDLER(debugger
);
79 DECL_HANDLER(queue_apc
);
80 DECL_HANDLER(get_apcs
);
81 DECL_HANDLER(close_handle
);
82 DECL_HANDLER(get_handle_info
);
83 DECL_HANDLER(set_handle_info
);
84 DECL_HANDLER(dup_handle
);
85 DECL_HANDLER(open_process
);
87 DECL_HANDLER(create_event
);
88 DECL_HANDLER(event_op
);
89 DECL_HANDLER(open_event
);
90 DECL_HANDLER(create_mutex
);
91 DECL_HANDLER(release_mutex
);
92 DECL_HANDLER(open_mutex
);
93 DECL_HANDLER(create_semaphore
);
94 DECL_HANDLER(release_semaphore
);
95 DECL_HANDLER(open_semaphore
);
96 DECL_HANDLER(create_file
);
97 DECL_HANDLER(alloc_file_handle
);
98 DECL_HANDLER(get_read_fd
);
99 DECL_HANDLER(get_write_fd
);
100 DECL_HANDLER(set_file_pointer
);
101 DECL_HANDLER(truncate_file
);
102 DECL_HANDLER(set_file_time
);
103 DECL_HANDLER(flush_file
);
104 DECL_HANDLER(get_file_info
);
105 DECL_HANDLER(lock_file
);
106 DECL_HANDLER(unlock_file
);
107 DECL_HANDLER(create_pipe
);
108 DECL_HANDLER(alloc_console
);
109 DECL_HANDLER(free_console
);
110 DECL_HANDLER(open_console
);
111 DECL_HANDLER(set_console_fd
);
112 DECL_HANDLER(get_console_mode
);
113 DECL_HANDLER(set_console_mode
);
114 DECL_HANDLER(set_console_info
);
115 DECL_HANDLER(get_console_info
);
116 DECL_HANDLER(write_console_input
);
117 DECL_HANDLER(read_console_input
);
118 DECL_HANDLER(create_change_notification
);
119 DECL_HANDLER(create_mapping
);
120 DECL_HANDLER(open_mapping
);
121 DECL_HANDLER(get_mapping_info
);
122 DECL_HANDLER(create_device
);
123 DECL_HANDLER(create_snapshot
);
124 DECL_HANDLER(next_process
);
125 DECL_HANDLER(wait_debug_event
);
126 DECL_HANDLER(send_debug_event
);
127 DECL_HANDLER(continue_debug_event
);
128 DECL_HANDLER(debug_process
);
130 #ifdef WANT_REQUEST_HANDLERS
132 static const struct handler
{
133 void (*handler
)( void *req
, int fd
);
134 unsigned int min_size
;
135 } req_handlers
[REQ_NB_REQUESTS
] = {
136 { (void(*)())req_new_process
, sizeof(struct new_process_request
) },
137 { (void(*)())req_new_thread
, sizeof(struct new_thread_request
) },
138 { (void(*)())req_set_debug
, sizeof(struct set_debug_request
) },
139 { (void(*)())req_init_process
, sizeof(struct init_process_request
) },
140 { (void(*)())req_init_thread
, sizeof(struct init_thread_request
) },
141 { (void(*)())req_get_thread_buffer
, sizeof(struct get_thread_buffer_request
) },
142 { (void(*)())req_terminate_process
, sizeof(struct terminate_process_request
) },
143 { (void(*)())req_terminate_thread
, sizeof(struct terminate_thread_request
) },
144 { (void(*)())req_get_process_info
, sizeof(struct get_process_info_request
) },
145 { (void(*)())req_set_process_info
, sizeof(struct set_process_info_request
) },
146 { (void(*)())req_get_thread_info
, sizeof(struct get_thread_info_request
) },
147 { (void(*)())req_set_thread_info
, sizeof(struct set_thread_info_request
) },
148 { (void(*)())req_suspend_thread
, sizeof(struct suspend_thread_request
) },
149 { (void(*)())req_resume_thread
, sizeof(struct resume_thread_request
) },
150 { (void(*)())req_debugger
, sizeof(struct debugger_request
) },
151 { (void(*)())req_queue_apc
, sizeof(struct queue_apc_request
) },
152 { (void(*)())req_get_apcs
, sizeof(struct get_apcs_request
) },
153 { (void(*)())req_close_handle
, sizeof(struct close_handle_request
) },
154 { (void(*)())req_get_handle_info
, sizeof(struct get_handle_info_request
) },
155 { (void(*)())req_set_handle_info
, sizeof(struct set_handle_info_request
) },
156 { (void(*)())req_dup_handle
, sizeof(struct dup_handle_request
) },
157 { (void(*)())req_open_process
, sizeof(struct open_process_request
) },
158 { (void(*)())req_select
, sizeof(struct select_request
) },
159 { (void(*)())req_create_event
, sizeof(struct create_event_request
) },
160 { (void(*)())req_event_op
, sizeof(struct event_op_request
) },
161 { (void(*)())req_open_event
, sizeof(struct open_event_request
) },
162 { (void(*)())req_create_mutex
, sizeof(struct create_mutex_request
) },
163 { (void(*)())req_release_mutex
, sizeof(struct release_mutex_request
) },
164 { (void(*)())req_open_mutex
, sizeof(struct open_mutex_request
) },
165 { (void(*)())req_create_semaphore
, sizeof(struct create_semaphore_request
) },
166 { (void(*)())req_release_semaphore
, sizeof(struct release_semaphore_request
) },
167 { (void(*)())req_open_semaphore
, sizeof(struct open_semaphore_request
) },
168 { (void(*)())req_create_file
, sizeof(struct create_file_request
) },
169 { (void(*)())req_alloc_file_handle
, sizeof(struct alloc_file_handle_request
) },
170 { (void(*)())req_get_read_fd
, sizeof(struct get_read_fd_request
) },
171 { (void(*)())req_get_write_fd
, sizeof(struct get_write_fd_request
) },
172 { (void(*)())req_set_file_pointer
, sizeof(struct set_file_pointer_request
) },
173 { (void(*)())req_truncate_file
, sizeof(struct truncate_file_request
) },
174 { (void(*)())req_set_file_time
, sizeof(struct set_file_time_request
) },
175 { (void(*)())req_flush_file
, sizeof(struct flush_file_request
) },
176 { (void(*)())req_get_file_info
, sizeof(struct get_file_info_request
) },
177 { (void(*)())req_lock_file
, sizeof(struct lock_file_request
) },
178 { (void(*)())req_unlock_file
, sizeof(struct unlock_file_request
) },
179 { (void(*)())req_create_pipe
, sizeof(struct create_pipe_request
) },
180 { (void(*)())req_alloc_console
, sizeof(struct alloc_console_request
) },
181 { (void(*)())req_free_console
, sizeof(struct free_console_request
) },
182 { (void(*)())req_open_console
, sizeof(struct open_console_request
) },
183 { (void(*)())req_set_console_fd
, sizeof(struct set_console_fd_request
) },
184 { (void(*)())req_get_console_mode
, sizeof(struct get_console_mode_request
) },
185 { (void(*)())req_set_console_mode
, sizeof(struct set_console_mode_request
) },
186 { (void(*)())req_set_console_info
, sizeof(struct set_console_info_request
) },
187 { (void(*)())req_get_console_info
, sizeof(struct get_console_info_request
) },
188 { (void(*)())req_write_console_input
, sizeof(struct write_console_input_request
) },
189 { (void(*)())req_read_console_input
, sizeof(struct read_console_input_request
) },
190 { (void(*)())req_create_change_notification
, sizeof(struct create_change_notification_request
) },
191 { (void(*)())req_create_mapping
, sizeof(struct create_mapping_request
) },
192 { (void(*)())req_open_mapping
, sizeof(struct open_mapping_request
) },
193 { (void(*)())req_get_mapping_info
, sizeof(struct get_mapping_info_request
) },
194 { (void(*)())req_create_device
, sizeof(struct create_device_request
) },
195 { (void(*)())req_create_snapshot
, sizeof(struct create_snapshot_request
) },
196 { (void(*)())req_next_process
, sizeof(struct next_process_request
) },
197 { (void(*)())req_wait_debug_event
, sizeof(struct wait_debug_event_request
) },
198 { (void(*)())req_send_debug_event
, sizeof(struct send_debug_event_request
) },
199 { (void(*)())req_continue_debug_event
, sizeof(struct continue_debug_event_request
) },
200 { (void(*)())req_debug_process
, sizeof(struct debug_process_request
) },
202 #endif /* WANT_REQUEST_HANDLERS */
204 /* ### make_requests end ### */
205 /* Everything above this line is generated automatically by tools/make_requests */
207 #endif /* __WINE_SERVER_REQUEST_H */