Skip to content

Commit

Permalink
propagate errors in HttpProxy and HttpsProxy
Browse files Browse the repository at this point in the history
  • Loading branch information
Keksoj committed Feb 23, 2024
1 parent 7c25133 commit 1c90c04
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 37 deletions.
34 changes: 20 additions & 14 deletions lib/src/http.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use std::{
};

use mio::{
net::{TcpListener, TcpStream},
net::{TcpListener as MioTcpListener, TcpStream},
unix::SourceFd,
Interest, Registry, Token,
};
Expand Down Expand Up @@ -389,7 +389,7 @@ pub struct HttpListener {
answers: Rc<RefCell<HttpAnswers>>,
config: HttpListenerConfig,
fronts: Router,
listener: Option<TcpListener>,
listener: Option<MioTcpListener>,
tags: BTreeMap<String, CachedTags>,
token: Token,
}
Expand Down Expand Up @@ -535,7 +535,7 @@ impl HttpProxy {
pub fn activate_listener(
&self,
addr: &SocketAddr,
tcp_listener: Option<TcpListener>,
tcp_listener: Option<MioTcpListener>,
) -> Result<Token, ProxyError> {
let listener = self
.listeners
Expand All @@ -552,7 +552,7 @@ impl HttpProxy {
})
}

pub fn give_back_listeners(&mut self) -> Vec<(SocketAddr, TcpListener)> {
pub fn give_back_listeners(&mut self) -> Vec<(SocketAddr, MioTcpListener)> {
self.listeners
.iter()
.filter_map(|(_, listener)| {
Expand All @@ -566,18 +566,24 @@ impl HttpProxy {
.collect()
}

pub fn give_back_listener(&mut self, address: SocketAddr) -> Option<(Token, TcpListener)> {
self.listeners
pub fn give_back_listener(
&mut self,
address: SocketAddr,
) -> Result<(Token, MioTcpListener), ProxyError> {
let listener = self
.listeners
.values()
.find(|listener| listener.borrow().address == address)
.and_then(|listener| {
let mut owned = listener.borrow_mut();
.ok_or(ProxyError::NoListenerFound(address.clone()))?;

owned
.listener
.take()
.map(|listener| (owned.token, listener))
})
let mut owned = listener.borrow_mut();

let taken_listener = owned
.listener
.take()
.ok_or(ProxyError::UnactivatedListener)?;

Ok((owned.token, taken_listener))
}

pub fn add_cluster(&mut self, cluster: Cluster) -> Result<(), ProxyError> {
Expand Down Expand Up @@ -732,7 +738,7 @@ impl HttpListener {
pub fn activate(
&mut self,
registry: &Registry,
tcp_listener: Option<TcpListener>,
tcp_listener: Option<MioTcpListener>,
) -> Result<Token, ListenerError> {
if self.active {
return Ok(self.token);
Expand Down
22 changes: 12 additions & 10 deletions lib/src/https.rs
Original file line number Diff line number Diff line change
Expand Up @@ -985,22 +985,24 @@ impl HttpsProxy {
.collect()
}

// TODO: return <Result, ProxyError>
pub fn give_back_listener(
&mut self,
address: StdSocketAddr,
) -> Option<(Token, MioTcpListener)> {
self.listeners
) -> Result<(Token, MioTcpListener), ProxyError> {
let listener = self
.listeners
.values()
.find(|listener| listener.borrow().address == address)
.and_then(|listener| {
let mut owned = listener.borrow_mut();
.ok_or(ProxyError::NoListenerFound(address.clone()))?;

owned
.listener
.take()
.map(|listener| (owned.token, listener))
})
let mut owned = listener.borrow_mut();

let taken_listener = owned
.listener
.take()
.ok_or(ProxyError::UnactivatedListener)?;

Ok((owned.token, taken_listener))
}

pub fn add_cluster(
Expand Down
25 changes: 12 additions & 13 deletions lib/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1261,11 +1261,13 @@ impl Server {
Ok(ListenerType::Http) => {
let (token, mut listener) = match self.http.borrow_mut().give_back_listener(address)
{
Some((token, listener)) => (token, listener),
None => {
Ok((token, listener)) => (token, listener),
Err(e) => {
return worker_response_error(
req_id,
format!("Couldn't deactivate HTTP listener at address {address:?}"),
format!(
"Couldn't deactivate HTTP listener at address {address:?}: {e}"
),
)
}
};
Expand Down Expand Up @@ -1304,16 +1306,13 @@ impl Server {
Ok(ListenerType::Https) => {
let (token, mut listener) =
match self.https.borrow_mut().give_back_listener(address) {
Some((token, listener)) => (token, listener),
None => {
return worker_response_error(
req_id,
format!(
"Couldn't deactivate HTTPS listener at address {:?}",
address
),
)
}
Ok((token, listener)) => (token, listener),
Err(e) => return worker_response_error(
req_id,
format!(
"Couldn't deactivate HTTPS listener at address {address:?}: {e}",
),
),
};
if let Err(e) = self.poll.registry().deregister(&mut listener) {
error!(
Expand Down

0 comments on commit 1c90c04

Please sign in to comment.