static tsk_object_t* tnet_transport_dtor(tsk_object_t * self) { tnet_transport_t *transport = self; if (transport){ tnet_transport_set_callback(transport, tsk_null, tsk_null); tnet_transport_shutdown(transport); TSK_OBJECT_SAFE_FREE(transport->master); TSK_OBJECT_SAFE_FREE(transport->context); TSK_OBJECT_SAFE_FREE(transport->natt_ctx); TSK_FREE(transport->local_ip); TSK_FREE(transport->local_host); // proxy TSK_OBJECT_SAFE_FREE(transport->proxy.info); // (tls and dtls) = ssl TSK_FREE(transport->tls.ca); TSK_FREE(transport->tls.pbk); TSK_FREE(transport->tls.pvk); _tnet_transport_ssl_deinit(transport); // openssl contexts TSK_DEBUG_INFO("*** Transport (%s) destroyed ***", transport->description); TSK_FREE(transport->description); } return self; }
int tdav_session_msrp_start(tmedia_session_t* self) { tdav_session_msrp_t* msrp; int ret; TSK_DEBUG_INFO("tdav_session_msrp_start"); if(!self){ TSK_DEBUG_ERROR("Invalid parameter"); return -1; } msrp = (tdav_session_msrp_t*)self; /* start the transport */ if((ret = tnet_transport_start(msrp->transport))){ goto bail; } switch(msrp->setup){ case msrp_setup_active: case msrp_setup_actpass: { // // ACTIVE // TSK_DEBUG_INFO("connectto(%s:%d)", msrp->remote_ip, msrp->remote_port); if((msrp->connectedFD = tnet_transport_connectto_2(msrp->transport, msrp->remote_ip, msrp->remote_port)) == TNET_INVALID_FD){ TSK_DEBUG_ERROR("Failed to connect to the remote party"); ret = -2; goto bail; } else{ //TSK_DEBUG_INFO("Msrp connected FD=%d", msrp->connectedFD); //if((ret = tnet_sockfd_waitUntilWritable(msrp->connectedFD, TDAV_MSRP_CONNECT_TIMEOUT)) && msrp->offerer){ // TSK_DEBUG_ERROR("%d milliseconds elapsed and the socket is still not connected to (%s:%d).", TDAV_MSRP_CONNECT_TIMEOUT, msrp->remote_ip, msrp->remote_port); // goto bail; //} /* draft-denis-simple-msrp-comedia-02 - 4.2.3. Setting up the connection Once the TCP session is established, and if the answerer was the active connection endpoint, it MUST send an MSRP request. In particular, if it has no pending data to send, it MUST send an empty MSRP SEND request. That is necessary for the other endpoint to authenticate this TCP session. ...RFC 4975 - 7.1 */ msrp->send_bodiless = tsk_true; } break; } default: { // // PASSIVE // break; } } // create and start the receiver if(!msrp->receiver){ if((msrp->receiver = tmsrp_receiver_create(msrp->config, msrp->connectedFD))){ tnet_transport_set_callback(msrp->transport, TNET_TRANSPORT_CB_F(tdav_transport_layer_stream_cb), msrp); if((ret = tmsrp_receiver_start(msrp->receiver, msrp, tdav_msrp_event_proxy_cb))){ TSK_DEBUG_ERROR("Failed to start the MSRP receiver"); goto bail; } } } // create and start the sender if(!msrp->sender){ if((msrp->sender = tmsrp_sender_create(msrp->config, msrp->connectedFD))){ msrp->sender->chunck_duration = msrp->chunck_duration; if((ret = tmsrp_sender_start(msrp->sender))){ TSK_DEBUG_ERROR("Failed to start the MSRP sender"); goto bail; } } } bail: return ret; }