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