xref: /aosp_15_r20/tools/netsim/rust/http-proxy/src/lib.rs (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
1*cf78ab8cSAndroid Build Coastguard Worker // Copyright 2024 Google LLC
2*cf78ab8cSAndroid Build Coastguard Worker //
3*cf78ab8cSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*cf78ab8cSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*cf78ab8cSAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*cf78ab8cSAndroid Build Coastguard Worker //
7*cf78ab8cSAndroid Build Coastguard Worker //     https://www.apache.org/licenses/LICENSE-2.0
8*cf78ab8cSAndroid Build Coastguard Worker //
9*cf78ab8cSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*cf78ab8cSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*cf78ab8cSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*cf78ab8cSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*cf78ab8cSAndroid Build Coastguard Worker // limitations under the License.
14*cf78ab8cSAndroid Build Coastguard Worker 
15*cf78ab8cSAndroid Build Coastguard Worker //! # HTTP Proxy
16*cf78ab8cSAndroid Build Coastguard Worker //!
17*cf78ab8cSAndroid Build Coastguard Worker //! This crate provides a TCP proxy client that can be used to
18*cf78ab8cSAndroid Build Coastguard Worker //! establish connections to a target address through an HTTP proxy
19*cf78ab8cSAndroid Build Coastguard Worker //! server.
20*cf78ab8cSAndroid Build Coastguard Worker //!
21*cf78ab8cSAndroid Build Coastguard Worker //! The main component of this crate is the `Connector` struct, which
22*cf78ab8cSAndroid Build Coastguard Worker //! handles the CONNECT request handshake with the proxy, including
23*cf78ab8cSAndroid Build Coastguard Worker //! optional Basic authentication.
24*cf78ab8cSAndroid Build Coastguard Worker //!
25*cf78ab8cSAndroid Build Coastguard Worker //! The crate also includes a `Manager` struct that implements the
26*cf78ab8cSAndroid Build Coastguard Worker //! `ProxyManager` trait from `libslirp_rs`, allowing it to be used
27*cf78ab8cSAndroid Build Coastguard Worker //! with the `libslirp` library for managing TCP connections through
28*cf78ab8cSAndroid Build Coastguard Worker //! the proxy.
29*cf78ab8cSAndroid Build Coastguard Worker //!
30*cf78ab8cSAndroid Build Coastguard Worker //! ## Example
31*cf78ab8cSAndroid Build Coastguard Worker //!
32*cf78ab8cSAndroid Build Coastguard Worker //! ```
33*cf78ab8cSAndroid Build Coastguard Worker //! use std::net::SocketAddr;
34*cf78ab8cSAndroid Build Coastguard Worker //!
35*cf78ab8cSAndroid Build Coastguard Worker //! #[tokio::main]
36*cf78ab8cSAndroid Build Coastguard Worker //! async fn main() {
37*cf78ab8cSAndroid Build Coastguard Worker //!     let proxy_addr: SocketAddr = "127.0.0.1:8080".parse().unwrap();
38*cf78ab8cSAndroid Build Coastguard Worker //!
39*cf78ab8cSAndroid Build Coastguard Worker //!     let connector = http_proxy::Connector::new(proxy_addr, None, None);
40*cf78ab8cSAndroid Build Coastguard Worker //! }
41*cf78ab8cSAndroid Build Coastguard Worker //! ```
42*cf78ab8cSAndroid Build Coastguard Worker //!
43*cf78ab8cSAndroid Build Coastguard Worker //! ## Features
44*cf78ab8cSAndroid Build Coastguard Worker //!
45*cf78ab8cSAndroid Build Coastguard Worker //! * **libslirp:** Enables integration with the `libslirp` library.
46*cf78ab8cSAndroid Build Coastguard Worker //!
47*cf78ab8cSAndroid Build Coastguard Worker //! ## Limitations
48*cf78ab8cSAndroid Build Coastguard Worker //!
49*cf78ab8cSAndroid Build Coastguard Worker //! * Currently only supports HTTP proxies.
50*cf78ab8cSAndroid Build Coastguard Worker //! * Usernames and passwords cannot contain `@` or `:`.
51*cf78ab8cSAndroid Build Coastguard Worker 
52*cf78ab8cSAndroid Build Coastguard Worker mod connector;
53*cf78ab8cSAndroid Build Coastguard Worker mod dns;
54*cf78ab8cSAndroid Build Coastguard Worker mod dns_manager;
55*cf78ab8cSAndroid Build Coastguard Worker mod error;
56*cf78ab8cSAndroid Build Coastguard Worker mod manager;
57*cf78ab8cSAndroid Build Coastguard Worker mod pattern_vec;
58*cf78ab8cSAndroid Build Coastguard Worker mod rewriter;
59*cf78ab8cSAndroid Build Coastguard Worker mod util;
60*cf78ab8cSAndroid Build Coastguard Worker 
61*cf78ab8cSAndroid Build Coastguard Worker pub use connector::*;
62*cf78ab8cSAndroid Build Coastguard Worker pub use dns_manager::*;
63*cf78ab8cSAndroid Build Coastguard Worker pub use error::Error;
64*cf78ab8cSAndroid Build Coastguard Worker pub use manager::*;
65