From 9da97f19fb23b74a4e5b860d759af490bfbebee3 Mon Sep 17 00:00:00 2001
From: Adrien Beraud <adrien.beraud@savoirfairelinux.com>
Date: Tue, 27 Jun 2017 19:24:31 +0200
Subject: [PATCH] sipvoiplink: don't throw if resolver creation fails

Using pjsip' resolver is optional: pjsip fallbacks
to gethostbyname():
http://www.pjsip.org/pjsip/docs/html/group__PJSIP__ENDPT.htm#gaa783363fa5b0d6d1fd081bfd40d4314b
Also the DNS resolver is only useful for SIP.

If pj_dns_resolver creation fails for some reason,
print an error message and continue, instead of
preventing the SIPVoIPLink instance to be created and
prevent proper initialization of Ring.

Change-Id: I92e27d53f3fd094322e923a9e418de6cda14b945
---
 src/sip/sipvoiplink.cpp | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/sip/sipvoiplink.cpp b/src/sip/sipvoiplink.cpp
index 1704ad0d26..02b61be52c 100644
--- a/src/sip/sipvoiplink.cpp
+++ b/src/sip/sipvoiplink.cpp
@@ -502,9 +502,17 @@ SIPVoIPLink::SIPVoIPLink() : pool_(nullptr, pj_pool_release)
             pj_strdup2(pool_.get(), &dns_nameservers[i], hbuf);
         }
         pj_dns_resolver* resv;
-        TRY(pjsip_endpt_create_resolver(endpt_, &resv));
-        TRY(pj_dns_resolver_set_ns(resv, ns.size(), dns_nameservers.data(), nullptr));
-        TRY(pjsip_endpt_set_resolver(endpt_, 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)) {
+                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)) {
+                    RING_WARN("Error setting pjsip DNS resolver: %s", sip_utils::sip_strerror(ret).c_str());
+                }
+            }
+        }
     }
 
     sipTransportBroker.reset(new SipTransportBroker(endpt_, cp_, *pool_));
-- 
GitLab