static void established_free_cb(uv_handle_t* handle) { server_ctx *ctx = (server_ctx *)handle->data; if (!ctx->encoder.encrypt_table) destroy_encryptor(&ctx->encoder); free(ctx); }
// Failed during handshake static void handshake_client_close_cb(uv_handle_t* handle) { server_ctx *ctx = (server_ctx *)handle->data; if (ctx->handshake_buffer) { free(ctx->handshake_buffer); ctx->handshake_buffer = NULL; } if (!ctx->encoder.encrypt_table) destroy_encryptor(&ctx->encoder); free(ctx); }
static void clean_exit(int err, const char *msg, int fds_num, ...) { if (err != 0) { fprintf(stderr, "ERROR: %s: %s\n", msg, strerror(err)); } else { fprintf(stdout, "INFO: %s\n", msg); } va_list arg_ptr; va_start(arg_ptr, fds_num); while (fds_num > 0) { close(va_arg(arg_ptr, int)); } va_end(arg_ptr); destroy_encryptor(&crypto); destroy_encryptor(&chd_crypto); if (err != 0) { exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); }