Module: sems Branch: master Commit: 3fe1dde8e066024e2f15ef094f23dba9199508b0 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=3fe1dde8e066024e2f15ef094f23dba9199508b0
Author: Raphael Coeffic <[email protected]> Committer: Raphael Coeffic <[email protected]> Date: Tue Jan 31 15:16:41 2012 +0100 b/f: fixes timeout issue introduced in 1645a7d3c6. --- core/sip/trans_layer.cpp | 40 +++++++++++++++++++++++++++++++++++----- 1 files changed, 35 insertions(+), 5 deletions(-) diff --git a/core/sip/trans_layer.cpp b/core/sip/trans_layer.cpp index 2e8effd..48843c1 100644 --- a/core/sip/trans_layer.cpp +++ b/core/sip/trans_layer.cpp @@ -727,14 +727,32 @@ int _trans_layer::set_destination_ip(sip_msg* msg, cstring* next_hop, unsigned s return 0; } +static void translate_string(sip_msg* dst_msg, cstring& dst, + sip_msg* src_msg, cstring& src) +{ + dst.s = (char*)src.s + (dst_msg->buf - src_msg->buf); + dst.len = src.len; +} + +static void translate_hdr(sip_msg* dst_msg, sip_header*& dst, + sip_msg* src_msg, sip_header* src) +{ + dst = new sip_header(); + dst_msg->hdrs.push_back(dst); + dst->type = src->type; + translate_string(dst_msg,dst->name,src_msg,src->name); + translate_string(dst_msg,dst->value,src_msg,src->value); + dst->p = NULL; +} + void _trans_layer::timeout(trans_bucket* bucket, sip_trans* t) { t->reset_all_timers(); t->state = TS_TERMINATED; // send 408 to 'ua' - sip_msg msg; sip_msg* req = t->msg; + sip_msg msg(req->buf,req->len); msg.type = SIP_REPLY; msg.u.reply = new sip_reply(); @@ -742,10 +760,22 @@ void _trans_layer::timeout(trans_bucket* bucket, sip_trans* t) msg.u.reply->code = 408; msg.u.reply->reason = cstring("Timeout"); - msg.from = req->from; - msg.to = req->to; - msg.cseq = req->cseq; - msg.callid = req->callid; + translate_hdr(&msg,msg.from, req,req->from); + msg.from->p = new sip_from_to(); + parse_from_to((sip_from_to*)msg.from->p, + msg.from->value.s,msg.from->value.len); + + translate_hdr(&msg,msg.to, req,req->to); + msg.to->p = new sip_from_to(); + parse_from_to((sip_from_to*)msg.to->p, + msg.to->value.s,msg.to->value.len); + + translate_hdr(&msg,msg.cseq, req,req->cseq); + msg.cseq->p = new sip_cseq(); + parse_cseq((sip_cseq*)msg.cseq->p, + msg.cseq->value.s,msg.cseq->value.len); + + translate_hdr(&msg,msg.callid, req,req->callid); bucket->remove(t); bucket->unlock(); _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
