diff options
author | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2005-04-04 04:51:47 +0000 |
---|---|---|
committer | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2005-04-04 04:51:47 +0000 |
commit | 088f70bb53c00c2ffadc8f608fc3120e6ff3900a (patch) | |
tree | 59f3e77717d1f5267267993e8cd875c107f8d904 /epan/dissectors/packet-sip.c | |
parent | d430320b6a8f22aa1b5090820c98e025dea713f1 (diff) |
From Martin Mathieson
small update for SIP request/response matching.
svn path=/trunk/; revision=14010
Diffstat (limited to 'epan/dissectors/packet-sip.c')
-rw-r--r-- | epan/dissectors/packet-sip.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/epan/dissectors/packet-sip.c b/epan/dissectors/packet-sip.c index 1bb62b8ca8..e3e4ad9bb4 100644 --- a/epan/dissectors/packet-sip.c +++ b/epan/dissectors/packet-sip.c @@ -471,6 +471,7 @@ typedef struct { guint32 cseq; transaction_state_t transaction_state; + guint32 response_code; gint frame_number; } sip_hash_value; @@ -1611,10 +1612,11 @@ guint sip_is_packet_resend(packet_info *pinfo, /******************************************/ /* Is it a resend??? */ - /* Does this look like a resent request ? */ + /* Does this look like a resent request (discount ACK, CANCEL) ? */ if ((line_type == REQUEST_LINE) && (cseq_number == cseq_to_compare) && (p_val->transaction_state == request_seen) && - (strcmp(cseq_method, "ACK") != 0)) + (strcmp(cseq_method, "ACK") != 0) && + (strcmp(cseq_method, "CANCEL") != 0)) { result = p_val->frame_number; } @@ -1622,7 +1624,8 @@ guint sip_is_packet_resend(packet_info *pinfo, /* Does this look like a resent final response ? */ if ((line_type == STATUS_LINE) && (cseq_number == cseq_to_compare) && (p_val->transaction_state == final_response_seen) && - (stat_info->response_code >= 200)) + (stat_info->response_code >= 200) && + (stat_info->response_code == p_val->response_code)) { result = p_val->frame_number; } @@ -1642,6 +1645,7 @@ guint sip_is_packet_resend(packet_info *pinfo, case STATUS_LINE: if (stat_info->response_code >= 200) { + p_val->response_code = stat_info->response_code; p_val->transaction_state = final_response_seen; if (!result) { |