Skip to content

Commit

Permalink
Merge pull request #8 from CyberHive/feature/file_descriptor
Browse files Browse the repository at this point in the history
Allow querying UdpSocket's file descriptor
  • Loading branch information
sile authored Jan 17, 2024
2 parents 81e3101 + 5e5c537 commit c02a4b6
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion src/client/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
use self::core::ClientCore;
use crate::auth::AuthParams;
use std::os::fd::AsRawFd;

use crate::transport::{
ChannelDataTcpTransporter, ChannelDataUdpTransporter, StunTcpTransporter, StunTransporter,
StunUdpTransporter,
Expand All @@ -23,6 +25,7 @@ pub trait Client {
fn poll_send(&mut self) -> Poll<(), Error>;
fn poll_recv(&mut self) -> Poll<Option<(SocketAddr, Vec<u8>)>, Error>;
fn local_addr(&self) -> SocketAddr;
fn file_descriptor(&self) -> Option<i32>;
}

pub fn wait<C, FN, FU>(
Expand Down Expand Up @@ -129,6 +132,9 @@ impl Client for TcpClient {
.inner_ref()
.with_inner_ref(|x| x.local_addr())
}
fn file_descriptor(&self) -> Option<i32> {
None
}
}

#[derive(Debug)]
Expand All @@ -138,13 +144,13 @@ pub struct UdpClient(
FixedPeerTransporter<ChannelDataUdpTransporter, ()>,
>,
);

impl UdpClient {
pub fn allocate(
server_addr: SocketAddr,
auth_params: AuthParams,
) -> impl Future<Item = Self, Error = Error> {
let bind_addr = "0.0.0.0:0".parse().expect("never fails");

UdpTransporter::bind(bind_addr)
.map_err(|e| track!(Error::from(e)))
.and_then(move |transporter| {
Expand All @@ -164,6 +170,20 @@ impl UdpClient {
}
unsafe impl Send for UdpClient {}
impl Client for UdpClient {
fn file_descriptor(&self) -> Option<i32> {
let mut my_fd: Option<i32> = None;
self.0
.stun_channel_ref()
.transporter_ref()
.inner_ref()
.inner_ref()
.with_inner_ref(|f| {
let socket: &fibers::net::UdpSocket = f.socket_ref();
socket.with_inner(|g| my_fd = Some(g.as_raw_fd()));
});
my_fd
}

fn create_permission(&mut self, peer: SocketAddr) -> AsyncResult<()> {
self.0.create_permission(peer)
}
Expand Down

0 comments on commit c02a4b6

Please sign in to comment.