aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-sip.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2013-05-15 16:53:19 +0000
committerAnders Broman <anders.broman@ericsson.com>2013-05-15 16:53:19 +0000
commit653006b4b897494e9587b795f6edd2077e4a443a (patch)
treea72152c83d8e2e3e9a1407c273bc40afc9f9c032 /epan/dissectors/packet-sip.c
parentaefb9200d1e6330562942859d6a8c16312d3e102 (diff)
- packet-sip.c adds per-packet data twice only add new packet data if no previous data exists.
- Use the key as SIP can occure more than once in a frame. svn path=/trunk/; revision=49315
Diffstat (limited to 'epan/dissectors/packet-sip.c')
-rw-r--r--epan/dissectors/packet-sip.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/epan/dissectors/packet-sip.c b/epan/dissectors/packet-sip.c
index 469a59917f..ab2af62c01 100644
--- a/epan/dissectors/packet-sip.c
+++ b/epan/dissectors/packet-sip.c
@@ -1731,6 +1731,10 @@ dissect_sip_reason_header(tvbuff_t *tvb, proto_tree *tree, gint start_offset, gi
current_offset = start_offset;
semi_colon_offset = tvb_find_guint8(tvb, current_offset, line_end_offset-current_offset, ';');
+
+ if(semi_colon_offset == -1)
+ return;
+
length = semi_colon_offset - current_offset;
proto_tree_add_text(tree, tvb, start_offset, length,
"Reason Protocols: %s", tvb_format_text(tvb, start_offset, length));
@@ -3802,11 +3806,11 @@ guint sip_is_packet_resend(packet_info *pinfo,
if (sip_frame_result == NULL)
{
sip_frame_result = se_new0(sip_frame_result_value);
+ p_add_proto_data(pinfo->fd, proto_sip, pinfo->curr_layer_num, sip_frame_result);
}
/* Store return value with this packet */
sip_frame_result->original_frame_num = result;
- p_add_proto_data(pinfo->fd, proto_sip, 0, sip_frame_result);
return result;
}
@@ -3901,11 +3905,12 @@ guint sip_find_request(packet_info *pinfo,
/* Store return value with this packet */
- sip_frame_result = (sip_frame_result_value *)p_get_proto_data(pinfo->fd, proto_sip, 0);
+ sip_frame_result = (sip_frame_result_value *)p_get_proto_data(pinfo->fd, proto_sip, pinfo->curr_layer_num);
if (sip_frame_result == NULL)
{
/* Allocate and set all values to zero */
sip_frame_result = se_new0(sip_frame_result_value);
+ p_add_proto_data(pinfo->fd, proto_sip, pinfo->curr_layer_num, sip_frame_result);
}
sip_frame_result->response_request_frame_num = result;
@@ -3919,8 +3924,6 @@ guint sip_find_request(packet_info *pinfo,
(nseconds_between_packets / 1000000);
*response_time = sip_frame_result->response_time;
- p_add_proto_data(pinfo->fd, proto_sip, 0, sip_frame_result);
-
return result;
}
@@ -4021,11 +4024,12 @@ guint sip_find_invite(packet_info *pinfo,
result = p_val->frame_number;
/* Store return value with this packet */
- sip_frame_result = (sip_frame_result_value *)p_get_proto_data(pinfo->fd, proto_sip, 0);
+ sip_frame_result = (sip_frame_result_value *)p_get_proto_data(pinfo->fd, proto_sip, pinfo->curr_layer_num);
if (sip_frame_result == NULL)
{
/* Allocate and set all values to zero */
sip_frame_result = se_new0(sip_frame_result_value);
+ p_add_proto_data(pinfo->fd, proto_sip, 0, sip_frame_result);
}
sip_frame_result->response_request_frame_num = result;
@@ -4039,7 +4043,6 @@ guint sip_find_invite(packet_info *pinfo,
(nseconds_between_packets / 1000000);
*response_time = sip_frame_result->response_time;
- p_add_proto_data(pinfo->fd, proto_sip, 0, sip_frame_result);
return result;
}