Module: sip-router
Branch: pd/outbound
Commit: 87e624ffe1e66104b04d34bd2102f458f5785bf0
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=87e624ffe1e66104b04d34bd2102f458f5785bf0

Author: Peter Dunkley <[email protected]>
Committer: Peter Dunkley <[email protected]>
Date:   Thu Mar 14 23:16:27 2013 +0000

modules/tm: updated t_serial to store/retrieve ruid

---

 modules/tm/t_serial.c |   56 ++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 46 insertions(+), 10 deletions(-)

diff --git a/modules/tm/t_serial.c b/modules/tm/t_serial.c
index 1eb722a..570d02c 100644
--- a/modules/tm/t_serial.c
+++ b/modules/tm/t_serial.c
@@ -50,6 +50,7 @@ struct contact {
     str path;
     struct socket_info* sock;
     str instance;
+    str ruid;
     unsigned int flags;
     unsigned short q_flag;
     struct contact *next;
@@ -92,9 +93,11 @@ static str sock_name = {"sock", 4};
 static str instance_name = {"instance", 8};
 static str flags_name = {"flags", 5};
 static str q_flag_name = {"q_flag", 6};
+static str ruid_name = {"ruid", 4};
 
 void add_contacts_avp(str *uri, str *dst_uri, str *path, str *sock_str,
-                     unsigned int flags, unsigned int q_flag, str *instance)
+                     unsigned int flags, unsigned int q_flag, str *instance,
+                     str *ruid)
 {
     sr_xavp_t *record;
     sr_xval_t val;
@@ -136,6 +139,12 @@ void add_contacts_avp(str *uri, str *dst_uri, str *path, 
str *sock_str,
        xavp_add_value(&instance_name, &val, &record);
     }
 
+    if (ruid->len > 0) {
+       val.type = SR_XTYPE_STR;
+       val.v.s = *ruid;
+       xavp_add_value(&ruid_name, &val, &record);
+    }
+
     val.type = SR_XTYPE_XAVP;
     val.v.xavp = record;
     xavp_add_value(&contacts_avp, &val, NULL);
@@ -192,6 +201,7 @@ int t_load_contacts(struct sip_msg* msg, char* key, char* 
value)
        contacts->path = msg->path_vec;
        contacts->q = get_ruri_q();
        contacts->instance = msg->instance;
+        contacts->ruid = msg->ruid;
        first_idx = 0;
     } else {
        /* Insert first branch to first contact */
@@ -207,6 +217,8 @@ int t_load_contacts(struct sip_msg* msg, char* key, char* 
value)
        contacts->q = branch->q;
        contacts->instance.s = branch->instance;
        contacts->instance.len = branch->instance_len;
+        contacts->ruid.s = branch->ruid;
+        contacts->ruid.len = branch->ruid_len;
        first_idx = 1;
     }
 
@@ -233,6 +245,8 @@ int t_load_contacts(struct sip_msg* msg, char* key, char* 
value)
        next->q = branch->q;
        next->instance.s = branch->instance;
        next->instance.len = branch->instance_len;
+       next->ruid.s = branch->ruid;
+       next->ruid.len = branch->ruid_len;
        next->next = (struct contact *)0;
 
        prev = (struct contact *)0;
@@ -283,7 +297,7 @@ int t_load_contacts(struct sip_msg* msg, char* key, char* 
value)
 
        add_contacts_avp(&(curr->uri), &(curr->dst_uri), &(curr->path),
                         &sock_str, curr->flags, curr->q_flag,
-                        &(curr->instance));
+                        &(curr->instance), &(curr->ruid));
 
        curr = curr->next;
     }
@@ -298,7 +312,7 @@ int t_load_contacts(struct sip_msg* msg, char* key, char* 
value)
 }
 
 void add_contact_flows_avp(str *uri, str *dst_uri, str *path, str *sock_str,
-                          unsigned int flags, str *instance)
+                          unsigned int flags, str *instance, str *ruid)
 {
     sr_xavp_t *record;
     sr_xval_t val;
@@ -332,6 +346,12 @@ void add_contact_flows_avp(str *uri, str *dst_uri, str 
*path, str *sock_str,
        xavp_add_value(&instance_name, &val, &record);
     }
 
+    if (ruid->len > 0) {
+       val.type = SR_XTYPE_STR;
+       val.v.s = *ruid;
+       xavp_add_value(&ruid_name, &val, &record);
+    }
+
     val.type = SR_XTYPE_INT;
     val.v.i = flags;
     xavp_add_value(&flags_name, &val, &record);
@@ -354,7 +374,7 @@ void add_contact_flows_avp(str *uri, str *dst_uri, str 
*path, str *sock_str,
  * there was nothing to do. Returns -1 in case of an error. */
 int t_next_contacts(struct sip_msg* msg, char* key, char* value)
 {
-    str uri, dst_uri, path, instance, host, sock_str;
+    str uri, dst_uri, path, instance, host, sock_str, ruid;
     struct socket_info *sock;
     unsigned int flags, q_flag;
     sr_xavp_t *xavp_list, *xavp, *prev_xavp, *vavp;
@@ -443,6 +463,9 @@ int t_next_contacts(struct sip_msg* msg, char* key, char* 
value)
        il->next = (struct instance_list *)0;
     }
 
+    vavp = xavp_get(&ruid_name, xavp->val.v.xavp);
+    ruid = vavp->val.v.s;
+
     /* Rewrite Request-URI */
     rewrite_uri(msg, &uri);
 
@@ -462,6 +485,8 @@ int t_next_contacts(struct sip_msg* msg, char* key, char* 
value)
 
     setbflagsval(0, flags);
 
+    set_ruid(msg, &ruid);
+
     /* Check if there was only one contact at this priority */
     if (q_flag) {
        xavp_rm(xavp, NULL);
@@ -535,7 +560,7 @@ int t_next_contacts(struct sip_msg* msg, char* key, char* 
value)
            }
            if (ilp) {
                add_contact_flows_avp(&uri, &dst_uri, &path, &sock_str,
-                                     flags, &instance);
+                                     flags, &instance, &ruid);
                goto check_q_flag;
            }
            if (!q_flag) {
@@ -560,8 +585,11 @@ int t_next_contacts(struct sip_msg* msg, char* key, char* 
value)
            }
        }
 
-       if (append_branch(msg, &uri, &dst_uri, &path, 0, flags, sock, 0, 0)
-           != 1) {
+        vavp = xavp_get(&ruid_name, xavp->val.v.xavp);
+        ruid = vavp->val.v.s;
+
+       if (append_branch(msg, &uri, &dst_uri, &path, 0, flags, sock, 0, 0,
+                         &ruid) != 1) {
            LM_ERR("appending branch failed\n");
            free_instance_list(il);
            xavp_destroy_list(&xavp_list);
@@ -596,7 +624,7 @@ int t_next_contacts(struct sip_msg* msg, char* key, char* 
value)
  * there was nothing to do. Returns -1 in case of an error. */
 int t_next_contact_flows(struct sip_msg* msg, char* key, char* value)
 {
-    str uri, dst_uri, path, instance, host;
+    str uri, dst_uri, path, instance, host, ruid;
     struct socket_info *sock;
     unsigned int flags;
     sr_xavp_t *xavp_list, *xavp, *next_xavp, *vavp;
@@ -683,6 +711,9 @@ int t_next_contact_flows(struct sip_msg* msg, char* key, 
char* value)
        il->next = (struct instance_list *)0;
     }
 
+    vavp = xavp_get(&ruid_name, xavp->val.v.xavp);
+    ruid = vavp->val.v.s;
+
     /* Rewrite Request-URI */
     rewrite_uri(msg, &uri);
 
@@ -700,6 +731,8 @@ int t_next_contact_flows(struct sip_msg* msg, char* key, 
char* value)
 
     set_force_socket(msg, sock);
 
+    set_ruid(msg, &ruid);
+
     setbflagsval(0, flags);
 
     /* Append branches until out of branches. */
@@ -793,8 +826,11 @@ int t_next_contact_flows(struct sip_msg* msg, char* key, 
char* value)
        vavp = xavp_get(&flags_name, xavp->val.v.xavp);
        flags = vavp->val.v.i;
 
-       if (append_branch(msg, &uri, &dst_uri, &path, 0, flags, sock, 0, 0)
-           != 1) {
+        vavp = xavp_get(&ruid_name, xavp->val.v.xavp);
+        ruid = vavp->val.v.s;
+
+       if (append_branch(msg, &uri, &dst_uri, &path, 0, flags, sock, 0, 0,
+                         &ruid) != 1) {
            LM_ERR("appending branch failed\n");
            free_instance_list(il);
            xavp_destroy_list(&xavp_list);


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

Reply via email to