Module: sems Branch: master Commit: 47991b000aac7ea587c4dc92cd0112b2f1e90f60 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=47991b000aac7ea587c4dc92cd0112b2f1e90f60
Author: Raphael Coeffic <[email protected]> Committer: Raphael Coeffic <[email protected]> Date: Wed Feb 1 16:17:13 2012 +0100 core: use the request's interface as outbound interface by default. --- core/AmSipDialog.cpp | 1 + core/AmSipMsg.h | 2 ++ core/SipCtrlInterface.cpp | 8 ++++++-- core/sip/transport.cpp | 9 +++++++-- core/sip/transport.h | 10 +++++++++- core/sip/udp_trsp.h | 2 +- 6 files changed, 26 insertions(+), 6 deletions(-) diff --git a/core/AmSipDialog.cpp b/core/AmSipDialog.cpp index 0e6adff..5c6756c 100644 --- a/core/AmSipDialog.cpp +++ b/core/AmSipDialog.cpp @@ -166,6 +166,7 @@ void AmSipDialog::onRxRequest(const AmSipRequest& req) remote_party = req.from; local_party = req.to; route = req.route; + outbound_interface = req.local_if; } } diff --git a/core/AmSipMsg.h b/core/AmSipMsg.h index 5b9c9c2..fe2dda2 100644 --- a/core/AmSipMsg.h +++ b/core/AmSipMsg.h @@ -77,6 +77,8 @@ class AmSipRequest : public _AmSipMsgInDlg unsigned int rack_cseq; string via_branch; + unsigned short local_if; + AmSipRequest() : _AmSipMsgInDlg() { } ~AmSipRequest() { } diff --git a/core/SipCtrlInterface.cpp b/core/SipCtrlInterface.cpp index f84f905..18d5c4e 100644 --- a/core/SipCtrlInterface.cpp +++ b/core/SipCtrlInterface.cpp @@ -241,7 +241,7 @@ int SipCtrlInterface::run() // Init transport instances for(unsigned int i=0; i<AmConfig::Ifs.size();i++) { - udp_trsp_socket* udp_socket = new udp_trsp_socket; + udp_trsp_socket* udp_socket = new udp_trsp_socket(i); if(udp_socket->bind(AmConfig::Ifs[i].LocalSIPIP, AmConfig::Ifs[i].LocalSIPPort) < 0){ @@ -461,6 +461,8 @@ inline void SipCtrlInterface::sip_msg2am_request(const sip_msg *msg, req.remote_port = htons(((sockaddr_in*)&msg->remote_ip)->sin_port); req.local_ip = get_addr_str(&msg->local_ip).c_str(); req.local_port = htons(((sockaddr_in*)&msg->local_ip)->sin_port); + + req.local_if = msg->local_socket->get_if(); } inline bool SipCtrlInterface::sip_msg2am_reply(sip_msg *msg, AmSipReply &reply) @@ -549,7 +551,9 @@ void SipCtrlInterface::handle_sip_request(const trans_ticket& tt, sip_msg* msg) req.tt = tt; - DBG("Received new request\n"); + DBG("Received new request from <%s:%i> on intf #%i\n", + req.remote_ip.c_str(),req.remote_port,req.local_if); + if (SipCtrlInterface::log_parsed_messages) { // DBG_PARAM(req.cmd); DBG_PARAM(req.method); diff --git a/core/sip/transport.cpp b/core/sip/transport.cpp index d8328db..b773030 100644 --- a/core/sip/transport.cpp +++ b/core/sip/transport.cpp @@ -34,8 +34,8 @@ #include <netinet/in.h> #include <string.h> // memset, strerror, ... -trsp_socket::trsp_socket() - : sd(0), ip(), port(0) +trsp_socket::trsp_socket(unsigned short if_num) + : sd(0), ip(), port(0), if_num(if_num) { memset(&addr,0,sizeof(sockaddr_storage)); } @@ -90,6 +90,11 @@ int trsp_socket::get_sd() return sd; } +unsigned short trsp_socket::get_if() +{ + return if_num; +} + int trsp_socket::send(const sockaddr_storage* sa, const char* msg, const int msg_len) { if ((SipCtrlInterface::log_raw_messages >= 0) diff --git a/core/sip/transport.h b/core/sip/transport.h index 219c904..6b9f14f 100644 --- a/core/sip/transport.h +++ b/core/sip/transport.h @@ -56,8 +56,11 @@ protected: // bound port number unsigned short port; + // interface number + unsigned short if_num; + public: - trsp_socket(); + trsp_socket(unsigned short if_num); virtual ~trsp_socket(); /** @@ -82,6 +85,11 @@ public: int get_sd(); /** + * Getter for the interface number + */ + unsigned short get_if(); + + /** * Copy the internal address into the given one (sa). */ void copy_addr_to(sockaddr_storage* sa); diff --git a/core/sip/udp_trsp.h b/core/sip/udp_trsp.h index e6852d4..f508489 100644 --- a/core/sip/udp_trsp.h +++ b/core/sip/udp_trsp.h @@ -45,7 +45,7 @@ using std::string; class udp_trsp_socket: public trsp_socket { public: - udp_trsp_socket() : trsp_socket() {} + udp_trsp_socket(unsigned short if_num) : trsp_socket(if_num) {} ~udp_trsp_socket() {} /** _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
