Wireshark  4.3.0
The Wireshark network protocol analyzer
packet-quic.h
1 /* packet-quic.h
2  *
3  * Wireshark - Network traffic analyzer
4  * By Gerald Combs <gerald@wireshark.org>
5  * Copyright 1998 Gerald Combs
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  */
9 
10 #ifndef __PACKET_QUIC_H__
11 #define __PACKET_QUIC_H__
12 
13 #include "ws_symbol_export.h"
14 
15 #include <glibconfig.h>
16 #include <wsutil/wsgcrypt.h>
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif /* __cplusplus */
21 
22 
27 typedef struct _quic_stream_info {
28  guint64 stream_id;
29  guint64 stream_offset;
30  guint32 offset;
31  guint32 inorder_offset;
33  gboolean from_server;
35 
36 /*
37  * Although the QUIC SCID/DCID length field can store at most 255, v1 limits the
38  * CID length to 20.
39  */
40 #define QUIC_MAX_CID_LENGTH 20
41 
42 typedef struct quic_cid {
43  guint8 len;
44  guint8 cid[QUIC_MAX_CID_LENGTH];
45  guint8 reset_token[16];
46  gboolean reset_token_set;
47  uint64_t seq_num;
48  uint64_t path_id;
49 } quic_cid_t;
50 
55 #define QUIC_STREAM_TYPE(stream_id) ((stream_id) & 3U)
56 #define QUIC_STREAM_CLIENT_BIDI 0
57 #define QUIC_STREAM_SERVER_BIDI 1
58 #define QUIC_STREAM_CLIENT_UNI 2
59 #define QUIC_STREAM_SERVER_UNI 3
60 
64 #define QUIC_MP_NO_PATH_ID 1
65 #define QUIC_MP_PATH_ID 2
66 
69 void quic_stream_add_proto_data(struct _packet_info *pinfo, quic_stream_info *stream_info, void *proto_data);
70 void *quic_stream_get_proto_data(struct _packet_info *pinfo, quic_stream_info *stream_info);
71 
73 WS_DLL_PUBLIC guint32 get_quic_connections_count(void);
74 
75 typedef struct gquic_info_data {
76  guint8 version;
77  gboolean version_valid;
78  gboolean encoding;
79  guint16 server_port;
81 
82 int
83 dissect_gquic_frame_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *gquic_tree, guint offset, guint8 len_pkn, gquic_info_data_t *gquic_info);
84 guint32
85 dissect_gquic_tags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ft_tree, guint offset);
86 
87 void
88 quic_add_connection(packet_info *pinfo, quic_cid_t *cid);
89 void
90 quic_add_loss_bits(packet_info *pinfo, guint64 value);
91 void
92 quic_add_stateless_reset_token(packet_info *pinfo, tvbuff_t *tvb, gint offset, const quic_cid_t *cid);
93 void
94 quic_add_multipath(packet_info *pinfo, unsigned version);
95 void
96 quic_add_grease_quic_bit(packet_info *pinfo);
97 void
98 quic_proto_tree_add_version(tvbuff_t *tvb, proto_tree *tree, int hfindex, guint offset);
99 
104 WS_DLL_PUBLIC gboolean
105 quic_get_stream_id_le(guint streamid, guint sub_stream_id, guint *sub_stream_id_out);
106 
111 WS_DLL_PUBLIC gboolean
112 quic_get_stream_id_ge(guint streamid, guint sub_stream_id, guint *sub_stream_id_out);
113 
114 
118 WS_DLL_PUBLIC gboolean
119 quic_conn_data_get_conn_client_dcid_initial(struct _packet_info *pinfo, quic_cid_t *dcid);
120 
121 #ifdef __cplusplus
122 }
123 #endif /* __cplusplus */
124 
125 #endif /* __PACKET_QUIC_H__ */
Definition: packet_info.h:44
Definition: proto.h:904
Definition: packet-quic.h:27
struct quic_info_data * quic_info
Definition: packet-quic.h:32
guint64 stream_id
Definition: packet-quic.h:28
guint32 offset
Definition: packet-quic.h:30
guint64 stream_offset
Definition: packet-quic.h:29
guint32 inorder_offset
Definition: packet-quic.h:31
Definition: packet-quic.h:75
Definition: packet-quic.h:42
Definition: packet-quic.c:399
Definition: tvbuff-int.h:35