From c8994576abce19aa34a9b14ca3f5933ed4e1725c 2020-07-22 16:48:16 From: Christopher Esterhuyse Date: 2020-07-22 16:48:16 Subject: [PATCH] pseudo-socket api --- diff --git a/Cargo.toml b/Cargo.toml index 5f1e68510393469cb1371289729c829c99d8052f..e5d19f0dd2c5e3db8d304dc979408f8f9c2fba95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,7 @@ lazy_static = "1.4.0" # socket ffi libc = { version = "^0.2", optional = true } -os_socketaddr = { verion = "0.1.0", optional = true } +os_socketaddr = { version = "0.1.0", optional = true } [dev-dependencies] # test-generator = "0.3.0" @@ -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 3a1e794848d59b518b93df3560831cc92bea545a..caa4045b9171f7dfd56516d81af68596853821ca 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 { @@ -34,8 +34,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 @@ -219,7 +219,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 }; @@ -253,7 +253,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 }; @@ -262,7 +262,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, _ => {} }