Skip to content

Commit 8a31a2f

Browse files
mikemiles-devmikemiles-dev
and
mikemiles-dev
authored
Fixed exporting 3 byte DataNumbers (#71)
Co-authored-by: mikemiles-dev <michaelmileusnich@Michaels-MacBook-Air-2.local>
1 parent 6784097 commit 8a31a2f

File tree

4 files changed

+35
-5
lines changed

4 files changed

+35
-5
lines changed

Cargo.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "netflow_parser"
33
description = "Parser for Netflow Cisco V5, V7, V9, IPFIX"
4-
version = "0.3.4"
4+
version = "0.3.5"
55
edition = "2021"
66
author = "michael.mileusnich@gmail.com"
77
license = "MIT OR Apache-2.0"
@@ -10,6 +10,7 @@ readme = "README.md"
1010
repository = "https://github.com/mikemiles-dev/netflow_parser/"
1111

1212
[dependencies]
13+
byteorder = "1.5.0"
1314
nom = "7.1.3"
1415
nom-derive = "0.10.1"
1516
mac_address = "1.1.5"

RELEASES.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# 0.3.5
2+
* 3 Byte Data Numbers now correctly converts back to be_bytes.
3+
14
# 0.3.4
25
* Added 3 byte DataNumber support.
36

SECURITY.md

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
| Version | Supported |
66
| ------- | ------------------ |
7+
| 0.3.5 | :white_check_mark: |
78
| 0.3.4 | :white_check_mark: |
89
| 0.3.3 | :white_check_mark: |
910
| 0.3.2 | :white_check_mark: |

src/variable_versions/common.rs

+29-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
use crate::protocol::ProtocolTypes;
22

3+
use byteorder::{BigEndian, WriteBytesExt};
34
use nom::bytes::complete::take;
45
use nom::error::{Error as NomError, ErrorKind};
5-
use nom::number::complete::{be_i24, be_u24};
6-
use nom::number::complete::{be_u128, be_u32};
6+
use nom::number::complete::{be_i24, be_u128, be_u24, be_u32};
77
use nom::Err as NomErr;
88
use nom::IResult;
99
use nom_derive::*;
@@ -19,6 +19,8 @@ use std::time::Duration;
1919
pub enum DataNumber {
2020
U8(u8),
2121
U16(u16),
22+
U24(u32),
23+
I24(i32),
2224
U32(u32),
2325
U64(u64),
2426
U128(u128),
@@ -47,8 +49,8 @@ impl DataNumber {
4749
match field_length {
4850
1 if !signed => Ok(u8::parse(i)?).map(|(i, j)| (i, Self::U8(j))),
4951
2 if !signed => Ok(u16::parse(i)?).map(|(i, j)| (i, Self::U16(j))),
50-
3 if !signed => Ok(be_u24(i).map(|(i, j)| (i, Self::U32(j)))?),
51-
3 if signed => Ok(be_i24(i).map(|(i, j)| (i, Self::I32(j)))?),
52+
3 if !signed => Ok(be_u24(i).map(|(i, j)| (i, Self::U24(j)))?),
53+
3 if signed => Ok(be_i24(i).map(|(i, j)| (i, Self::I24(j)))?),
5254
4 if signed => Ok(i32::parse(i)?).map(|(i, j)| (i, Self::I32(j))),
5355
4 if !signed => Ok(u32::parse(i)?).map(|(i, j)| (i, Self::U32(j))),
5456
8 if !signed => Ok(u64::parse(i)?).map(|(i, j)| (i, Self::U64(j))),
@@ -61,6 +63,16 @@ impl DataNumber {
6163
match self {
6264
DataNumber::U8(n) => n.to_be_bytes().to_vec(),
6365
DataNumber::U16(n) => n.to_be_bytes().to_vec(),
66+
DataNumber::U24(n) => {
67+
let mut wtr = Vec::new();
68+
wtr.write_u24::<BigEndian>(*n).unwrap();
69+
wtr
70+
}
71+
DataNumber::I24(n) => {
72+
let mut wtr = Vec::new();
73+
wtr.write_i24::<BigEndian>(*n).unwrap();
74+
wtr
75+
}
6476
DataNumber::U32(n) => n.to_be_bytes().to_vec(),
6577
DataNumber::U64(n) => n.to_be_bytes().to_vec(),
6678
DataNumber::U128(n) => n.to_be_bytes().to_vec(),
@@ -167,6 +179,8 @@ impl From<DataNumber> for usize {
167179
fn from(val: DataNumber) -> Self {
168180
match val {
169181
DataNumber::U8(i) => i as usize,
182+
DataNumber::I24(i) => i as usize,
183+
DataNumber::U24(i) => i as usize,
170184
DataNumber::U32(i) => i as usize,
171185
DataNumber::I32(i) => i as usize,
172186
DataNumber::U16(i) => i as usize,
@@ -222,3 +236,14 @@ pub enum FieldDataType {
222236
ProtocolType,
223237
Unknown,
224238
}
239+
240+
#[cfg(test)]
241+
mod common_tests {
242+
#[test]
243+
fn it_tests_3_byte_data_number_exports() {
244+
use super::DataNumber;
245+
let data = DataNumber::parse(&[1, 246, 118], 3, false).unwrap().1;
246+
println!("{:?}", data);
247+
assert_eq!(data.to_be_bytes(), vec![1, 246, 118]);
248+
}
249+
}

0 commit comments

Comments
 (0)