예제 #1
0
static void free_server(struct server *server)
{
    cork_dllist_remove(&server->entries);

    if (server->chunk != NULL) {
        if (server->chunk->buf != NULL) {
            free(server->chunk->buf);
        }
        free(server->chunk);
        server->chunk = NULL;
    }
    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) {
        free(server->buf);
    }
    free(server->recv_ctx);
    free(server->send_ctx);
    free(server);
}
예제 #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);
}