Module: sems
Branch: master
Commit: 509cad571c2637472fd12a13eda65bd90443133d
URL: 
https://github.com/sems-server/sems/commit/509cad571c2637472fd12a13eda65bd90443133d

Author: Stefan Sayer <stefan.sa...@googlemail.com>
Committer: Stefan Sayer <stefan.sa...@googlemail.com>
Date: 2015-06-09T10:42:58+02:00

b/f:core:config: use IPs of IFs configured with names when autodetecting 
outgoing interfaces

---

Modified: core/AmConfig.cpp
Modified: core/AmConfig.h

---

Diff:  
https://github.com/sems-server/sems/commit/509cad571c2637472fd12a13eda65bd90443133d.diff
Patch: 
https://github.com/sems-server/sems/commit/509cad571c2637472fd12a13eda65bd90443133d.patch

---

diff --git a/core/AmConfig.cpp b/core/AmConfig.cpp
index 3c4135d..ae2238f 100644
--- a/core/AmConfig.cpp
+++ b/core/AmConfig.cpp
@@ -695,8 +695,7 @@ int AmConfig::readConfiguration()
 
 int AmConfig::insert_SIP_interface(const SIP_interface& intf)
 {
-  if(SIP_If_names.find(intf.name) !=
-     SIP_If_names.end()) {
+  if(SIP_If_names.find(intf.name) != SIP_If_names.end()) {
 
     if(intf.name != "default") {
       ERROR("duplicated interface name '%s'\n",intf.name.c_str());
@@ -705,34 +704,36 @@ int AmConfig::insert_SIP_interface(const SIP_interface& 
intf)
 
     unsigned int idx = SIP_If_names[intf.name];
     SIP_Ifs[idx] = intf;
+    return 0;
   }
-  else {
-    SIP_Ifs.push_back(intf);
-    unsigned int idx = SIP_Ifs.size()-1;
-    SIP_If_names[intf.name] = idx;
 
-    if(LocalSIPIP2If.find(intf.LocalIP) == 
-       LocalSIPIP2If.end()) {
+  SIP_Ifs.push_back(intf);
+  unsigned int idx = SIP_Ifs.size()-1;
+  SIP_If_names[intf.name] = idx;
+  return 0;
+}
 
-      LocalSIPIP2If.insert(make_pair(intf.LocalIP,idx));
-    }
-    else {
-      map<string,unsigned short>::iterator it = 
-       LocalSIPIP2If.find(intf.LocalIP);
+int AmConfig::insert_SIP_interface_mapping(const SIP_interface& intf) {
+  unsigned int idx = SIP_If_names[intf.name];
 
-      const SIP_interface& old_intf = SIP_Ifs[it->second];
-      if(intf.LocalPort == old_intf.LocalPort) {
-       ERROR("duplicated signaling interfaces "
-             "(%s and %s) detected using %s:%u",
-             old_intf.name.c_str(),intf.name.c_str(),
-             intf.LocalIP.c_str(),intf.LocalPort);
+  string if_local_ip = intf.LocalIP;
 
-       return -1;
-      }
-      //FIXME: what happens now? shouldn't we insert the interface????
+  if(LocalSIPIP2If.find(if_local_ip) == LocalSIPIP2If.end()) {
+    LocalSIPIP2If.insert(make_pair(if_local_ip,idx));
+  } else {
+    map<string,unsigned short>::iterator it = 
+      LocalSIPIP2If.find(if_local_ip);
+
+    const SIP_interface& old_intf = SIP_Ifs[it->second];
+    if(intf.LocalPort == old_intf.LocalPort) {
+      ERROR("duplicated signaling interfaces  (%s and %s) detected using 
%s:%u",
+           old_intf.name.c_str(), intf.name.c_str(), if_local_ip.c_str(), 
intf.LocalPort);
+      return -1;
     }
+    // two interfaces on the sample IP - the one on port 5060 has priority
+    if (intf.LocalPort == 5060)
+      LocalSIPIP2If.insert(make_pair(if_local_ip,idx));
   }
-
   return 0;
 }
 
@@ -1132,6 +1133,9 @@ int AmConfig::finalizeIPConfig()
     if(!it->LocalPort)
       it->LocalPort = 5060;
 
+    if (insert_SIP_interface_mapping(*it)<0)
+      return -1;
+
     setNetInterface(&(*it));
   }
 
diff --git a/core/AmConfig.h b/core/AmConfig.h
index f1b7508..ad92219 100644
--- a/core/AmConfig.h
+++ b/core/AmConfig.h
@@ -163,6 +163,7 @@ struct AmConfig
   static vector<SysIntf> SysIfs;
 
   static int insert_SIP_interface(const SIP_interface& intf);
+  static int insert_SIP_interface_mapping(const SIP_interface& intf);
   static int insert_RTP_interface(const RTP_interface& intf);
   static int finalizeIPConfig();
 

_______________________________________________
Semsdev mailing list
Semsdev@lists.iptel.org
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to