diff options
| -rw-r--r-- | Cargo.lock | 2 | ||||
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 141 | ||||
| -rw-r--r-- | mullvad-management-interface/Cargo.toml | 2 | ||||
| -rw-r--r-- | mullvad-management-interface/src/lib.rs | 6 | ||||
| -rw-r--r-- | mullvad-management-interface/src/types.rs | 87 |
5 files changed, 119 insertions, 119 deletions
diff --git a/Cargo.lock b/Cargo.lock index 66d327ae81..9d3b2f2c53 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1351,10 +1351,12 @@ dependencies = [ "futures", "lazy_static", "mullvad-paths", + "mullvad-types", "nix 0.19.1", "parity-tokio-ipc", "prost", "prost-types", + "talpid-types", "tokio", "tonic", "tonic-build", diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index 05bd38e1dc..e87c1d837d 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -31,7 +31,7 @@ use std::{ time::Duration, }; use talpid_types::{ - net::{IpVersion, TransportProtocol, TunnelType}, + net::{IpVersion, TunnelType}, ErrorExt, }; @@ -157,7 +157,7 @@ impl ManagementService for ManagementServiceImpl { self.wait_for_result(rx) .await? .ok_or(Status::not_found("no version cache")) - .map(|version_info| convert_version_info(&version_info)) + .map(types::AppVersionInfo::from) .map(Response::new) } @@ -808,7 +808,9 @@ fn convert_relay_settings_update( ConnectionConfig::OpenVpn(openvpn::ConnectionConfig { endpoint: net::Endpoint { address, - protocol: convert_proto_transport_protocol(config.protocol)?, + protocol: types::TransportProtocol::from_i32(config.protocol) + .ok_or(Status::invalid_argument("invalid transport protocol"))? + .into(), }, username: config.username.clone(), password: config.password.clone(), @@ -885,7 +887,9 @@ fn convert_relay_settings_update( public_key: wireguard::PublicKey::from(public_key), allowed_ips, endpoint, - protocol: convert_proto_transport_protocol(peer.protocol)?, + protocol: types::TransportProtocol::from_i32(peer.protocol) + .ok_or(Status::invalid_argument("invalid transport protocol"))? + .into(), }, ipv4_gateway, ipv6_gateway, @@ -926,9 +930,11 @@ fn convert_relay_settings_update( let transport_protocol = if let Some(ref constraints) = settings.openvpn_constraints { match &constraints.protocol { - Some(constraint) => { - Some(convert_proto_transport_protocol(constraint.protocol)?) - } + Some(constraint) => Some( + types::TransportProtocol::from_i32(constraint.protocol) + .ok_or(Status::invalid_argument("invalid transport protocol"))? + .into(), + ), None => None, } } else { @@ -999,7 +1005,7 @@ fn convert_relay_settings(settings: &RelaySettings) -> types::RelaySettings { RelaySettings::CustomTunnelEndpoint(endpoint) => { relay_settings::Endpoint::Custom(types::CustomRelaySettings { host: endpoint.host.clone(), - config: Some(convert_connection_config(&endpoint.config)), + config: Some(types::ConnectionConfig::from(&endpoint.config)), }) } RelaySettings::Normal(constraints) => { @@ -1037,13 +1043,8 @@ fn convert_relay_settings(settings: &RelaySettings) -> types::RelaySettings { .protocol .as_ref() .option() - .map(|protocol| match protocol { - TransportProtocol::Tcp => types::TransportProtocol::Tcp, - TransportProtocol::Udp => types::TransportProtocol::Udp, - }) - .map(|protocol| types::TransportProtocolConstraint { - protocol: i32::from(protocol), - }), + .map(|protocol| types::TransportProtocol::from(*protocol)) + .map(types::TransportProtocolConstraint::from), }), }) } @@ -1054,59 +1055,6 @@ fn convert_relay_settings(settings: &RelaySettings) -> types::RelaySettings { } } -fn convert_connection_config(config: &ConnectionConfig) -> types::ConnectionConfig { - use types::connection_config; - - types::ConnectionConfig { - config: Some(match config { - ConnectionConfig::OpenVpn(config) => { - connection_config::Config::Openvpn(connection_config::OpenvpnConfig { - address: config.endpoint.address.to_string(), - protocol: match config.endpoint.protocol { - TransportProtocol::Tcp => i32::from(types::TransportProtocol::Tcp), - TransportProtocol::Udp => i32::from(types::TransportProtocol::Udp), - }, - username: config.username.clone(), - password: config.password.clone(), - }) - } - ConnectionConfig::Wireguard(config) => { - connection_config::Config::Wireguard(connection_config::WireguardConfig { - tunnel: Some(connection_config::wireguard_config::TunnelConfig { - private_key: config.tunnel.private_key.to_bytes().to_vec(), - addresses: config - .tunnel - .addresses - .iter() - .map(|address| address.to_string()) - .collect(), - }), - peer: Some(connection_config::wireguard_config::PeerConfig { - public_key: config.peer.public_key.as_bytes().to_vec(), - allowed_ips: config - .peer - .allowed_ips - .iter() - .map(|address| address.to_string()) - .collect(), - endpoint: config.peer.endpoint.to_string(), - protocol: i32::from(match config.peer.protocol { - TransportProtocol::Udp => types::TransportProtocol::Udp, - TransportProtocol::Tcp => types::TransportProtocol::Tcp, - }), - }), - ipv4_gateway: config.ipv4_gateway.to_string(), - ipv6_gateway: config - .ipv6_gateway - .as_ref() - .map(|address| address.to_string()) - .unwrap_or_default(), - }) - } - }), - } -} - fn convert_bridge_settings(settings: &BridgeSettings) -> types::BridgeSettings { use talpid_types::net; use types::bridge_settings::{self, Type as BridgeSettingType}; @@ -1292,15 +1240,9 @@ fn convert_relay(relay: &Relay) -> types::Relay { .tunnels .openvpn .iter() - .map(|endpoint| { - let protocol = match endpoint.protocol { - TransportProtocol::Udp => types::TransportProtocol::Udp, - TransportProtocol::Tcp => types::TransportProtocol::Tcp, - }; - types::OpenVpnEndpointData { - port: u32::from(endpoint.port), - protocol: i32::from(protocol), - } + .map(|endpoint| types::OpenVpnEndpointData { + port: u32::from(endpoint.port), + protocol: i32::from(types::TransportProtocol::from(endpoint.protocol)), }) .collect(), wireguard: relay @@ -1330,17 +1272,11 @@ fn convert_relay(relay: &Relay) -> types::Relay { .bridges .shadowsocks .iter() - .map(|endpoint| { - let protocol = match endpoint.protocol { - TransportProtocol::Udp => types::TransportProtocol::Udp, - TransportProtocol::Tcp => types::TransportProtocol::Tcp, - }; - types::ShadowsocksEndpointData { - port: u32::from(endpoint.port), - cipher: endpoint.cipher.clone(), - password: endpoint.password.clone(), - protocol: i32::from(protocol), - } + .map(|endpoint| types::ShadowsocksEndpointData { + port: u32::from(endpoint.port), + cipher: endpoint.cipher.clone(), + password: endpoint.password.clone(), + protocol: i32::from(types::TransportProtocol::from(endpoint.protocol)), }) .collect(), }), @@ -1476,20 +1412,14 @@ fn convert_endpoint(endpoint: talpid_types::net::TunnelEndpoint) -> types::Tunne types::TunnelEndpoint { address: endpoint.endpoint.address.to_string(), - protocol: match endpoint.endpoint.protocol { - TransportProtocol::Tcp => i32::from(types::TransportProtocol::Tcp), - TransportProtocol::Udp => i32::from(types::TransportProtocol::Udp), - }, + protocol: i32::from(types::TransportProtocol::from(endpoint.endpoint.protocol)), tunnel_type: match endpoint.tunnel_type { net::TunnelType::Wireguard => i32::from(types::TunnelType::Wireguard), net::TunnelType::OpenVpn => i32::from(types::TunnelType::Openvpn), }, proxy: endpoint.proxy.map(|proxy_ep| types::ProxyEndpoint { address: proxy_ep.endpoint.address.to_string(), - protocol: match proxy_ep.endpoint.protocol { - TransportProtocol::Tcp => i32::from(types::TransportProtocol::Tcp), - TransportProtocol::Udp => i32::from(types::TransportProtocol::Udp), - }, + protocol: i32::from(types::TransportProtocol::from(proxy_ep.endpoint.protocol)), proxy_type: match proxy_ep.proxy_type { net::proxy::ProxyType::Shadowsocks => i32::from(types::ProxyType::Shadowsocks), net::proxy::ProxyType::Custom => i32::from(types::ProxyType::Custom), @@ -1512,15 +1442,6 @@ fn convert_geoip_location(geoip: GeoIpLocation) -> types::GeoIpLocation { } } -fn convert_version_info(version_info: &version::AppVersionInfo) -> types::AppVersionInfo { - types::AppVersionInfo { - supported: version_info.supported, - latest_stable: version_info.latest_stable.clone(), - latest_beta: version_info.latest_beta.clone(), - suggested_upgrade: version_info.suggested_upgrade.clone().unwrap_or_default(), - } -} - fn convert_proto_location(location: types::RelayLocation) -> Constraint<LocationConstraint> { if !location.hostname.is_empty() { Constraint::Only(LocationConstraint::Hostname( @@ -1537,14 +1458,6 @@ fn convert_proto_location(location: types::RelayLocation) -> Constraint<Location } } -fn convert_proto_transport_protocol(protocol: i32) -> Result<TransportProtocol, Status> { - match types::TransportProtocol::from_i32(protocol) { - Some(types::TransportProtocol::Udp) => Ok(TransportProtocol::Udp), - Some(types::TransportProtocol::Tcp) => Ok(TransportProtocol::Tcp), - None => Err(Status::invalid_argument("invalid transport protocol")), - } -} - pub struct ManagementInterfaceServer { subscriptions: Arc<RwLock<Vec<EventsListenerSender>>>, socket_path: String, @@ -1652,7 +1565,7 @@ impl EventListener for ManagementInterfaceEventBroadcaster { fn notify_app_version(&self, app_version_info: version::AppVersionInfo) { log::debug!("Broadcasting new app version info"); - let new_info = convert_version_info(&app_version_info); + let new_info = types::AppVersionInfo::from(app_version_info); self.notify(types::DaemonEvent { event: Some(daemon_event::Event::VersionInfo(new_info)), }) diff --git a/mullvad-management-interface/Cargo.toml b/mullvad-management-interface/Cargo.toml index cb28f4b9ed..6b4cce66ac 100644 --- a/mullvad-management-interface/Cargo.toml +++ b/mullvad-management-interface/Cargo.toml @@ -9,7 +9,9 @@ publish = false [dependencies] err-derive = "0.3.0" +mullvad-types = { path = "../mullvad-types" } mullvad-paths = { path = "../mullvad-paths" } +talpid-types = { path = "../talpid-types" } tonic = "0.3.1" tower = "0.3" prost = "0.6" diff --git a/mullvad-management-interface/src/lib.rs b/mullvad-management-interface/src/lib.rs index abf4282923..cc4c266af7 100644 --- a/mullvad-management-interface/src/lib.rs +++ b/mullvad-management-interface/src/lib.rs @@ -1,8 +1,4 @@ -pub mod types { - tonic::include_proto!("mullvad_daemon.management_interface"); - - pub use prost_types::{Duration, Timestamp}; -} +pub mod types; use parity_tokio_ipc::Endpoint as IpcEndpoint; #[cfg(unix)] diff --git a/mullvad-management-interface/src/types.rs b/mullvad-management-interface/src/types.rs new file mode 100644 index 0000000000..fd1d04adb1 --- /dev/null +++ b/mullvad-management-interface/src/types.rs @@ -0,0 +1,87 @@ +pub use prost_types::{Duration, Timestamp}; + +tonic::include_proto!("mullvad_daemon.management_interface"); + +impl From<mullvad_types::version::AppVersionInfo> for AppVersionInfo { + fn from(version_info: mullvad_types::version::AppVersionInfo) -> Self { + Self { + supported: version_info.supported, + latest_stable: version_info.latest_stable, + latest_beta: version_info.latest_beta, + suggested_upgrade: version_info.suggested_upgrade.unwrap_or_default(), + } + } +} + +impl From<&mullvad_types::ConnectionConfig> for ConnectionConfig { + fn from(config: &mullvad_types::ConnectionConfig) -> Self { + Self { + config: Some(match config { + mullvad_types::ConnectionConfig::OpenVpn(config) => { + connection_config::Config::Openvpn(connection_config::OpenvpnConfig { + address: config.endpoint.address.to_string(), + protocol: i32::from(TransportProtocol::from(config.endpoint.protocol)), + username: config.username.clone(), + password: config.password.clone(), + }) + } + mullvad_types::ConnectionConfig::Wireguard(config) => { + connection_config::Config::Wireguard(connection_config::WireguardConfig { + tunnel: Some(connection_config::wireguard_config::TunnelConfig { + private_key: config.tunnel.private_key.to_bytes().to_vec(), + addresses: config + .tunnel + .addresses + .iter() + .map(|address| address.to_string()) + .collect(), + }), + peer: Some(connection_config::wireguard_config::PeerConfig { + public_key: config.peer.public_key.as_bytes().to_vec(), + allowed_ips: config + .peer + .allowed_ips + .iter() + .map(|address| address.to_string()) + .collect(), + endpoint: config.peer.endpoint.to_string(), + protocol: i32::from(TransportProtocol::from(config.peer.protocol)), + }), + ipv4_gateway: config.ipv4_gateway.to_string(), + ipv6_gateway: config + .ipv6_gateway + .as_ref() + .map(|address| address.to_string()) + .unwrap_or_default(), + }) + } + }), + } + } +} + +impl From<talpid_types::net::TransportProtocol> for TransportProtocol { + fn from(protocol: talpid_types::net::TransportProtocol) -> Self { + match protocol { + talpid_types::net::TransportProtocol::Udp => TransportProtocol::Udp, + talpid_types::net::TransportProtocol::Tcp => TransportProtocol::Tcp, + } + } +} + +impl From<TransportProtocol> for TransportProtocolConstraint { + fn from(protocol: TransportProtocol) -> Self { + Self { + protocol: i32::from(protocol), + } + } +} + +impl From<TransportProtocol> for talpid_types::net::TransportProtocol { + fn from(protocol: TransportProtocol) -> Self { + match protocol { + TransportProtocol::Udp => talpid_types::net::TransportProtocol::Udp, + TransportProtocol::Tcp => talpid_types::net::TransportProtocol::Tcp, + } + } +} |
