aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_sip.c
diff options
context:
space:
mode:
authorrizzo <rizzo@f38db490-d61c-443f-a65b-d21fe96a405b>2006-11-13 14:14:54 +0000
committerrizzo <rizzo@f38db490-d61c-443f-a65b-d21fe96a405b>2006-11-13 14:14:54 +0000
commite015f388000bfb5216ea053178addb9a7396dc11 (patch)
treed7f8e7a0aa4f37ed9f1f7f2803a2fcca1a9b59d0 /channels/chan_sip.c
parent20893eb9b2aa4dbc17494460c152667733c4c3e7 (diff)
merge from codename-pineapple and astobj2 47499:
simplify __sip_ack() removing a strcmp for looking up packets. no functional change, only performance, so don't need to merging to earlier branches now. Approved By: oej git-svn-id: http://svn.digium.com/svn/asterisk/trunk@47538 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_sip.c')
-rw-r--r--channels/chan_sip.c21
1 files changed, 8 insertions, 13 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 1dd26d953..243d139f4 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -2062,38 +2062,33 @@ static void sip_cancel_destroy(struct sip_pvt *p)
static void __sip_ack(struct sip_pvt *p, int seqno, int resp, int sipmethod)
{
struct sip_pkt *cur, *prev = NULL;
-
- /* Just in case... */
- char *msg;
- int res = FALSE;
-
- msg = sip_methods[sipmethod].text;
+ const char *msg = "Not Found"; /* used only for debugging */
sip_pvt_lock(p);
for (cur = p->packets; cur; prev = cur, cur = cur->next) {
- if ((cur->seqno == seqno) && ((ast_test_flag(cur, FLAG_RESPONSE)) == resp) &&
- ((ast_test_flag(cur, FLAG_RESPONSE)) ||
- (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
+ if (cur->seqno != seqno || ast_test_flag(cur, FLAG_RESPONSE) != resp)
+ continue;
+ if (ast_test_flag(cur, FLAG_RESPONSE) || cur->method == sipmethod) {
+ msg = "Found";
if (!resp && (seqno == p->pendinginvite)) {
if (option_debug)
ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
p->pendinginvite = 0;
}
- /* this is our baby */
- res = TRUE;
- UNLINK(cur, p->packets, prev);
if (cur->retransid > -1) {
if (sipdebug && option_debug > 3)
ast_log(LOG_DEBUG, "** SIP TIMER: Cancelling retransmit of packet (reply received) Retransid #%d\n", cur->retransid);
ast_sched_del(sched, cur->retransid);
}
+ UNLINK(cur, p->packets, prev);
free(cur);
break;
}
}
sip_pvt_unlock(p);
if (option_debug)
- ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: Match %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
+ ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: Match %s\n",
+ p->callid, resp ? "Response" : "Request", seqno, msg);
}
/*! \brief Pretend to ack all packets