Module: kamailio
Branch: master
Commit: e444f6f821dcbd56e58442f9ee1b970feb52395f
URL: 
https://github.com/kamailio/kamailio/commit/e444f6f821dcbd56e58442f9ee1b970feb52395f

Author: Daniel-Constantin Mierla <mico...@gmail.com>
Committer: Daniel-Constantin Mierla <mico...@gmail.com>
Date: 2017-04-06T22:20:00+02:00

tmx: new vars - $T(id_index_n) and $T(id_label_n)

- similar to $T(id_index) and $T(id_label), but if transaction doesn't
  exit yet, it is created

---

Modified: src/modules/tmx/t_var.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/e444f6f821dcbd56e58442f9ee1b970feb52395f.diff
Patch: 
https://github.com/kamailio/kamailio/commit/e444f6f821dcbd56e58442f9ee1b970feb52395f.patch

---

diff --git a/src/modules/tmx/t_var.c b/src/modules/tmx/t_var.c
index edd377d..47e300a 100644
--- a/src/modules/tmx/t_var.c
+++ b/src/modules/tmx/t_var.c
@@ -668,6 +668,10 @@ int pv_parse_t_name(pv_spec_p sp, str *in)
                                sp->pvp.pvn.u.isname.name.n = 2;
                        else if(strncmp(in->s, "reply_type", 10)==0)
                                sp->pvp.pvn.u.isname.name.n = 3;
+                       else if(strncmp(in->s, "id_label_n", 10)==0)
+                               sp->pvp.pvn.u.isname.name.n = 8;
+                       else if(strncmp(in->s, "id_index_n", 10)==0)
+                               sp->pvp.pvn.u.isname.name.n = 9;
                        else goto error;
                        break;
                case 12:
@@ -709,7 +713,19 @@ int pv_get_t(struct sip_msg *msg,  pv_param_t *param,
        t = _tmx_tmb.t_gett();
        if(t==NULL || t==T_UNDEFINED) {
                /* no T */
-               return pv_get_null(msg, param, res);
+               if(param->pvn.u.isname.name.n==8 || 
param->pvn.u.isname.name.n==9) {
+                       /* id_label_n or id_index_n - attempt to create 
transaction */
+                       if(_tmx_tmb.t_newtran(msg)<0) {
+                               LM_ERR("cannot create the transaction\n");
+                               return pv_get_null(msg, param, res);
+                       }
+                       t = _tmx_tmb.t_gett();
+                       if (t==NULL || t==T_UNDEFINED) {
+                               return pv_get_null(msg, param, res);
+                       }
+               } else {
+                       return pv_get_null(msg, param, res);
+               }
        }
        switch(param->pvn.u.isname.name.n)
        {
@@ -723,6 +739,10 @@ int pv_get_t(struct sip_msg *msg,  pv_param_t *param,
                                        return pv_get_uintval(msg, param, res, 
1);
                        }
                        return pv_get_uintval(msg, param, res, 0);
+               case 8:
+                       return pv_get_uintval(msg, param, res, t->label);
+               case 9:
+                       return pv_get_uintval(msg, param, res, t->hash_index);
                default:
                        return pv_get_uintval(msg, param, res, t->label);
        }


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

Reply via email to