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

Author: Carsten Bock <[email protected]>
Committer: Carsten Bock <[email protected]>
Date:   Mon Sep 17 17:25:38 2012 +0200

New Option: "x" for automatic bridging between IPv4 and IPv6.
Based on the following assumption: "i" is the IPv4 interface
and "e" is the IPv6 interface on the RTPProxy (tested with both
RTPProxy and Sipwise's ngcp-mediaproxy-ng).

Mechanism is as follows:
- IP in SDP is IPv4: Do bridging "ie"
- IP in SDP is IPv6: Do bridging "ei"

Not a big deal, but makes the configuration much more easier.

---

 modules/rtpproxy/doc/rtpproxy.xml       |    8 ++++++++
 modules/rtpproxy/doc/rtpproxy_admin.xml |    7 +++++++
 modules/rtpproxy/rtpproxy.c             |   22 +++++++++++++++++++++-
 3 files changed, 36 insertions(+), 1 deletions(-)

diff --git a/modules/rtpproxy/doc/rtpproxy.xml 
b/modules/rtpproxy/doc/rtpproxy.xml
index d5a15ee..741a4d9 100644
--- a/modules/rtpproxy/doc/rtpproxy.xml
+++ b/modules/rtpproxy/doc/rtpproxy.xml
@@ -57,6 +57,14 @@
                        <email>[email protected]</email>
                </address>
                </editor>
+               <editor>
+               <firstname>Carsten</firstname>
+               <surname>Bock</surname>
+               <affiliation><orgname>ng-voice GmbH</orgname></affiliation>
+               <address>
+                       <email>[email protected]</email>
+               </address>
+               </editor>
        </authorgroup>
        <copyright>
                <year>2003-2008</year>
diff --git a/modules/rtpproxy/doc/rtpproxy_admin.xml 
b/modules/rtpproxy/doc/rtpproxy_admin.xml
index 6b9577a..64843eb 100644
--- a/modules/rtpproxy/doc/rtpproxy_admin.xml
+++ b/modules/rtpproxy/doc/rtpproxy_admin.xml
@@ -343,6 +343,13 @@ rtpproxy_offer();
                                the 'w' flag for clients behind NAT! See also 
above notes!
                                </para></listitem>
                                <listitem><para>
+                               <emphasis>x</emphasis> - this flag will do 
automatic bridging between IPv4 on the
+                               "internal network" and IPv6 on the "external 
network". The distinction is done by
+                               the given IP in the SDP, e.g. a IPv4 Address 
will always call "ie" to the RTPProxy
+                               (IPv4(i) to IPv6(e)) and an IPv6Address will 
always call "ei" to the RTPProxy (IPv6(e)
+                               to IPv4(i)).
+                               </para></listitem>
+                               <listitem><para>
                                <emphasis>f</emphasis> - instructs rtpproxy to 
ignore marks
                                inserted by another rtpproxy in transit to 
indicate that the
                                session is already goes through another proxy. 
Allows creating
diff --git a/modules/rtpproxy/rtpproxy.c b/modules/rtpproxy/rtpproxy.c
index b50b2d1..e18655f 100644
--- a/modules/rtpproxy/rtpproxy.c
+++ b/modules/rtpproxy/rtpproxy.c
@@ -1939,6 +1939,7 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* 
str2, int offer, int forc
                {NULL, 0},      /* Timeout-Socket */
        };
        int iovec_param_count;
+       int autobridge_ipv4v6;
 
        char *c1p, *c2p, *bodylimit, *o1p;
        char itoabuf_buf[20];
@@ -1958,7 +1959,7 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* 
str2, int offer, int forc
                LM_ERR("out of pkg memory\n");
                FORCE_RTP_PROXY_RET (-1);
        }
-       flookup = force = real = orgip = commip = via = 0;
+       flookup = force = real = orgip = commip = via = autobridge_ipv4v6 = 0;
        for (cp = str1; cp != NULL && *cp != '\0'; cp++) {
                switch (*cp) {
                case '1':
@@ -2022,6 +2023,11 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* 
str2, int offer, int forc
                        orgip = 1;
                        break;
 
+               case 'x':
+               case 'X':
+                       autobridge_ipv4v6 = 1;
+                       break;
+
                case 'w':
                case 'W':
                        if (append_opts(&opts, 'S') == -1) {
@@ -2199,6 +2205,12 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* 
str2, int offer, int forc
                        }
                        /* XXX must compare address families in all addresses */
                        if (pf == AF_INET6) {
+                               if (autobridge_ipv4v6 != 0) {
+                                       if ((append_opts(&opts, 'E') == -1) && 
(append_opts(&opts, 'I') == -1))  {
+                                               LM_ERR("out of pkg memory\n");
+                                               FORCE_RTP_PROXY_RET (-1);
+                                       }
+                               }
                                if (append_opts(&opts, '6') == -1) {
                                        LM_ERR("out of pkg memory\n");
                                        FORCE_RTP_PROXY_RET (-1);
@@ -2206,7 +2218,15 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* 
str2, int offer, int forc
                                /* We need to update the pointers and the 
length here, it has changed. */
                                v[1].iov_base = opts.s.s;
                                v[1].iov_len = opts.oidx;
+                       } else {
+                               if (autobridge_ipv4v6 != 0) {
+                                       if ((append_opts(&opts, 'I') == -1) && 
(append_opts(&opts, 'E') == -1))  {
+                                               LM_ERR("out of pkg memory\n");
+                                               FORCE_RTP_PROXY_RET (-1);
+                                       }
+                               }
                        }
+
                        STR2IOVEC(newip, v[9]);
                        STR2IOVEC(oldport, v[11]);
 #ifdef EXTRA_DEBUG


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

Reply via email to