summaryrefslogtreecommitdiff
path: root/gst/pcapparse/gstpcapparse.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/pcapparse/gstpcapparse.c')
-rw-r--r--gst/pcapparse/gstpcapparse.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gst/pcapparse/gstpcapparse.c b/gst/pcapparse/gstpcapparse.c
index 0670407b7..3ea656b2f 100644
--- a/gst/pcapparse/gstpcapparse.c
+++ b/gst/pcapparse/gstpcapparse.c
@@ -374,6 +374,7 @@ gst_pcap_parse_scan_frame (GstPcapParse * self,
guint16 src_port;
guint16 dst_port;
guint16 len;
+ guint16 ip_packet_len;
switch (self->linktype) {
case LINKTYPE_ETHER:
@@ -448,6 +449,7 @@ gst_pcap_parse_scan_frame (GstPcapParse * self,
ip_src_addr = *((guint32 *) (buf_ip + 12));
ip_dst_addr = *((guint32 *) (buf_ip + 16));
buf_proto = buf_ip + ip_header_size;
+ ip_packet_len = GUINT16_FROM_BE (*(guint16 *) (buf_ip + 2));
/* ok for tcp and udp */
src_port = GUINT16_FROM_BE (*((guint16 *) (buf_proto + 0)));
@@ -470,7 +472,7 @@ gst_pcap_parse_scan_frame (GstPcapParse * self,
/* all remaining data following tcp header is payload */
*payload = buf_proto + len;
- *payload_size = self->cur_packet_size - (buf_proto - buf) - len;
+ *payload_size = ip_packet_len - ip_header_size - len;
}
/* but still filter as configured */