From 16315ae2f356e4ed46a311f00bd0942de09b3f12 Mon Sep 17 00:00:00 2001 From: Olle Johansson <oej@edvina.net> Date: Wed, 23 Jan 2008 10:18:13 +0000 Subject: [PATCH] - Add a few comments to sip_xmit - Make sure that we are aware of a pending INVITE even if we're using TCP git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@99839 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 749333f42c..920688c752 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -1587,7 +1587,8 @@ static struct sip_auth *authl = NULL; /* --- Sockets and networking --------------*/ /*! \brief Main socket for SIP communication. - * sipsock is shared between the manager thread (which handles reload + * + * sipsock is shared between the SIP manager thread (which handles reload * requests), the io handler (sipsock_read()) and the user routines that * issue writes (using __sip_xmit()). * The socket is -1 only when opening fails (this is a permanent condition), @@ -2483,7 +2484,11 @@ static inline const char *get_transport(enum sip_transport t) return "UNKNOWN"; } -/*! \brief Transmit SIP message */ +/*! \brief Transmit SIP message + Sends a SIP request or response on a given socket (in the pvt) + Called by retrans_pkt, send_request, send_response and + __sip_reliable_xmit +*/ static int __sip_xmit(struct sip_pvt *p, char *data, int len) { int res = 0; @@ -2767,6 +2772,11 @@ static enum sip_result __sip_reliable_xmit(struct sip_pvt *p, int seqno, int res int siptimer_a = DEFAULT_RETRANS; int xmitres = 0; + if (sipmethod == SIP_INVITE) { + /* Note this is a pending invite */ + p->pendinginvite = seqno; + } + /* If the transport is something reliable (TCP or TLS) then don't really send this reliably */ /* I removed the code from retrans_pkt that does the same thing so it doesn't get loaded into the scheduler */ /* According to the RFC some packets need to be retransmitted even if its TCP, so this needs to get revisited */ @@ -2792,7 +2802,7 @@ static enum sip_result __sip_reliable_xmit(struct sip_pvt *p, int seqno, int res pkt->is_fatal = fatal; pkt->owner = dialog_ref(p); pkt->next = p->packets; - p->packets = pkt; + p->packets = pkt; /* Add it to the queue */ pkt->timer_t1 = p->timer_t1; /* Set SIP timer T1 */ if (pkt->timer_t1) siptimer_a = pkt->timer_t1 * 2; @@ -2802,10 +2812,6 @@ static enum sip_result __sip_reliable_xmit(struct sip_pvt *p, int seqno, int res siptimer_a, retrans_pkt, pkt, 1); if (sipdebug) ast_debug(4, "*** SIP TIMER: Initializing retransmit timer on packet: Id #%d\n", pkt->retransid); - if (sipmethod == SIP_INVITE) { - /* Note this is a pending invite */ - p->pendinginvite = seqno; - } xmitres = __sip_xmit(pkt->owner, pkt->data, pkt->packetlen); /* Send packet */ -- GitLab