Skip to content
Snippets Groups Projects
Commit fb3ba90e authored by Tristan Matthews's avatar Tristan Matthews
Browse files

Revert "#9871: Fallback on normal upd transport when stun resolution fails"

This reverts commit 06a9efee.
parent 06a9efee
No related branches found
No related tags found
No related merge requests found
...@@ -141,12 +141,7 @@ std::vector<std::string> SipTransport::getAllIpInterface() ...@@ -141,12 +141,7 @@ std::vector<std::string> SipTransport::getAllIpInterface()
} }
SipTransport::SipTransport(pjsip_endpoint *endpt, pj_caching_pool *cp, pj_pool_t *pool) : transportMap_(), stunSocketMap_(), cp_(cp), pool_(pool), endpt_(endpt) SipTransport::SipTransport(pjsip_endpoint *endpt, pj_caching_pool *cp, pj_pool_t *pool) : transportMap_(), stunSocketMap_(), cp_(cp), pool_(pool), endpt_(endpt)
{ {}
}
SipTransport::~SipTransport()
{
}
pj_bool_t pj_bool_t
stun_sock_on_status_cb(pj_stun_sock * /*stun_sock*/, pj_stun_sock_op op, stun_sock_on_status_cb(pj_stun_sock * /*stun_sock*/, pj_stun_sock_op op,
...@@ -192,10 +187,15 @@ stun_sock_on_rx_data_cb(pj_stun_sock * /*stun_sock*/, void * /*pkt*/, ...@@ -192,10 +187,15 @@ stun_sock_on_rx_data_cb(pj_stun_sock * /*stun_sock*/, void * /*pkt*/,
pj_status_t SipTransport::createStunResolver(pj_str_t serverName, pj_uint16_t port) pj_status_t SipTransport::createStunResolver(pj_str_t serverName, pj_uint16_t port)
{ {
pj_stun_config stunCfg; std::string stunResolverName(serverName.ptr, serverName.slen);
pj_stun_config_init(&stunCfg, &cp_->factory, 0, pjsip_endpt_get_ioqueue(endpt_), pjsip_endpt_get_timer_heap(endpt_)); if (stunSocketMap_.find(stunResolverName) != stunSocketMap_.end()) {
DEBUG("SipTransport: %s already added", stunResolverName.c_str());
return PJ_SUCCESS;
}
DEBUG("***************** Create Stun Resolver *********************"); pj_stun_config stunCfg;
pj_stun_config_init(&stunCfg, &cp_->factory, 0,
pjsip_endpt_get_ioqueue(endpt_), pjsip_endpt_get_timer_heap(endpt_));
static const pj_stun_sock_cb stun_sock_cb = { static const pj_stun_sock_cb stun_sock_cb = {
stun_sock_on_rx_data_cb, stun_sock_on_rx_data_cb,
...@@ -203,27 +203,30 @@ pj_status_t SipTransport::createStunResolver(pj_str_t serverName, pj_uint16_t po ...@@ -203,27 +203,30 @@ pj_status_t SipTransport::createStunResolver(pj_str_t serverName, pj_uint16_t po
stun_sock_on_status_cb stun_sock_on_status_cb
}; };
pj_stun_sock *stun_sock; pj_stun_sock *stun_sock = NULL;
std::string stunResolverName(serverName.ptr, serverName.slen); pj_status_t status = pj_stun_sock_create(&stunCfg,
pj_status_t status = pj_stun_sock_create(&stunCfg, stunResolverName.c_str(), pj_AF_INET(), &stun_sock_cb, NULL, NULL, &stun_sock); stunResolverName.c_str(), pj_AF_INET(), &stun_sock_cb, NULL, NULL,
&stun_sock);
// store socket inside list
DEBUG(" insert %s resolver in map", stunResolverName.c_str());
stunSocketMap_.insert(std::pair<std::string, pj_stun_sock *>(stunResolverName, stun_sock));
if (status != PJ_SUCCESS) { if (status != PJ_SUCCESS) {
char errmsg[PJ_ERR_MSG_SIZE]; char errmsg[PJ_ERR_MSG_SIZE];
pj_strerror(status, errmsg, sizeof(errmsg)); pj_strerror(status, errmsg, sizeof(errmsg));
ERROR("SipTransport: Error creating STUN socket for %.*s: %s", (int) serverName.slen, serverName.ptr, errmsg); ERROR("SipTransport: Error creating STUN socket for %.*s: %s",
(int) serverName.slen, serverName.ptr, errmsg);
return status; return status;
} }
status = pj_stun_sock_start(stun_sock, &serverName, port, NULL); status = pj_stun_sock_start(stun_sock, &serverName, port, NULL);
if (status != PJ_SUCCESS) { // store socket inside list
if (status == PJ_SUCCESS) {
DEBUG("SipTransport: Adding %s resolver", stunResolverName.c_str());
stunSocketMap_[stunResolverName] = stun_sock;
} else {
char errmsg[PJ_ERR_MSG_SIZE]; char errmsg[PJ_ERR_MSG_SIZE];
pj_strerror(status, errmsg, sizeof(errmsg)); pj_strerror(status, errmsg, sizeof(errmsg));
DEBUG("SipTransport: Error starting STUN socket for %.*s: %s", (int) serverName.slen, serverName.ptr, errmsg); DEBUG("SipTransport: Error starting STUN socket for %.*s: %s",
(int) serverName.slen, serverName.ptr, errmsg);
pj_stun_sock_destroy(stun_sock); pj_stun_sock_destroy(stun_sock);
} }
...@@ -237,12 +240,9 @@ pj_status_t SipTransport::destroyStunResolver(const std::string &serverName) ...@@ -237,12 +240,9 @@ pj_status_t SipTransport::destroyStunResolver(const std::string &serverName)
DEBUG("***************** Destroy Stun Resolver *********************"); DEBUG("***************** Destroy Stun Resolver *********************");
std::map<std::string, pj_stun_sock *>::iterator iter;
for(iter = stunSocketMap_.begin(); iter != stunSocketMap_.end(); iter++)
DEBUG("stun reslover: %s", iter->first.c_str());
if (it != stunSocketMap_.end()) { if (it != stunSocketMap_.end()) {
DEBUG("SipTransport: Deleting stun resolver %s", it->first.c_str()); DEBUG("SipTransport: Deleting stun resolver %s", it->first.c_str());
if (it->second)
pj_stun_sock_destroy(it->second); pj_stun_sock_destroy(it->second);
stunSocketMap_.erase(it); stunSocketMap_.erase(it);
} }
...@@ -355,8 +355,6 @@ void SipTransport::createSipTransport(SIPAccount *account) ...@@ -355,8 +355,6 @@ void SipTransport::createSipTransport(SIPAccount *account)
account->transport_ = transport; account->transport_ = transport;
} else if (account->isStunEnabled()) { } else if (account->isStunEnabled()) {
pjsip_transport *transport = createStunTransport(account->getStunServerName(), account->getStunPort()); pjsip_transport *transport = createStunTransport(account->getStunServerName(), account->getStunPort());
if(transport == NULL)
transport = createUdpTransport(account->getLocalInterface(), account->getLocalPort());
account->transport_ = transport; account->transport_ = transport;
} }
else { else {
...@@ -472,7 +470,10 @@ SipTransport::createUdpTransport(const std::string &interface, unsigned int port ...@@ -472,7 +470,10 @@ SipTransport::createUdpTransport(const std::string &interface, unsigned int port
pjsip_tpselector *SipTransport::initTransportSelector(pjsip_transport *transport, pj_pool_t *tp_pool) const pjsip_tpselector *SipTransport::initTransportSelector(pjsip_transport *transport, pj_pool_t *tp_pool) const
{ {
assert(transport); if (!transport) {
ERROR("SipTransport: transport is not initialized");
return NULL;
}
pjsip_tpselector *tp = (pjsip_tpselector *) pj_pool_zalloc(tp_pool, sizeof(pjsip_tpselector)); pjsip_tpselector *tp = (pjsip_tpselector *) pj_pool_zalloc(tp_pool, sizeof(pjsip_tpselector));
tp->type = PJSIP_TPSELECTOR_TRANSPORT; tp->type = PJSIP_TPSELECTOR_TRANSPORT;
tp->u.transport = transport; tp->u.transport = transport;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment