From 7312e716cb6aa39c2925565342378d30286c4c46 2020-07-22 16:49:23 From: Christopher Esterhuyse Date: 2020-07-22 16:49:23 Subject: [PATCH] Merge branch 'master' of https://scm.cwi.nl/FM/reowolf --- diff --git a/Cargo.toml b/Cargo.toml index 258a30287cfdafbbc1e850669b231fda1cbb8fe4..e5d19f0dd2c5e3db8d304dc979408f8f9c2fba95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,7 +41,7 @@ lazy_static = "1.4.0" crate-type = ["cdylib"] [features] -default = ["ffi", "session_optimization"] +default = ["ffi", "session_optimization", "ffi_pseudo_socket_api"] ffi = [] # see src/ffi/mod.rs ffi_pseudo_socket_api = ["ffi", "libc", "os_socketaddr"]# see src/ffi/pseudo_socket_api.rs endpoint_logging = [] # see src/macros.rs diff --git a/src/ffi/pseudo_socket_api.rs b/src/ffi/pseudo_socket_api.rs index 0dcb756cd0e5a6abcd144859e6afb77a9ac2acb0..1bc8acba6952deec136ad859f34d3fb96d4e67fa 100644 --- a/src/ffi/pseudo_socket_api.rs +++ b/src/ffi/pseudo_socket_api.rs @@ -3,11 +3,11 @@ use super::*; use std::{ collections::HashMap, ffi::c_void, - libc::{sockaddr, socklen_t}, net::{Ipv4Addr, SocketAddr, SocketAddrV4}, os::raw::c_int, sync::RwLock, }; +use libc::{sockaddr, socklen_t}; /////////////////////////////////////////////////////////////////// struct FdAllocator { @@ -33,8 +33,8 @@ struct CcMap { fd_allocator: FdAllocator, } /////////////////////////////////////////////////////////////////// -fn addr_from_raw(addr: *const sockaddr, addr_len: socklen_t) -> Option { - os_socketaddr::OsSocketAddr::from_raw_parts(addr, addr_len as usize).into_addr() +unsafe fn addr_from_raw(addr: *const sockaddr, addr_len: socklen_t) -> Option { + os_socketaddr::OsSocketAddr::from_raw_parts(addr as _, addr_len as usize).into_addr() } fn trivial_peer_addr() -> SocketAddr { // SocketAddrV4::new isn't a constant-time func @@ -218,7 +218,7 @@ pub unsafe extern "C" fn rw_sendto( ) -> isize { let addr = match addr_from_raw(addr, addr_len) { Some(addr) => addr, - _ => return BAD_SOCKADDR, + _ => return BAD_SOCKADDR as isize, }; let r = if let Ok(r) = CC_MAP.read() { r } else { return CC_MAP_LOCK_POISONED as isize }; let cc = if let Some(cc) = r.fd_to_cc.get(&fd) { cc } else { return BAD_FD as isize }; @@ -252,7 +252,7 @@ pub unsafe extern "C" fn rw_recvfrom( ) -> isize { let addr = match addr_from_raw(addr, addr_len) { Some(addr) => addr, - _ => return BAD_SOCKADDR, + _ => return BAD_SOCKADDR as isize, }; let r = if let Ok(r) = CC_MAP.read() { r } else { return CC_MAP_LOCK_POISONED as isize }; let cc = if let Some(cc) = r.fd_to_cc.get(&fd) { cc } else { return BAD_FD as isize }; @@ -261,7 +261,7 @@ pub unsafe extern "C" fn rw_recvfrom( // copy currently old_addr let old_addr = cc.peer_addr; // connect to given peer_addr - match cc.connect(peer_addr.read()) { + match cc.connect(addr) { e if e != ERR_OK => return e as isize, _ => {} }