mirror of
https://github.com/EFForg/rayhunter.git
synced 2026-07-30 18:58:11 -07:00
Remove unpack! macro
This commit is contained in:
@@ -2,7 +2,6 @@ use std::borrow::Cow;
|
|||||||
|
|
||||||
use super::analyzer::{Analyzer, Event, EventType, Severity};
|
use super::analyzer::{Analyzer, Event, EventType, Severity};
|
||||||
use super::information_element::{InformationElement, LteInformationElement};
|
use super::information_element::{InformationElement, LteInformationElement};
|
||||||
use super::util::unpack;
|
|
||||||
use telcom_parser::lte_rrc::{
|
use telcom_parser::lte_rrc::{
|
||||||
DL_DCCH_MessageType, DL_DCCH_MessageType_c1, RRCConnectionReleaseCriticalExtensions,
|
DL_DCCH_MessageType, DL_DCCH_MessageType_c1, RRCConnectionReleaseCriticalExtensions,
|
||||||
RRCConnectionReleaseCriticalExtensions_c1, RedirectedCarrierInfo,
|
RRCConnectionReleaseCriticalExtensions_c1, RedirectedCarrierInfo,
|
||||||
@@ -27,27 +26,28 @@ impl Analyzer for ConnectionRedirect2GDowngradeAnalyzer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn analyze_information_element(&mut self, ie: &InformationElement) -> Option<Event> {
|
fn analyze_information_element(&mut self, ie: &InformationElement) -> Option<Event> {
|
||||||
unpack!(InformationElement::LTE(lte_ie) = ie);
|
if let InformationElement::LTE(lte_ie) = ie
|
||||||
let message = match &**lte_ie {
|
&& let LteInformationElement::DlDcch(msg_cont) = &**lte_ie
|
||||||
LteInformationElement::DlDcch(msg_cont) => &msg_cont.message,
|
&& let DL_DCCH_MessageType::C1(c1) = &msg_cont.message
|
||||||
_ => return None,
|
&& let DL_DCCH_MessageType_c1::RrcConnectionRelease(release) = c1
|
||||||
};
|
&& let RRCConnectionReleaseCriticalExtensions::C1(c1) = &release.critical_extensions
|
||||||
unpack!(DL_DCCH_MessageType::C1(c1) = message);
|
&& let RRCConnectionReleaseCriticalExtensions_c1::RrcConnectionRelease_r8(r8_ies) = c1
|
||||||
unpack!(DL_DCCH_MessageType_c1::RrcConnectionRelease(release) = c1);
|
&& let Some(carrier_info) = &r8_ies.redirected_carrier_info
|
||||||
unpack!(RRCConnectionReleaseCriticalExtensions::C1(c1) = &release.critical_extensions);
|
{
|
||||||
unpack!(RRCConnectionReleaseCriticalExtensions_c1::RrcConnectionRelease_r8(r8_ies) = c1);
|
match carrier_info {
|
||||||
unpack!(Some(carrier_info) = &r8_ies.redirected_carrier_info);
|
RedirectedCarrierInfo::Geran(_carrier_freqs_geran) => Some(Event {
|
||||||
match carrier_info {
|
event_type: EventType::QualitativeWarning {
|
||||||
RedirectedCarrierInfo::Geran(_carrier_freqs_geran) => Some(Event {
|
severity: Severity::High,
|
||||||
event_type: EventType::QualitativeWarning {
|
},
|
||||||
severity: Severity::High,
|
message: "Detected 2G downgrade".to_owned(),
|
||||||
},
|
}),
|
||||||
message: "Detected 2G downgrade".to_owned(),
|
_ => Some(Event {
|
||||||
}),
|
event_type: EventType::Informational,
|
||||||
_ => Some(Event {
|
message: format!("RRCConnectionRelease CarrierInfo: {carrier_info:?}"),
|
||||||
event_type: EventType::Informational,
|
}),
|
||||||
message: format!("RRCConnectionRelease CarrierInfo: {carrier_info:?}"),
|
}
|
||||||
}),
|
} else {
|
||||||
|
None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ use std::borrow::Cow;
|
|||||||
|
|
||||||
use telcom_parser::lte_rrc::{BCCH_DL_SCH_MessageType, BCCH_DL_SCH_MessageType_c1};
|
use telcom_parser::lte_rrc::{BCCH_DL_SCH_MessageType, BCCH_DL_SCH_MessageType_c1};
|
||||||
|
|
||||||
use crate::analysis::util::unpack;
|
|
||||||
|
|
||||||
use super::analyzer::{Analyzer, Event, EventType, Severity};
|
use super::analyzer::{Analyzer, Event, EventType, Severity};
|
||||||
use super::information_element::{InformationElement, LteInformationElement};
|
use super::information_element::{InformationElement, LteInformationElement};
|
||||||
|
|
||||||
@@ -39,12 +37,12 @@ impl Analyzer for IncompleteSibAnalyzer {
|
|||||||
fn analyze_information_element(&mut self, ie: &InformationElement) -> Option<Event> {
|
fn analyze_information_element(&mut self, ie: &InformationElement) -> Option<Event> {
|
||||||
self.packet_num += 1;
|
self.packet_num += 1;
|
||||||
|
|
||||||
unpack!(InformationElement::LTE(lte_ie) = ie);
|
if let InformationElement::LTE(lte_ie) = ie
|
||||||
unpack!(LteInformationElement::BcchDlSch(sch_msg) = &**lte_ie);
|
&& let LteInformationElement::BcchDlSch(sch_msg) = &**lte_ie
|
||||||
unpack!(BCCH_DL_SCH_MessageType::C1(c1) = &sch_msg.message);
|
&& let BCCH_DL_SCH_MessageType::C1(c1) = &sch_msg.message
|
||||||
unpack!(BCCH_DL_SCH_MessageType_c1::SystemInformationBlockType1(sib1) = c1);
|
&& let BCCH_DL_SCH_MessageType_c1::SystemInformationBlockType1(sib1) = c1
|
||||||
|
&& sib1.scheduling_info_list.0.len() < 2
|
||||||
if sib1.scheduling_info_list.0.len() < 2 {
|
{
|
||||||
return Some(Event {
|
return Some(Event {
|
||||||
event_type: EventType::QualitativeWarning {
|
event_type: EventType::QualitativeWarning {
|
||||||
severity: Severity::Medium,
|
severity: Severity::Medium,
|
||||||
|
|||||||
@@ -1,33 +1 @@
|
|||||||
// Unpacks a pattern, or returns None.
|
|
||||||
//
|
|
||||||
// # Examples
|
|
||||||
// You can use `unpack!` to unroll highly nested enums like this:
|
|
||||||
// ```
|
|
||||||
// enum Foo {
|
|
||||||
// A(Bar),
|
|
||||||
// B,
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// enum Bar {
|
|
||||||
// C(Baz)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// struct Baz;
|
|
||||||
//
|
|
||||||
// fn get_bang(foo: Foo) -> Option<Baz> {
|
|
||||||
// unpack!(Foo::A(bar) = foo);
|
|
||||||
// unpack!(Bar::C(baz) = bar);
|
|
||||||
// baz
|
|
||||||
// }
|
|
||||||
// ```
|
|
||||||
//
|
|
||||||
macro_rules! unpack {
|
|
||||||
($pat:pat = $val:expr) => {
|
|
||||||
let $pat = $val else {
|
|
||||||
return None;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// this is apparently how you make a macro publicly usable from this module
|
|
||||||
pub(crate) use unpack;
|
|
||||||
|
|||||||
Reference in New Issue
Block a user