summaryrefslogtreecommitdiffhomepage
path: root/talpid-ipc/src
diff options
context:
space:
mode:
authorEmīls Piņķis <emils@mullvad.net>2018-08-27 14:59:56 +0100
committerEmīls Piņķis <emils@mullvad.net>2018-08-29 16:27:53 +0100
commitbc856deb0d0556ea938b75fa47ff6afa303922c4 (patch)
tree9f8ade7f99b9f6b93e0c01d17360d9e4c3a243bb /talpid-ipc/src
parent2acc24cc10e25b8d413316a518e8f36083d890cc (diff)
downloadmullvadvpn-bc856deb0d0556ea938b75fa47ff6afa303922c4.tar.xz
mullvadvpn-bc856deb0d0556ea938b75fa47ff6afa303922c4.zip
Use IPC instead of websockets in talpid-ipc
Diffstat (limited to 'talpid-ipc/src')
-rw-r--r--talpid-ipc/src/lib.rs39
1 files changed, 24 insertions, 15 deletions
diff --git a/talpid-ipc/src/lib.rs b/talpid-ipc/src/lib.rs
index d775dfbcaa..6104a59848 100644
--- a/talpid-ipc/src/lib.rs
+++ b/talpid-ipc/src/lib.rs
@@ -10,28 +10,22 @@
#[macro_use]
extern crate error_chain;
-#[macro_use]
-extern crate log;
extern crate serde;
-#[macro_use]
extern crate serde_json;
extern crate jsonrpc_core;
extern crate jsonrpc_ipc_server;
extern crate jsonrpc_pubsub;
-#[macro_use]
+
extern crate jsonrpc_client_core;
extern crate jsonrpc_client_ipc;
-extern crate tokio_core;
-extern crate url;
-extern crate ws;
use jsonrpc_core::{MetaIoHandler, Metadata};
-use jsonrpc_ipc_server::{MetaExtractor, NoopExtractor, Server, ServerBuilder};
+use jsonrpc_ipc_server::{MetaExtractor, NoopExtractor, SecurityAttributes, Server, ServerBuilder};
-use std::fmt;
+use std::fmt;
/// An Id created by the Ipc server that the client can use to connect to it
pub type IpcServerId = String;
@@ -41,6 +35,10 @@ error_chain!{
IpcServerError {
description("Error in IPC server")
}
+
+ PermissionsError {
+ description("Unable to set permissions for IPC endpoint")
+ }
}
}
@@ -64,13 +62,25 @@ impl IpcServer {
M: Metadata + Default,
E: MetaExtractor<M>,
{
- ServerBuilder::new(handler)
- .session_meta_extractor(meta_extractor)
+ let security_attributes = SecurityAttributes::allow_everyone_create()
+ .chain_err(|| ErrorKind::PermissionsError)?;
+ let server = ServerBuilder::with_meta_extractor(handler, meta_extractor)
+ .set_security_attributes(security_attributes)
.start(&path)
+ .chain_err(|| ErrorKind::IpcServerError)
.map(|server| IpcServer {
path: path.to_owned(),
- server: server,
- }).chain_err(|| ErrorKind::IpcServerError)
+ server,
+ })?;
+
+ #[cfg(unix)]
+ {
+ use std::fs;
+ use std::os::unix::fs::PermissionsExt;
+ fs::set_permissions(&path, PermissionsExt::from_mode(0o766))
+ .chain_err(|| ErrorKind::PermissionsError)?;
+ }
+ Ok(server)
}
/// Returns the uds/named pipe path this `IpcServer` is listening on.
@@ -86,7 +96,7 @@ impl IpcServer {
/// Consumes the server and waits for it to finish. Get a `CloseHandle` before calling this
/// if you want to be able to shut the server down.
pub fn wait(self) {
- self.server.wait()
+ self.server.wait();
}
}
@@ -100,7 +110,6 @@ impl fmt::Debug for IpcServer {
}
}
-
#[derive(Clone)]
pub struct CloseHandle(jsonrpc_ipc_server::CloseHandle);