00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GLOBUS_NET_MANAGER_H
00018 #define GLOBUS_NET_MANAGER_H 1
00019
00020 #include "globus_common.h"
00021 #include "globus_net_manager_attr.h"
00022
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026
00032 #ifndef GLOBUS_GLOBAL_DOCUMENT_SET
00033
00085 #endif
00086
00087 struct globus_net_manager_s;
00088
00159 typedef globus_result_t (*globus_net_manager_pre_listen)(
00160 struct globus_net_manager_s *manager,
00161 const globus_net_manager_attr_t *manager_attr_array,
00162 const char *task_id,
00163 const char *transport,
00164 const globus_net_manager_attr_t *attr_array,
00165 globus_net_manager_attr_t **attr_array_out);
00166
00216 typedef globus_result_t (*globus_net_manager_post_listen)(
00217 struct globus_net_manager_s *manager,
00218 const globus_net_manager_attr_t *manager_attr_array,
00219 const char *task_id,
00220 const char *transport,
00221 const char *local_contact,
00222 const globus_net_manager_attr_t *attr_array,
00223 char **local_contact_out,
00224 globus_net_manager_attr_t **attr_array_out);
00225
00259 typedef globus_result_t (*globus_net_manager_end_listen)(
00260 struct globus_net_manager_s *manager,
00261 const globus_net_manager_attr_t *manager_attr_array,
00262 const char *task_id,
00263 const char *transport,
00264 const char *local_contact,
00265 const globus_net_manager_attr_t *attr_array);
00266
00309 typedef globus_result_t (*globus_net_manager_pre_accept)(
00310 struct globus_net_manager_s *manager,
00311 const globus_net_manager_attr_t *manager_attr_array,
00312 const char *task_id,
00313 const char *transport,
00314 const char *local_contact,
00315 const globus_net_manager_attr_t *attr_array,
00316 globus_net_manager_attr_t **attr_array_out);
00317
00365 typedef globus_result_t (*globus_net_manager_post_accept)(
00366 struct globus_net_manager_s *manager,
00367 const globus_net_manager_attr_t *manager_attr_array,
00368 const char *task_id,
00369 const char *transport,
00370 const char *local_contact,
00371 const char *remote_contact,
00372 const globus_net_manager_attr_t *attr_array,
00373 globus_net_manager_attr_t **attr_array_out);
00374
00424 typedef globus_result_t (*globus_net_manager_pre_connect)(
00425 struct globus_net_manager_s *manager,
00426 const globus_net_manager_attr_t *manager_attr_array,
00427 const char *task_id,
00428 const char *transport,
00429 const char *remote_contact,
00430 const globus_net_manager_attr_t *attr_array,
00431 char **remote_contact_out,
00432 globus_net_manager_attr_t **attr_array_out);
00433
00478 typedef globus_result_t (*globus_net_manager_post_connect)(
00479 struct globus_net_manager_s *manager,
00480 const globus_net_manager_attr_t *manager_attr_array,
00481 const char *task_id,
00482 const char *transport,
00483 const char *local_contact,
00484 const char *remote_contact,
00485 const globus_net_manager_attr_t *attr_array,
00486 globus_net_manager_attr_t **attr_array_out);
00487
00524 typedef globus_result_t (*globus_net_manager_pre_close)(
00525 struct globus_net_manager_s *manager,
00526 const globus_net_manager_attr_t *manager_attr_array,
00527 const char *task_id,
00528 const char *transport,
00529 const char *local_contact,
00530 const char *remote_contact,
00531 const globus_net_manager_attr_t *attr_array);
00532
00569 typedef globus_result_t (*globus_net_manager_post_close)(
00570 struct globus_net_manager_s *manager,
00571 const globus_net_manager_attr_t *manager_attr_array,
00572 const char *task_id,
00573 const char *transport,
00574 const char *local_contact,
00575 const char *remote_contact,
00576 const globus_net_manager_attr_t *attr_array);
00577
00583 typedef
00584 struct globus_net_manager_s
00585 {
00587 const char *name;
00589 globus_net_manager_pre_listen pre_listen;
00591 globus_net_manager_post_listen post_listen;
00593 globus_net_manager_end_listen end_listen;
00595 globus_net_manager_pre_accept pre_accept;
00597 globus_net_manager_post_accept post_accept;
00599 globus_net_manager_pre_connect pre_connect;
00601 globus_net_manager_post_connect post_connect;
00603 globus_net_manager_pre_close pre_close;
00605 globus_net_manager_post_close post_close;
00606 }
00607 globus_net_manager_t;
00608
00609 extern globus_extension_registry_t globus_i_net_manager_registry;
00610 #define GLOBUS_NET_MANAGER_REGISTRY &globus_i_net_manager_registry
00611
00612 globus_result_t
00613 globus_net_manager_register(
00614 globus_net_manager_t *manager,
00615 globus_module_descriptor_t *module);
00616
00617 globus_result_t
00618 globus_net_manager_unregister(
00619 globus_net_manager_t *manager);
00620
00621 extern globus_module_descriptor_t globus_i_net_manager_module;
00651 #define GLOBUS_NET_MANAGER_MODULE (&globus_i_net_manager_module)
00652
00653
00654 typedef enum
00655 {
00656 GLOBUS_NET_MANAGER_ERROR_PARAMETER,
00657 GLOBUS_NET_MANAGER_ERROR_MEMORY,
00658 GLOBUS_NET_MANAGER_ERROR_INIT,
00659 GLOBUS_NET_MANAGER_ERROR_MANAGER,
00660 GLOBUS_NET_MANAGER_ERROR_WRAPPED
00661 } globus_net_manager_error_type_t;
00662
00663
00664
00665
00666
00667 #define GlobusNetManagerName(func)
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678 #define GlobusNetManagerErrorParameter(param_name) \
00679 globus_error_put( \
00680 globus_error_construct_error( \
00681 GLOBUS_NET_MANAGER_MODULE, \
00682 GLOBUS_NULL, \
00683 GLOBUS_NET_MANAGER_ERROR_PARAMETER, \
00684 __FILE__, \
00685 __func__, \
00686 __LINE__, \
00687 "Bad parameter, %s", \
00688 (param_name)))
00689
00690 #define GlobusNetManagerErrorMemory(mem_name) \
00691 globus_error_put( \
00692 globus_error_construct_error( \
00693 GLOBUS_NET_MANAGER_MODULE, \
00694 GLOBUS_NULL, \
00695 GLOBUS_NET_MANAGER_ERROR_MEMORY, \
00696 __FILE__, \
00697 __func__, \
00698 __LINE__, \
00699 "Memory allocation failed on %s", \
00700 (mem_name)))
00701
00702 #define GlobusNetManagerErrorInit(manager, explain) \
00703 globus_error_put( \
00704 globus_error_construct_error( \
00705 GLOBUS_NET_MANAGER_MODULE, \
00706 NULL, \
00707 GLOBUS_NET_MANAGER_ERROR_INIT, \
00708 __FILE__, \
00709 __func__, \
00710 __LINE__, \
00711 "An error occurred accessing a module. %s: %s", manager, explain))
00712
00713 #define GlobusNetManagerErrorManager(result, manager, explain) \
00714 globus_error_put( \
00715 globus_error_construct_error( \
00716 GLOBUS_NET_MANAGER_MODULE, \
00717 globus_error_get((result)), \
00718 GLOBUS_NET_MANAGER_ERROR_MANAGER, \
00719 __FILE__, \
00720 __func__, \
00721 __LINE__, \
00722 "A network manager (%s) errored in %s.", manager, explain))
00723
00724 #define GlobusNetManagerErrorWrapFailed(failed_func, result) \
00725 globus_error_put( \
00726 globus_error_construct_error( \
00727 GLOBUS_NET_MANAGER_MODULE, \
00728 globus_error_get((result)), \
00729 GLOBUS_NET_MANAGER_ERROR_WRAPPED, \
00730 __FILE__, \
00731 __func__, \
00732 __LINE__, \
00733 "%s failed.", \
00734 (failed_func)))
00735
00736 #define GlobusNetManagerErrorWrapFailedWithMessage(result, format, arg) \
00737 globus_error_put( \
00738 globus_error_construct_error( \
00739 GLOBUS_NET_MANAGER_MODULE, \
00740 globus_error_get((result)), \
00741 GLOBUS_NET_MANAGER_ERROR_WRAPPED, \
00742 __FILE__, \
00743 __func__, \
00744 __LINE__, \
00745 (format), \
00746 (arg)))
00747
00748 #define GlobusNetManagerErrorWrapFailedWithMessage2(result, format, arg1, arg2) \
00749 globus_error_put( \
00750 globus_error_construct_error( \
00751 GLOBUS_NET_MANAGER_MODULE, \
00752 globus_error_get((result)), \
00753 GLOBUS_NET_MANAGER_ERROR_WRAPPED, \
00754 __FILE__, \
00755 __func__, \
00756 __LINE__, \
00757 (format), \
00758 (arg1), (arg2)))
00759
00760
00761 #ifdef __cplusplus
00762 }
00763 #endif
00764
00765 #endif