mirror of https://github.com/sipwise/kamailio.git
Change-Id: Ib9f976fe271ca225c08f79ea60d3f719a5df7caachanges/95/37095/3
parent
ebb7e981ec
commit
7ebf36bfb1
@ -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…
Reference in new issue