Beispiel #1
0
void
free_udprelay()
{
    struct ev_loop *loop = EV_DEFAULT;
    while (server_num-- > 0) {
        server_ctx_t *server_ctx = server_ctx_list[server_num];

#ifdef MODULE_LOCAL
        //SSR beg
        if (server_ctx->protocol_plugin) {
            server_ctx->protocol_plugin->dispose(server_ctx->protocol);
            server_ctx->protocol = NULL;
            free_obfs_class(server_ctx->protocol_plugin);
            server_ctx->protocol_plugin = NULL;
        }
        //SSR end
#endif

        ev_io_stop(loop, &server_ctx->io);
        close(server_ctx->fd);
        cache_delete(server_ctx->conn_cache, 0);
        ss_free(server_ctx);
        server_ctx_list[server_num] = NULL;
    }
}
Beispiel #2
0
static void free_server(server_t *server)
{
    cork_dllist_remove(&server->entries);

    if (server->remote != NULL) {
        server->remote->server = NULL;
    }
    if (server->e_ctx != NULL) {
        cipher_context_release(&server->e_ctx->evp);
        free(server->e_ctx);
    }
    if (server->d_ctx != NULL) {
        cipher_context_release(&server->d_ctx->evp);
        free(server->d_ctx);
    }
    if (server->buf != NULL) {
        bfree(server->buf);
        free(server->buf);
    }
    // SSR beg
    if (server->obfs_plugin) {
        server->obfs_plugin->dispose(server->obfs);
        server->obfs = NULL;
        free_obfs_class(server->obfs_plugin);
        server->obfs_plugin = NULL;
    }
    if (server->protocol_plugin) {
        server->protocol_plugin->dispose(server->protocol);
        server->protocol = NULL;
        free_obfs_class(server->protocol_plugin);
        server->protocol_plugin = NULL;
    }
    // SSR end
    free(server->recv_ctx);
    free(server->send_ctx);
    free(server);
}