Grid Community Toolkit  6.2.1541705016
globus_xio.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_H)
18 #define GLOBUS_XIO_H
19 
20 #include "globus_common.h"
21 #include "globus_xio_types.h"
22 #include "globus_xio_util.h"
23 #include "globus_xio_load.h"
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 #ifndef GLOBUS_GLOBAL_DOCUMENT_SET
30 
34 #endif
35 
189 /*************************************************************************
190  * define types
191  ************************************************************************/
192 
229  globus_xio_attr_t * attr);
230 
259  globus_xio_attr_t attr,
260  globus_xio_driver_t driver,
261  int cmd,
262  ...);
263 
271  globus_xio_attr_t * dst,
272  globus_xio_attr_t src);
273 
285  globus_xio_attr_t attr);
286 
287 /*************************************************************************
288  * Stack functions
289  * ---------------
290  ************************************************************************/
291 
298  globus_xio_stack_t * stack,
299  globus_xio_attr_t stack_attr);
300 
311  globus_xio_stack_t stack,
312  globus_xio_driver_t driver);
313 
320  globus_xio_stack_t * dst,
321  globus_xio_stack_t src);
322 
329  globus_xio_stack_t stack);
330 
331 /*-------------------------------------------------------------------------
332  * server
333  *-----------------------------------------------------------------------*/
356 typedef void
358  globus_xio_server_t server,
359  globus_xio_handle_t handle,
360  globus_result_t result,
361  void * user_arg);
362 
370 typedef void
372  globus_xio_server_t server,
373  void * user_arg);
374 
395  globus_xio_server_t * server,
396  globus_xio_attr_t server_attr,
397  globus_xio_stack_t stack);
398 
415  globus_xio_server_t server,
416  char ** contact_string);
417 
427  globus_xio_server_t server,
429  void * user_arg);
430 
437  globus_xio_server_t server);
438 
449  globus_xio_server_t server,
450  globus_xio_driver_t driver,
451  int cmd,
452  ...);
453 
464  globus_xio_handle_t * out_handle,
465  globus_xio_server_t server);
466 
476  globus_xio_server_t server,
478  void * user_arg);
479 
490  globus_xio_handle_t * handle,
491  globus_xio_stack_t stack);
492 
493 /******************************************************************
494  * handle construction
495  *****************************************************************/
496 
497 /******************************************************************
498  * setting timeout values
499  *****************************************************************/
500 
520 typedef globus_bool_t
522  globus_xio_handle_t handle,
524  void * user_arg);
525 
526 typedef globus_bool_t
527 (*globus_xio_timeout_server_callback_t)(
528  globus_xio_server_t server,
530 
531 
532 /******************************************************************
533  * data descriptor
534  *****************************************************************/
535 
550  globus_xio_data_descriptor_t * data_desc,
551  globus_xio_handle_t handle);
552 
559  globus_xio_data_descriptor_t data_desc);
560 
571  globus_xio_data_descriptor_t data_desc,
572  globus_xio_driver_t driver,
573  int cmd,
574  ...);
575 
576 /*********************************************************************
577  * callbacks
578  ********************************************************************/
586 typedef void (*globus_xio_callback_t)(
587  globus_xio_handle_t handle,
588  globus_result_t result,
589  void * user_arg);
590 
601  globus_xio_handle_t handle,
602  globus_result_t result,
603  globus_byte_t * buffer,
604  globus_size_t len,
605  globus_size_t nbytes,
606  globus_xio_data_descriptor_t data_desc,
607  void * user_arg);
608 
619  globus_xio_handle_t handle,
620  globus_result_t result,
621  globus_xio_iovec_t * iovec,
622  int count,
623  globus_size_t nbytes,
624  globus_xio_data_descriptor_t data_desc,
625  void * user_arg);
626 
641  globus_xio_handle_t handle,
642  globus_xio_driver_t driver,
643  int cmd,
644  ...);
645 
708  globus_xio_handle_t handle,
709  const char * contact_string,
710  globus_xio_attr_t attr,
712  void * user_arg);
713 
720  globus_xio_handle_t handle,
721  const char * contact_string,
722  globus_xio_attr_t attr);
723 
730  globus_xio_handle_t handle,
731  globus_byte_t * buffer,
732  globus_size_t buffer_length,
733  globus_size_t waitforbytes,
734  globus_xio_data_descriptor_t data_desc,
736  void * user_arg);
737 
744  globus_xio_handle_t handle,
745  globus_byte_t * buffer,
746  globus_size_t buffer_length,
747  globus_size_t waitforbytes,
748  globus_size_t * nbytes,
749  globus_xio_data_descriptor_t data_desc);
750 
757  globus_xio_handle_t handle,
758  globus_xio_iovec_t * iovec,
759  int iovec_count,
760  globus_size_t waitforbytes,
761  globus_xio_data_descriptor_t data_desc,
763  void * user_arg);
764 
771  globus_xio_handle_t handle,
772  globus_xio_iovec_t * iovec,
773  int iovec_count,
774  globus_size_t waitforbytes,
775  globus_size_t * nbytes,
776  globus_xio_data_descriptor_t data_desc);
777 
784  globus_xio_handle_t handle,
785  globus_byte_t * buffer,
786  globus_size_t buffer_length,
787  globus_size_t waitforbytes,
788  globus_xio_data_descriptor_t data_desc,
790  void * user_arg);
791 
798  globus_xio_handle_t handle,
799  globus_byte_t * buffer,
800  globus_size_t buffer_length,
801  globus_size_t waitforbytes,
802  globus_size_t * nbytes,
803  globus_xio_data_descriptor_t data_desc);
804 
811  globus_xio_handle_t handle,
812  globus_xio_iovec_t * iovec,
813  int iovec_count,
814  globus_size_t waitforbytes,
815  globus_xio_data_descriptor_t data_desc,
817  void * user_arg);
818 
825  globus_xio_handle_t handle,
826  globus_xio_iovec_t * iovec,
827  int iovec_count,
828  globus_size_t waitforbytes,
829  globus_size_t * nbytes,
830  globus_xio_data_descriptor_t data_desc);
831 
832 
837 globus_xio_handle_cancel_operations(
838  globus_xio_handle_t handle,
839  int mask);
840 
842 globus_xio_server_cancel_accept(
843  globus_xio_server_t server);
844 
867  globus_xio_handle_t handle,
868  globus_xio_attr_t attr,
870  void * user_arg);
871 
878  globus_xio_handle_t handle,
879  globus_xio_attr_t attr);
880 
881 /*
882  * signal stuff
883  * TODO:
884  * Signals are not implemented in the first release.
885  * =================================================
886  *
887  * Signals in Globus XIO give the user a means of requesting
888  * notification when given things in the system change.
889  *
890  * For example:
891  * It may be useful for the user of globus_xio to know when/if the
892  * optimal post buffer size changes. The optimal post buffer size is
893  * a value that tells the user the best possible length of a buffer to
894  * post for an I/O operation. This value is mutable and can be changed
895  * by events internal to globus_xio of which the user is unaware.
896  * The signal API allows the user to register for notification of when
897  * this value changes.
898  *
899  * Globus XIO enumerates the signal types for which the user can register.
900  * One of these types is GLOBUS_XIO_DRIVER_SPECIFIC. This type allows
901  * the user to catch driver specific signals. A driver specific signal
902  * example could be when the TCP window size changes. Only a TCP driver
903  * can be aware of this information so only it can send the signal.
904  * Further a user only knows to listen for that signal if it knows that
905  * tcp is in its driver stack.
906  *
907  * Once a signal is delivered to the globus_xio user the handle can be
908  * queried for specific information regarding that signal.
909  * Event Types.
910  * @ingroup GLOBUS_XIO_API
911  *
912  * An enumeration of the signal types of which globus_xio is aware.
913 enum globus_xio_signal_type_t
914 {
915  GLOBUS_XIO_SIGNAL_BUFFER_POST_SIZE,
916  GLOBUS_XIO_SIGNAL_OPTIMAL_BUFFER_SIZE,
917  GLOBUS_XIO_SIGNAL_DRIVER_SPECIFIC,
918 };
919  *
920  * Signal Callback
921  * @ingroup GLOBUS_XIO_API
922  *
923  * The callback signature for signal events.
924  *
925  * @param handle
926  * The handle associated with the event.
927  *
928  * @param signal_type
929  * The type of signal that occurred.
930  *
931  * @param driver
932  * The driver that caused this event. If it is not a driver
933  * specific signal than this will be NULL.
934 typedef void
935 (*globus_xio_signal_callback_t)(
936  globus_xio_handle_t handle,
937  globus_xio_signal_type_t signal_type,
938  globus_xio_driver_t driver);
939  *
940  * Register a signal listener.
941  * @ingroup GLOBUS_XIO_API
942  *
943  * Request notification when event change in the system relating
944  * to a given handle.
945  *
946  * @param handle
947  * The handle on which the user would like to receive
948  * notifications.
949  *
950  * @param signal_mask
951  * A mask of the signals to be observed.
952  *
953  * @param driver
954  * The driver to which the signal mask applies. If this is for a
955  * non driver specific event this will be null. This function
956  * must be called once for every driver of interest.
957  *
958  * @param callback
959  * The function to be called when the given events occur.
960  *
961  * @param user_arg
962  * A user pointed threaded through to the callback.
963 globus_result_t
964 globus_xio_handle_register_signal_handler(
965  globus_xio_handle_t handle,
966  int signal_mask,
967  globus_xio_driver_t driver,
968  globus_xio_signal_callback_t callback,
969  void * user_arg);
970 
971  * Register a signal listener.
972  * @ingroup GLOBUS_XIO_API
973  *
974  * Request notification when event change in the system relating
975  * to a given factory.
976  *
977  * @param factory
978  * The factory on which the user would like to receive
979  * notifications of events.
980  *
981  * @param signal_mask
982  * A mask of the signals to be observed.
983  *
984  * @param driver
985  * The driver to which the signal mask applies. If this is for a
986  * non driver specific event this will be null. This function
987  * must be called once for every driver of interest.
988  *
989  * @param callback
990  * The function to be called when the given events occur.
991  *
992  * @param user_arg
993  * A user pointed threaded through to the callback.
994 globus_result_t
995 globus_xio_server_register_signal_handler(
996  globus_xio_server_t factory,
997  int signal_mask,
998  globus_xio_driver_t driver,
999  globus_xio_callback_t callback,
1000  void * user_arg);
1001  */
1002 
1003 
1004 globus_xio_driver_list_ent_t *
1005 globus_xio_driver_list_find_driver(
1006  globus_list_t * driver_list,
1007  const char * driver_name);
1008 
1009 void
1010 globus_xio_driver_list_destroy(
1011  globus_list_t * driver_list,
1012  globus_bool_t unload);
1013 
1016  globus_list_t * driver_list,
1017  globus_xio_stack_t stack,
1018  globus_xio_attr_t attr);
1019 
1021 globus_xio_driver_list_from_string(
1022  char * driver_string,
1023  globus_list_t ** driver_list,
1024  globus_hashtable_t * safe_table);
1025 
1027 globus_xio_driver_safe_table_from_string(
1028  char * driver_string,
1029  globus_hashtable_t * safe_table);
1030 
1032 globus_xio_driver_list_create_ent(
1033  const char * driver_desc,
1034  globus_xio_driver_t driver_in,
1035  globus_bool_t load,
1036  globus_xio_driver_list_ent_t ** ent_out);
1037 
1038 extern globus_module_descriptor_t globus_i_xio_module;
1039 #define GLOBUS_XIO_MODULE &globus_i_xio_module
1040 
1041 #define _XIOSL(s) globus_common_i18n_get_string( \
1042  GLOBUS_XIO_MODULE, \
1043  s)
1044 
1074  globus_xio_handle_t * out_h,
1075  const char * scheme,
1076  globus_xio_attr_t attr,
1077  char * param_string);
1078 
1079 #ifdef __cplusplus
1080 }
1081 #endif
1082 
1083 #endif
globus_result_t globus_xio_writev(globus_xio_handle_t handle, globus_xio_iovec_t *iovec, int iovec_count, globus_size_t waitforbytes, globus_size_t *nbytes, globus_xio_data_descriptor_t data_desc)
Definition: globus_xio_handle.c:3454
globus_result_t globus_xio_server_register_close(globus_xio_server_t server, globus_xio_server_callback_t cb, void *user_arg)
Definition: globus_xio_server.c:1406
globus_result_t globus_xio_attr_copy(globus_xio_attr_t *dst, globus_xio_attr_t src)
Definition: globus_xio_attr.c:557
globus_result_t globus_xio_register_writev(globus_xio_handle_t handle, globus_xio_iovec_t *iovec, int iovec_count, globus_size_t waitforbytes, globus_xio_data_descriptor_t data_desc, globus_xio_iovec_callback_t cb, void *user_arg)
Definition: globus_xio_handle.c:2501
globus_result_t globus_xio_register_open(globus_xio_handle_t handle, const char *contact_string, globus_xio_attr_t attr, globus_xio_callback_t cb, void *user_arg)
Definition: globus_xio_handle.c:2148
globus_result_t globus_xio_stack_push_driver(globus_xio_stack_t stack, globus_xio_driver_t driver)
Definition: globus_xio_attr.c:1005
globus_result_t globus_xio_stack_init(globus_xio_stack_t *stack, globus_xio_attr_t stack_attr)
Definition: globus_xio_attr.c:929
void(* globus_xio_iovec_callback_t)(globus_xio_handle_t handle, globus_result_t result, globus_xio_iovec_t *iovec, int count, globus_size_t nbytes, globus_xio_data_descriptor_t data_desc, void *user_arg)
Definition: globus_xio.h:618
int globus_bool_t
Boolean type.
Definition: globus_types.h:93
globus_result_t globus_xio_data_descriptor_destroy(globus_xio_data_descriptor_t data_desc)
Definition: globus_xio_attr.c:752
enum globus_i_xio_op_type_e globus_xio_operation_type_t
globus_result_t globus_xio_attr_init(globus_xio_attr_t *attr)
Definition: globus_xio_attr.c:38
globus_result_t globus_xio_register_close(globus_xio_handle_t handle, globus_xio_attr_t attr, globus_xio_callback_t cb, void *user_arg)
Definition: globus_xio_handle.c:2583
globus_result_t globus_xio_server_cntl(globus_xio_server_t server, globus_xio_driver_t driver, int cmd,...)
Definition: globus_xio_server.c:1063
globus_result_t globus_xio_server_create(globus_xio_server_t *server, globus_xio_attr_t server_attr, globus_xio_stack_t stack)
Definition: globus_xio_server.c:869
globus_result_t globus_xio_server_close(globus_xio_server_t server)
Definition: globus_xio_server.c:1455
globus_result_t globus_xio_handle_create_from_url(globus_xio_handle_t *out_h, const char *scheme, globus_xio_attr_t attr, char *param_string)
Definition: globus_xio_handle.c:3742
List data type.
Definition: globus_list.h:43
void(* globus_xio_data_callback_t)(globus_xio_handle_t handle, globus_result_t result, globus_byte_t *buffer, globus_size_t len, globus_size_t nbytes, globus_xio_data_descriptor_t data_desc, void *user_arg)
Definition: globus_xio.h:600
globus_result_t globus_xio_read(globus_xio_handle_t handle, globus_byte_t *buffer, globus_size_t buffer_length, globus_size_t waitforbytes, globus_size_t *nbytes, globus_xio_data_descriptor_t data_desc)
Definition: globus_xio_handle.c:3073
globus_result_t globus_xio_data_descriptor_init(globus_xio_data_descriptor_t *data_desc, globus_xio_handle_t handle)
Definition: globus_xio_attr.c:684
globus_result_t globus_xio_server_register_accept(globus_xio_server_t server, globus_xio_accept_callback_t cb, void *user_arg)
Definition: globus_xio_server.c:1135
globus_result_t globus_xio_driver_list_to_stack_attr(globus_list_t *driver_list, globus_xio_stack_t stack, globus_xio_attr_t attr)
Add a list of driver entries to a stack.
Definition: globus_xio_attr.c:181
globus_result_t globus_xio_readv(globus_xio_handle_t handle, globus_xio_iovec_t *iovec, int iovec_count, globus_size_t waitforbytes, globus_size_t *nbytes, globus_xio_data_descriptor_t data_desc)
Definition: globus_xio_handle.c:3198
void(* globus_xio_server_callback_t)(globus_xio_server_t server, void *user_arg)
Definition: globus_xio.h:371
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_write(globus_xio_handle_t handle, globus_byte_t *buffer, globus_size_t buffer_length, globus_size_t waitforbytes, globus_size_t *nbytes, globus_xio_data_descriptor_t data_desc)
Definition: globus_xio_handle.c:3329
globus_result_t globus_xio_server_get_contact_string(globus_xio_server_t server, char **contact_string)
Definition: globus_xio_server.c:1021
unsigned char globus_byte_t
Unsigned byte datatypeThis is used for byte-addressable arrays of arbitrary data which is not subject...
Definition: globus_types.h:85
globus_result_t globus_xio_server_accept(globus_xio_handle_t *out_handle, globus_xio_server_t server)
Definition: globus_xio_server.c:1250
globus_result_t globus_xio_open(globus_xio_handle_t handle, const char *contact_string, globus_xio_attr_t attr)
Definition: globus_xio_handle.c:2934
globus_result_t globus_xio_register_readv(globus_xio_handle_t handle, globus_xio_iovec_t *iovec, int iovec_count, globus_size_t waitforbytes, globus_xio_data_descriptor_t data_desc, globus_xio_iovec_callback_t cb, void *user_arg)
Definition: globus_xio_handle.c:2341
globus_result_t globus_xio_attr_cntl(globus_xio_attr_t attr, globus_xio_driver_t driver, int cmd,...)
Definition: globus_xio_attr.c:433
globus_result_t globus_xio_register_read(globus_xio_handle_t handle, globus_byte_t *buffer, globus_size_t buffer_length, globus_size_t waitforbytes, globus_xio_data_descriptor_t data_desc, globus_xio_data_callback_t cb, void *user_arg)
Definition: globus_xio_handle.c:2264
Headers common to all of Globus.
uint32_t globus_result_t
Definition: globus_types.h:99
globus_result_t globus_xio_close(globus_xio_handle_t handle, globus_xio_attr_t attr)
Definition: globus_xio_handle.c:3582
void(* globus_xio_callback_t)(globus_xio_handle_t handle, globus_result_t result, void *user_arg)
Definition: globus_xio.h:586
globus_result_t globus_xio_data_descriptor_cntl(globus_xio_data_descriptor_t data_desc, globus_xio_driver_t driver, int cmd,...)
Definition: globus_xio_attr.c:816
void(* globus_xio_accept_callback_t)(globus_xio_server_t server, globus_xio_handle_t handle, globus_result_t result, void *user_arg)
Definition: globus_xio.h:357
globus_result_t globus_xio_handle_cntl(globus_xio_handle_t handle, globus_xio_driver_t driver, int cmd,...)
Definition: globus_xio_handle.c:2694
globus_result_t globus_xio_handle_create(globus_xio_handle_t *handle, globus_xio_stack_t stack)
Definition: globus_xio_handle.c:2058
globus_result_t globus_xio_register_write(globus_xio_handle_t handle, globus_byte_t *buffer, globus_size_t buffer_length, globus_size_t waitforbytes, globus_xio_data_descriptor_t data_desc, globus_xio_data_callback_t cb, void *user_arg)
Definition: globus_xio_handle.c:2421
globus_result_t globus_xio_stack_destroy(globus_xio_stack_t stack)
Definition: globus_xio_attr.c:1078
globus_result_t globus_xio_attr_destroy(globus_xio_attr_t attr)
Definition: globus_xio_attr.c:478
globus_bool_t(* globus_xio_timeout_callback_t)(globus_xio_handle_t handle, globus_xio_operation_type_t type, void *user_arg)
Definition: globus_xio.h:521
globus_result_t globus_xio_stack_copy(globus_xio_stack_t *dst, globus_xio_stack_t src)
Definition: globus_xio_attr.c:955
Module Descriptor.
Definition: globus_module.h:69