globus_net_manager.h

Go to the documentation of this file.
00001 /*
00002  * Copyright 1999-2014 University of Chicago
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  * http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
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 /* all macros in this file require each function to 'declare' their name with
00665  * this
00666  */
00667 #define GlobusNetManagerName(func)
00668 /*
00669 #ifdef __GNUC__
00670 #define GlobusNetManagerName(func) static const char * _netmgr_name __attribute__((__unused__)) = #func
00671 #else
00672 #define GlobusNetManagerName(func) static const char * _netmgr_name = #func
00673 #endif
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 /* GLOBUS_NET_MANAGER_H */

Generated on 5 Nov 2016 for globus_net_manager by  doxygen 1.4.7