summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-10-27 13:39:29 +0100
committerDavid Lönnhager <david.l@mullvad.net>2021-07-02 09:54:19 +0200
commit3355057b671dd2a4775047d02112148c305bbf65 (patch)
tree7bf9e00e2e69fd82f26f9d1ce7495d570ca08aa3
parent394dfc2e710453d79b1bf08837b19ee19c451323 (diff)
downloadmullvadvpn-3355057b671dd2a4775047d02112148c305bbf65.tar.xz
mullvadvpn-3355057b671dd2a4775047d02112148c305bbf65.zip
Expose parse_event_buffer in split_tunnel module
-rw-r--r--talpid-core/src/split_tunnel/windows/driver.rs59
1 files changed, 31 insertions, 28 deletions
diff --git a/talpid-core/src/split_tunnel/windows/driver.rs b/talpid-core/src/split_tunnel/windows/driver.rs
index 43cce01e48..f08ffb17b1 100644
--- a/talpid-core/src/split_tunnel/windows/driver.rs
+++ b/talpid-core/src/split_tunnel/windows/driver.rs
@@ -318,20 +318,7 @@ pub fn deque_event(
None,
)?;
- let mut event_header: EventHeader = unsafe { mem::zeroed() };
-
- unsafe {
- ptr::copy_nonoverlapping(
- &buffer[0],
- &mut event_header as *mut _ as *mut u8,
- mem::size_of_val(&event_header),
- )
- };
-
- Ok((
- event_header.event_id,
- parse_event_buffer(&event_header, buffer),
- ))
+ Ok(parse_event_buffer(buffer))
}
#[repr(C)]
@@ -572,13 +559,23 @@ struct SplittingErrorEventHeader {
image_name_length: u16,
}
-fn parse_event_buffer(event_header: &EventHeader, buffer: &Vec<u8>) -> EventBody {
+pub fn parse_event_buffer(buffer: &Vec<u8>) -> (EventId, EventBody) {
+ let mut event_header: EventHeader = unsafe { mem::zeroed() };
+
+ unsafe {
+ ptr::copy_nonoverlapping(
+ &buffer[0],
+ &mut event_header as *mut _ as *mut u8,
+ mem::size_of_val(&event_header),
+ )
+ };
+
match event_header.event_id {
EventId::StartSplittingProcess | EventId::StopSplittingProcess => {
let mut event: SplittingEventHeader = unsafe { mem::zeroed() };
unsafe {
ptr::copy_nonoverlapping(
- &buffer[mem::size_of_val(event_header)],
+ &buffer[mem::size_of_val(&event_header)],
&mut event as *mut _ as *mut u8,
mem::size_of_val(&event),
)
@@ -592,24 +589,27 @@ fn parse_event_buffer(event_header: &EventHeader, buffer: &Vec<u8>) -> EventBody
unsafe {
ptr::copy_nonoverlapping(
- &buffer[mem::size_of_val(event_header) + mem::size_of_val(&event)] as *const _
+ &buffer[mem::size_of_val(&event_header) + mem::size_of_val(&event)] as *const _
as *const u16,
image_name.as_mut_ptr(),
image_name.len(),
)
};
- EventBody::SplittingEvent {
- process_id: event.process_id,
- reason: event.reason,
- image: OsStringExt::from_wide(&image_name),
- }
+ (
+ event_header.event_id,
+ EventBody::SplittingEvent {
+ process_id: event.process_id,
+ reason: event.reason,
+ image: OsStringExt::from_wide(&image_name),
+ },
+ )
}
EventId::ErrorStartSplittingProcess | EventId::ErrorStopSplittingProcess => {
let mut event: SplittingErrorEventHeader = unsafe { mem::zeroed() };
unsafe {
ptr::copy_nonoverlapping(
- &buffer[mem::size_of_val(event_header)],
+ &buffer[mem::size_of_val(&event_header)],
&mut event as *mut _ as *mut u8,
mem::size_of_val(&event),
)
@@ -623,17 +623,20 @@ fn parse_event_buffer(event_header: &EventHeader, buffer: &Vec<u8>) -> EventBody
unsafe {
ptr::copy_nonoverlapping(
- &buffer[mem::size_of_val(event_header) + mem::size_of_val(&event)] as *const _
+ &buffer[mem::size_of_val(&event_header) + mem::size_of_val(&event)] as *const _
as *const u16,
image_name.as_mut_ptr(),
image_name.len(),
)
};
- EventBody::SplittingError {
- process_id: event.process_id,
- image: OsStringExt::from_wide(&image_name),
- }
+ (
+ event_header.event_id,
+ EventBody::SplittingError {
+ process_id: event.process_id,
+ image: OsStringExt::from_wide(&image_name),
+ },
+ )
}
}
}