Hello Daniel,

Since you did some work on this, it would be helpful if ds_is_from_list would accept also a pvars as a parameter (to match a specific groupid).

Thanks,
Ovidiu


On Thu, Jul 11, 2013 at 10:27 AM, Daniel-Constantin Mierla <miconda@gmail.com> wrote:
Module: sip-router
Branch: master
Commit: 09a7a4cd718c0e26d3a948515ec4f6f6a68c64c4
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=09a7a4cd718c0e26d3a948515ec4f6f6a68c64c4

Author: Daniel-Constantin Mierla <miconda@gmail.com>
Committer: Daniel-Constantin Mierla <miconda@gmail.com>
Date:   Thu Jul 11 16:25:06 2013 +0200

dispatcher: new parameter to specify the pv where to store attrs for matched address in ds_is_from_list()

- attrs_pvname can be set to get attributes of matched address in
  config file

---

 modules/dispatcher/dispatch.c   |   12 ++++++++++++
 modules/dispatcher/dispatch.h   |    2 ++
 modules/dispatcher/dispatcher.c |   16 ++++++++++++++++
 3 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/modules/dispatcher/dispatch.c b/modules/dispatcher/dispatch.c
index 0f6e8b0..2783675 100644
--- a/modules/dispatcher/dispatch.c
+++ b/modules/dispatcher/dispatch.c
@@ -2244,6 +2244,18 @@ int ds_is_from_list(struct sip_msg *_m, int group)
                                                        return -2;
                                                }
                                        }
+                                       if(ds_attrs_pvname.s!=0 && list->dlist[j].attrs.body.len>0)
+                                       {
+                                               memset(&val, 0, sizeof(pv_value_t));
+                                               val.flags = PV_VAL_STR;
+                                               val.rs = list->dlist[j].attrs.body;
+                                               if(ds_attrs_pv.setf(_m, &ds_attrs_pv.pvp,
+                                                                       (int)EQ_T, &val)<0)
+                                               {
+                                                       LM_ERR("setting attrs pv failed\n");
+                                                       return -3;
+                                               }
+                                       }
                                        return 1;
                                }
                        }
diff --git a/modules/dispatcher/dispatch.h b/modules/dispatcher/dispatch.h
index db055ee..912a3e0 100644
--- a/modules/dispatcher/dispatch.h
+++ b/modules/dispatcher/dispatch.h
@@ -87,6 +87,8 @@ extern pv_elem_t * hash_param_model;

 extern str ds_setid_pvname;
 extern pv_spec_t ds_setid_pv;
+extern str ds_attrs_pvname;
+extern pv_spec_t ds_attrs_pv;

 /* Structure containing pointers to TM-functions */
 extern struct tm_binds tmb;
diff --git a/modules/dispatcher/dispatcher.c b/modules/dispatcher/dispatcher.c
index cf79d90..4af6757 100644
--- a/modules/dispatcher/dispatcher.c
+++ b/modules/dispatcher/dispatcher.c
@@ -136,6 +136,8 @@ str ds_table_name        = str_init(DS_TABLE_NAME);

 str ds_setid_pvname   = {NULL, 0};
 pv_spec_t ds_setid_pv;
+str ds_attrs_pvname   = {NULL, 0};
+pv_spec_t ds_attrs_pv;

 /** module functions */
 static int mod_init(void);
@@ -211,6 +213,7 @@ static param_export_t params[]={
        {"attrs_avp",       STR_PARAM, &attrs_avp_param.s},
        {"hash_pvar",       STR_PARAM, &hash_pvar_param.s},
        {"setid_pvname",    STR_PARAM, &ds_setid_pvname.s},
+       {"attrs_pvname",    STR_PARAM, &ds_attrs_pvname.s},
        {"ds_probing_threshhold", INT_PARAM, &probing_threshhold},
        {"ds_ping_method",     STR_PARAM, &ds_ping_method.s},
        {"ds_ping_from",       STR_PARAM, &ds_ping_from.s},
@@ -282,6 +285,8 @@ static int mod_init(void)
                hash_pvar_param.len = strlen(hash_pvar_param.s);
        if (ds_setid_pvname.s)
                ds_setid_pvname.len = strlen(ds_setid_pvname.s);
+       if (ds_attrs_pvname.s)
+               ds_attrs_pvname.len = strlen(ds_attrs_pvname.s);
        if (ds_ping_from.s) ds_ping_from.len = strlen(ds_ping_from.s);
        if (ds_ping_method.s) ds_ping_method.len = strlen(ds_ping_method.s);
        if (ds_outbound_proxy.s) ds_outbound_proxy.len = strlen(ds_outbound_proxy.s);
@@ -462,6 +467,17 @@ static int mod_init(void)
                        return -1;
                }
        }
+
+       if(ds_attrs_pvname.s!=0)
+       {
+               if(pv_parse_spec(&ds_attrs_pvname, &ds_attrs_pv)==NULL
+                               || !pv_is_w(&ds_attrs_pv))
+               {
+                       LM_ERR("[%s]- invalid attrs_pvname\n", ds_attrs_pvname.s);
+                       return -1;
+               }
+       }
+
        if (dstid_avp_param.s && dstid_avp_param.len > 0)
        {
                if(ds_hash_size>0)


_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev



--
VoIP Embedded, Inc.
http://www.voipembedded.com