flowparser_sflow/flow_records/
http_request.rs1use nom::IResult;
2use nom::number::complete::{be_u32, be_u64};
3use serde::{Deserialize, Serialize};
4
5use super::parse_sflow_string;
6
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
8pub struct HttpRequest {
9 pub method: u32,
10 pub protocol: u32,
11 pub uri: String,
12 pub host: String,
13 pub referer: String,
14 pub useragent: String,
15 pub xff: String,
16 pub authuser: String,
17 pub mime_type: String,
18 pub req_bytes: u64,
19 pub resp_bytes: u64,
20 pub duration_us: u32,
21 pub status: u32,
22}
23
24pub(crate) fn parse_http_request(input: &[u8]) -> IResult<&[u8], HttpRequest> {
25 let (input, method) = be_u32(input)?;
26 let (input, protocol) = be_u32(input)?;
27 let (input, uri) = parse_sflow_string(input)?;
28 let (input, host) = parse_sflow_string(input)?;
29 let (input, referer) = parse_sflow_string(input)?;
30 let (input, useragent) = parse_sflow_string(input)?;
31 let (input, xff) = parse_sflow_string(input)?;
32 let (input, authuser) = parse_sflow_string(input)?;
33 let (input, mime_type) = parse_sflow_string(input)?;
34 let (input, req_bytes) = be_u64(input)?;
35 let (input, resp_bytes) = be_u64(input)?;
36 let (input, duration_us) = be_u32(input)?;
37 let (input, status) = be_u32(input)?;
38
39 Ok((
40 input,
41 HttpRequest {
42 method,
43 protocol,
44 uri,
45 host,
46 referer,
47 useragent,
48 xff,
49 authuser,
50 mime_type,
51 req_bytes,
52 resp_bytes,
53 duration_us,
54 status,
55 },
56 ))
57}