From 7f1a80d11fd00b3396b62aa2189b4774f150e8ce Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)>
Date: Thu, 4 Feb 2010 17:15:27 -0500
Subject: [PATCH] [#2722] Create tls listener only if required

---
 sflphone-common/src/sip/sipvoiplink.cpp | 23 ++++++++++++++++++++---
 sflphone-common/src/sip/sipvoiplink.h   |  8 +++++++-
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp
index f142322231..d39542037c 100644
--- a/sflphone-common/src/sip/sipvoiplink.cpp
+++ b/sflphone-common/src/sip/sipvoiplink.cpp
@@ -79,8 +79,8 @@ struct result {
     pjsip_server_addresses  servers;
 };
 
-pjsip_transport *_localUDPTransport;
-pjsip_tpfactory *_localTlsListener;
+pjsip_transport *_localUDPTransport = NULL;
+pjsip_tpfactory *_localTlsListener = NULL;
 
 const pj_str_t STR_USER_AGENT = { (char*) "User-Agent", 10 };
 
@@ -2122,6 +2122,18 @@ bool SIPVoIPLink::createDefaultSipUdpTransport()
 
 
 void SIPVoIPLink::createDefaultSipTlsListener()
+{
+
+    SIPAccount * account = NULL;
+    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
+
+    if(account->isTlsEnabled()) {
+        createTlsListener(IP2IP_PROFILE);
+    }
+}
+
+
+void SIPVoIPLink::createTlsListener(const AccountID& accountID)
 {
 
     pjsip_tpfactory *tls;
@@ -2130,11 +2142,13 @@ void SIPVoIPLink::createDefaultSipTlsListener()
     pj_status_t status;
     pj_status_t success;
 
+    _debug("Create TLS listener");
+
     /* Grab the tls settings, populated
      * from configuration file.
      */
     SIPAccount * account = NULL;
-    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (IP2IP_PROFILE));
+    account = dynamic_cast<SIPAccount *> (Manager::instance().getAccount (accountID));
 
     if (account == NULL) {
         _debug ("UserAgent: Account is null while creating TLS default listener. Returning");
@@ -2196,6 +2210,9 @@ bool SIPVoIPLink::createSipTransport(AccountID id)
 
     if (account->isTlsEnabled()) {
 
+        if(_localTlsListener == NULL)
+	    createTlsListener(id);
+
         // Parse remote address to establish connection 
         std::string remoteSipUri = account->getServerUri();
         int sips = remoteSipUri.find("<sips:") + 6;
diff --git a/sflphone-common/src/sip/sipvoiplink.h b/sflphone-common/src/sip/sipvoiplink.h
index f7a561adce..b83d6bf36c 100644
--- a/sflphone-common/src/sip/sipvoiplink.h
+++ b/sflphone-common/src/sip/sipvoiplink.h
@@ -397,11 +397,17 @@ class SIPVoIPLink : public VoIPLink
 
 
 	/**
-	 * Create the default TLS litener on port 5061
+	 * Create the default TLS litener using IP2IP_PROFILE settings
 	 */
 	void createDefaultSipTlsListener();
 
 
+	/**
+	 * Create the default TLS litener according to account settings.
+	 */
+	void createTlsListener(const AccountID& accountID);
+
+
 	/**
 	 * General Sip transport creation method according to the 
 	 * transport type specified in account settings
-- 
GitLab