#[non_exhaustive]pub enum Error {
Show 16 variants
InvalidProxyServer {
input: String,
reason: String,
},
InvalidBypassPattern {
input: String,
reason: String,
},
InvalidProxyUrl {
input: String,
source: ParseError,
},
UnsupportedProxyScheme(String),
CgiHttpProxy {
variable: String,
},
Io {
context: String,
source: Error,
},
Sandboxed {
sandbox: String,
reason: String,
},
Unsupported,
PacNotSupported {
mode: &'static str,
},
ProxyEntryUnusable {
scheme: Scheme,
rejected: RejectedValue,
},
PacFetchRequired {
url: Url,
},
PacEvaluation {
reason: String,
},
PacTimeout {
timeout: Duration,
},
PacSaturated {
timeout: Duration,
limit: usize,
},
PacInvalidResult {
result: String,
},
PacEngineUnavailable,
}Expand description
Errors from reading OS proxy configuration, and from routing a URL through what was read.
#[non_exhaustive]. No #[from] io::Error: I/O is always wrapped with context.
Hand-written Debug: PacFetchRequired’s url::Url
would print credentials; other payloads are masked at construction or safe.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
InvalidProxyServer
A Windows ProxyServer style specification could not be parsed.
Fields
InvalidBypassPattern
A single bypass / no_proxy / ProxyOverride entry could not be parsed.
Fields
input: StringOffending entry, masked like InvalidProxyServer’s.
InvalidProxyUrl
An AutoConfigURL-style setting read from the OS is malformed.
Not the environment: *_proxy values go through
ProxyEndpoint::parse, which answers with
InvalidProxyServer instead.
Fields
input: StringOffending input, masked like InvalidProxyServer’s.
source: ParseErrorUnderlying parse error.
UnsupportedProxyScheme(String)
The proxy URL carried a scheme this crate does not understand.
Recognised schemes are listed on ProxyScheme.
CgiHttpProxy
http_proxy under CGI: a non-empty REQUEST_METHOD ⇒ forged Proxy: header
(httpoxy, CVE-2016-5385). Refused like Go’s httpproxy; not applied to
https_proxy/no_proxy, whose names no request header can produce.
KDE’s ProxyType = 4 raises the same error on a wider rule, because there the
file names the variable each slot reads: any name a request header could have set
(RFC 3875 §4.1.18’s HTTP_ prefix) is refused whichever slot named it, including
the one holding the bypass list. variable is that name as written.
Io
An I/O failure, annotated with the operation that caused it.
OS error codes are carried as std::io::Error, built by from_raw_os_error.
Fields
Sandboxed
Linux sandbox: desktop settings unreadable (Flatpak without dconf → keyfile defaults). Portal fallback when possible; else this error, not a false Direct.
Unsupported
No store to read. A target with no backend has none at all; on Linux neither desktop
store answered, which both desktop features being off guarantees and which a build
with one of them on reaches when the schema and kioslaverc are missing.
Not the answer inside a sandbox: that route is chosen before either store is
consulted and reports Sandboxed, including when the feature that
would carry the portal fallback is off.
PacNotSupported
resolve() needs PAC/WPAD evaluation (resolve_with_pac / pac feature).
An error, not silent Direct.
resolve_with_pac answers with it too, for
WpadAutoDetect handed no script body: this
crate runs no discovery itself, so the fix there is to supply the script, or to hand
discovery to the OS through WinHttpPacResolver / CfNetworkPacResolver built
with_wpad(true), which answer WpadAutoDetect with this error until they are.
mode is "wpad" in every case and does not tell them apart.
ProxyEntryUnusable
The system configured a proxy for this scheme, the value could not be used, and no other entry covers it.
Returning ProxyStep::Direct here would assert something the platform does not do:
KDE expands a [$e] value from the session environment and proxies the request, and
this crate does not expand it. Only a scheme with no catch-all reaches this; a live
socksProxy covers the drop first, as Chromium’s fallback_proxies does. Where
this reports, Chromium goes direct instead: its ProxyList::AddProxyChain drops a
malformed entry with “Silently discard malformed inputs”, leaving
MapUrlSchemeToProxyList to answer nullptr.
Fields
scheme: SchemeWhich requests lost an answer, read off the drop’s own attribution. In every
mode this crate builds, the attribution and the slot are the same value because
each backend files its record against the slot it dropped, so the slot decides
coverage rather than the request’s own scheme. A lost catch-all reports
Scheme::All whatever was asked for, and a ws/wss request reports
whichever of the chain it lost. A caller who hands
ProxyMode::manual a record attributed to one
scheme under the key of another gets the attribution back: nothing normalises a
caller-built mismatch, and the same value is what
ProxyMode::rejected hands back.
rejected: RejectedValueFirst drop naming that scheme; masked at construction. The rest stay reachable
through ProxyMode::rejected on the mode this
error was resolved against, which is the caller’s own config.effective
wherever the caller supplied it. This field survives when a resolver builds a
mode of its own that goes out of scope with the call: WinHttpPacResolver
answers a WPAD miss by re-reading the registry into a Manual, while the caller
still holds WpadAutoDetect, which has no list.
PacFetchRequired
resolve_with_pac + ProxyMode::Pac without script body.
Fetch is caller’s job; url stored verbatim, masked only in {}/{:?}.
PacEvaluation
PAC run failed (syntax, throw, limits). reason masked/sanitized at construction.
PacTimeout
Evaluating a PAC script overran PacPolicy::timeout.
PacSaturated
Every PAC evaluation slot stayed taken for the whole of PacPolicy::timeout, so the
script never started. The PAC engines together run at most limit evaluation threads
per process, and a thread holds its slot until its script ends, past the timeout that
abandoned it. pac-quickjs interrupts a script at the deadline, and holds a slot past
it only while a host function such as dnsResolve has yet to return.
Fields
PacInvalidResult
FindProxyForURL returned nothing usable (malformed candidates skipped first).
result masked at construction.
pac on but no engine (pac-quickjs or a custom pac::PacEvaluator).
Trait Implementations§
Source§impl Error for Error
impl Error for Error
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()