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

Reply via email to