summaryrefslogtreecommitdiffhomepage
path: root/mullvad-masque-proxy/src/server
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2025-04-07 15:54:28 +0200
committerDavid Lönnhager <david.l@mullvad.net>2025-04-07 15:54:28 +0200
commit666455314b4339d7ee5200e750bf0c67631373a0 (patch)
tree0a7e8686ba71ebc3a0b0ed7ab309be146c553119 /mullvad-masque-proxy/src/server
parent775bfa0a419f1b44f03a906855dab85a85c71137 (diff)
parentba8d1374b6eb59fbb3bd2fa243ae66c361651db9 (diff)
downloadmullvadvpn-666455314b4339d7ee5200e750bf0c67631373a0.tar.xz
mullvadvpn-666455314b4339d7ee5200e750bf0c67631373a0.zip
Merge branch 'add-masque-test'
Diffstat (limited to 'mullvad-masque-proxy/src/server')
-rw-r--r--mullvad-masque-proxy/src/server/mod.rs20
1 files changed, 13 insertions, 7 deletions
diff --git a/mullvad-masque-proxy/src/server/mod.rs b/mullvad-masque-proxy/src/server/mod.rs
index 4abc810a4d..710edaa537 100644
--- a/mullvad-masque-proxy/src/server/mod.rs
+++ b/mullvad-masque-proxy/src/server/mod.rs
@@ -19,11 +19,14 @@ use tokio::{net::UdpSocket, time::interval};
use crate::fragment::{self, Fragments};
-#[derive(Debug)]
+#[derive(Debug, thiserror::Error)]
pub enum Error {
- BadTlsConfig(quinn::crypto::rustls::NoInitialCipherSuite),
- BindSocket(io::Error),
- SendNegotiationResponse(h3::Error),
+ #[error("Bad TLS config")]
+ BadTlsConfig(#[source] quinn::crypto::rustls::NoInitialCipherSuite),
+ #[error("Failed to bind server socket")]
+ BindSocket(#[source] io::Error),
+ #[error("Failed to send negotiation response")]
+ SendNegotiationResponse(#[source] h3::Error),
}
pub type Result<T> = std::result::Result<T, Error>;
@@ -69,6 +72,10 @@ impl Server {
})
}
+ pub fn local_addr(&self) -> io::Result<SocketAddr> {
+ self.endpoint.local_addr()
+ }
+
pub async fn run(self) -> Result<()> {
while let Some(new_connection) = self.endpoint.accept().await {
tokio::spawn(Self::handle_incoming_connection(
@@ -164,7 +171,7 @@ impl Server {
client_send = connection.read_datagram() => {
match client_send {
Ok(Some(received_packet)) => {
- handle_client_packet(received_packet, stream_id, &mut fragments, &udp_socket, target_addr).await;
+ handle_client_packet(received_packet, stream_id, &mut fragments, &udp_socket).await;
},
Ok(None) => {
return;
@@ -224,7 +231,6 @@ async fn handle_client_packet(
stream_id: StreamId,
fragments: &mut Fragments,
proxy_socket: &UdpSocket,
- target_addr: SocketAddr,
) {
if received_packet.stream_id() != stream_id {
// log::trace!("Received unexpected stream ID from server");
@@ -232,7 +238,7 @@ async fn handle_client_packet(
}
if let Ok(Some(payload)) = fragments.handle_incoming_packet(received_packet.into_payload()) {
- let _ = proxy_socket.send_to(&payload, target_addr).await;
+ let _ = proxy_socket.send(&payload).await;
}
}