/* nr_turn_client_ctx functions */ int nr_turn_client_ctx_create(const char *label, nr_socket *sock, const char *username, Data *password, nr_transport_addr *addr, nr_turn_client_ctx **ctxp) { nr_turn_client_ctx *ctx=0; int r,_status; if ((r=r_log_register("turn", &NR_LOG_TURN))) ABORT(r); if(!(ctx=RCALLOC(sizeof(nr_turn_client_ctx)))) ABORT(R_NO_MEMORY); STAILQ_INIT(&ctx->stun_ctxs); STAILQ_INIT(&ctx->permissions); if(!(ctx->label=r_strdup(label))) ABORT(R_NO_MEMORY); ctx->sock=sock; ctx->username = r_strdup(username); if (!ctx->username) ABORT(R_NO_MEMORY); if ((r=r_data_create(&ctx->password, password->data, password->len))) ABORT(r); if ((r=nr_transport_addr_copy(&ctx->turn_server_addr, addr))) ABORT(r); if (addr->protocol == IPPROTO_UDP) { ctx->state = NR_TURN_CLIENT_STATE_CONNECTED; } else { assert(addr->protocol == IPPROTO_TCP); ctx->state = NR_TURN_CLIENT_STATE_INITTED; if (r=nr_turn_client_connect(ctx)) { if (r != R_WOULDBLOCK) ABORT(r); } } *ctxp=ctx; _status=0; abort: if(_status){ nr_turn_client_ctx_destroy(&ctx); } return(_status); }
int nr_turn_client_ctx_create(char *label, nr_socket *sock, nr_socket *wsock, nr_transport_addr *turn_server, UINT4 RTO, nr_turn_client_ctx **ctxp) { nr_turn_client_ctx *ctx=0; int r,_status; int i; char string[256]; if ((r=r_log_register("turn", &NR_LOG_TURN))) ABORT(r); if(!(ctx=RCALLOC(sizeof(nr_turn_client_ctx)))) ABORT(R_NO_MEMORY); ctx->state=NR_TURN_CLIENT_STATE_INITTED; if(!(ctx->label=r_strdup(label))) ABORT(R_NO_MEMORY); ctx->sock=sock; ctx->wrapping_sock=wsock; ctx->phase=NR_TURN_CLIENT_PHASE_INITIALIZED; nr_transport_addr_copy(&ctx->turn_server_addr,turn_server); for (i = 0; i < NUMBER_OF_STUN_CTX; ++i) { snprintf(string, sizeof(string), "%s:%s", label, TURN_PHASE_LABEL[i]); if ((r=nr_stun_client_ctx_create(string, sock, turn_server, RTO, &ctx->stun_ctx[i]))) { r_log_nr(NR_LOG_TURN,LOG_ERR,r,"TURN(%s): Failed to start",string); ABORT(r); } } *ctxp=ctx; _status=0; abort: if(_status){ nr_turn_client_ctx_destroy(&ctx); } return(_status); }
int NR_reg_init(void *mode) { int r, _status; nr_registry_module *module = (nr_registry_module*)mode; #ifdef SANITY_CHECKS NR_registry registry; #endif if (reg_vtbl) { if (reg_vtbl != module) { r_log(LOG_GENERIC,LOG_ERR,"Can't reinitialize registry in different mode"); ABORT(R_INTERNAL); } return(0); } reg_vtbl = module; if ((r=reg_vtbl->vtbl->init(mode))) ABORT(r); #ifdef SANITY_CHECKS if ((r=NR_reg_get_registry(NR_TOP_LEVEL_REGISTRY, registry))) ABORT(r); assert(strcmp(registry, NR_TOP_LEVEL_REGISTRY) == 0); #endif r_log_init(); r_log_register("registry",&NR_LOG_REGISTRY); _status=0; abort: r_log(NR_LOG_REGISTRY, (_status ? LOG_ERR : LOG_INFO), (_status ? "Couldn't initialize registry" : "Initialized registry")); return(_status); }