http: provide proxy on node client creation (#738)

This commit is contained in:
ardocrat
2025-06-18 16:01:06 +01:00
committed by GitHub
parent b1ffe86a55
commit 930a44d456
3 changed files with 28 additions and 12 deletions
+2 -1
View File
@@ -200,9 +200,10 @@ impl HttpSlateSender {
let client = if !self.use_socks {
Client::new()
} else {
Client::with_socks_proxy(
Client::with_proxy(
self.socks_proxy_addr
.ok_or_else(|| ClientError::Internal("No socks proxy address set".into()))?,
"socks5h://",
)
}
.map_err(|_| ClientError::Internal("Unable to create http client".into()))?;
+6 -5
View File
@@ -65,11 +65,11 @@ impl Client {
Self::build(None)
}
pub fn with_socks_proxy(socks_proxy_addr: SocketAddr) -> Result<Self, Error> {
Self::build(Some(socks_proxy_addr))
pub fn with_proxy(socks_proxy_addr: SocketAddr, scheme: &'static str) -> Result<Self, Error> {
Self::build(Some((socks_proxy_addr, scheme)))
}
fn build(socks_proxy_addr: Option<SocketAddr>) -> Result<Self, Error> {
fn build(proxy: Option<(SocketAddr, &str)>) -> Result<Self, Error> {
let mut headers = HeaderMap::new();
headers.insert(USER_AGENT, HeaderValue::from_static("grin-client"));
headers.insert(ACCEPT, HeaderValue::from_static("application/json"));
@@ -80,8 +80,9 @@ impl Client {
.use_rustls_tls()
.default_headers(headers);
if let Some(s) = socks_proxy_addr {
let proxy = Proxy::all(&format!("socks5h://{}:{}", s.ip(), s.port()))
if let Some(p) = proxy {
let (addr, scheme) = p;
let proxy = Proxy::all(&format!("{}{}:{}", scheme, addr.ip(), addr.port()))
.map_err(|e| Error::Internal(format!("Unable to create proxy: {}", e)))?;
builder = builder.proxy(proxy);
}
+20 -6
View File
@@ -15,17 +15,17 @@
//! Client functions, implementations of the NodeClient trait
use crate::api::{self, LocatedTxKernel, OutputListing, OutputPrintable};
use crate::client_utils::{Client, RUNTIME};
use crate::core::core::{Transaction, TxKernel};
use crate::libwallet;
use crate::libwallet::{NodeClient, NodeVersionInfo};
use crate::util::secp::pedersen;
use crate::util::ToHex;
use futures::stream::FuturesUnordered;
use futures::TryStreamExt;
use std::collections::HashMap;
use std::env;
use crate::client_utils::{Client, RUNTIME};
use crate::libwallet;
use crate::util::secp::pedersen;
use crate::util::ToHex;
use std::net::SocketAddr;
use super::resp_types::*;
use crate::client_utils::json_rpc::*;
@@ -46,8 +46,22 @@ impl HTTPNodeClient {
node_url: &str,
node_api_secret: Option<String>,
) -> Result<HTTPNodeClient, libwallet::Error> {
Self::new_proxy(node_url, node_api_secret, None)
}
/// Create a new client with proxy
pub fn new_proxy(
node_url: &str,
node_api_secret: Option<String>,
proxy: Option<(SocketAddr, &'static str)>,
) -> Result<HTTPNodeClient, libwallet::Error> {
let client = if let Some((a, s)) = proxy {
Client::with_proxy(a, s)
} else {
Client::new()
};
Ok(HTTPNodeClient {
client: Client::new().map_err(|_| libwallet::Error::Node)?,
client: client.map_err(|_| libwallet::Error::Node)?,
node_url: node_url.to_owned(),
node_api_secret: node_api_secret,
node_version_info: None,