Module: kamailio Branch: master Commit: 26c94b32baec05a064beca7064e2f44eff9ca3ef URL: https://github.com/kamailio/kamailio/commit/26c94b32baec05a064beca7064e2f44e...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2017-08-11T09:14:27+02:00
topos: per contact and rr specific processing for receiving PRACK
- records are taken from INVITE branch record
---
Modified: src/modules/topos/tps_msg.c
---
Diff: https://github.com/kamailio/kamailio/commit/26c94b32baec05a064beca7064e2f44e... Patch: https://github.com/kamailio/kamailio/commit/26c94b32baec05a064beca7064e2f44e...
---
diff --git a/src/modules/topos/tps_msg.c b/src/modules/topos/tps_msg.c index ca360a975c..228996960e 100644 --- a/src/modules/topos/tps_msg.c +++ b/src/modules/topos/tps_msg.c @@ -774,20 +774,24 @@ int tps_request_received(sip_msg_t *msg, int dialog) if(tps_storage_load_dialog(msg, &mtsd, &stsd)<0) { goto error; } + /* detect direction - via from-tag */ + if(tps_dlg_detect_direction(msg, &stsd, &direction) < 0) { + goto error; + } }
- /* detect direction - via from-tag */ - if(tps_dlg_detect_direction(msg, &stsd, &direction)<0) { - goto error; - } mtsd.direction = direction;
tps_storage_lock_release(&lkey);
- if(direction == TPS_DIR_UPSTREAM) { - nuri = stsd.a_contact; - } else { + if(use_branch) { nuri = stsd.b_contact; + } else { + if(direction == TPS_DIR_UPSTREAM) { + nuri = stsd.a_contact; + } else { + nuri = stsd.b_contact; + } } if(nuri.len>0) { if(rewrite_uri(msg, &nuri)<0) { @@ -796,31 +800,28 @@ int tps_request_received(sip_msg_t *msg, int dialog) } }
- if(tps_reappend_route(msg, &stsd, &stsd.s_rr, - (direction==TPS_DIR_UPSTREAM)?0:1)<0) { - LM_ERR("failed to reappend s-route\n"); - return -1; - } - if(direction == TPS_DIR_UPSTREAM) { - if(use_branch) { - if(tps_reappend_route(msg, &stsd, &stsd.x_rr, 0)<0) { - LM_ERR("failed to reappend x-route\n"); - return -1; - } - } else { - if(tps_reappend_route(msg, &stsd, &stsd.a_rr, 0)<0) { - LM_ERR("failed to reappend a-route\n"); - return -1; - } + if(use_branch) { + if(tps_reappend_route(msg, &stsd, &stsd.s_rr, 1) < 0) { + LM_ERR("failed to reappend s-route\n"); + return -1; + } + if(tps_reappend_route(msg, &stsd, &stsd.y_rr, 1) < 0) { + LM_ERR("failed to reappend b-route\n"); + return -1; } } else { - if(use_branch) { - if(tps_reappend_route(msg, &stsd, &stsd.y_rr, 1)<0) { - LM_ERR("failed to reappend b-route\n"); + if(tps_reappend_route(msg, &stsd, &stsd.s_rr, + (direction == TPS_DIR_UPSTREAM) ? 0 : 1) < 0) { + LM_ERR("failed to reappend s-route\n"); + return -1; + } + if(direction == TPS_DIR_UPSTREAM) { + if(tps_reappend_route(msg, &stsd, &stsd.a_rr, 0) < 0) { + LM_ERR("failed to reappend a-route\n"); return -1; } } else { - if(tps_reappend_route(msg, &stsd, &stsd.b_rr, 1)<0) { + if(tps_reappend_route(msg, &stsd, &stsd.b_rr, 1) < 0) { LM_ERR("failed to reappend b-route\n"); return -1; }