From 71334b2b75bb5234f993d7ec6ce40d802c8ae9ca Mon Sep 17 00:00:00 2001 From: Adrien Beraud <adrien.beraud@savoirfairelinux.com> Date: Thu, 20 Jul 2017 10:07:08 -0400 Subject: [PATCH] sipvoiplink: set custom ports for nameserver Detect custom ports for nameservers and use them. Also catch getnameinfo errors and prevents to use bad info. [Guillaume R.: better ci msg] Change-Id: I78252a3efb463655f660dd073608ac1b94b8b0d6 Reviewed-by: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com> --- src/sip/sipvoiplink.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/sip/sipvoiplink.cpp b/src/sip/sipvoiplink.cpp index 3d5e79de58..dec5b6c142 100644 --- a/src/sip/sipvoiplink.cpp +++ b/src/sip/sipvoiplink.cpp @@ -495,17 +495,22 @@ SIPVoIPLink::SIPVoIPLink() : pool_(nullptr, pj_pool_release) auto ns = ip_utils::getLocalNameservers(); if (not ns.empty()) { std::vector<pj_str_t> dns_nameservers(ns.size()); + std::vector<pj_uint16_t> dns_ports(ns.size()); for (unsigned i=0, n=ns.size(); i<n; i++) { char hbuf[NI_MAXHOST]; - getnameinfo((sockaddr*)&ns[i], ns[i].getLength(), hbuf, sizeof(hbuf), nullptr, 0, NI_NUMERICHOST); - RING_DBG("Using SIP nameserver: %s", hbuf); - pj_strdup2(pool_.get(), &dns_nameservers[i], hbuf); + if (auto ret = getnameinfo((sockaddr*)&ns[i], ns[i].getLength(), hbuf, sizeof(hbuf), nullptr, 0, NI_NUMERICHOST)) { + RING_WARN("Error printing SIP nameserver: %s", strerror(ret)); + } else { + RING_DBG("Using SIP nameserver: %s", hbuf); + pj_strdup2(pool_.get(), &dns_nameservers[i], hbuf); + dns_ports[i] = ns[i].getPort(); + } } pj_dns_resolver* resv; if (auto ret = pjsip_endpt_create_resolver(endpt_, &resv)) { RING_WARN("Error creating SIP DNS resolver: %s", sip_utils::sip_strerror(ret).c_str()); } else { - if (auto ret = pj_dns_resolver_set_ns(resv, ns.size(), dns_nameservers.data(), nullptr)) { + if (auto ret = pj_dns_resolver_set_ns(resv, dns_nameservers.size(), dns_nameservers.data(), dns_ports.data())) { RING_WARN("Error setting SIP DNS servers: %s", sip_utils::sip_strerror(ret).c_str()); } else { if (auto ret = pjsip_endpt_set_resolver(endpt_, resv)) { -- GitLab