Grid Community Toolkit  6.2.1541705016
globus_xio_driver.h
1 /*
2  * Copyright 1999-2006 University of Chicago
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #if !defined(GLOBUS_XIO_DRIVER_H)
18 #define GLOBUS_XIO_DRIVER_H 1
19 
20 #include "globus_common.h"
21 #include "globus_xio_load.h"
22 #include "globus_common.h"
23 #include "globus_xio_types.h"
24 #include "globus_xio.h"
25 #include "globus_xio_util.h"
26 #include <stdarg.h>
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 
32 /*-**********************************************************************
33  * attribute macros
34  ***********************************************************************/
35 #define GlobusIXIOAttrGetDS(_out_ds, _in_attr, _in_driver) \
36 do \
37 { \
38  int _ctr; \
39  globus_i_xio_attr_t * _attr; \
40  globus_xio_driver_t _driver; \
41  globus_i_xio_attr_ent_t * _entry; \
42  void * _ds = NULL; \
43  \
44  _attr = (_in_attr); \
45  _driver = (_in_driver); \
46  \
47  if(_in_attr == NULL) \
48  { \
49  _out_ds = NULL; \
50  } \
51  else \
52  { \
53  _entry = _attr->entry; \
54  for(_ctr = 0; _ctr < _attr->ndx && _ds == NULL; _ctr++) \
55  { \
56  if(_entry[_ctr].driver == _driver) \
57  { \
58  _ds = _entry[_ctr].driver_data; \
59  } \
60  } \
61  _out_ds = _ds; \
62  } \
63 } while(0)
64 
65 /*-*****************************************************************
66  * driver interface
67  ******************************************************************/
252 /*******************************************************************
253  * callbacks
254  ******************************************************************/
271 typedef void
273  globus_xio_operation_t op,
274  globus_result_t result,
275  void * user_arg);
276 
277 
299 typedef void
301  globus_xio_operation_t op,
302  globus_result_t result,
303  globus_size_t nbytes,
304  void * user_arg);
305 
306 
307 typedef globus_result_t
308 (*globus_xio_driver_push_driver_t)(
309  globus_xio_driver_t driver,
310  globus_xio_stack_t stack);
311 
313 globus_xio_driver_attr_cntl(
314  globus_xio_operation_t op,
315  globus_xio_driver_t driver,
316  int cmd,
317  ...);
318 
320 globus_xio_driver_data_descriptor_cntl(
321  globus_xio_operation_t op,
322  globus_xio_driver_t driver,
323  int cmd,
324  ...);
325 
337  globus_xio_driver_handle_t handle,
338  globus_xio_driver_t driver,
339  int cmd,
340  ...);
341 
345 typedef globus_result_t
346 (*globus_xio_driver_get_driver_t)(
347  globus_xio_driver_t * out_driver);
356 typedef globus_result_t
358  void ** out_driver_attr);
359 
367 typedef globus_result_t
369  void ** dst,
370  void * src);
371 
379 typedef globus_result_t
381  void * driver_attr);
382 
402 typedef globus_result_t
404  void * attr,
405  int cmd,
406  va_list ap);
407 
433 typedef globus_result_t
435  void * driver_attr,
436  const globus_xio_contact_t * contact_info,
437  globus_xio_operation_t op);
438 
465 globus_xio_driver_pass_server_init(
466  globus_xio_operation_t op,
467  const globus_xio_contact_t * contact_info,
468  void * driver_server);
469 
484 typedef globus_result_t
486  void * driver_server);
487 
508 typedef globus_result_t
510  void * driver_server,
511  globus_xio_operation_t op);
512 
514 globus_xio_driver_pass_accept(
515  globus_xio_operation_t op,
517  void * in_user_arg);
518 
522 typedef void
523 (*globus_xio_driver_cancel_callback_t)(
524  globus_xio_operation_t op,
525  void * user_arg,
526  globus_xio_error_type_t reason);
527 
547 void
549  globus_xio_operation_t op,
550  void * driver_link,
551  globus_result_t result);
552 
570 typedef globus_result_t
572  void * driver_server,
573  int cmd,
574  va_list ap);
575 
576 
580 typedef globus_result_t
581 (*globus_xio_driver_link_cntl_t)(
582  void * driver_link,
583  int cmd,
584  va_list ap);
585 
596 typedef globus_result_t
598  void * driver_link);
599 
600 
601 /**********************************************************************
602  * Open
603  *********************************************************************/
604 
632 typedef globus_result_t
634  const globus_xio_contact_t * contact_info,
635  void * driver_link,
636  void * driver_attr,
637  globus_xio_operation_t op);
638 
643 typedef globus_result_t
645  const globus_xio_contact_t * contact_info,
646  void * driver_link,
647  void * driver_attr,
648  globus_xio_operation_t op);
649 
680  globus_xio_operation_t op,
681  const globus_xio_contact_t * contact_info,
683  void * user_arg);
684 
704 void
706  void * driver_handle,
707  globus_xio_operation_t op,
708  globus_result_t result);
709 
710 /**********************************************************************
711  * Context functions
712  *********************************************************************/
733  globus_xio_operation_t * operation,
734  globus_xio_driver_handle_t handle);
735 
739 void
740 globus_xio_driver_operation_destroy(
741  globus_xio_operation_t operation);
742 
747 globus_xio_driver_operation_cancel(
748  globus_xio_driver_handle_t handle,
749  globus_xio_operation_t operation);
750 
761  globus_xio_operation_t operation);
762 
774 typedef globus_result_t
776  void * handle,
777  int cmd,
778  va_list ap);
779 
780 
782 globus_xio_driver_merge_handle(
783  globus_xio_operation_t op,
784  globus_xio_driver_handle_t handle);
785 
786 /**********************************************************************
787  * Close
788  *********************************************************************/
808 typedef globus_result_t
810  void * driver_handle,
811  void * driver_attr,
812  globus_xio_operation_t op);
813 
832  globus_xio_operation_t op,
834  void * callback_arg);
835 
851 void
853  globus_xio_operation_t op,
854  globus_result_t result);
855 
856 /**********************************************************************
857  * Read
858  *********************************************************************/
882 typedef globus_result_t
884  void * driver_specific_handle,
885  const globus_xio_iovec_t * iovec,
886  int iovec_count,
887  globus_xio_operation_t op);
888 
922  globus_xio_operation_t op,
923  globus_xio_iovec_t * iovec,
924  int iovec_count,
925  globus_size_t wait_for,
927  void * user_arg);
928 
946 void
948  globus_xio_operation_t op,
949  globus_result_t result,
950  globus_size_t nread);
951 
976 void
978  globus_xio_operation_t op);
979 
1004  globus_xio_operation_t op);
1005 
1006 /**********************************************************************
1007  * Write
1008  *********************************************************************/
1032 typedef globus_result_t
1034  void * driver_specific_handle,
1035  const globus_xio_iovec_t * iovec,
1036  int iovec_count,
1037  globus_xio_operation_t op);
1038 
1073  globus_xio_operation_t op,
1074  globus_xio_iovec_t * iovec,
1075  int iovec_count,
1076  globus_size_t wait_for,
1078  void * user_arg);
1079 
1097 void
1099  globus_xio_operation_t op,
1100  globus_result_t result,
1101  globus_size_t nwritten);
1102 
1129  globus_xio_operation_t top_op,
1130  globus_xio_operation_t bottom_op);
1131 
1132 
1133 /**********************************************************************
1134  * data descriptors
1135  *********************************************************************/
1194 globus_xio_driver_init(
1195  globus_xio_driver_t * driver,
1196  const char * driver_name,
1197  void * user_data);
1198 
1203 globus_xio_driver_get_user_data(
1204  globus_xio_driver_t in_driver,
1205  void ** out_user_data);
1206 
1208 globus_xio_operation_attr_cntl(
1209  globus_xio_operation_t op,
1210  globus_xio_attr_cmd_t cmd,
1211  ...);
1212 
1217 globus_xio_driver_destroy(
1218  globus_xio_driver_t driver);
1219 
1224 globus_xio_driver_set_transport(
1225  globus_xio_driver_t driver,
1226  globus_xio_driver_transport_open_t transport_open_func,
1227  globus_xio_driver_close_t close_func,
1228  globus_xio_driver_read_t read_func,
1229  globus_xio_driver_write_t write_func,
1230  globus_xio_driver_handle_cntl_t handle_cntl_func);
1231 
1236 globus_xio_driver_set_transform(
1237  globus_xio_driver_t driver,
1238  globus_xio_driver_transform_open_t transform_open_func,
1239  globus_xio_driver_close_t close_func,
1240  globus_xio_driver_read_t read_func,
1241  globus_xio_driver_write_t write_func,
1242  globus_xio_driver_handle_cntl_t handle_cntl_func,
1243  globus_xio_driver_push_driver_t push_driver_func);
1244 
1249 globus_xio_driver_set_server(
1250  globus_xio_driver_t driver,
1251  globus_xio_driver_server_init_t server_init_func,
1252  globus_xio_driver_server_accept_t server_accept_func,
1253  globus_xio_driver_server_destroy_t server_destroy_func,
1254  globus_xio_driver_server_cntl_t server_cntl_func,
1255  globus_xio_driver_link_cntl_t link_cntl_func,
1256  globus_xio_driver_link_destroy_t link_destroy_func);
1257 
1260  globus_xio_driver_t driver,
1261  globus_xio_driver_server_init_t server_pre_init_func);
1266 globus_xio_driver_set_attr(
1267  globus_xio_driver_t driver,
1268  globus_xio_driver_attr_init_t attr_init_func,
1269  globus_xio_driver_attr_copy_t attr_copy_func,
1270  globus_xio_driver_attr_cntl_t attr_cntl_func,
1271  globus_xio_driver_attr_destroy_t attr_destroy_func);
1272 
1273 /*
1274  * operation accessors
1275  */
1276 void
1277 globus_xio_operation_block_timeout(
1278  globus_xio_operation_t op);
1279 
1280 void
1281 globus_xio_operation_unblock_timeout(
1282  globus_xio_operation_t op);
1283 
1284 void
1285 globus_xio_operation_refresh_timeout(
1286  globus_xio_operation_t op);
1287 
1290 globus_xio_operation_enable_cancel(
1291  globus_xio_operation_t op,
1292  globus_xio_driver_cancel_callback_t cb,
1293  void * user_arg);
1294 
1295 void
1296 globus_xio_operation_disable_cancel(
1297  globus_xio_operation_t op);
1298 
1300 globus_xio_operation_is_canceled(
1301  globus_xio_operation_t op);
1302 
1304 globus_xio_operation_get_wait_for(
1305  globus_xio_operation_t op);
1306 
1307 void *
1308 globus_xio_operation_get_driver_specific(
1309  globus_xio_operation_t op);
1310 
1311 globus_xio_driver_t
1312 globus_xio_operation_get_user_driver(
1313  globus_xio_operation_t op);
1314 
1315 globus_xio_driver_t
1316 globus_xio_operation_get_transport_user_driver(
1317  globus_xio_operation_t op);
1318 
1319 /* this returns the handle to the drivers below you */
1320 globus_xio_driver_handle_t
1321 globus_xio_operation_get_driver_handle(
1322  globus_xio_operation_t op);
1323 
1324 /* this returns the handle to your driver.
1325  * (only useful for canceling operations in your possession)
1326  * or getting user handle associated with the driver
1327  */
1328 globus_xio_driver_handle_t
1329 globus_xio_operation_get_driver_self_handle(
1330  globus_xio_operation_t op);
1331 
1332 void *
1333 globus_xio_operation_get_data_descriptor(
1334  globus_xio_operation_t op,
1335  globus_bool_t force_create);
1336 
1338 globus_xio_operation_copy_stack(
1339  globus_xio_operation_t op,
1340  globus_xio_stack_t * stack);
1341 
1342 /* STRING PARSING STUFF */
1346 typedef globus_result_t
1347 (*globus_xio_string_cntl_parse_func_t)(
1348  void * attr,
1349  const char * key,
1350  const char * val,
1351  int cmd,
1352  globus_xio_driver_attr_cntl_t cntl_func);
1353 
1357 typedef struct globus_xio_string_cntl_table_s
1358 {
1359  const char * key;
1360  int cmd;
1361  globus_xio_string_cntl_parse_func_t parse_func;
1362 } globus_xio_string_cntl_table_t;
1363 
1419  globus_xio_driver_t driver,
1420  globus_xio_string_cntl_table_t * table);
1421 
1428  globus_xio_driver_t driver,
1429  globus_xio_string_cntl_table_t * table);
1430 
1439  void * attr,
1440  int cmd,
1441  ...);
1442 
1443 /* list all of the built in parsing functions */
1451  void * attr,
1452  const char * key,
1453  const char * val,
1454  int cmd,
1455  globus_xio_driver_attr_cntl_t cntl_func);
1456 
1464  void * attr,
1465  const char * key,
1466  const char * val,
1467  int cmd,
1468  globus_xio_driver_attr_cntl_t cntl_func);
1469 
1477  void * attr,
1478  const char * key,
1479  const char * val,
1480  int cmd,
1481  globus_xio_driver_attr_cntl_t cntl_func);
1482 
1490  void * attr,
1491  const char * key,
1492  const char * val,
1493  int cmd,
1494  globus_xio_driver_attr_cntl_t cntl_func);
1495 
1503  void * attr,
1504  const char * key,
1505  const char * val,
1506  int cmd,
1507  globus_xio_driver_attr_cntl_t cntl_func);
1508 
1510 globus_xio_string_cntl_formated_off(
1511  void * attr,
1512  const char * key,
1513  const char * val,
1514  int cmd,
1515  globus_xio_driver_attr_cntl_t cntl_func);
1516 
1518 globus_xio_string_cntl_formated_int(
1519  void * attr,
1520  const char * key,
1521  const char * val,
1522  int cmd,
1523  globus_xio_driver_attr_cntl_t cntl_func);
1524 
1526 globus_xio_string_cntl_string_list(
1527  void * attr,
1528  const char * key,
1529  const char * val,
1530  int cmd,
1531  globus_xio_driver_attr_cntl_t cntl_func);
1532 
1533 
1534 #ifdef __cplusplus
1535 }
1536 #endif
1537 
1538 #endif /* GLOBUS_XIO_DRIVER_H */
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:272
void globus_xio_driver_finished_accept(globus_xio_operation_t op, void *driver_link, globus_result_t result)
Definition: globus_xio_pass.c:1603
void globus_xio_driver_finished_open(void *driver_handle, globus_xio_operation_t op, globus_result_t result)
Definition: globus_xio_pass.c:156
globus_result_t(* globus_xio_driver_server_cntl_t)(void *driver_server, int cmd, va_list ap)
Definition: globus_xio_driver.h:571
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:300
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:633
globus_result_t(* globus_xio_driver_server_accept_t)(void *driver_server, globus_xio_operation_t op)
Definition: globus_xio_driver.h:509
globus_result_t(* globus_xio_driver_link_destroy_t)(void *driver_link)
Definition: globus_xio_driver.h:597
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:2220
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:809
globus_result_t(* globus_xio_driver_handle_cntl_t)(void *handle, int cmd, va_list ap)
Definition: globus_xio_driver.h:775
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:1428
globus_bool_t globus_xio_driver_eof_received(globus_xio_operation_t op)
Definition: globus_xio_driver.c:1902
int globus_bool_t
Boolean type.
Definition: globus_types.h:93
globus_result_t globus_xio_driver_handle_cntl(globus_xio_driver_handle_t handle, globus_xio_driver_t driver, int cmd,...)
Definition: globus_xio_driver.c:1762
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:394
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:933
globus_result_t globus_xio_driver_operation_create(globus_xio_operation_t *operation, globus_xio_driver_handle_t handle)
Definition: globus_xio_driver.c:1062
globus_result_t(* globus_xio_driver_attr_cntl_t)(void *attr, int cmd, va_list ap)
Definition: globus_xio_driver.h:403
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:1400
void globus_xio_driver_finished_write(globus_xio_operation_t op, globus_result_t result, globus_size_t nwritten)
Definition: globus_xio_pass.c:759
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:434
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:1323
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:1033
void globus_xio_driver_finished_close(globus_xio_operation_t op, globus_result_t result)
Definition: globus_xio_pass.c:537
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:644
size_t globus_size_t
Standard size of memory objectThe globus_size_t is the size of a memory object. It is identical to si...
Definition: globus_types.h:48
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:1447
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:27
globus_bool_t globus_xio_driver_operation_is_blocking(globus_xio_operation_t operation)
Definition: globus_xio_driver.c:2340
void globus_xio_driver_finished_read(globus_xio_operation_t op, globus_result_t result, globus_size_t nread)
Definition: globus_xio_pass.c:1120
Headers common to all of Globus.
uint32_t globus_result_t
Definition: globus_types.h:99
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:2128
globus_result_t(* globus_xio_driver_server_destroy_t)(void *driver_server)
Definition: globus_xio_driver.h:485
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:1351
globus_result_t(* globus_xio_driver_attr_destroy_t)(void *driver_attr)
Definition: globus_xio_driver.h:380
globus_result_t(* globus_xio_driver_attr_init_t)(void **out_driver_attr)
Definition: globus_xio_driver.h:357
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:1190
void globus_xio_driver_set_eof_received(globus_xio_operation_t op)
Definition: globus_xio_driver.c:1867
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:2190
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:610
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:883
globus_result_t(* globus_xio_driver_attr_copy_t)(void **dst, void *src)
Definition: globus_xio_driver.h:368