2 #ifndef GLOBUS_I_XIO_SYSTEM_COMMON_INCLUDE
3 #define GLOBUS_I_XIO_SYSTEM_COMMON_INCLUDE
5 #include "globus_i_xio_config.h"
6 #include "globus_common.h"
7 #include "globus_xio_system.h"
8 #include "globus_xio_driver.h"
10 GlobusDebugDeclare(GLOBUS_XIO_SYSTEM);
12 #define GlobusXIOSystemDebugPrintf(level, message) \
13 GlobusDebugPrintf(GLOBUS_XIO_SYSTEM, level, message)
15 #define GlobusXIOSystemDebugFwrite(level, buffer, size, count) \
16 GlobusDebugFwrite(GLOBUS_XIO_SYSTEM, level, buffer, size, count)
18 #define GlobusXIOSystemDebugEnter() \
19 GlobusXIOSystemDebugPrintf( \
20 GLOBUS_I_XIO_SYSTEM_DEBUG_TRACE, \
21 ("[%s] Entering\n", _xio_name))
23 #define GlobusXIOSystemDebugExit() \
24 GlobusXIOSystemDebugPrintf( \
25 GLOBUS_I_XIO_SYSTEM_DEBUG_TRACE, \
26 ("[%s] Exiting\n", _xio_name))
28 #define GlobusXIOSystemDebugExitWithError() \
29 GlobusXIOSystemDebugPrintf( \
30 GLOBUS_I_XIO_SYSTEM_DEBUG_TRACE, \
31 ("[%s] Exiting with error\n", _xio_name))
33 #define GlobusXIOSystemDebugEnterFD(fd) \
34 GlobusXIOSystemDebugPrintf( \
35 GLOBUS_I_XIO_SYSTEM_DEBUG_TRACE, \
36 ("[%s] fd=%lu, Entering\n", _xio_name, (unsigned long)(fd)))
38 #define GlobusXIOSystemDebugExitFD(fd) \
39 GlobusXIOSystemDebugPrintf( \
40 GLOBUS_I_XIO_SYSTEM_DEBUG_TRACE, \
41 ("[%s] fd=%lu, Exiting\n", _xio_name, (unsigned long)(fd)))
43 #define GlobusXIOSystemDebugExitWithErrorFD(fd) \
44 GlobusXIOSystemDebugPrintf( \
45 GLOBUS_I_XIO_SYSTEM_DEBUG_TRACE, \
46 ("[%s] fd=%lu, Exiting with error\n", _xio_name, (unsigned long)(fd)))
50 #define GlobusXIOSystemUpdateErrno() (errno = WSAGetLastError())
52 #define GlobusXIOSystemUpdateErrno()
55 #define GlobusXIOSystemDebugRawBuffer(nbytes, buffer) \
58 GlobusXIOSystemDebugPrintf( \
59 GLOBUS_I_XIO_SYSTEM_DEBUG_RAW, \
60 ("[%s] Begin RAW data ************\n", _xio_name)); \
61 GlobusXIOSystemDebugFwrite( \
62 GLOBUS_I_XIO_SYSTEM_DEBUG_RAW, buffer, 1, nbytes); \
63 GlobusXIOSystemDebugPrintf( \
64 GLOBUS_I_XIO_SYSTEM_DEBUG_RAW, \
65 ("\n[%s] End RAW data ************\n", _xio_name)); \
68 #define GlobusXIOSystemDebugRawIovec(nbytes, iovec) \
72 GLOBUS_XIO_SYSTEM, GLOBUS_I_XIO_SYSTEM_DEBUG_RAW)) \
74 globus_size_t _bytes = nbytes; \
79 globus_size_t _len = (iovec)[_i].iov_len; \
87 GlobusDebugMyPrintf( \
89 ("[%s] Begin RAW data %i ************\n", \
91 GlobusDebugMyFwrite( \
93 (iovec)[_i].iov_base, 1, _len); \
94 GlobusDebugMyPrintf( \
96 ("\n[%s] End RAW data %i ************\n", \
103 #define GlobusIXIOSystemAllocOperation(op_info) \
106 globus_i_xio_system_op_info_t * _op_info; \
108 _op_info = (globus_i_xio_system_op_info_t *) \
109 globus_memory_pop_node(&globus_i_xio_system_op_info_memory); \
112 memset(_op_info, 0, sizeof(globus_i_xio_system_op_info_t)); \
114 (op_info) = _op_info; \
117 #define GlobusIXIOSystemFreeOperation(op_info) \
118 (globus_memory_push_node(&globus_i_xio_system_op_info_memory, (op_info)))
120 #define GlobusIXIOSystemAllocIovec(count, iov) \
129 (iov) = (struct iovec *) \
130 globus_memory_pop_node(&globus_i_xio_system_iov_memory); \
134 (iov) = (struct iovec *) \
135 globus_malloc(sizeof(struct iovec) * _count); \
139 #define GlobusIXIOSystemFreeIovec(count, iovec) \
142 int _count = (count); \
145 globus_memory_push_node( \
146 &globus_i_xio_system_iov_memory, (iovec)); \
150 globus_free((iovec)); \
154 extern globus_memory_t globus_i_xio_system_op_info_memory;
155 extern globus_memory_t globus_i_xio_system_iov_memory;
157 enum globus_i_xio_system_error_levels
159 GLOBUS_I_XIO_SYSTEM_DEBUG_TRACE = 1,
160 GLOBUS_I_XIO_SYSTEM_DEBUG_DATA = 2,
161 GLOBUS_I_XIO_SYSTEM_DEBUG_INFO = 4,
162 GLOBUS_I_XIO_SYSTEM_DEBUG_RAW = 8
167 GLOBUS_I_XIO_SYSTEM_OP_ACCEPT,
168 GLOBUS_I_XIO_SYSTEM_OP_CONNECT,
169 GLOBUS_I_XIO_SYSTEM_OP_READ,
170 GLOBUS_I_XIO_SYSTEM_OP_WRITE
171 } globus_i_xio_system_op_type_t;
176 GLOBUS_I_XIO_SYSTEM_OP_NEW,
178 GLOBUS_I_XIO_SYSTEM_OP_PENDING,
180 GLOBUS_I_XIO_SYSTEM_OP_COMPLETE,
182 GLOBUS_I_XIO_SYSTEM_OP_CANCELED
183 } globus_i_xio_system_op_state_t;
191 struct iovec * msg_iov;
202 globus_i_xio_system_op_type_t type;
203 globus_i_xio_system_op_state_t state;
204 globus_xio_operation_t op;
206 struct globus_l_xio_system_s * handle;
208 struct globus_l_xio_win32_socket_s *handle;
210 globus_object_t * error;
213 globus_size_t nbytes;
214 globus_size_t waitforbytes;
222 globus_xio_system_callback_t callback;
223 globus_xio_system_socket_t * out_fd;
229 globus_xio_system_data_callback_t callback;
230 struct iovec * start_iov;
235 globus_sockaddr_t * addr;
239 } globus_i_xio_system_op_info_t;
242 globus_i_xio_system_try_read(
243 globus_xio_system_file_t fd,
245 globus_size_t buflen,
246 globus_size_t * nbytes);
249 globus_i_xio_system_try_readv(
250 globus_xio_system_file_t fd,
251 const globus_xio_iovec_t * iov,
253 globus_size_t * nbytes);
256 globus_i_xio_system_try_recv(
257 globus_xio_system_socket_t fd,
259 globus_size_t buflen,
261 globus_size_t * nbytes);
264 globus_i_xio_system_try_recvfrom(
265 globus_xio_system_socket_t fd,
267 globus_size_t buflen,
269 globus_sockaddr_t * from,
270 globus_size_t * nbytes);
273 globus_i_xio_system_try_recvmsg(
274 globus_xio_system_socket_t fd,
275 struct msghdr * msghdr,
277 globus_size_t * nbytes);
280 globus_i_xio_system_try_write(
281 globus_xio_system_file_t fd,
283 globus_size_t buflen,
284 globus_size_t * nbytes);
287 globus_i_xio_system_try_writev(
288 globus_xio_system_file_t fd,
289 const globus_xio_iovec_t * iov,
291 globus_size_t * nbytes);
294 globus_i_xio_system_try_send(
295 globus_xio_system_socket_t fd,
297 globus_size_t buflen,
299 globus_size_t * nbytes);
302 globus_i_xio_system_try_sendto(
303 globus_xio_system_socket_t fd,
305 globus_size_t buflen,
307 const globus_sockaddr_t * to,
308 globus_size_t * nbytes);
311 globus_i_xio_system_try_sendmsg(
312 globus_xio_system_socket_t fd,
313 struct msghdr * msghdr,
315 globus_size_t * nbytes);
318 globus_i_xio_system_file_try_read(
319 globus_xio_system_file_t handle,
320 const globus_xio_iovec_t * iov,
322 globus_size_t * nbytes);
325 globus_i_xio_system_file_try_write(
326 globus_xio_system_file_t handle,
327 const globus_xio_iovec_t * iov,
329 globus_size_t * nbytes);
332 globus_i_xio_system_socket_try_read(
333 globus_xio_system_socket_t handle,
334 const globus_xio_iovec_t * iov,
337 globus_sockaddr_t * from,
338 globus_size_t * nbytes);
341 globus_i_xio_system_socket_try_write(
342 globus_xio_system_socket_t handle,
343 const globus_xio_iovec_t * iov,
346 globus_sockaddr_t * to,
347 globus_size_t * nbytes);
350 globus_i_xio_system_common_activate(
void);
353 globus_i_xio_system_common_deactivate(
void);