git:sr_3.0: tcp: use the forced socket ip as source

1 message Options
Embed this post
Permalink
Andrei Pelinescu-Onciul

git:sr_3.0: tcp: use the forced socket ip as source

Reply Threaded More More options
Print post
Permalink
Module: sip-router
Branch: sr_3.0
Commit: 6fcba958595c5189c1b9d97c8fc4c9f434a3c7ad
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=6fcba958595c5189c1b9d97c8fc4c9f434a3c7ad

Author: Andrei Pelinescu-Onciul <[hidden email]>
Committer: Andrei Pelinescu-Onciul <[hidden email]>
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).

---

 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
[hidden email]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev