globus_xio  6.3
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
globus_xio_system.h
1 
6 #ifndef GLOBUS_XIO_SYSTEM_INCLUDE
7 #define GLOBUS_XIO_SYSTEM_INCLUDE
8 
9 #include "globus_common.h"
10 #include "globus_xio_types.h"
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 #define GLOBUS_XIO_SYSTEM_MODULE (&globus_i_xio_system_module)
17 extern globus_module_descriptor_t globus_i_xio_system_module;
18 
19 #ifdef WIN32
20 
21 #include <windows.h>
22 #include <winsock2.h>
23 #define GLOBUS_XIO_SYSTEM_INVALID_FILE INVALID_HANDLE_VALUE
24 #define GLOBUS_XIO_SYSTEM_INVALID_SOCKET INVALID_SOCKET
25 
26 typedef struct globus_l_xio_win32_file_s * globus_xio_system_file_handle_t;
27 typedef struct globus_l_xio_win32_socket_s * globus_xio_system_socket_handle_t;
28 
29 typedef SOCKET globus_xio_system_socket_t;
30 typedef HANDLE globus_xio_system_file_t;
31 
32 #else
33 
34 #define GLOBUS_XIO_SYSTEM_INVALID_FILE -1
35 #define GLOBUS_XIO_SYSTEM_INVALID_SOCKET -1
36 
37 /* these are handles to this interface */
38 typedef struct globus_l_xio_system_s * globus_xio_system_file_handle_t;
39 typedef struct globus_l_xio_system_s * globus_xio_system_socket_handle_t;
40 
41 /* these are the native descriptor types */
42 typedef int globus_xio_system_socket_t;
43 typedef int globus_xio_system_file_t;
44 
45 /* deprecated, do not use! */
46 typedef int globus_xio_system_native_handle_t;
47 #endif
48 
49 typedef enum
50 {
51  GLOBUS_XIO_SYSTEM_ERROR_SYSTEM_ERROR = 1024,
52  GLOBUS_XIO_SYSTEM_ERROR_TOO_MANY_FDS,
53  GLOBUS_XIO_SYSTEM_ERROR_ALREADY_REGISTERED,
54  GLOBUS_XIO_SYSTEM_ERROR_OPERATION_CANCELED,
55  GLOBUS_XIO_SYSTEM_ERROR_NOT_REGISTERED
56 } globus_xio_system_error_type_t;
57 
58 typedef enum
59 {
60  GLOBUS_XIO_SYSTEM_FILE = 1,
61  GLOBUS_XIO_SYSTEM_TCP,
62  GLOBUS_XIO_SYSTEM_TCP_LISTENER,
63  GLOBUS_XIO_SYSTEM_UDP
64 } globus_xio_system_type_t;
65 
66 typedef void
67 (*globus_xio_system_callback_t)(
68  globus_result_t result,
69  void * user_arg);
70 
71 typedef void
72 (*globus_xio_system_data_callback_t)(
73  globus_result_t result,
74  globus_size_t nbytes,
75  void * user_arg);
76 
85 globus_result_t
86 globus_xio_system_file_init(
87  globus_xio_system_file_handle_t * handle,
88  globus_xio_system_file_t fd);
89 
90 /* this does *not* close the native handle.
91  * It should remove the non-blocking setting
92  *
93  * do not call this with outstanding operations. you can call it from with
94  * a callback
95  */
96 void
97 globus_xio_system_file_destroy(
98  globus_xio_system_file_handle_t handle);
99 
100 globus_result_t
101 globus_xio_system_file_register_read(
102  globus_xio_operation_t op,
103  globus_xio_system_file_handle_t handle,
104  globus_off_t offset,
105  const globus_xio_iovec_t * iov,
106  int iovc,
107  globus_size_t waitforbytes,
108  globus_xio_system_data_callback_t callback,
109  void * user_arg);
110 
111 globus_result_t
112 globus_xio_system_file_register_write(
113  globus_xio_operation_t op,
114  globus_xio_system_file_handle_t handle,
115  globus_off_t offset,
116  const globus_xio_iovec_t * iov,
117  int iovc,
118  globus_size_t waitforbytes,
119  globus_xio_system_data_callback_t callback,
120  void * user_arg);
121 
122 /* pass 0 for waitforbytes to not block */
123 globus_result_t
124 globus_xio_system_file_read(
125  globus_xio_system_file_handle_t handle,
126  globus_off_t offset,
127  const globus_xio_iovec_t * iov,
128  int iovc,
129  globus_size_t waitforbytes,
130  globus_size_t * nbytes);
131 
132 globus_result_t
133 globus_xio_system_file_write(
134  globus_xio_system_file_handle_t handle,
135  globus_off_t offset,
136  const globus_xio_iovec_t * iov,
137  int iovc,
138  globus_size_t waitforbytes,
139  globus_size_t * nbytes);
140 
141 /* syscall abstractions */
142 globus_off_t
143 globus_xio_system_file_get_position(
144  globus_xio_system_file_t fd);
145 
146 globus_off_t
147 globus_xio_system_file_get_size(
148  globus_xio_system_file_t fd);
149 
150 globus_xio_system_file_t
151 globus_xio_system_convert_stdio(
152  const char * stdio);
153 
154 globus_result_t
155 globus_xio_system_file_truncate(
156  globus_xio_system_file_t fd,
157  globus_off_t size);
158 
159 globus_result_t
160 globus_xio_system_file_open(
161  globus_xio_system_file_t * fd,
162  const char * filename,
163  int flags,
164  unsigned long mode);
165 
166 globus_result_t
167 globus_xio_system_file_close(
168  globus_xio_system_file_t fd);
169 
175 globus_result_t
176 globus_xio_system_socket_init(
177  globus_xio_system_socket_handle_t * handle,
178  globus_xio_system_socket_t socket,
179  globus_xio_system_type_t type);
180 
181 /* this does *not* close the native handle.
182  * It should remove the non-blocking setting
183  *
184  * do not call this with outstanding operations. you can call it from with
185  * a callback
186  */
187 void
188 globus_xio_system_socket_destroy(
189  globus_xio_system_socket_handle_t handle);
190 
191 globus_result_t
192 globus_xio_system_socket_register_connect(
193  globus_xio_operation_t op,
194  globus_xio_system_socket_handle_t handle,
195  globus_sockaddr_t * addr,
196  globus_xio_system_callback_t callback,
197  void * user_arg);
198 
199 globus_result_t
200 globus_xio_system_socket_register_accept(
201  globus_xio_operation_t op,
202  globus_xio_system_socket_handle_t listener_handle,
203  globus_xio_system_socket_t * out_handle,
204  globus_xio_system_callback_t callback,
205  void * user_arg);
206 
207 /* if using from, probably want waitforbytes to be 1 */
208 /* if waitforbytes == 0 and iov[0].iov_len == 0
209  * behave like select()... ie notify when data ready
210  */
211 globus_result_t
212 globus_xio_system_socket_register_read(
213  globus_xio_operation_t op,
214  globus_xio_system_socket_handle_t handle,
215  const globus_xio_iovec_t * iov,
216  int iovc,
217  globus_size_t waitforbytes,
218  int flags,
219  globus_sockaddr_t * out_from,
220  globus_xio_system_data_callback_t callback,
221  void * user_arg);
222 
223 /* if waitforbytes == 0 and iov[0].iov_len == 0
224  * behave like select()... ie notify when data ready
225  */
226 globus_result_t
227 globus_xio_system_socket_register_write(
228  globus_xio_operation_t op,
229  globus_xio_system_socket_handle_t handle,
230  const globus_xio_iovec_t * iov,
231  int iovc,
232  globus_size_t waitforbytes,
233  int flags,
234  globus_sockaddr_t * to,
235  globus_xio_system_data_callback_t callback,
236  void * user_arg);
237 
238 /* if waitforbytes == 0, do a non-blocking read */
239 globus_result_t
240 globus_xio_system_socket_read(
241  globus_xio_system_socket_handle_t handle,
242  const globus_xio_iovec_t * iov,
243  int iovc,
244  globus_size_t waitforbytes,
245  int flags,
246  globus_sockaddr_t * from,
247  globus_size_t * nbytes);
248 
249 /* if waitforbytes == 0, do a non-blocking write */
250 globus_result_t
251 globus_xio_system_socket_write(
252  globus_xio_system_socket_handle_t handle,
253  const globus_xio_iovec_t * iov,
254  int iovc,
255  globus_size_t waitforbytes,
256  int flags,
257  globus_sockaddr_t * to,
258  globus_size_t * nbytes);
259 
260 /* syscall abstractions */
261 globus_result_t
262 globus_xio_system_socket_create(
263  globus_xio_system_socket_t * socket,
264  int domain,
265  int type,
266  int protocol);
267 
268 globus_result_t
269 globus_xio_system_socket_setsockopt(
270  globus_xio_system_socket_t socket,
271  int level,
272  int optname,
273  const void * optval,
274  globus_socklen_t optlen);
275 
276 globus_result_t
277 globus_xio_system_socket_getsockopt(
278  globus_xio_system_socket_t socket,
279  int level,
280  int optname,
281  void * optval,
282  globus_socklen_t * optlen);
283 
284 globus_result_t
285 globus_xio_system_socket_getsockname(
286  globus_xio_system_socket_t socket,
287  struct sockaddr * name,
288  globus_socklen_t * namelen);
289 
290 globus_result_t
291 globus_xio_system_socket_getpeername(
292  globus_xio_system_socket_t socket,
293  struct sockaddr * name,
294  globus_socklen_t * namelen);
295 
296 globus_result_t
297 globus_xio_system_socket_bind(
298  globus_xio_system_socket_t socket,
299  struct sockaddr * addr,
300  globus_socklen_t addrlen);
301 
302 globus_result_t
303 globus_xio_system_socket_listen(
304  globus_xio_system_socket_t socket,
305  int backlog);
306 
307 globus_result_t
308 globus_xio_system_socket_connect(
309  globus_xio_system_socket_t socket,
310  const struct sockaddr * addr,
311  globus_socklen_t addrlen);
312 
313 globus_result_t
314 globus_xio_system_socket_close(
315  globus_xio_system_socket_t socket);
316 
317 #ifdef WIN32
318 
325 #undef S_IRWXU
326 #define S_IRWXU 0
327 #undef S_IRUSR
328 #define S_IRUSR 0
329 #undef S_IWUSR
330 #define S_IWUSR 0
331 #undef S_IXUSR
332 #define S_IXUSR 0
333 #undef S_IRWXO
334 #define S_IRWXO 0
335 #undef S_IROTH
336 #define S_IROTH 0
337 #undef S_IWOTH
338 #define S_IWOTH 0
339 #undef S_IXOTH
340 #define S_IXOTH 0
341 #undef S_IRWXG
342 #define S_IRWXG 0
343 #undef S_IRGRP
344 #define S_IRGRP 0
345 #undef S_IWGRP
346 #define S_IWGRP 0
347 #undef S_IXGRP
348 #define S_IXGRP 0
349 
350 #endif
351 
352 #ifdef __cplusplus
353 }
354 #endif
355 
356 #endif