summaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-tcp.h
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-tcp.h')
-rw-r--r--epan/dissectors/packet-tcp.h308
1 files changed, 163 insertions, 145 deletions
diff --git a/epan/dissectors/packet-tcp.h b/epan/dissectors/packet-tcp.h
index 52205051..1e1097a3 100644
--- a/epan/dissectors/packet-tcp.h
+++ b/epan/dissectors/packet-tcp.h
@@ -37,69 +37,69 @@ extern "C" {
#define IS_TH_URG(x) (x & TH_URG)
/* Idea for gt: either x > y, or y is much bigger (assume wrap) */
-#define GT_SEQ(x, y) ((gint32)((y) - (x)) < 0)
-#define LT_SEQ(x, y) ((gint32)((x) - (y)) < 0)
-#define GE_SEQ(x, y) ((gint32)((y) - (x)) <= 0)
-#define LE_SEQ(x, y) ((gint32)((x) - (y)) <= 0)
+#define GT_SEQ(x, y) ((int32_t)((y) - (x)) < 0)
+#define LT_SEQ(x, y) ((int32_t)((x) - (y)) < 0)
+#define GE_SEQ(x, y) ((int32_t)((y) - (x)) <= 0)
+#define LE_SEQ(x, y) ((int32_t)((x) - (y)) <= 0)
#define EQ_SEQ(x, y) (x) == (y)
/* mh as in mptcp header */
struct mptcpheader {
- gboolean mh_mpc; /* true if seen an mp_capable option */
- gboolean mh_join; /* true if seen an mp_join option */
- gboolean mh_dss; /* true if seen a dss */
- gboolean mh_add; /* true if seen an MP_ADD */
- gboolean mh_remove; /* true if seen an MP_REMOVE */
- gboolean mh_prio; /* true if seen an MP_PRIO */
- gboolean mh_fail; /* true if seen an MP_FAIL */
- gboolean mh_fastclose; /* true if seen a fastclose */
- gboolean mh_tcprst; /* true if seen a MP_TCPRST */
+ bool mh_mpc; /* true if seen an mp_capable option */
+ bool mh_join; /* true if seen an mp_join option */
+ bool mh_dss; /* true if seen a dss */
+ bool mh_add; /* true if seen an MP_ADD */
+ bool mh_remove; /* true if seen an MP_REMOVE */
+ bool mh_prio; /* true if seen an MP_PRIO */
+ bool mh_fail; /* true if seen an MP_FAIL */
+ bool mh_fastclose; /* true if seen a fastclose */
+ bool mh_tcprst; /* true if seen a MP_TCPRST */
- guint8 mh_capable_flags; /* to get hmac version for instance */
- guint8 mh_dss_flags; /* data sequence signal flag */
- guint32 mh_dss_ssn; /* DSS Subflow Sequence Number */
- guint64 mh_dss_rawdsn; /* DSS Data Sequence Number */
- guint64 mh_dss_rawack; /* DSS raw data ack */
- guint16 mh_dss_length; /* mapping/DSS length */
+ uint8_t mh_capable_flags; /* to get hmac version for instance */
+ uint8_t mh_dss_flags; /* data sequence signal flag */
+ uint32_t mh_dss_ssn; /* DSS Subflow Sequence Number */
+ uint64_t mh_dss_rawdsn; /* DSS Data Sequence Number */
+ uint64_t mh_dss_rawack; /* DSS raw data ack */
+ uint16_t mh_dss_length; /* mapping/DSS length */
- guint64 mh_key; /* Sender key in MP_CAPABLE */
- guint32 mh_token; /* seen in MP_JOIN. Should be a hash of the initial key */
+ uint64_t mh_key; /* Sender key in MP_CAPABLE */
+ uint32_t mh_token; /* seen in MP_JOIN. Should be a hash of the initial key */
- guint32 mh_stream; /* this stream index field is included to help differentiate when address/port pairs are reused */
+ uint32_t mh_stream; /* this stream index field is included to help differentiate when address/port pairs are reused */
/* Data Sequence Number of the current segment. It needs to be computed from previous mappings
* and as such is not necessarily set
*/
- guint64 mh_rawdsn64;
+ uint64_t mh_rawdsn64;
/* DSN formatted according to the wireshark MPTCP options */
- guint64 mh_dsn;
+ uint64_t mh_dsn;
};
/* the tcp header structure, passed to tap listeners */
typedef struct tcpheader {
- guint32 th_rawseq; /* raw value */
- guint32 th_seq; /* raw or relative value depending on tcp_relative_seq */
-
- guint32 th_rawack; /* raw value */
- guint32 th_ack; /* raw or relative value depending on tcp_relative_seq */
- gboolean th_have_seglen; /* TRUE if th_seglen is valid */
- guint32 th_seglen; /* in bytes */
- guint32 th_win; /* make it 32 bits so we can handle some scaling */
- guint16 th_sport;
- guint16 th_dport;
- guint8 th_hlen;
- gboolean th_use_ace;
- guint16 th_flags;
- guint32 th_stream; /* this stream index field is included to help differentiate when address/port pairs are reused */
+ uint32_t th_rawseq; /* raw value */
+ uint32_t th_seq; /* raw or relative value depending on tcp_relative_seq */
+
+ uint32_t th_rawack; /* raw value */
+ uint32_t th_ack; /* raw or relative value depending on tcp_relative_seq */
+ bool th_have_seglen; /* true if th_seglen is valid */
+ uint32_t th_seglen; /* in bytes */
+ uint32_t th_win; /* make it 32 bits so we can handle some scaling */
+ uint16_t th_sport;
+ uint16_t th_dport;
+ uint8_t th_hlen;
+ bool th_use_ace;
+ uint16_t th_flags;
+ uint32_t th_stream; /* this stream index field is included to help differentiate when address/port pairs are reused */
address ip_src;
address ip_dst;
/* This is the absolute maximum we could find in TCP options (RFC2018, section 3) */
#define MAX_TCP_SACK_RANGES 4
- guint8 num_sack_ranges;
- guint32 sack_left_edge[MAX_TCP_SACK_RANGES];
- guint32 sack_right_edge[MAX_TCP_SACK_RANGES];
+ uint8_t num_sack_ranges;
+ uint32_t sack_left_edge[MAX_TCP_SACK_RANGES];
+ uint32_t sack_right_edge[MAX_TCP_SACK_RANGES];
/* header for TCP option Multipath Operation */
struct mptcpheader *th_mptcp;
@@ -112,12 +112,13 @@ typedef struct tcpheader {
* changes!
*/
struct tcpinfo {
- guint32 seq; /* Sequence number of first byte in the data */
- guint32 nxtseq; /* Sequence number of first byte after data */
- guint32 lastackseq; /* Sequence number of last ack */
- gboolean is_reassembled; /* This is reassembled data. */
- guint16 flags; /* TCP flags */
- guint16 urgent_pointer; /* Urgent pointer value for the current packet. */
+ uint32_t seq; /* Sequence number of first byte in the data */
+ uint32_t nxtseq; /* Sequence number of first byte after data */
+ uint32_t lastackseq; /* Sequence number of last ack */
+ bool is_reassembled; /* This is reassembled data. */
+ uint16_t flags; /* TCP flags */
+ uint16_t urgent_pointer; /* Urgent pointer value for the current packet. */
+ uint32_t stream; /* Stream id passed to export PDU */
};
/*
@@ -141,53 +142,55 @@ struct tcpinfo {
*/
WS_DLL_PUBLIC void
tcp_dissect_pdus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
- gboolean proto_desegment, guint fixed_len,
- guint (*get_pdu_len)(packet_info *, tvbuff_t *, int, void*),
+ bool proto_desegment, unsigned fixed_len,
+ unsigned (*get_pdu_len)(packet_info *, tvbuff_t *, int, void*),
dissector_t dissect_pdu, void* dissector_data);
extern const reassembly_table_functions
tcp_reassembly_table_functions;
extern struct tcp_multisegment_pdu *
-pdu_store_sequencenumber_of_next_pdu(packet_info *pinfo, guint32 seq, guint32 nxtpdu, wmem_tree_t *multisegment_pdus);
+pdu_store_sequencenumber_of_next_pdu(packet_info *pinfo, uint32_t seq, uint32_t nxtpdu, wmem_tree_t *multisegment_pdus);
typedef struct _tcp_unacked_t {
struct _tcp_unacked_t *next;
- guint32 frame;
- guint32 seq;
- guint32 nextseq;
+ uint32_t frame;
+ uint32_t seq;
+ uint32_t nextseq;
nstime_t ts;
} tcp_unacked_t;
struct tcp_acked {
- guint32 frame_acked;
+ uint32_t frame_acked;
nstime_t ts;
- guint32 rto_frame;
+ uint32_t rto_frame;
nstime_t rto_ts; /* Time since previous packet for
retransmissions. */
- guint16 flags; /* see TCP_A_* in packet-tcp.c */
- guint32 dupack_num; /* dup ack number */
- guint32 dupack_frame; /* dup ack to frame # */
- guint32 bytes_in_flight; /* number of bytes in flight */
- guint32 push_bytes_sent; /* bytes since the last PSH flag */
+ uint16_t flags; /* see TCP_A_* in packet-tcp.c */
+ uint32_t dupack_num; /* dup ack number */
+ uint32_t dupack_frame; /* dup ack to frame # */
+ uint32_t bytes_in_flight; /* number of bytes in flight */
+ uint32_t push_bytes_sent; /* bytes since the last PSH flag */
- guint32 new_data_seq; /* For segments with old data,
+ uint32_t new_data_seq; /* For segments with old data,
where new data starts */
+ bool partial_ack; /* true when acknowledging data
+ and not a full segment */
};
/* One instance of this structure is created for each pdu that spans across
* multiple tcp segments.
*/
struct tcp_multisegment_pdu {
- guint32 seq;
- guint32 nxtpdu;
- guint32 first_frame; /* The frame where this MSP was created (used as key in reassembly tables). */
- guint32 last_frame;
+ uint32_t seq;
+ uint32_t nxtpdu;
+ uint32_t first_frame; /* The frame where this MSP was created (used as key in reassembly tables). */
+ uint32_t last_frame;
nstime_t last_frame_time;
- guint32 first_frame_with_seq; /* The frame that contains the first frame that matches 'seq'
+ uint32_t first_frame_with_seq; /* The frame that contains the first frame that matches 'seq'
(same as 'first_frame', larger than 'first_frame' for OoO segments) */
- guint32 flags;
+ uint32_t flags;
#define MSP_FLAGS_REASSEMBLE_ENTIRE_SEGMENT 0x00000001
/* Whether this MSP is finished and no more segments can be added. */
#define MSP_FLAGS_GOT_ALL_SEGMENTS 0x00000002
@@ -202,28 +205,28 @@ struct tcp_multisegment_pdu {
*/
typedef struct _mptcp_dss_mapping_t {
-/* In DSS, SSN are enumeratad with relative seq_nb, i.e. starting from 0 */
+/* In DSS, SSN are enumerated with relative seq_nb, i.e. starting from 0 */
- guint32 ssn_low;
- guint32 ssn_high;
+ uint32_t ssn_low;
+ uint32_t ssn_high;
/* Ideally the dsn should always be registered with the extended version
* but it may not be possible if we don't know the 32 MSB of the base_dsn
*/
- gboolean extended_dsn; /* TRUE if MPTCP_DSS_FLAG_DATA_8BYTES */
+ bool extended_dsn; /* true if MPTCP_DSS_FLAG_DATA_8BYTES */
- guint64 rawdsn; /* matches the low member of range
+ uint64_t rawdsn; /* matches the low member of range
should be converted to the 64 bits version before being registered
*/
/* to check if mapping was sent before or after packet */
-guint32 frame;
+uint32_t frame;
} mptcp_dss_mapping_t;
/* Structure used in mptcp meta member 'dsn_map'
*/
typedef struct _mptcp_dsn2packet_mapping_t {
- guint32 frame; /* packet to look into PINFO_FD_NUM */
+ uint32_t frame; /* packet to look into PINFO_FD_NUM */
struct tcp_analysis* subflow; /* in order to get statistics */
} mptcp_dsn2packet_mapping_t;
@@ -234,41 +237,41 @@ all the subflows
*/
typedef struct _mptcp_meta_flow_t {
- guint8 static_flags; /* remember which fields are set */
+ uint8_t static_flags; /* remember which fields are set */
- /* flags exchanged between hosts during 3WHS. Gives checksum/extensiblity/hmac information */
- guint8 flags;
- guint64 base_dsn; /* first data seq number (used by relative sequence numbers) seen. */
- guint64 nextseq; /* highest seen nextseq */
- guint64 dfin; /* data fin */
+ /* flags exchanged between hosts during 3WHS. Gives checksum/extensibility/hmac information */
+ uint8_t flags;
+ uint64_t base_dsn; /* first data seq number (used by relative sequence numbers) seen. */
+ uint64_t nextseq; /* highest seen nextseq */
+ uint64_t dfin; /* data fin */
- guint8 version; /* negociated mptcp version */
+ uint8_t version; /* negotiated mptcp version */
- guint64 key; /* if it was set */
+ uint64_t key; /* if it was set */
/* expected token sha1 digest of keys, truncated to 32 most significant bits
derived from key. Stored to speed up subflow/MPTCP connection mapping */
- guint32 token;
+ uint32_t token;
- guint32 nextseqframe; /* frame number for segment with highest sequence number */
+ uint32_t nextseqframe; /* frame number for segment with highest sequence number */
/* highest seen continuous seq number (without hole in the stream) */
- guint64 maxseqtobeacked;
+ uint64_t maxseqtobeacked;
- guint64 fin; /* frame number of the final dataFIN */
+ uint64_t fin; /* frame number of the final dataFIN */
/* first addresses registered */
address ip_src;
address ip_dst;
- guint32 sport;
- guint32 dport;
+ uint32_t sport;
+ uint32_t dport;
} mptcp_meta_flow_t;
/* MPTCP data specific to this subflow direction */
struct mptcp_subflow {
- guint8 static_flags; /* flags stating which of the flow */
- guint32 nonce; /* used only for MP_JOIN */
- guint8 address_id; /* sent during an MP_JOIN */
+ uint8_t static_flags; /* flags stating which of the flow */
+ uint32_t nonce; /* used only for MP_JOIN */
+ uint8_t address_id; /* sent during an MP_JOIN */
/* map DSN to packets
@@ -303,16 +306,16 @@ typedef enum {
*/
typedef struct tcp_analyze_seq_flow_info_t {
tcp_unacked_t *segments;/* List of segments for which we haven't seen an ACK */
- guint16 segment_count; /* How many unacked segments we're currently storing */
- guint32 lastack; /* Last seen ack for the reverse flow */
+ uint16_t segment_count; /* How many unacked segments we're currently storing */
+ uint32_t lastack; /* Last seen ack for the reverse flow */
nstime_t lastacktime; /* Time of the last ack packet */
- guint32 lastnondupack; /* frame number of last seen non dupack */
- guint32 dupacknum; /* dupack number */
- guint32 nextseq; /* highest seen nextseq */
- guint32 maxseqtobeacked;/* highest seen continuous seq number (without hole in the stream) from the fwd party,
+ uint32_t lastnondupack; /* frame number of last seen non dupack */
+ uint32_t dupacknum; /* dupack number */
+ uint32_t nextseq; /* highest seen nextseq */
+ uint32_t maxseqtobeacked;/* highest seen continuous seq number (without hole in the stream) from the fwd party,
* this is the maximum seq number that can be acked by the rev party in normal case.
* If the rev party sends an ACK beyond this seq number it indicates TCP_A_ACK_LOST_PACKET condition */
- guint32 nextseqframe; /* frame number for segment with highest
+ uint32_t nextseqframe; /* frame number for segment with highest
* sequence number
*/
nstime_t nextseqtime; /* Time of the nextseq packet so we can
@@ -320,42 +323,42 @@ typedef struct tcp_analyze_seq_flow_info_t {
* fast retransmissions and outoforder
*/
- guint8 lastacklen; /* length of the last fwd ACK packet - 0 means pure ACK */
+ uint8_t lastacklen; /* length of the last fwd ACK packet - 0 means pure ACK */
/*
* Handling of SACK blocks
* Copied from tcpheader
*/
- guint8 num_sack_ranges;
- guint32 sack_left_edge[MAX_TCP_SACK_RANGES];
- guint32 sack_right_edge[MAX_TCP_SACK_RANGES];
+ uint8_t num_sack_ranges;
+ uint32_t sack_left_edge[MAX_TCP_SACK_RANGES];
+ uint32_t sack_right_edge[MAX_TCP_SACK_RANGES];
} tcp_analyze_seq_flow_info_t;
/* Process info, currently discovered via IPFIX */
typedef struct tcp_process_info_t {
- guint32 process_uid; /* UID of local process */
- guint32 process_pid; /* PID of local process */
- gchar *username; /* Username of the local process */
- gchar *command; /* Local process name + path + args */
+ uint32_t process_uid; /* UID of local process */
+ uint32_t process_pid; /* PID of local process */
+ char *username; /* Username of the local process */
+ char *command; /* Local process name + path + args */
} tcp_process_info_t;
typedef struct _tcp_flow_t {
- guint8 static_flags; /* true if base seq set */
- guint32 base_seq; /* base seq number (used by relative sequence numbers)*/
+ uint8_t static_flags; /* true if base seq set */
+ uint32_t base_seq; /* base seq number (used by relative sequence numbers)*/
#define TCP_MAX_UNACKED_SEGMENTS 10000 /* The most unacked segments we'll store */
- guint32 fin; /* frame number of the final FIN */
- guint32 window; /* last seen window */
- gint16 win_scale; /* -1 is we don't know, -2 is window scaling is not used */
- gint16 scps_capable; /* flow advertised scps capabilities */
- guint16 maxsizeacked; /* 0 if not yet known */
- gboolean valid_bif; /* if lost pkts, disable BiF until ACK is recvd */
- guint32 push_bytes_sent; /* bytes since the last PSH flag */
- gboolean push_set_last; /* tracking last time PSH flag was set */
- guint8 mp_operations; /* tracking of the MPTCP operations */
- gboolean is_first_ack; /* indicates if this is the first ACK */
- gboolean closing_initiator; /* tracking who is responsible of the connection end */
+ uint32_t fin; /* frame number of the final FIN */
+ uint32_t window; /* last seen window */
+ int16_t win_scale; /* -1 is we don't know, -2 is window scaling is not used */
+ int16_t scps_capable; /* flow advertised scps capabilities */
+ uint16_t maxsizeacked; /* 0 if not yet known */
+ bool valid_bif; /* if lost pkts, disable BiF until ACK is recvd */
+ uint32_t push_bytes_sent; /* bytes since the last PSH flag */
+ bool push_set_last; /* tracking last time PSH flag was set */
+ uint8_t mp_operations; /* tracking of the MPTCP operations */
+ bool is_first_ack; /* indicates if this is the first ACK */
+ bool closing_initiator; /* tracking who is responsible of the connection end */
tcp_analyze_seq_flow_info_t* tcp_analyze_seq_info;
@@ -363,15 +366,18 @@ typedef struct _tcp_flow_t {
* be reassembled until the final FIN segment.
*/
#define TCP_FLOW_REASSEMBLE_UNTIL_FIN 0x0001
- guint16 flags;
+ uint16_t flags;
/* see TCP_A_* in packet-tcp.c */
- guint32 lastsegmentflags;
+ uint32_t lastsegmentflags;
/* The next (largest) sequence number after all segments seen so far.
* Valid only on the first pass and used to handle out-of-order segments
* during reassembly. */
- guint32 maxnextseq;
+ uint32_t maxnextseq;
+
+ /* The number of data flows seen in that direction */
+ uint16_t flow_count;
/* This tree is indexed by sequence number and keeps track of all
* all pdus spanning multiple segments for this flow.
@@ -391,7 +397,7 @@ typedef struct _tcp_flow_t {
/* Stores common information between both hosts of the MPTCP connection*/
struct mptcp_analysis {
- guint16 mp_flags; /* MPTCP meta analysis related, see MPTCP_META_* in packet-tcp.c */
+ uint16_t mp_flags; /* MPTCP meta analysis related, see MPTCP_META_* in packet-tcp.c */
/*
* For other subflows, they link the meta via mptcp_subflow_t::meta_flow
@@ -399,15 +405,15 @@ struct mptcp_analysis {
*/
mptcp_meta_flow_t meta_flow[2];
- guint32 stream; /* Keep track of unique mptcp stream (per MP_CAPABLE handshake) */
- guint8 hmac_algo; /* hmac decided after negociation */
+ uint32_t stream; /* Keep track of unique mptcp stream (per MP_CAPABLE handshake) */
+ uint8_t hmac_algo; /* hmac decided after negotiation */
wmem_list_t* subflows; /* List of subflows (tcp_analysis) */
/* identifier of the tcp stream that saw the initial 3WHS with MP_CAPABLE option */
struct tcp_analysis *master;
/* Keep track of the last TCP operations seen in order to avoid false DUP ACKs */
- guint8 mp_operations;
+ uint8_t mp_operations;
};
struct tcp_analysis {
@@ -469,17 +475,22 @@ struct tcp_analysis {
* index (as how it was done before). This prevents gaps in the
* stream index numbering
*/
- guint32 stream;
+ uint32_t stream;
+
+ /* Keep track of packet number within the TCP stream */
+ uint32_t pnum;
/* Remembers the server port on the SYN (or SYN|ACK) packet to
* help determine which dissector to call
*/
- guint16 server_port;
-
+ uint16_t server_port;
/* Set when the client sends a SYN with data and the cookie in the Fast Open
* option.
*/
- guint8 tfo_syn_data : 1;
+ uint8_t tfo_syn_data : 1;
+
+ /* Remembers which side is currently sending data. */
+ int8_t flow_direction : 2;
/* allocated only when mptcp enabled
* several tcp_analysis may refer to the same mptcp_analysis
@@ -492,15 +503,15 @@ struct tcp_analysis {
* just some parts if we jumped on the bandwagon of an already established
* connection or left before it was terminated explicitly
*/
- guint8 conversation_completeness;
+ uint8_t conversation_completeness;
/* Stores the value as a String to be displayed in the appropriate field */
- gchar *conversation_completeness_str;
+ char *conversation_completeness_str;
/* Track AccECN support */
- gboolean had_acc_ecn_setup_syn;
- gboolean had_acc_ecn_setup_syn_ack;
- gboolean had_acc_ecn_option;
+ bool had_acc_ecn_setup_syn;
+ bool had_acc_ecn_setup_syn_ack;
+ bool had_acc_ecn_option;
};
/* Structure that keeps per packet data. First used to be able
@@ -509,7 +520,8 @@ struct tcp_analysis {
*/
struct tcp_per_packet_data_t {
nstime_t ts_del;
- guint8 tcp_snd_manual_analysis;
+ uint32_t pnum;
+ uint8_t tcp_snd_manual_analysis;
};
/* Structure that keeps per packet data. Some operations are cpu-intensive and are
@@ -524,15 +536,21 @@ typedef struct mptcp_per_packet_data_t_ {
WS_DLL_PUBLIC void dissect_tcp_payload(tvbuff_t *tvb, packet_info *pinfo, int offset,
- guint32 seq, guint32 nxtseq, guint32 sport,
- guint32 dport, proto_tree *tree,
+ uint32_t seq, uint32_t nxtseq, uint32_t sport,
+ uint32_t dport, proto_tree *tree,
proto_tree *tcp_tree,
struct tcp_analysis *tcpd, struct tcpinfo *tcpinfo);
WS_DLL_PUBLIC struct tcp_analysis *get_tcp_conversation_data(conversation_t *conv,
packet_info *pinfo);
-WS_DLL_PUBLIC gboolean decode_tcp_ports(tvbuff_t *, int, packet_info *, proto_tree *, int, int, struct tcp_analysis *, struct tcpinfo *);
+/** Same as get_tcp_conversation_data(), without updating any data at all. Thus,
+ * it really identifies the conversation data and doesn't do anything with it.
+ *
+ */
+WS_DLL_PUBLIC struct tcp_analysis *get_tcp_conversation_data_idempotent(conversation_t *conv);
+
+WS_DLL_PUBLIC bool decode_tcp_ports(tvbuff_t *, int, packet_info *, proto_tree *, int, int, struct tcp_analysis *, struct tcpinfo *);
/** Associate process information with a given flow
*
@@ -546,24 +564,24 @@ WS_DLL_PUBLIC gboolean decode_tcp_ports(tvbuff_t *, int, packet_info *, proto_tr
* @param username Ephemeral string containing the full or partial process name
* @param command Ephemeral string containing the full or partial process name
*/
-extern void add_tcp_process_info(guint32 frame_num, address *local_addr, address *remote_addr, guint16 local_port, guint16 remote_port, guint32 uid, guint32 pid, gchar *username, gchar *command);
+extern void add_tcp_process_info(uint32_t frame_num, address *local_addr, address *remote_addr, uint16_t local_port, uint16_t remote_port, uint32_t uid, uint32_t pid, char *username, char *command);
/** Get the current number of TCP streams
*
* @return The number of TCP streams
*/
-WS_DLL_PUBLIC guint32 get_tcp_stream_count(void);
+WS_DLL_PUBLIC uint32_t get_tcp_stream_count(void);
/** Get the current number of MPTCP streams
*
* @return The number of MPTCP streams
*/
-WS_DLL_PUBLIC guint32 get_mptcp_stream_count(void);
+WS_DLL_PUBLIC uint32_t get_mptcp_stream_count(void);
/* Follow Stream functionality shared with HTTP (and SSL?) */
-extern gchar *tcp_follow_conv_filter(epan_dissect_t *edt, packet_info *pinfo, guint *stream, guint *sub_stream);
-extern gchar *tcp_follow_index_filter(guint stream, guint sub_stream);
-extern gchar *tcp_follow_address_filter(address *src_addr, address *dst_addr, int src_port, int dst_port);
+extern char *tcp_follow_conv_filter(epan_dissect_t *edt, packet_info *pinfo, unsigned *stream, unsigned *sub_stream);
+extern char *tcp_follow_index_filter(unsigned stream, unsigned sub_stream);
+extern char *tcp_follow_address_filter(address *src_addr, address *dst_addr, int src_port, int dst_port);
#ifdef __cplusplus
}