globus_xio  6.3
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
globus_xio_driver.h
1 
2 #if !defined(GLOBUS_XIO_DRIVER_H)
3 #define GLOBUS_XIO_DRIVER_H 1
4 
5 #include "globus_common.h"
6 #include "globus_xio_load.h"
7 #include "globus_common.h"
8 #include "globus_xio_types.h"
9 #include "globus_xio.h"
10 #include "globus_xio_util.h"
11 #include <stdarg.h>
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 /*-**********************************************************************
18  * attribute macros
19  ***********************************************************************/
20 #define GlobusIXIOAttrGetDS(_out_ds, _in_attr, _in_driver) \
21 do \
22 { \
23  int _ctr; \
24  globus_i_xio_attr_t * _attr; \
25  globus_xio_driver_t _driver; \
26  globus_i_xio_attr_ent_t * _entry; \
27  void * _ds = NULL; \
28  \
29  _attr = (_in_attr); \
30  _driver = (_in_driver); \
31  \
32  if(_in_attr == NULL) \
33  { \
34  _out_ds = NULL; \
35  } \
36  else \
37  { \
38  _entry = _attr->entry; \
39  for(_ctr = 0; _ctr < _attr->ndx && _ds == NULL; _ctr++) \
40  { \
41  if(_entry[_ctr].driver == _driver) \
42  { \
43  _ds = _entry[_ctr].driver_data; \
44  } \
45  } \
46  _out_ds = _ds; \
47  } \
48 } while(0)
49 
50 /*-*****************************************************************
51  * driver interface
52  ******************************************************************/
237 /*******************************************************************
238  * callbacks
239  ******************************************************************/
256 typedef void
258  globus_xio_operation_t op,
259  globus_result_t result,
260  void * user_arg);
261 
262 
284 typedef void
286  globus_xio_operation_t op,
287  globus_result_t result,
288  globus_size_t nbytes,
289  void * user_arg);
290 
291 
292 typedef globus_result_t
293 (*globus_xio_driver_push_driver_t)(
294  globus_xio_driver_t driver,
295  globus_xio_stack_t stack);
296 
297 globus_result_t
298 globus_xio_driver_attr_cntl(
299  globus_xio_operation_t op,
300  globus_xio_driver_t driver,
301  int cmd,
302  ...);
303 
304 globus_result_t
305 globus_xio_driver_data_descriptor_cntl(
306  globus_xio_operation_t op,
307  globus_xio_driver_t driver,
308  int cmd,
309  ...);
310 
320 globus_result_t
322  globus_xio_driver_handle_t handle,
323  globus_xio_driver_t driver,
324  int cmd,
325  ...);
326 
330 typedef globus_result_t
331 (*globus_xio_driver_get_driver_t)(
332  globus_xio_driver_t * out_driver);
341 typedef globus_result_t
343  void ** out_driver_attr);
344 
352 typedef globus_result_t
354  void ** dst,
355  void * src);
356 
364 typedef globus_result_t
366  void * driver_attr);
367 
387 typedef globus_result_t
389  void * attr,
390  int cmd,
391  va_list ap);
392 
418 typedef globus_result_t
420  void * driver_attr,
421  const globus_xio_contact_t * contact_info,
422  globus_xio_operation_t op);
423 
449 globus_result_t
450 globus_xio_driver_pass_server_init(
451  globus_xio_operation_t op,
452  const globus_xio_contact_t * contact_info,
453  void * driver_server);
454 
469 typedef globus_result_t
471  void * driver_server);
472 
493 typedef globus_result_t
495  void * driver_server,
496  globus_xio_operation_t op);
497 
498 globus_result_t
499 globus_xio_driver_pass_accept(
500  globus_xio_operation_t op,
502  void * in_user_arg);
503 
507 typedef void
508 (*globus_xio_driver_cancel_callback_t)(
509  globus_xio_operation_t op,
510  void * user_arg,
511  globus_xio_error_type_t reason);
512 
532 void
534  globus_xio_operation_t op,
535  void * driver_link,
536  globus_result_t result);
537 
555 typedef globus_result_t
557  void * driver_server,
558  int cmd,
559  va_list ap);
560 
561 
565 typedef globus_result_t
566 (*globus_xio_driver_link_cntl_t)(
567  void * driver_link,
568  int cmd,
569  va_list ap);
570 
581 typedef globus_result_t
583  void * driver_link);
584 
585 
586 /**********************************************************************
587  * Open
588  *********************************************************************/
589 
617 typedef globus_result_t
619  const globus_xio_contact_t * contact_info,
620  void * driver_link,
621  void * driver_attr,
622  globus_xio_operation_t op);
623 
628 typedef globus_result_t
630  const globus_xio_contact_t * contact_info,
631  void * driver_link,
632  void * driver_attr,
633  globus_xio_operation_t op);
634 
663 globus_result_t
665  globus_xio_operation_t op,
666  const globus_xio_contact_t * contact_info,
668  void * user_arg);
669 
689 void
691  void * driver_handle,
692  globus_xio_operation_t op,
693  globus_result_t result);
694 
695 /**********************************************************************
696  * Context functions
697  *********************************************************************/
716 globus_result_t
718  globus_xio_operation_t * operation,
719  globus_xio_driver_handle_t handle);
720 
724 void
725 globus_xio_driver_operation_destroy(
726  globus_xio_operation_t operation);
727 
731 globus_result_t
732 globus_xio_driver_operation_cancel(
733  globus_xio_driver_handle_t handle,
734  globus_xio_operation_t operation);
735 
744 globus_bool_t
746  globus_xio_operation_t operation);
747 
759 typedef globus_result_t
761  void * handle,
762  int cmd,
763  va_list ap);
764 
765 
766 globus_result_t
767 globus_xio_driver_merge_handle(
768  globus_xio_operation_t op,
769  globus_xio_driver_handle_t handle);
770 
771 /**********************************************************************
772  * Close
773  *********************************************************************/
793 typedef globus_result_t
795  void * driver_handle,
796  void * driver_attr,
797  globus_xio_operation_t op);
798 
815 globus_result_t
817  globus_xio_operation_t op,
819  void * callback_arg);
820 
836 void
838  globus_xio_operation_t op,
839  globus_result_t result);
840 
841 /**********************************************************************
842  * Read
843  *********************************************************************/
867 typedef globus_result_t
869  void * driver_specific_handle,
870  const globus_xio_iovec_t * iovec,
871  int iovec_count,
872  globus_xio_operation_t op);
873 
905 globus_result_t
907  globus_xio_operation_t op,
908  globus_xio_iovec_t * iovec,
909  int iovec_count,
910  globus_size_t wait_for,
912  void * user_arg);
913 
931 void
933  globus_xio_operation_t op,
934  globus_result_t result,
935  globus_size_t nread);
936 
961 void
963  globus_xio_operation_t op);
964 
987 globus_bool_t
989  globus_xio_operation_t op);
990 
991 /**********************************************************************
992  * Write
993  *********************************************************************/
1017 typedef globus_result_t
1019  void * driver_specific_handle,
1020  const globus_xio_iovec_t * iovec,
1021  int iovec_count,
1022  globus_xio_operation_t op);
1023 
1056 globus_result_t
1058  globus_xio_operation_t op,
1059  globus_xio_iovec_t * iovec,
1060  int iovec_count,
1061  globus_size_t wait_for,
1063  void * user_arg);
1064 
1082 void
1084  globus_xio_operation_t op,
1085  globus_result_t result,
1086  globus_size_t nwritten);
1087 
1112 globus_result_t
1114  globus_xio_operation_t top_op,
1115  globus_xio_operation_t bottom_op);
1116 
1117 
1118 /**********************************************************************
1119  * data descriptors
1120  *********************************************************************/
1178 globus_result_t
1179 globus_xio_driver_init(
1180  globus_xio_driver_t * driver,
1181  const char * driver_name,
1182  void * user_data);
1183 
1187 globus_result_t
1188 globus_xio_driver_get_user_data(
1189  globus_xio_driver_t in_driver,
1190  void ** out_user_data);
1191 
1192 globus_result_t
1193 globus_xio_operation_attr_cntl(
1194  globus_xio_operation_t op,
1195  globus_xio_attr_cmd_t cmd,
1196  ...);
1197 
1201 globus_result_t
1202 globus_xio_driver_destroy(
1203  globus_xio_driver_t driver);
1204 
1208 globus_result_t
1209 globus_xio_driver_set_transport(
1210  globus_xio_driver_t driver,
1211  globus_xio_driver_transport_open_t transport_open_func,
1212  globus_xio_driver_close_t close_func,
1213  globus_xio_driver_read_t read_func,
1214  globus_xio_driver_write_t write_func,
1215  globus_xio_driver_handle_cntl_t handle_cntl_func);
1216 
1220 globus_result_t
1221 globus_xio_driver_set_transform(
1222  globus_xio_driver_t driver,
1223  globus_xio_driver_transform_open_t transform_open_func,
1224  globus_xio_driver_close_t close_func,
1225  globus_xio_driver_read_t read_func,
1226  globus_xio_driver_write_t write_func,
1227  globus_xio_driver_handle_cntl_t handle_cntl_func,
1228  globus_xio_driver_push_driver_t push_driver_func);
1229 
1233 globus_result_t
1234 globus_xio_driver_set_server(
1235  globus_xio_driver_t driver,
1236  globus_xio_driver_server_init_t server_init_func,
1237  globus_xio_driver_server_accept_t server_accept_func,
1238  globus_xio_driver_server_destroy_t server_destroy_func,
1239  globus_xio_driver_server_cntl_t server_cntl_func,
1240  globus_xio_driver_link_cntl_t link_cntl_func,
1241  globus_xio_driver_link_destroy_t link_destroy_func);
1242 
1243 globus_result_t
1245  globus_xio_driver_t driver,
1246  globus_xio_driver_server_init_t server_pre_init_func);
1250 globus_result_t
1251 globus_xio_driver_set_attr(
1252  globus_xio_driver_t driver,
1253  globus_xio_driver_attr_init_t attr_init_func,
1254  globus_xio_driver_attr_copy_t attr_copy_func,
1255  globus_xio_driver_attr_cntl_t attr_cntl_func,
1256  globus_xio_driver_attr_destroy_t attr_destroy_func);
1257 
1258 /*
1259  * operation accessors
1260  */
1261 void
1262 globus_xio_operation_block_timeout(
1263  globus_xio_operation_t op);
1264 
1265 void
1266 globus_xio_operation_unblock_timeout(
1267  globus_xio_operation_t op);
1268 
1269 void
1270 globus_xio_operation_refresh_timeout(
1271  globus_xio_operation_t op);
1272 
1274 globus_bool_t
1275 globus_xio_operation_enable_cancel(
1276  globus_xio_operation_t op,
1277  globus_xio_driver_cancel_callback_t cb,
1278  void * user_arg);
1279 
1280 void
1281 globus_xio_operation_disable_cancel(
1282  globus_xio_operation_t op);
1283 
1284 globus_bool_t
1285 globus_xio_operation_is_canceled(
1286  globus_xio_operation_t op);
1287 
1288 globus_size_t
1289 globus_xio_operation_get_wait_for(
1290  globus_xio_operation_t op);
1291 
1292 void *
1293 globus_xio_operation_get_driver_specific(
1294  globus_xio_operation_t op);
1295 
1296 globus_xio_driver_t
1297 globus_xio_operation_get_user_driver(
1298  globus_xio_operation_t op);
1299 
1300 globus_xio_driver_t
1301 globus_xio_operation_get_transport_user_driver(
1302  globus_xio_operation_t op);
1303 
1304 /* this returns the handle to the drivers below you */
1305 globus_xio_driver_handle_t
1306 globus_xio_operation_get_driver_handle(
1307  globus_xio_operation_t op);
1308 
1309 /* this returns the handle to your driver.
1310  * (only useful for canceling operations in your possession)
1311  * or getting user handle associated with the driver
1312  */
1313 globus_xio_driver_handle_t
1314 globus_xio_operation_get_driver_self_handle(
1315  globus_xio_operation_t op);
1316 
1317 void *
1318 globus_xio_operation_get_data_descriptor(
1319  globus_xio_operation_t op,
1320  globus_bool_t force_create);
1321 
1322 globus_result_t
1323 globus_xio_operation_copy_stack(
1324  globus_xio_operation_t op,
1325  globus_xio_stack_t * stack);
1326 
1327 /* STRING PARSING STUFF */
1331 typedef globus_result_t
1332 (*globus_xio_string_cntl_parse_func_t)(
1333  void * attr,
1334  const char * key,
1335  const char * val,
1336  int cmd,
1337  globus_xio_driver_attr_cntl_t cntl_func);
1338 
1342 typedef struct globus_xio_string_cntl_table_s
1343 {
1344  const char * key;
1345  int cmd;
1346  globus_xio_string_cntl_parse_func_t parse_func;
1347 } globus_xio_string_cntl_table_t;
1348 
1402 globus_result_t
1404  globus_xio_driver_t driver,
1405  globus_xio_string_cntl_table_t * table);
1406 
1411 globus_result_t
1413  globus_xio_driver_t driver,
1414  globus_xio_string_cntl_table_t * table);
1415 
1421 globus_result_t
1424  void * attr,
1425  int cmd,
1426  ...);
1427 
1428 /* list all of the built in parsing functions */
1434 globus_result_t
1436  void * attr,
1437  const char * key,
1438  const char * val,
1439  int cmd,
1440  globus_xio_driver_attr_cntl_t cntl_func);
1441 
1447 globus_result_t
1449  void * attr,
1450  const char * key,
1451  const char * val,
1452  int cmd,
1453  globus_xio_driver_attr_cntl_t cntl_func);
1454 
1460 globus_result_t
1462  void * attr,
1463  const char * key,
1464  const char * val,
1465  int cmd,
1466  globus_xio_driver_attr_cntl_t cntl_func);
1467 
1473 globus_result_t
1475  void * attr,
1476  const char * key,
1477  const char * val,
1478  int cmd,
1479  globus_xio_driver_attr_cntl_t cntl_func);
1480 
1486 globus_result_t
1488  void * attr,
1489  const char * key,
1490  const char * val,
1491  int cmd,
1492  globus_xio_driver_attr_cntl_t cntl_func);
1493 
1494 globus_result_t
1495 globus_xio_string_cntl_formated_off(
1496  void * attr,
1497  const char * key,
1498  const char * val,
1499  int cmd,
1500  globus_xio_driver_attr_cntl_t cntl_func);
1501 
1502 globus_result_t
1503 globus_xio_string_cntl_formated_int(
1504  void * attr,
1505  const char * key,
1506  const char * val,
1507  int cmd,
1508  globus_xio_driver_attr_cntl_t cntl_func);
1509 
1510 globus_result_t
1511 globus_xio_string_cntl_string_list(
1512  void * attr,
1513  const char * key,
1514  const char * val,
1515  int cmd,
1516  globus_xio_driver_attr_cntl_t cntl_func);
1517 
1518 
1519 #ifdef __cplusplus
1520 }
1521 #endif
1522 
1523 #endif /* GLOBUS_XIO_DRIVER_H */
void globus_xio_driver_finished_accept(globus_xio_operation_t op, void *driver_link, globus_result_t result)
Definition: globus_xio_pass.c:1588
void globus_xio_driver_finished_open(void *driver_handle, globus_xio_operation_t op, globus_result_t result)
Definition: globus_xio_pass.c:141
void(* globus_xio_driver_data_callback_t)(globus_xio_operation_t op, globus_result_t result, globus_size_t nbytes, void *user_arg)
Definition: globus_xio_driver.h:285
globus_result_t(* globus_xio_driver_attr_copy_t)(void **dst, void *src)
Definition: globus_xio_driver.h:353
globus_result_t(* globus_xio_driver_read_t)(void *driver_specific_handle, const globus_xio_iovec_t *iovec, int iovec_count, globus_xio_operation_t op)
Definition: globus_xio_driver.h:868
globus_result_t(* globus_xio_driver_write_t)(void *driver_specific_handle, const globus_xio_iovec_t *iovec, int iovec_count, globus_xio_operation_t op)
Definition: globus_xio_driver.h:1018
globus_result_t(* globus_xio_driver_server_destroy_t)(void *driver_server)
Definition: globus_xio_driver.h:470
globus_result_t globus_xio_driver_handle_string_cntl_set_table(globus_xio_driver_t driver, globus_xio_string_cntl_table_t *table)
Definition: globus_xio_driver.c:2205
globus_result_t(* globus_xio_driver_attr_cntl_t)(void *attr, int cmd, va_list ap)
Definition: globus_xio_driver.h:388
globus_result_t globus_xio_string_cntl_string(void *attr, const char *key, const char *val, int cmd, globus_xio_driver_attr_cntl_t cntl_func)
Definition: globus_xio_attr.c:1413
globus_bool_t globus_xio_driver_eof_received(globus_xio_operation_t op)
Definition: globus_xio_driver.c:1887
globus_result_t(* globus_xio_driver_close_t)(void *driver_handle, void *driver_attr, globus_xio_operation_t op)
Close a handle.
Definition: globus_xio_driver.h:794
globus_result_t globus_xio_driver_handle_cntl(globus_xio_driver_handle_t driver_handle, globus_xio_driver_t driver, int cmd,...)
Definition: globus_xio_driver.c:1747
globus_result_t globus_xio_driver_pass_close(globus_xio_operation_t op, globus_xio_driver_callback_t cb, void *callback_arg)
Pass the close operation down the driver stack.
Definition: globus_xio_pass.c:379
globus_result_t globus_xio_driver_pass_read(globus_xio_operation_t op, globus_xio_iovec_t *iovec, int iovec_count, globus_size_t wait_for, globus_xio_driver_data_callback_t cb, void *user_arg)
Definition: globus_xio_pass.c:918
globus_result_t globus_xio_driver_operation_create(globus_xio_operation_t *operation, globus_xio_driver_handle_t driver_handle)
Definition: globus_xio_driver.c:1047
globus_result_t(* globus_xio_driver_transport_open_t)(const globus_xio_contact_t *contact_info, void *driver_link, void *driver_attr, globus_xio_operation_t op)
Open a handle.
Definition: globus_xio_driver.h:629
globus_result_t(* globus_xio_driver_attr_destroy_t)(void *driver_attr)
Definition: globus_xio_driver.h:365
globus_result_t globus_xio_string_cntl_float(void *attr, const char *key, const char *val, int cmd, globus_xio_driver_attr_cntl_t cntl_func)
Definition: globus_xio_attr.c:1385
void(* globus_xio_driver_callback_t)(globus_xio_operation_t op, globus_result_t result, void *user_arg)
Open and Close Callback Signature.
Definition: globus_xio_driver.h:257
globus_result_t(* globus_xio_driver_handle_cntl_t)(void *handle, int cmd, va_list ap)
Definition: globus_xio_driver.h:760
void globus_xio_driver_finished_write(globus_xio_operation_t op, globus_result_t result, globus_size_t nwritten)
Definition: globus_xio_pass.c:744
globus_result_t(* globus_xio_driver_server_init_t)(void *driver_attr, const globus_xio_contact_t *contact_info, globus_xio_operation_t op)
Definition: globus_xio_driver.h:419
globus_result_t(* globus_xio_driver_transform_open_t)(const globus_xio_contact_t *contact_info, void *driver_link, void *driver_attr, globus_xio_operation_t op)
Open a handle.
Definition: globus_xio_driver.h:618
globus_result_t(* globus_xio_driver_link_destroy_t)(void *driver_link)
Definition: globus_xio_driver.h:582
globus_result_t globus_xio_string_cntl_int(void *attr, const char *key, const char *val, int cmd, globus_xio_driver_attr_cntl_t cntl_func)
Definition: globus_xio_attr.c:1308
void globus_xio_driver_finished_close(globus_xio_operation_t op, globus_result_t result)
Definition: globus_xio_pass.c:522
globus_result_t globus_xio_string_cntl_bool(void *attr, const char *key, const char *val, int cmd, globus_xio_driver_attr_cntl_t cntl_func)
Definition: globus_xio_attr.c:1432
globus_result_t globus_xio_driver_pass_open(globus_xio_operation_t op, const globus_xio_contact_t *contact_info, globus_xio_driver_callback_t cb, void *user_arg)
Definition: globus_xio_pass.c:12
globus_bool_t globus_xio_driver_operation_is_blocking(globus_xio_operation_t op)
Definition: globus_xio_driver.c:2325
void globus_xio_driver_finished_read(globus_xio_operation_t op, globus_result_t result, globus_size_t nread)
Definition: globus_xio_pass.c:1105
globus_result_t(* globus_xio_driver_server_cntl_t)(void *driver_server, int cmd, va_list ap)
Definition: globus_xio_driver.h:556
globus_result_t(* globus_xio_driver_server_accept_t)(void *driver_server, globus_xio_operation_t op)
Definition: globus_xio_driver.h:494
globus_result_t globus_xio_driver_set_server_pre_init(globus_xio_driver_t driver, globus_xio_driver_server_init_t server_pre_init_func)
Server Pre-Init.
Definition: globus_xio_driver.c:2113
globus_result_t globus_xio_string_cntl_int_int(void *attr, const char *key, const char *val, int cmd, globus_xio_driver_attr_cntl_t cntl_func)
Definition: globus_xio_attr.c:1336
globus_result_t globus_xio_string_cntl_bouncer(globus_xio_driver_attr_cntl_t cntl_func, void *attr, int cmd,...)
Definition: globus_xio_attr.c:1175
globus_result_t(* globus_xio_driver_attr_init_t)(void **out_driver_attr)
Definition: globus_xio_driver.h:342
void globus_xio_driver_set_eof_received(globus_xio_operation_t op)
Definition: globus_xio_driver.c:1852
globus_result_t globus_xio_driver_string_cntl_set_table(globus_xio_driver_t driver, globus_xio_string_cntl_table_t *table)
Definition: globus_xio_driver.c:2175
globus_result_t globus_xio_driver_merge_operation(globus_xio_operation_t top_op, globus_xio_operation_t bottom_op)
globus_result_t globus_xio_driver_pass_write(globus_xio_operation_t op, globus_xio_iovec_t *iovec, int iovec_count, globus_size_t wait_for, globus_xio_driver_data_callback_t cb, void *user_arg)
Definition: globus_xio_pass.c:595