Module: sip-router
Branch: kamailio_3.0
Commit: cecadda371383083e083ecebaba4f2c456a09f4d
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=cecadda371383083e083ecebaba4f2c456a09f4d

Author: Andrei Pelinescu-Onciul <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date:   Thu Nov  5 16:21:35 2009 +0100

tcp: use the forced socket ip as source

- if a socket is forced always use the forced socket ip as source
 (if a connection exists with different ip as source, open a new
 one with the forced ip).
(cherry picked from commit 6fcba958595c5189c1b9d97c8fc4c9f434a3c7ad)

---

 forward.h |   23 +++++++++++++++++++++--
 1 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/forward.h b/forward.h
index 2a6e91e..b365753 100644
--- a/forward.h
+++ b/forward.h
@@ -123,6 +123,11 @@ static inline int msg_send(struct dest_info* dst, char* 
buf, int len)
 {
        struct dest_info new_dst;
        str outb;
+#ifdef USE_TCP 
+       union sockaddr_union* from;
+       union sockaddr_union local_addr;
+#endif
+       
        outb.s = buf;
        outb.len = len;
        sr_event_exec(SREV_NET_DATA_OUT, (void*)&outb);
@@ -152,7 +157,14 @@ static inline int msg_send(struct dest_info* dst, char* 
buf, int len)
                                        " support is disabled\n");
                        goto error;
                }else{
-                       if (unlikely(tcp_send(dst, 0, outb.s, outb.len)<0)){
+                       from=0;
+                       if (unlikely((dst->send_flags & SND_F_FORCE_SOCKET) &&
+                                               dst->send_sock)) {
+                               local_addr=dst->send_sock->su;
+                               su_setport(&local_addr, 0); /* any local port 
will do */
+                               from=&local_addr;
+                       }
+                       if (unlikely(tcp_send(dst, from, outb.s, outb.len)<0)){
                                STATS_TX_DROPS;
                                LOG(L_ERR, "msg_send: ERROR: tcp_send 
failed\n");
                                goto error;
@@ -167,7 +179,14 @@ static inline int msg_send(struct dest_info* dst, char* 
buf, int len)
                                        " support is disabled\n");
                        goto error;
                }else{
-                       if (unlikely(tcp_send(dst, 0, outb.s, outb.len)<0)){
+                       from=0;
+                       if (unlikely((dst->send_flags & SND_F_FORCE_SOCKET) &&
+                                               dst->send_sock)) {
+                               local_addr=dst->send_sock->su;
+                               su_setport(&local_addr, 0); /* any local port 
will do */
+                               from=&local_addr;
+                       }
+                       if (unlikely(tcp_send(dst, from, outb.s, outb.len)<0)){
                                STATS_TX_DROPS;
                                LOG(L_ERR, "msg_send: ERROR: tcp_send 
failed\n");
                                goto error;


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to