static void on_secure_handshake_done(grpc_exec_ctx *exec_ctx, void *statep, grpc_security_status status, grpc_endpoint *secure_endpoint, grpc_auth_context *auth_context) { server_secure_connect *state = statep; if (status == GRPC_SECURITY_OK) { if (secure_endpoint) { gpr_mu_lock(&state->state->mu); if (!state->state->is_shutdown) { grpc_transport *transport = grpc_create_chttp2_transport( exec_ctx, grpc_server_get_channel_args(state->state->server), secure_endpoint, 0); grpc_arg args_to_add[2]; args_to_add[0] = grpc_server_credentials_to_arg(state->state->creds); args_to_add[1] = grpc_auth_context_to_arg(auth_context); grpc_channel_args *args_copy = grpc_channel_args_copy_and_add( state->args, args_to_add, GPR_ARRAY_SIZE(args_to_add)); grpc_server_setup_transport(exec_ctx, state->state->server, transport, state->accepting_pollset, args_copy); grpc_channel_args_destroy(args_copy); grpc_chttp2_transport_start_reading(exec_ctx, transport, NULL); } else { /* We need to consume this here, because the server may already have * gone away. */ grpc_endpoint_destroy(exec_ctx, secure_endpoint); } gpr_mu_unlock(&state->state->mu); } } else { gpr_log(GPR_ERROR, "Secure transport failed with error %d", status); } grpc_channel_args_destroy(state->args); state_unref(state->state); gpr_free(state); }
static void on_handshake_done(grpc_exec_ctx *exec_ctx, grpc_endpoint *endpoint, grpc_channel_args *args, gpr_slice_buffer *read_buffer, void *user_data, grpc_error *error) { server_secure_connect *state = user_data; if (error != GRPC_ERROR_NONE) { const char *error_str = grpc_error_string(error); gpr_log(GPR_ERROR, "Handshaking failed: %s", error_str); grpc_error_free_string(error_str); GRPC_ERROR_UNREF(error); grpc_channel_args_destroy(args); gpr_free(read_buffer); grpc_handshake_manager_shutdown(exec_ctx, state->handshake_mgr); grpc_handshake_manager_destroy(exec_ctx, state->handshake_mgr); state_unref(state->state); gpr_free(state); return; } grpc_handshake_manager_destroy(exec_ctx, state->handshake_mgr); state->handshake_mgr = NULL; // TODO(roth, jboeuf): Convert security connector handshaking to use new // handshake API, and then move the code from on_secure_handshake_done() // into this function. state->args = args; grpc_server_security_connector_do_handshake( exec_ctx, state->state->sc, state->acceptor, endpoint, read_buffer, state->deadline, on_secure_handshake_done, state); }
static void on_secure_handshake_done(grpc_exec_ctx *exec_ctx, void *statep, grpc_security_status status, grpc_endpoint *secure_endpoint, grpc_auth_context *auth_context) { grpc_server_secure_state *state = statep; grpc_transport *transport; if (status == GRPC_SECURITY_OK) { if (secure_endpoint) { gpr_mu_lock(&state->mu); if (!state->is_shutdown) { transport = grpc_create_chttp2_transport( exec_ctx, grpc_server_get_channel_args(state->server), secure_endpoint, 0); setup_transport(exec_ctx, state, transport, auth_context); grpc_chttp2_transport_start_reading(exec_ctx, transport, NULL, 0); } else { /* We need to consume this here, because the server may already have * gone away. */ grpc_endpoint_destroy(exec_ctx, secure_endpoint); } gpr_mu_unlock(&state->mu); } } else { gpr_log(GPR_ERROR, "Secure transport failed with error %d", status); } state_unref(state); }
static void destroy_done(grpc_exec_ctx *exec_ctx, void *statep, int success) { grpc_server_secure_state *state = statep; state->destroy_callback->cb(exec_ctx, state->destroy_callback->cb_arg, success); grpc_security_connector_shutdown(exec_ctx, state->sc); state_unref(state); }
/* Server callback: destroy the tcp listener (so we don't generate further callbacks) */ static void destroy(grpc_server *server, void *statep) { grpc_server_secure_state *state = statep; gpr_mu_lock(&state->mu); state->is_shutdown = 1; grpc_tcp_server_destroy(state->tcp, grpc_server_listener_destroy_done, server); gpr_mu_unlock(&state->mu); state_unref(state); }
static void destroy_done(grpc_exec_ctx *exec_ctx, void *statep, grpc_error *error) { server_secure_state *state = statep; if (state->destroy_callback != NULL) { state->destroy_callback->cb(exec_ctx, state->destroy_callback->cb_arg, GRPC_ERROR_REF(error)); } grpc_server_security_connector_shutdown(exec_ctx, state->sc); state_unref(state); }
Transition* trans_clist_free_1(struct reactor_d *reactor, Transition *trans){ Transition *ret; if(trans == NULL) return NULL; if(trans->enrequisites != NULL) reactor_slist_foreach(trans->enrequisites, en_remove_one_curr_trans, trans); while(trans->enrequisites != NULL){ en_unref(reactor, trans->enrequisites->data); trans->enrequisites = reactor_slist_delete_link(trans->enrequisites, trans->enrequisites); } ret = trans_clist_remove_link(trans); state_unref(reactor, trans->dest); action_free(trans->raction); free(trans); return ret; }
void state_unref(struct reactor_d *reactor, State *ste){ Transition *aux; if( ste == NULL || --ste->refcount > 1 || (ste->refcount == 1 && ste != ste->fsminitial) ) { return; } for(;ste->transitions != NULL;){ aux = ste->transitions; ste->transitions = trans_clist_free_1(reactor, aux); } // trans_clist_free_full(reactor, ste->transitions); if(ste != ste->fsminitial) state_unref(reactor, ste->fsminitial); reactor_hash_table_remove(reactor->states, ste->id); info("State '%s' removed", ste->id); free(ste->id); free(ste); }
static void on_secure_transport_setup_done(void *statep, grpc_security_status status, grpc_endpoint *secure_endpoint) { grpc_server_secure_state *state = statep; if (status == GRPC_SECURITY_OK) { gpr_mu_lock(&state->mu); if (!state->is_shutdown) { grpc_create_chttp2_transport( setup_transport, state, grpc_server_get_channel_args(state->server), secure_endpoint, NULL, 0, grpc_mdctx_create(), 0); } else { /* We need to consume this here, because the server may already have gone * away. */ grpc_endpoint_destroy(secure_endpoint); } gpr_mu_unlock(&state->mu); } else { gpr_log(GPR_ERROR, "Secure transport failed with error %d", status); } state_unref(state); }
static void destroy_done(void *statep) { grpc_server_secure_state *state = statep; grpc_server_listener_destroy_done(state->server); state_unref(state); }