static globus_result_t globus_l_xio_telnet_server_init( void * driver_attr, const globus_xio_contact_t * contact_info, globus_xio_operation_t op) { globus_result_t res; globus_l_xio_telnet_attr_t * attr; GlobusXIOName(globus_l_xio_telnet_server_init); res = globus_l_xio_telnet_attr_copy((void **) (void *) &attr, driver_attr); if(res != GLOBUS_SUCCESS) { goto error; } res = globus_xio_driver_pass_server_init(op, contact_info, attr); if(res != GLOBUS_SUCCESS) { goto error_pass; } return GLOBUS_SUCCESS; error_pass: globus_l_xio_telnet_server_destroy(attr); error: return res; }
static globus_result_t globus_l_xio_net_manager_server_init( void * driver_attr, const globus_xio_contact_t *contact_info, globus_xio_operation_t op) { globus_result_t result = GLOBUS_SUCCESS; globus_net_manager_attr_t *transport_attrs = NULL, *new_attrs = NULL; globus_l_xio_net_manager_server_t *server = NULL; char *new_contact_string = NULL; globus_xio_contact_t new_contact_info = {NULL}; if (!driver_attr) { result = globus_xio_driver_pass_server_init( op, contact_info, NULL); goto no_attr; } server = malloc(sizeof(globus_l_xio_net_manager_server_t)); if (!server) { result = GlobusNetManagerErrorMemory("server"); goto server_malloc_fail; } server->transport_driver = globus_xio_operation_get_transport_user_driver( op); result = globus_xio_driver_attr_cntl( op, server->transport_driver, GLOBUS_XIO_GET_DRIVER_NAME, &server->transport_name); if (result) { goto get_driver_name_fail; } result = globus_l_xio_net_manager_attr_copy( (void **)&server->attr, driver_attr); if (result) { goto copy_attr_fail; } result = globus_l_xio_net_manager_get_attr_array( op, server->transport_driver, server->transport_name, &transport_attrs); if (result) { goto get_attr_array_fail; } result = globus_net_manager_context_post_listen( server->attr->context, server->attr->task_id ? server->attr->task_id : "unset", server->transport_name, contact_info->unparsed, transport_attrs, &new_contact_string, &new_attrs); if (result) { goto post_listen_fail; } if (new_contact_string) { server->local_contact = new_contact_string; new_contact_string = NULL; result = globus_xio_contact_parse( &new_contact_info, new_contact_string); if (result) { goto parse_contact_fail; } } else { server->local_contact = strdup(contact_info->unparsed); if (server->local_contact == NULL) { result = GlobusNetManagerErrorMemory("local_contact"); goto strdup_contact_fail; } } if (new_attrs) { result = globus_l_xio_net_manager_transport_attr_apply(op, new_attrs); if (result) { goto apply_attr_fail; } } result = globus_xio_driver_pass_server_init( op, new_contact_info.unparsed ? &new_contact_info : contact_info, server); apply_attr_fail: globus_xio_contact_destroy(&new_contact_info); if (result) { free(server->local_contact); } strdup_contact_fail: parse_contact_fail: free(new_contact_string); globus_net_manager_attr_array_delete(new_attrs); post_listen_fail: globus_net_manager_attr_array_delete(transport_attrs); get_attr_array_fail: if (result) { globus_l_xio_net_manager_attr_destroy(server->attr); copy_attr_fail: get_driver_name_fail: free(server); } server_malloc_fail: no_attr: return result; }