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

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date:   Mon Sep 30 15:49:10 2013 +0200

registrar: option to take the socket from an xavp

- child named "socket" of xavp named by xavp_cfg parameter

---

 modules/registrar/save.c |   55 +++++++++++++++++++++++++++++----------------
 1 files changed, 35 insertions(+), 20 deletions(-)

diff --git a/modules/registrar/save.c b/modules/registrar/save.c
index fc4a60a..de6610e 100644
--- a/modules/registrar/save.c
+++ b/modules/registrar/save.c
@@ -134,37 +134,50 @@ static inline int star(sip_msg_t *_m, udomain_t* _d, str* 
_a, str *_h)
 
 /*! \brief
  */
-static struct socket_info *get_sock_hdr(struct sip_msg *msg)
+static struct socket_info *get_sock_val(struct sip_msg *msg)
 {
        struct socket_info *sock;
        struct hdr_field *hf;
+       str xsockname = str_init("socket");
+       sr_xavp_t *vavp = NULL;
        str socks;
        str hosts;
        int port;
        int proto;
        char c;
 
-       if (parse_headers( msg, HDR_EOH_F, 0) == -1) {
-               LM_ERR("failed to parse message\n");
-               return 0;
-       }
+       if(sock_hdr_name.len>0) {
+               if (parse_headers( msg, HDR_EOH_F, 0) == -1) {
+                       LM_ERR("failed to parse message\n");
+                       return 0;
+               }
 
-       for (hf=msg->headers; hf; hf=hf->next) {
-               if (cmp_hdrname_str(&hf->name, &sock_hdr_name)==0)
-                       break;
-       }
+               for (hf=msg->headers; hf; hf=hf->next) {
+                       if (cmp_hdrname_str(&hf->name, &sock_hdr_name)==0)
+                               break;
+               }
 
-       /* hdr found? */
-       if (hf==0)
-               return 0;
+               /* hdr found? */
+               if (hf==0)
+                       return 0;
 
-       trim_len( socks.len, socks.s, hf->body );
-       if (socks.len==0)
-               return 0;
+               trim_len( socks.len, socks.s, hf->body );
+               if (socks.len==0)
+                       return 0;
 
-       /*FIXME: This is a hack */
-       c = socks.s[socks.len];
-       socks.s[socks.len] = '\0';
+               /*FIXME: This is a hack */
+               c = socks.s[socks.len];
+               socks.s[socks.len] = '\0';
+       } else {
+               /* xavp */
+               if(reg_xavp_cfg.s!=NULL)
+               {
+                       vavp = xavp_get_child_with_sval(&reg_xavp_cfg, 
&xsockname);
+                       if(vavp==NULL || vavp->val.v.s.len<=0)
+                               return 0;
+               }
+               socks = vavp->val.v.s;
+       }
        if (parse_phostport( socks.s, &hosts.s, &hosts.len,
        &port, &proto)!=0) {
                socks.s[socks.len] = c;
@@ -172,7 +185,9 @@ static struct socket_info *get_sock_hdr(struct sip_msg *msg)
                        socks.len, socks.s);
                return 0;
        }
-       socks.s[socks.len] = c;
+       if(sock_hdr_name.len>0) {
+               socks.s[socks.len] = c;
+       }
        sock = grep_sock_info(&hosts,(unsigned short)port,(unsigned 
short)proto);
        if (sock==0) {
                LM_ERR("non-local socket <%.*s>\n",     socks.len, socks.s);
@@ -256,7 +271,7 @@ static inline ucontact_info_t* pack_ci( struct sip_msg* _m, 
contact_t* _c, unsig
 
                /* set received socket */
                if (_m->flags&sock_flag) {
-                       ci.sock = get_sock_hdr(_m);
+                       ci.sock = get_sock_val(_m);
                        if (ci.sock==0)
                                ci.sock = _m->rcv.bind_address;
                } else {


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

Reply via email to