From 067c472abbe4963f0667ce82a0bd786e478d12e3 Mon Sep 17 00:00:00 2001 From: Luigi Rizzo <rizzo@icir.org> Date: Thu, 11 May 2006 09:24:35 +0000 Subject: [PATCH] simplify sip_pretend_ack also removing a bug in the existing code which called ast_skip_blanks erroneously. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@26799 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 154147c648..c87e9d0138 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -1738,27 +1738,20 @@ static int __sip_ack(struct sip_pvt *p, int seqno, int resp, int sipmethod, int } /*! \brief Pretend to ack all packets */ +/* maybe the lock on p is not strictly necessary but there might be a race */ static int __sip_pretend_ack(struct sip_pvt *p) { struct sip_pkt *cur = NULL; while (p->packets) { + int method; if (cur == p->packets) { ast_log(LOG_WARNING, "Have a packet that doesn't want to give up! %s\n", sip_methods[cur->method].text); return -1; } cur = p->packets; - if (cur->method) - __sip_ack(p, p->packets->seqno, (ast_test_flag(p->packets, FLAG_RESPONSE)), cur->method, FALSE); - else { /* Unknown packet type */ - char *c; - char method[128]; - - ast_copy_string(method, p->packets->data, sizeof(method)); - c = ast_skip_blanks(method); /* XXX what ? */ - *c = '\0'; - __sip_ack(p, p->packets->seqno, (ast_test_flag(p->packets, FLAG_RESPONSE)), find_sip_method(method), FALSE); - } + method = (cur->method) ? cur->method : find_sip_method(cur->data); + __sip_ack(p, cur->seqno, ast_test_flag(cur, FLAG_RESPONSE), method, FALSE); } return 0; } -- GitLab