int nr_turn_client_ctx_destroy(nr_turn_client_ctx **ctxp) { nr_turn_client_ctx *ctx; if(!ctxp || !*ctxp) return(0); ctx=*ctxp; *ctxp = 0; if (ctx->label) r_log(NR_LOG_TURN, LOG_DEBUG, "TURN(%s): destroy", ctx->label); nr_turn_client_deallocate(ctx); /* Cancel frees the rest of our data */ RFREE(ctx->label); ctx->label = 0; nr_turn_client_cancel(ctx); RFREE(ctx->username); ctx->username = 0; r_data_destroy(&ctx->password); RFREE(ctx->nonce); ctx->nonce = 0; RFREE(ctx->realm); ctx->realm = 0; /* Destroy the STUN client ctxs */ while (!STAILQ_EMPTY(&ctx->stun_ctxs)) { nr_turn_stun_ctx *stun = STAILQ_FIRST(&ctx->stun_ctxs); STAILQ_REMOVE_HEAD(&ctx->stun_ctxs, entry); nr_turn_stun_ctx_destroy(&stun); } /* Destroy the permissions */ while (!STAILQ_EMPTY(&ctx->permissions)) { nr_turn_permission *perm = STAILQ_FIRST(&ctx->permissions); STAILQ_REMOVE_HEAD(&ctx->permissions, entry); nr_turn_permission_destroy(&perm); } RFREE(ctx); return(0); }
int nr_turn_client_ctx_destroy(nr_turn_client_ctx **ctxp) { nr_turn_client_ctx *ctx; int i; if(!ctxp || !*ctxp) return(0); ctx=*ctxp; for (i = 0; i < NUMBER_OF_STUN_CTX; ++i) nr_stun_client_ctx_destroy(&ctx->stun_ctx[i]); RFREE(ctx->username); r_data_destroy(&ctx->password); RFREE(ctx->label); RFREE(ctx); return(0); }