/* This takes ownership of nrsock whether it fails or not. */ static int nr_tcp_socket_ctx_create(nr_socket *nrsock, int is_framed, int max_pending, nr_tcp_socket_ctx **sockp) { int r, _status; nr_tcp_socket_ctx *sock = 0; nr_socket *tcpsock; if (!(sock = RCALLOC(sizeof(nr_tcp_socket_ctx)))) { nr_socket_destroy(&nrsock); ABORT(R_NO_MEMORY); } if ((r=nr_socket_buffered_stun_create(nrsock, max_pending, is_framed ? ICE_TCP_FRAMING : TURN_TCP_FRAMING, &tcpsock))){ nr_socket_destroy(&nrsock); ABORT(r); } sock->inner=tcpsock; sock->is_framed=is_framed; if ((r=nr_ip4_port_to_transport_addr(ntohl(INADDR_ANY), 0, IPPROTO_TCP, &sock->remote_addr))) ABORT(r); *sockp=sock; _status=0; abort: if (_status) { r_log(LOG_ICE,LOG_DEBUG,"%s:%d function %s failed with error %d",__FILE__,__LINE__,__FUNCTION__,_status); nr_tcp_socket_ctx_destroy(&sock); } return(_status); }
int TestNrSocket::accept(nr_transport_addr *addrp, nr_socket **sockp) { MOZ_ASSERT(internal_socket_->my_addr().protocol == IPPROTO_TCP); int r = internal_socket_->accept(addrp, sockp); if (r) { return r; } if (nat_->enabled_ && !nat_->is_an_internal_tuple(*addrp)) { nr_socket_destroy(sockp); return R_IO_ERROR; } return 0; }
static int nr_tcp_socket_ctx_destroy(nr_tcp_socket_ctx **objp) { nr_tcp_socket_ctx *sock; if (!objp || !*objp) return(0); sock=*objp; *objp=0; nr_socket_destroy(&sock->inner); RFREE(sock); return(0); }