Coverage Report

Created: 2026-02-14 06:42

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/suricata7/rust/src/quic/detect.rs
Line
Count
Source
1
/* Copyright (C) 2021 Open Information Security Foundation
2
 *
3
 * You can copy, redistribute or modify this Program under the terms of
4
 * the GNU General Public License version 2 as published by the Free
5
 * Software Foundation.
6
 *
7
 * This program is distributed in the hope that it will be useful,
8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
 * GNU General Public License for more details.
11
 *
12
 * You should have received a copy of the GNU General Public License
13
 * version 2 along with this program; if not, write to the Free Software
14
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
15
 * 02110-1301, USA.
16
 */
17
18
use crate::quic::quic::QuicTransaction;
19
use std::ptr;
20
21
#[no_mangle]
22
0
pub unsafe extern "C" fn rs_quic_tx_get_ua(
23
0
    tx: &QuicTransaction, buffer: *mut *const u8, buffer_len: *mut u32,
24
0
) -> u8 {
25
0
    if let Some(ua) = &tx.ua {
26
0
        *buffer = ua.as_ptr();
27
0
        *buffer_len = ua.len() as u32;
28
0
        1
29
    } else {
30
0
        *buffer = ptr::null();
31
0
        *buffer_len = 0;
32
0
        0
33
    }
34
0
}
35
36
#[no_mangle]
37
57
pub unsafe extern "C" fn rs_quic_tx_get_sni(
38
57
    tx: &QuicTransaction, buffer: *mut *const u8, buffer_len: *mut u32,
39
57
) -> u8 {
40
57
    if let Some(sni) = &tx.sni {
41
24
        *buffer = sni.as_ptr();
42
24
        *buffer_len = sni.len() as u32;
43
24
        1
44
    } else {
45
33
        *buffer = ptr::null();
46
33
        *buffer_len = 0;
47
33
        0
48
    }
49
57
}
50
51
#[no_mangle]
52
10
pub unsafe extern "C" fn rs_quic_tx_get_ja3(
53
10
    tx: &QuicTransaction, buffer: *mut *const u8, buffer_len: *mut u32,
54
10
) -> u8 {
55
10
    if let Some(ja3) = &tx.ja3 {
56
5
        *buffer = ja3.as_ptr();
57
5
        *buffer_len = ja3.len() as u32;
58
5
        1
59
    } else {
60
5
        *buffer = ptr::null();
61
5
        *buffer_len = 0;
62
5
        0
63
    }
64
10
}
65
66
#[no_mangle]
67
1
pub unsafe extern "C" fn rs_quic_tx_get_ja4(
68
1
    tx: &QuicTransaction, buffer: *mut *const u8, buffer_len: *mut u32,
69
1
) -> u8 {
70
1
    if let Some(ja4) = &tx.ja4 {
71
0
        *buffer = ja4.as_ptr();
72
0
        *buffer_len = ja4.len() as u32;
73
0
        1
74
    } else {
75
1
        *buffer = ptr::null();
76
1
        *buffer_len = 0;
77
1
        0
78
    }
79
1
}
80
81
#[no_mangle]
82
95
pub unsafe extern "C" fn rs_quic_tx_get_version(
83
95
    tx: &QuicTransaction, buffer: *mut *const u8, buffer_len: *mut u32,
84
95
) -> u8 {
85
95
    if tx.header.flags.is_long {
86
87
        let s = &tx.header.version_buf;
87
87
        *buffer = s.as_ptr();
88
87
        *buffer_len = s.len() as u32;
89
87
        1
90
    } else {
91
8
        *buffer = ptr::null();
92
8
        *buffer_len = 0;
93
8
        0
94
    }
95
95
}
96
97
#[no_mangle]
98
2.09k
pub unsafe extern "C" fn rs_quic_tx_get_cyu_hash(
99
2.09k
    tx: &QuicTransaction, i: u32, buffer: *mut *const u8, buffer_len: *mut u32,
100
2.09k
) -> u8 {
101
2.09k
    if (i as usize) < tx.cyu.len() {
102
497
        let cyu = &tx.cyu[i as usize];
103
104
497
        let p = &cyu.hash;
105
106
497
        *buffer = p.as_ptr();
107
497
        *buffer_len = p.len() as u32;
108
109
497
        1
110
    } else {
111
1.59k
        *buffer = ptr::null();
112
1.59k
        *buffer_len = 0;
113
114
1.59k
        0
115
    }
116
2.09k
}
117
118
#[no_mangle]
119
36
pub unsafe extern "C" fn rs_quic_tx_get_cyu_string(
120
36
    tx: &QuicTransaction, i: u32, buffer: *mut *const u8, buffer_len: *mut u32,
121
36
) -> u8 {
122
36
    if (i as usize) < tx.cyu.len() {
123
13
        let cyu = &tx.cyu[i as usize];
124
125
13
        let p = &cyu.string;
126
127
13
        *buffer = p.as_ptr();
128
13
        *buffer_len = p.len() as u32;
129
13
        1
130
    } else {
131
23
        *buffer = ptr::null();
132
23
        *buffer_len = 0;
133
134
23
        0
135
    }
136
36
}