TT#74951 fix incorrect branch index used in via-branch=next

Change-Id: Ib9f976fe271ca225c08f79ea60d3f719a5df7caa
changes/95/37095/3
Richard Fuchs 6 years ago
parent ebb7e981ec
commit 7ebf36bfb1

@ -92,3 +92,4 @@ sipwise/pv_headers-store-To-info-in-xavp_parsed_name.r-on-re.patch
## git checkout -- debian/ ## git checkout -- debian/
### git commit + git-review as usual ### git commit + git-review as usual
### ###
sipwise/fix_incorrect_branch_id_via_branch_next.patch

@ -0,0 +1,81 @@
--- a/src/modules/rtpengine/rtpengine.c
+++ b/src/modules/rtpengine/rtpengine.c
@@ -2255,6 +2255,10 @@
ng_flags->via = -1;
else if (str_eq(&val, "next"))
ng_flags->via = -2;
+ else if (str_eq(&val, "auto-next") || str_eq(&val, "next-auto"))
+ ng_flags->via = -3;
+ else if (str_eq(&val, "auto-extra") || str_eq(&val, "extra-auto"))
+ ng_flags->via = -4;
else
goto error;
goto next;
@@ -2350,6 +2354,8 @@
char md5[MD5_LEN];
char branch_buf[MAX_BRANCH_PARAM_LEN];
bencode_item_t *result;
+ tm_cell_t *t;
+ unsigned int branch_idx;
/*** get & init basic stuff needed ***/
@@ -2440,11 +2446,21 @@
bencode_dictionary_add_str(ng_flags.dict, "call-id", &ng_flags.call_id);
if (ng_flags.via) {
- ret = -1;
+ /* pre-process */
switch (ng_flags.via) {
case 3:
ng_flags.via = (msg->first_line.type == SIP_REPLY) ? 2 : 1;
- /* fall thru */
+ break;
+ case -3:
+ ng_flags.via = (msg->first_line.type == SIP_REPLY) ? 1 : -2;
+ break;
+ case -4:
+ ng_flags.via = (msg->first_line.type == SIP_REPLY) ? 1 : -1;
+ break;
+ }
+
+ ret = -1;
+ switch (ng_flags.via) {
case 1:
case 2:
ret = get_via_branch(msg, ng_flags.via, &viabranch);
@@ -2456,10 +2472,16 @@
case -2:
if (!char_msg_val(msg, md5))
break;
+ branch_idx = 0;
+ if (tmb.t_gett) {
+ t = tmb.t_gett();
+ if (t && t != T_UNDEFINED)
+ branch_idx = t->nr_of_outgoings;
+ }
msg->hash_index = hash(msg->callid->body, get_cseq(msg)->number);
viabranch.s = branch_buf;
- if (branch_builder(msg->hash_index, 0, md5, 0, branch_buf, &viabranch.len))
+ if (branch_builder(msg->hash_index, 0, md5, branch_idx, branch_buf, &viabranch.len))
ret = 0;
break;
}
--- a/src/modules/rtpengine/doc/rtpengine_admin.xml
+++ b/src/modules/rtpengine/doc/rtpengine_admin.xml
@@ -2063,7 +2063,13 @@
<quote>auto</quote> - use the first <quote>Via</quote> header if this is
a request, or the second one if this is a reply;
<quote>extra</quote> - don't take the value from a header, but instead use
- the value of the <quote>extra_id_pv</quote> variable.
+ the value of the <quote>extra_id_pv</quote> variable;
+ <quote>next</quote> - use the branch ID generated by &kamailio; for the
+ next outgoing branch;
+ <quote>auto-next</quote> - use <quote>next</quote> in requests and
+ <quote>1</quote> in replies;
+ <quote>auto-extra</quote> - use <quote>extra</quote> in requests and
+ <quote>1</quote> in replies.
This can be used to create one media session per branch
on the &rtp; proxy. When sending a subsequent <quote>delete</quote> command to
the &rtp; proxy, you can then stop just the session for a specific branch when
Loading…
Cancel
Save