1use std::net::TcpListener;
10use std::sync::Arc;
11
12pub use lonca_net::{bind, is_private, peer_cwd};
13
14use crate::service::Service;
15
16impl lonca_net::Gate for Service {
17 fn decide(&self, request: &lonca_net::Request<'_>) -> lonca_net::Verdict {
18 let verdict = self.proxy_connect(
19 peer_cwd(request.peer, request.local).as_deref(),
20 request.host,
21 request.port,
22 request.peer,
23 );
24 lonca_net::Verdict {
25 allow: verdict.allow,
26 allow_private: verdict.allow_private,
27 reason: verdict.reason,
28 }
29 }
30
31 fn finished(&self, request: &lonca_net::Request<'_>, _outcome: lonca_net::Outcome) {
32 self.proxy_finished(request.peer);
33 }
34
35 fn carried(&self, request: &lonca_net::Request<'_>, bytes: u64) -> bool {
36 self.proxy_carried(request.peer, bytes)
37 }
38}
39
40pub fn serve(listener: TcpListener, svc: Arc<Service>) {
41 lonca_net::serve(listener, svc);
42}