Module: kamailio Branch: 4.4 Commit: 3d3a255f4f34b765a835d94721d10aa6db3dda4b URL: https://github.com/kamailio/kamailio/commit/3d3a255f4f34b765a835d94721d10aa6...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2016-03-30T14:33:58+02:00
topos: swapping direction handling for contact in response
(cherry picked from commit 7c48b0fce5d59f237103cd26a61e616d74cabcb3)
---
Modified: modules/topos/tps_msg.c Modified: modules/topos/tps_storage.c
---
Diff: https://github.com/kamailio/kamailio/commit/3d3a255f4f34b765a835d94721d10aa6... Patch: https://github.com/kamailio/kamailio/commit/3d3a255f4f34b765a835d94721d10aa6...
---
diff --git a/modules/topos/tps_msg.c b/modules/topos/tps_msg.c index 4d747cd..2f398e8 100644 --- a/modules/topos/tps_msg.c +++ b/modules/topos/tps_msg.c @@ -624,7 +624,7 @@ int tps_reappend_route(sip_msg_t *msg, tps_data_t *ptsd, str *hbody, int rev) if(rev==1) { c = 0; sb.len = 1; - for(i=hbody->len-2; i>=0; i++) { + for(i=hbody->len-2; i>=0; i--) { if(hbody->s[i]==',') { c = 1; if(sb.len>0) { @@ -707,7 +707,7 @@ int tps_request_received(sip_msg_t *msg, int dialog) if(stsd.a_tag.len!=ftag.len) { direction = TPS_DIR_UPSTREAM; } else { - if(memcpy(stsd.a_tag.s, ftag.s, ftag.len)==0) { + if(memcmp(stsd.a_tag.s, ftag.s, ftag.len)==0) { direction = TPS_DIR_DOWNSTREAM; } else { direction = TPS_DIR_UPSTREAM; @@ -718,9 +718,9 @@ int tps_request_received(sip_msg_t *msg, int dialog) tps_storage_lock_release(&lkey);
if(direction == TPS_DIR_UPSTREAM) { - nuri = stsd.b_contact; - } else { nuri = stsd.a_contact; + } else { + nuri = stsd.b_contact; } if(nuri.len>0) { if(rewrite_uri(msg, &nuri)<0) { @@ -804,7 +804,7 @@ int tps_response_received(sip_msg_t *msg) if(stsd.a_tag.len!=ftag.len) { direction = TPS_DIR_UPSTREAM; } else { - if(memcpy(stsd.a_tag.s, ftag.s, ftag.len)==0) { + if(memcmp(stsd.a_tag.s, ftag.s, ftag.len)==0) { direction = TPS_DIR_DOWNSTREAM; } else { direction = TPS_DIR_UPSTREAM; diff --git a/modules/topos/tps_storage.c b/modules/topos/tps_storage.c index 8852369..a78cca3 100644 --- a/modules/topos/tps_storage.c +++ b/modules/topos/tps_storage.c @@ -311,10 +311,18 @@ int tps_storage_link_msg(sip_msg_t *msg, tps_data_t *td, int dir) LM_ERR("bad Contact header\n"); return -1; } - if(dir==TPS_DIR_DOWNSTREAM) { - td->a_contact = ((contact_body_t*)msg->contact->parsed)->contacts->uri; + if(msg->first_line.type==SIP_REQUEST) { + if(dir==TPS_DIR_DOWNSTREAM) { + td->a_contact = ((contact_body_t*)msg->contact->parsed)->contacts->uri; + } else { + td->b_contact = ((contact_body_t*)msg->contact->parsed)->contacts->uri; + } } else { - td->b_contact = ((contact_body_t*)msg->contact->parsed)->contacts->uri; + if(dir==TPS_DIR_DOWNSTREAM) { + td->b_contact = ((contact_body_t*)msg->contact->parsed)->contacts->uri; + } else { + td->a_contact = ((contact_body_t*)msg->contact->parsed)->contacts->uri; + } }
return 0; @@ -862,21 +870,38 @@ int tps_storage_load_dialog(sip_msg_t *msg, tps_data_t *md, tps_data_t *sd) if(msg==NULL || md==NULL || sd==NULL || _tps_db_handle==NULL) return -1;
+ if(md->a_uuid.len<=0 && md->b_uuid.len<=0) { + LM_ERR("no dlg uuid provided\n"); + return -1; + } + nr_keys = 0; nr_cols = 0;
- db_keys[nr_keys]=&td_col_a_uuid; db_ops[nr_keys]=OP_EQ; db_vals[nr_keys].type = DB1_STR; db_vals[nr_keys].nul = 0; - if(md->a_uuid.len>0 && md->a_uuid.s[0]=='a') { - db_vals[nr_keys].val.str_val = TPS_STRZ(md->a_uuid); + db_vals[nr_keys].val.str_val.len = 0; + if(md->a_uuid.len>0) { + if(md->a_uuid.s[0]=='a') { + db_keys[nr_keys]=&td_col_a_uuid; + db_vals[nr_keys].val.str_val = TPS_STRZ(md->a_uuid); + } else if(md->a_uuid.s[0]=='b') { + db_keys[nr_keys]=&td_col_b_uuid; + db_vals[nr_keys].val.str_val = TPS_STRZ(md->a_uuid); + } } else { - if(md->b_uuid.len<=0) { - LM_ERR("no valid dlg uuid\n"); - return -1; + if(md->b_uuid.s[0]=='a') { + db_keys[nr_keys]=&td_col_a_uuid; + db_vals[nr_keys].val.str_val = TPS_STRZ(md->b_uuid); + } else if(md->b_uuid.s[0]=='b') { + db_keys[nr_keys]=&td_col_b_uuid; + db_vals[nr_keys].val.str_val = TPS_STRZ(md->b_uuid); } - db_vals[nr_keys].val.str_val = TPS_STRZ(md->b_uuid); + } + if(db_vals[nr_keys].val.str_val.len<=0) { + LM_ERR("invalid dlg uuid provided\n"); + return -1; } nr_keys++;