globus_xio  4.15
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Modules Pages
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  ******************************************************************/
265 /*******************************************************************
266  * callbacks
267  ******************************************************************/
286 typedef void
288  globus_xio_operation_t op,
289  globus_result_t result,
290  void * user_arg);
291 
292 
314 typedef void
316  globus_xio_operation_t op,
317  globus_result_t result,
318  globus_size_t nbytes,
319  void * user_arg);
320 
321 
322 typedef globus_result_t
323 (*globus_xio_driver_push_driver_t)(
324  globus_xio_driver_t driver,
325  globus_xio_stack_t stack);
326 
327 globus_result_t
328 globus_xio_driver_attr_cntl(
329  globus_xio_operation_t op,
330  globus_xio_driver_t driver,
331  int cmd,
332  ...);
333 
334 globus_result_t
335 globus_xio_driver_data_descriptor_cntl(
336  globus_xio_operation_t op,
337  globus_xio_driver_t driver,
338  int cmd,
339  ...);
340 
350 globus_result_t
352  globus_xio_driver_handle_t handle,
353  globus_xio_driver_t driver,
354  int cmd,
355  ...);
356 
360 typedef globus_result_t
361 (*globus_xio_driver_get_driver_t)(
362  globus_xio_driver_t * out_driver);
371 typedef globus_result_t
373  void ** out_driver_attr);
374 
382 typedef globus_result_t
384  void ** dst,
385  void * src);
386 
394 typedef globus_result_t
396  void * driver_attr);
397 
417 typedef globus_result_t
419  void * attr,
420  int cmd,
421  va_list ap);
422 
449 typedef globus_result_t
451  void * driver_attr,
452  const globus_xio_contact_t * contact_info,
453  globus_xio_operation_t op);
454 
479 globus_result_t
480 globus_xio_driver_pass_server_init(
481  globus_xio_operation_t op,
482  const globus_xio_contact_t * contact_info,
483  void * driver_server);
484 
499 typedef globus_result_t
501  void * driver_server);
502 
523 typedef globus_result_t
525  void * driver_server,
526  globus_xio_operation_t op);
527 
528 globus_result_t
529 globus_xio_driver_pass_accept(
530  globus_xio_operation_t op,
532  void * in_user_arg);
533 
537 typedef void
538 (*globus_xio_driver_cancel_callback_t)(
539  globus_xio_operation_t op,
540  void * user_arg,
541  globus_xio_error_type_t reason);
542 
562 void
564  globus_xio_operation_t op,
565  void * driver_link,
566  globus_result_t result);
567 
585 typedef globus_result_t
587  void * driver_server,
588  int cmd,
589  va_list ap);
590 
591 
595 typedef globus_result_t
596 (*globus_xio_driver_link_cntl_t)(
597  void * driver_link,
598  int cmd,
599  va_list ap);
600 
611 typedef globus_result_t
613  void * driver_link);
614 
615 
616 /**********************************************************************
617  * Open
618  *********************************************************************/
619 
648 typedef globus_result_t
650  const globus_xio_contact_t * contact_info,
651  void * driver_link,
652  void * driver_attr,
653  globus_xio_operation_t op);
654 
659 typedef globus_result_t
661  const globus_xio_contact_t * contact_info,
662  void * driver_link,
663  void * driver_attr,
664  globus_xio_operation_t op);
665 
694 globus_result_t
696  globus_xio_operation_t op,
697  const globus_xio_contact_t * contact_info,
699  void * user_arg);
700 
720 void
722  void * driver_handle,
723  globus_xio_operation_t op,
724  globus_result_t result);
725 
726 /**********************************************************************
727  * Context functions
728  *********************************************************************/
747 globus_result_t
749  globus_xio_operation_t * operation,
750  globus_xio_driver_handle_t handle);
751 
755 void
756 globus_xio_driver_operation_destroy(
757  globus_xio_operation_t operation);
758 
762 globus_result_t
763 globus_xio_driver_operation_cancel(
764  globus_xio_driver_handle_t handle,
765  globus_xio_operation_t operation);
766 
775 globus_bool_t
777  globus_xio_operation_t operation);
778 
790 typedef globus_result_t
792  void * handle,
793  int cmd,
794  va_list ap);
795 
796 
797 globus_result_t
798 globus_xio_driver_merge_handle(
799  globus_xio_operation_t op,
800  globus_xio_driver_handle_t handle);
801 
802 /**********************************************************************
803  * Close
804  *********************************************************************/
826 typedef globus_result_t
828  void * driver_handle,
829  void * driver_attr,
830  globus_xio_operation_t op);
831 
850 globus_result_t
852  globus_xio_operation_t op,
854  void * user_arg);
855 
871 void
873  globus_xio_operation_t op,
874  globus_result_t result);
875 
876 /**********************************************************************
877  * Read
878  *********************************************************************/
902 typedef globus_result_t
904  void * driver_specific_handle,
905  const globus_xio_iovec_t * iovec,
906  int iovec_count,
907  globus_xio_operation_t op);
908 
940 globus_result_t
942  globus_xio_operation_t op,
943  globus_xio_iovec_t * iovec,
944  int iovec_count,
945  globus_size_t wait_for,
947  void * user_arg);
948 
966 void
968  globus_xio_operation_t op,
969  globus_result_t result,
970  globus_size_t nread);
971 
996 void
998  globus_xio_operation_t op);
999 
1022 globus_bool_t
1024  globus_xio_operation_t op);
1025 
1026 /**********************************************************************
1027  * Write
1028  *********************************************************************/
1052 typedef globus_result_t
1054  void * driver_specific_handle,
1055  const globus_xio_iovec_t * iovec,
1056  int iovec_count,
1057  globus_xio_operation_t op);
1058 
1091 globus_result_t
1093  globus_xio_operation_t op,
1094  globus_xio_iovec_t * iovec,
1095  int iovec_count,
1096  globus_size_t wait_for,
1098  void * user_arg);
1099 
1117 void
1119  globus_xio_operation_t op,
1120  globus_result_t result,
1121  globus_size_t nwritten);
1122 
1147 globus_result_t
1149  globus_xio_operation_t top_op,
1150  globus_xio_operation_t bottom_op);
1151 
1152 
1153 /**********************************************************************
1154  * data descriptors
1155  *********************************************************************/
1213 globus_result_t
1214 globus_xio_driver_init(
1215  globus_xio_driver_t * driver,
1216  const char * driver_name,
1217  void * user_data);
1218 
1222 globus_result_t
1223 globus_xio_driver_get_user_data(
1224  globus_xio_driver_t in_driver,
1225  void ** out_user_data);
1226 
1230 globus_result_t
1231 globus_xio_operation_attr_cntl(
1232  globus_xio_operation_t op,
1233  globus_xio_attr_cmd_t cmd,
1234  ...);
1235 
1239 globus_result_t
1240 globus_xio_driver_destroy(
1241  globus_xio_driver_t driver);
1242 
1246 globus_result_t
1247 globus_xio_driver_set_transport(
1248  globus_xio_driver_t driver,
1249  globus_xio_driver_transport_open_t transport_open_func,
1250  globus_xio_driver_close_t close_func,
1251  globus_xio_driver_read_t read_func,
1252  globus_xio_driver_write_t write_func,
1253  globus_xio_driver_handle_cntl_t handle_cntl_func);
1254 
1258 globus_result_t
1259 globus_xio_driver_set_transform(
1260  globus_xio_driver_t driver,
1261  globus_xio_driver_transform_open_t transform_open_func,
1262  globus_xio_driver_close_t close_func,
1263  globus_xio_driver_read_t read_func,
1264  globus_xio_driver_write_t write_func,
1265  globus_xio_driver_handle_cntl_t handle_cntl_func,
1266  globus_xio_driver_push_driver_t push_driver_func);
1267 
1271 globus_result_t
1272 globus_xio_driver_set_server(
1273  globus_xio_driver_t driver,
1274  globus_xio_driver_server_init_t server_init_func,
1275  globus_xio_driver_server_accept_t server_accept_func,
1276  globus_xio_driver_server_destroy_t server_destroy_func,
1277  globus_xio_driver_server_cntl_t server_cntl_func,
1278  globus_xio_driver_link_cntl_t link_cntl_func,
1279  globus_xio_driver_link_destroy_t link_destroy_func);
1280 
1284 globus_result_t
1285 globus_xio_driver_set_attr(
1286  globus_xio_driver_t driver,
1287  globus_xio_driver_attr_init_t attr_init_func,
1288  globus_xio_driver_attr_copy_t attr_copy_func,
1289  globus_xio_driver_attr_cntl_t attr_cntl_func,
1290  globus_xio_driver_attr_destroy_t attr_destroy_func);
1291 
1292 /*
1293  * operation accessors
1294  */
1295 void
1296 globus_xio_operation_block_timeout(
1297  globus_xio_operation_t op);
1298 
1299 void
1300 globus_xio_operation_unblock_timeout(
1301  globus_xio_operation_t op);
1302 
1303 void
1304 globus_xio_operation_refresh_timeout(
1305  globus_xio_operation_t op);
1306 
1308 globus_bool_t
1309 globus_xio_operation_enable_cancel(
1310  globus_xio_operation_t op,
1311  globus_xio_driver_cancel_callback_t cb,
1312  void * user_arg);
1313 
1314 void
1315 globus_xio_operation_disable_cancel(
1316  globus_xio_operation_t op);
1317 
1318 globus_bool_t
1319 globus_xio_operation_is_canceled(
1320  globus_xio_operation_t op);
1321 
1322 globus_size_t
1323 globus_xio_operation_get_wait_for(
1324  globus_xio_operation_t op);
1325 
1326 void *
1327 globus_xio_operation_get_driver_specific(
1328  globus_xio_operation_t op);
1329 
1330 globus_xio_driver_t
1331 globus_xio_operation_get_user_driver(
1332  globus_xio_operation_t op);
1333 
1334 /* this returns the handle to the drivers below you */
1335 globus_xio_driver_handle_t
1336 globus_xio_operation_get_driver_handle(
1337  globus_xio_operation_t op);
1338 
1339 /* this returns the handle to your driver.
1340  * (only useful for canceling operations in your possession)
1341  * or getting user handle associated with the driver
1342  */
1343 globus_xio_driver_handle_t
1344 globus_xio_operation_get_driver_self_handle(
1345  globus_xio_operation_t op);
1346 
1347 void *
1348 globus_xio_operation_get_data_descriptor(
1349  globus_xio_operation_t op,
1350  globus_bool_t force_create);
1351 
1352 globus_result_t
1353 globus_xio_operation_copy_stack(
1354  globus_xio_operation_t op,
1355  globus_xio_stack_t * stack);
1356 
1357 /* STRING PARSING STUFF */
1361 typedef globus_result_t
1362 (*globus_xio_string_cntl_parse_func_t)(
1363  void * attr,
1364  const char * key,
1365  const char * val,
1366  int cmd,
1367  globus_xio_driver_attr_cntl_t cntl_func);
1368 
1372 typedef struct globus_xio_string_cntl_table_s
1373 {
1374  char * key;
1375  int cmd;
1376  globus_xio_string_cntl_parse_func_t parse_func;
1377 } globus_xio_string_cntl_table_t;
1378 
1433 globus_result_t
1434 globus_xio_driver_string_cntl_set_table(
1435  globus_xio_driver_t driver,
1436  globus_xio_string_cntl_table_t * table);
1437 
1438 
1444 globus_result_t
1447  void * attr,
1448  int cmd,
1449  ...);
1450 
1451 /* list all of the built in parsing functions */
1457 globus_result_t
1459  void * attr,
1460  const char * key,
1461  const char * val,
1462  int cmd,
1463  globus_xio_driver_attr_cntl_t cntl_func);
1464 
1470 globus_result_t
1472  void * attr,
1473  const char * key,
1474  const char * val,
1475  int cmd,
1476  globus_xio_driver_attr_cntl_t cntl_func);
1477 
1483 globus_result_t
1485  void * attr,
1486  const char * key,
1487  const char * val,
1488  int cmd,
1489  globus_xio_driver_attr_cntl_t cntl_func);
1490 
1496 globus_result_t
1498  void * attr,
1499  const char * key,
1500  const char * val,
1501  int cmd,
1502  globus_xio_driver_attr_cntl_t cntl_func);
1503 
1509 globus_result_t
1511  void * attr,
1512  const char * key,
1513  const char * val,
1514  int cmd,
1515  globus_xio_driver_attr_cntl_t cntl_func);
1516 
1517 globus_result_t
1518 globus_xio_string_cntl_formated_off(
1519  void * attr,
1520  const char * key,
1521  const char * val,
1522  int cmd,
1523  globus_xio_driver_attr_cntl_t cntl_func);
1524 
1525 globus_result_t
1526 globus_xio_string_cntl_formated_int(
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 globus_result_t
1534 globus_xio_string_cntl_string_list(
1535  void * attr,
1536  const char * key,
1537  const char * val,
1538  int cmd,
1539  globus_xio_driver_attr_cntl_t cntl_func);
1540 
1541 
1542 #ifdef __cplusplus
1543 }
1544 #endif
1545 
1546 #endif /* GLOBUS_XIO_DRIVER_H */
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
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:1702
globus_result_t globus_xio_driver_pass_close(globus_xio_operation_t op, globus_xio_driver_callback_t cb, void *user_arg)
Definition: globus_xio_pass.c:394
void globus_xio_driver_finished_open(void *driver_handle, globus_xio_operation_t op, globus_result_t result)
Definition: globus_xio_pass.c:156
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_merge_operation(globus_xio_operation_t top_op, globus_xio_operation_t bottom_op)
globus_result_t(* globus_xio_driver_server_destroy_t)(void *driver_server)
Definition: globus_xio_driver.h:500
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:1382
void(* globus_xio_driver_callback_t)(globus_xio_operation_t op, globus_result_t result, void *user_arg)
Definition: globus_xio_driver.h:287
void globus_xio_driver_finished_accept(globus_xio_operation_t op, void *driver_link, globus_result_t result)
Definition: globus_xio_pass.c:1603
globus_result_t(* globus_xio_driver_server_accept_t)(void *driver_server, globus_xio_operation_t op)
Definition: globus_xio_driver.h:524
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:1053
void globus_xio_driver_set_eof_received(globus_xio_operation_t op)
Definition: globus_xio_driver.c:1807
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_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
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_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:1354
globus_bool_t globus_xio_driver_operation_is_blocking(globus_xio_operation_t operation)
Definition: globus_xio_driver.c:2204
globus_result_t(* globus_xio_driver_handle_cntl_t)(void *handle, int cmd, va_list ap)
Definition: globus_xio_driver.h:791
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:450
globus_bool_t globus_xio_driver_eof_received(globus_xio_operation_t op)
Definition: globus_xio_driver.c:1842
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)
Definition: globus_xio_driver.h:660
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:1277
globus_result_t(* globus_xio_driver_close_t)(void *driver_handle, void *driver_attr, globus_xio_operation_t op)
Definition: globus_xio_driver.h:827
globus_result_t(* globus_xio_driver_link_destroy_t)(void *driver_link)
Definition: globus_xio_driver.h:612
globus_result_t(* globus_xio_driver_server_cntl_t)(void *driver_server, int cmd, va_list ap)
Definition: globus_xio_driver.h:586
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)
Definition: globus_xio_driver.h:649
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:1401
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:903
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:315
globus_result_t(* globus_xio_driver_attr_destroy_t)(void *driver_attr)
Definition: globus_xio_driver.h:395
globus_result_t(* globus_xio_driver_attr_cntl_t)(void *attr, int cmd, va_list ap)
Definition: globus_xio_driver.h:418
globus_result_t(* globus_xio_driver_attr_copy_t)(void **dst, void *src)
Definition: globus_xio_driver.h:383
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:1305
globus_result_t(* globus_xio_driver_attr_init_t)(void **out_driver_attr)
Definition: globus_xio_driver.h:372
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:1144
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_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