client: add support for proxies

by storing the proxy url as string in the struct and setting it on
each invocation of `execute`, since execute calls reset on the
curl::easy::Easy object.

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
Stoiko Ivanov 2021-11-09 16:54:16 +00:00 committed by Wolfgang Bumiller
parent cb89d97df1
commit ba2da9d125

View File

@ -91,6 +91,7 @@ impl Headers {
struct Inner {
easy: easy::Easy,
nonce: Option<String>,
proxy: Option<String>,
}
impl Inner {
@ -98,6 +99,7 @@ impl Inner {
Self {
easy: easy::Easy::new(),
nonce: None,
proxy: None,
}
}
@ -120,6 +122,10 @@ impl Inner {
self.easy.url(url)?;
if let Some(p) = &self.proxy {
self.easy.proxy(&p)?;
}
{
let mut transfer = self.easy.transfer();
@ -156,6 +162,10 @@ impl Inner {
})
}
pub fn set_proxy(&mut self, proxy: String) {
self.proxy = Some(proxy);
}
/// Low-level API to run an n API request. This automatically updates the current nonce!
fn run_request(&mut self, request: Request) -> Result<HttpResponse, Error> {
self.easy.reset();
@ -586,6 +596,11 @@ impl Client {
}
}
}
/// Set a proxy
pub fn set_proxy(&mut self, proxy: String) {
self.inner.set_proxy(proxy)
}
}
fn parse_header(data: &[u8]) -> Option<(&str, &str)> {