diff options
Diffstat (limited to 'epan/dissectors/packet-tcp.h')
-rw-r--r-- | epan/dissectors/packet-tcp.h | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/epan/dissectors/packet-tcp.h b/epan/dissectors/packet-tcp.h new file mode 100644 index 0000000000..a33472a978 --- /dev/null +++ b/epan/dissectors/packet-tcp.h @@ -0,0 +1,96 @@ +/* packet-tcp.h + * + * $Id$ + * + * Ethereal - Network traffic analyzer + * By Gerald Combs <gerald@ethereal.com> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __PACKET_TCP_H__ +#define __PACKET_TCP_H__ + +/* TCP flags */ +#define TH_FIN 0x01 +#define TH_SYN 0x02 +#define TH_RST 0x04 +#define TH_PUSH 0x08 +#define TH_ACK 0x10 +#define TH_URG 0x20 +#define TH_ECN 0x40 +#define TH_CWR 0x80 + + +/* the tcp header structure, passed to tap listeners */ +struct tcpheader { + guint32 th_seq; + guint32 th_ack; + gboolean th_have_seglen; /* TRUE if th_seglen is valid */ + guint32 th_seglen; + guint32 th_win; /* make it 32 bits so we can handle some scaling */ + guint16 th_sport; + guint16 th_dport; + guint8 th_hlen; + guint8 th_flags; + address ip_src; + address ip_dst; +}; + +/* + * Private data passed from the TCP dissector to subdissectors. + */ +struct tcpinfo { + guint32 seq; /* Sequence number of first byte in the data */ + guint32 nxtseq; /* Sequence number of first byte after data */ + gboolean is_reassembled; /* This is reassembled data. */ + gboolean urgent; /* TRUE if "urgent_pointer" is valid */ + guint16 urgent_pointer; /* Urgent pointer value for the current packet. */ +}; + +/* + * Loop for dissecting PDUs within a TCP stream; assumes that a PDU + * consists of a fixed-length chunk of data that contains enough information + * to determine the length of the PDU, followed by rest of the PDU. + * + * The first three arguments are the arguments passed to the dissector + * that calls this routine. + * + * "proto_desegment" is the dissector's flag controlling whether it should + * desegment PDUs that cross TCP segment boundaries. + * + * "fixed_len" is the length of the fixed-length part of the PDU. + * + * "get_pdu_len()" is a routine called to get the length of the PDU from + * the fixed-length part of the PDU; it's passed "tvb" and "offset". + * + * "dissect_pdu()" is the routine to dissect a PDU. + */ +extern void +tcp_dissect_pdus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, + gboolean proto_desegment, guint fixed_len, + guint (*get_pdu_len)(tvbuff_t *, int), + void (*dissect_pdu)(tvbuff_t *, packet_info *, proto_tree *)); + +extern gboolean decode_tcp_ports(tvbuff_t *, int, packet_info *, + proto_tree *, int, int); + +extern void dissect_tcp_payload(tvbuff_t *tvb, packet_info *pinfo, int offset, + guint32 seq, guint32 nxtseq, guint32 sport, + guint32 dport, proto_tree *tree, + proto_tree *tcp_tree); + +#endif |