From 545f4a919470a57c682f9099cd95beea7f086fe8 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Wed, 10 Sep 2008 16:20:25 +0000 Subject: [PATCH] Wed Sep 10 09:29:17 EDT 2008 Pekka Pessi * test_s2.c: allow user-specified VIA in requests from s2 git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9505 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/sofia-sip/libsofia-sip-ua/nua/test_s2.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.c b/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.c index 734477d4b2..ca36cdcf80 100644 --- a/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.c +++ b/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.c @@ -230,6 +230,8 @@ s2_nua_callback(nua_event_t event, *prev = e, e->prev = prev; } +/* ---------------------------------------------------------------------- */ +/* SIP messages sent by nua */ struct message * s2_remove_message(struct message *m) @@ -515,6 +517,7 @@ s2_request_to(struct dialog *d, sip_content_length_t l[1]; tp_name_t tpn[1]; tp_magic_t *magic; + int user_via = 0; ta_start(ta, tag, value); tags = ta_args(ta); @@ -598,7 +601,7 @@ s2_request_to(struct dialog *d, sip_cseq_init(cseq); cseq->cs_method = method; cseq->cs_method_name = name; - + if (d->invite && (method == sip_method_ack || method == sip_method_cancel)) { cseq->cs_seq = sip_object(d->invite)->sip_cseq->cs_seq; } @@ -606,7 +609,10 @@ s2_request_to(struct dialog *d, cseq->cs_seq = ++d->lseq; } - if (d->invite && method == sip_method_cancel) { + if (sip->sip_via) { + user_via = 1; + } + else if (d->invite && method == sip_method_cancel) { *via = *sip_object(d->invite)->sip_via; } else { @@ -626,7 +632,7 @@ s2_request_to(struct dialog *d, TAG_IF(!sip->sip_to, SIPTAG_TO(d->remote)), TAG_IF(!sip->sip_call_id, SIPTAG_CALL_ID(d->call_id)), TAG_IF(!sip->sip_cseq, SIPTAG_CSEQ(cseq)), - SIPTAG_VIA(via), + TAG_IF(!user_via, SIPTAG_VIA(via)), TAG_IF(!sip->sip_content_length, SIPTAG_CONTENT_LENGTH(l)), TAG_IF(!sip->sip_separator, SIPTAG_SEPARATOR_STR("\r\n")), TAG_END());