blob: 7397e822c4c109a5e41f2841de79b9bcaef325c7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
use {Result, ResultExt};
use serde;
use std::fs::File;
use std::io::Read;
use talpid_ipc::WsIpcClient;
pub fn call<T, O>(method: &str, args: &T) -> Result<O>
where T: serde::Serialize,
O: for<'de> serde::Deserialize<'de>
{
call_internal(method, args).chain_err(|| "Unable to call backend over RPC")
}
pub fn call_internal<T, O>(method: &str, args: &T) -> Result<O>
where T: serde::Serialize,
O: for<'de> serde::Deserialize<'de>
{
let address = read_rpc_address()?;
info!("Using RPC address {}", address);
let mut rpc_client = WsIpcClient::new(address)
.chain_err(|| "Unable to create RPC client")?;
rpc_client.call(method, args).chain_err(|| format!("Unable to call RPC method {}", method))
}
fn read_rpc_address() -> Result<String> {
let path = ::std::env::temp_dir().join(".mullvad_rpc_address");
debug!("Trying to read RPC address at {}", path.to_string_lossy());
let mut address = String::new();
if let Ok(_) = File::open(path).and_then(|mut file| file.read_to_string(&mut address)) {
return Ok(address);
}
bail!("Unable to read RPC address");
}
|