mirror of
https://github.com/tun2proxy/tun2proxy.git
synced 2025-04-19 05:19:09 +00:00
update deps
This commit is contained in:
parent
e556f7657b
commit
68716bdc9f
5 changed files with 37 additions and 22 deletions
2
.github/workflows/auto-merge.yaml
vendored
2
.github/workflows/auto-merge.yaml
vendored
|
@ -15,6 +15,6 @@ jobs:
|
||||||
- name: Auto approve pull request, then squash and merge
|
- name: Auto approve pull request, then squash and merge
|
||||||
uses: ahmadnassri/action-dependabot-auto-merge@v2
|
uses: ahmadnassri/action-dependabot-auto-merge@v2
|
||||||
with:
|
with:
|
||||||
target: minor
|
# target: minor
|
||||||
# here `PAT_REPO_ADMIN` is a user's passkey provided by github.
|
# here `PAT_REPO_ADMIN` is a user's passkey provided by github.
|
||||||
github-token: ${{ secrets.PAT_REPO_ADMIN }}
|
github-token: ${{ secrets.PAT_REPO_ADMIN }}
|
||||||
|
|
|
@ -60,10 +60,10 @@ serde_json = "1"
|
||||||
|
|
||||||
[target.'cfg(target_os="linux")'.dependencies]
|
[target.'cfg(target_os="linux")'.dependencies]
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
bincode = "1"
|
bincode = "2"
|
||||||
|
|
||||||
[target.'cfg(target_os="android")'.dependencies]
|
[target.'cfg(target_os="android")'.dependencies]
|
||||||
android_logger = "0.14"
|
android_logger = "0.15"
|
||||||
jni = { version = "0.21", default-features = false }
|
jni = { version = "0.21", default-features = false }
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
|
|
|
@ -43,10 +43,6 @@ pub enum Error {
|
||||||
|
|
||||||
#[error("std::num::ParseIntError {0:?}")]
|
#[error("std::num::ParseIntError {0:?}")]
|
||||||
IntParseError(#[from] std::num::ParseIntError),
|
IntParseError(#[from] std::num::ParseIntError),
|
||||||
|
|
||||||
#[cfg(target_os = "linux")]
|
|
||||||
#[error("bincode::Error {0:?}")]
|
|
||||||
BincodeError(#[from] bincode::Error),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<&str> for Error {
|
impl From<&str> for Error {
|
||||||
|
|
10
src/lib.rs
10
src/lib.rs
|
@ -69,7 +69,10 @@ use std::sync::atomic::Ordering::Relaxed;
|
||||||
|
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
#[derive(Hash, Copy, Clone, Eq, PartialEq, Debug)]
|
#[derive(Hash, Copy, Clone, Eq, PartialEq, Debug)]
|
||||||
#[cfg_attr(target_os = "linux", derive(serde::Serialize, serde::Deserialize))]
|
#[cfg_attr(
|
||||||
|
target_os = "linux",
|
||||||
|
derive(bincode::Encode, bincode::Decode, serde::Serialize, serde::Deserialize)
|
||||||
|
)]
|
||||||
pub enum SocketProtocol {
|
pub enum SocketProtocol {
|
||||||
Tcp,
|
Tcp,
|
||||||
Udp,
|
Udp,
|
||||||
|
@ -77,7 +80,10 @@ pub enum SocketProtocol {
|
||||||
|
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
#[derive(Hash, Copy, Clone, Eq, PartialEq, Debug)]
|
#[derive(Hash, Copy, Clone, Eq, PartialEq, Debug)]
|
||||||
#[cfg_attr(target_os = "linux", derive(serde::Serialize, serde::Deserialize))]
|
#[cfg_attr(
|
||||||
|
target_os = "linux",
|
||||||
|
derive(bincode::Encode, bincode::Decode, serde::Serialize, serde::Deserialize)
|
||||||
|
)]
|
||||||
pub enum SocketDomain {
|
pub enum SocketDomain {
|
||||||
IpV4,
|
IpV4,
|
||||||
IpV6,
|
IpV6,
|
||||||
|
|
|
@ -16,14 +16,14 @@ use tokio::net::{TcpSocket, UdpSocket, UnixDatagram};
|
||||||
|
|
||||||
const REQUEST_BUFFER_SIZE: usize = 64;
|
const REQUEST_BUFFER_SIZE: usize = 64;
|
||||||
|
|
||||||
#[derive(Hash, Copy, Clone, Eq, PartialEq, Debug, Serialize, Deserialize)]
|
#[derive(bincode::Encode, bincode::Decode, Hash, Copy, Clone, Eq, PartialEq, Debug, Serialize, Deserialize)]
|
||||||
struct Request {
|
struct Request {
|
||||||
protocol: SocketProtocol,
|
protocol: SocketProtocol,
|
||||||
domain: SocketDomain,
|
domain: SocketDomain,
|
||||||
number: u32,
|
number: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Hash, Copy, Clone, Eq, PartialEq, Debug, Serialize, Deserialize)]
|
#[derive(bincode::Encode, bincode::Decode, PartialEq, Debug, Hash, Copy, Clone, Eq, Serialize, Deserialize)]
|
||||||
enum Response {
|
enum Response {
|
||||||
Ok,
|
Ok,
|
||||||
}
|
}
|
||||||
|
@ -135,14 +135,21 @@ where
|
||||||
// Borrow socket as mut to prevent multiple simultaneous requests
|
// Borrow socket as mut to prevent multiple simultaneous requests
|
||||||
let socket = socket.deref_mut();
|
let socket = socket.deref_mut();
|
||||||
|
|
||||||
|
let mut request = [0u8; 1000];
|
||||||
|
|
||||||
// Send request
|
// Send request
|
||||||
let request = bincode::serialize(&Request {
|
let size = bincode::encode_into_slice(
|
||||||
|
Request {
|
||||||
protocol: T::domain(),
|
protocol: T::domain(),
|
||||||
domain,
|
domain,
|
||||||
number,
|
number,
|
||||||
})?;
|
},
|
||||||
|
&mut request,
|
||||||
|
bincode::config::standard(),
|
||||||
|
)
|
||||||
|
.map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))?;
|
||||||
|
|
||||||
socket.send(&request[..]).await?;
|
socket.send(&request[..size]).await?;
|
||||||
|
|
||||||
// Receive response
|
// Receive response
|
||||||
loop {
|
loop {
|
||||||
|
@ -161,7 +168,9 @@ where
|
||||||
|
|
||||||
// Parse response
|
// Parse response
|
||||||
let response = &msg.iovs().next().unwrap()[..msg.bytes];
|
let response = &msg.iovs().next().unwrap()[..msg.bytes];
|
||||||
let response: Response = bincode::deserialize(response)?;
|
let response: Response = bincode::decode_from_slice(response, bincode::config::standard())
|
||||||
|
.map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))?
|
||||||
|
.0;
|
||||||
if !matches!(response, Response::Ok) {
|
if !matches!(response, Response::Ok) {
|
||||||
return Err("Request for new sockets failed".into());
|
return Err("Request for new sockets failed".into());
|
||||||
}
|
}
|
||||||
|
@ -194,10 +203,14 @@ pub async fn process_socket_requests(socket: &UnixDatagram) -> error::Result<()>
|
||||||
|
|
||||||
let len = socket.recv(&mut buf[..]).await?;
|
let len = socket.recv(&mut buf[..]).await?;
|
||||||
|
|
||||||
let request: Request = bincode::deserialize(&buf[..len])?;
|
let request: Request = bincode::decode_from_slice(&buf[..len], bincode::config::standard())
|
||||||
|
.map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))?
|
||||||
|
.0;
|
||||||
|
|
||||||
let response = Response::Ok;
|
let response = Response::Ok;
|
||||||
let buf = bincode::serialize(&response)?;
|
let mut buf = [0u8; 1000];
|
||||||
|
let size = bincode::encode_into_slice(response, &mut buf, bincode::config::standard())
|
||||||
|
.map_err(|e| std::io::Error::new(std::io::ErrorKind::InvalidInput, e))?;
|
||||||
|
|
||||||
let mut owned_fd_buf: Vec<OwnedFd> = Vec::with_capacity(request.number as usize);
|
let mut owned_fd_buf: Vec<OwnedFd> = Vec::with_capacity(request.number as usize);
|
||||||
for _ in 0..request.number {
|
for _ in 0..request.number {
|
||||||
|
@ -223,7 +236,7 @@ pub async fn process_socket_requests(socket: &UnixDatagram) -> error::Result<()>
|
||||||
|
|
||||||
let raw_fd_buf: Vec<RawFd> = owned_fd_buf.iter().map(|fd| fd.as_raw_fd()).collect();
|
let raw_fd_buf: Vec<RawFd> = owned_fd_buf.iter().map(|fd| fd.as_raw_fd()).collect();
|
||||||
let cmsg = ControlMessage::ScmRights(&raw_fd_buf[..]);
|
let cmsg = ControlMessage::ScmRights(&raw_fd_buf[..]);
|
||||||
let iov = [IoSlice::new(&buf[..])];
|
let iov = [IoSlice::new(&buf[..size])];
|
||||||
|
|
||||||
sendmsg::<()>(socket.as_raw_fd(), &iov, &[cmsg], MsgFlags::empty(), None)?;
|
sendmsg::<()>(socket.as_raw_fd(), &iov, &[cmsg], MsgFlags::empty(), None)?;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue