summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mullvad-daemon/src/management_interface.rs13
-rw-r--r--mullvad-management-interface/proto/management_interface.proto53
-rw-r--r--mullvad-management-interface/src/types.rs57
3 files changed, 91 insertions, 32 deletions
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs
index 8ef8ac7b98..68ceed4c16 100644
--- a/mullvad-daemon/src/management_interface.rs
+++ b/mullvad-daemon/src/management_interface.rs
@@ -897,17 +897,10 @@ impl EventListener for ManagementInterfaceEventBroadcaster {
/// Sends relays to all subscribers of the management interface.
fn notify_relay_list(&self, relay_list: RelayList) {
log::debug!("Broadcasting new relay list");
- let mut new_list = types::RelayList {
- countries: Vec::new(),
- };
- new_list.countries.reserve(relay_list.countries.len());
- for country in relay_list.countries.into_iter() {
- new_list
- .countries
- .push(types::RelayListCountry::from(country));
- }
self.notify(types::DaemonEvent {
- event: Some(daemon_event::Event::RelayList(new_list)),
+ event: Some(daemon_event::Event::RelayList(types::RelayList::from(
+ relay_list,
+ ))),
})
}
diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto
index ea12c22c0f..8ec2bdf529 100644
--- a/mullvad-management-interface/proto/management_interface.proto
+++ b/mullvad-management-interface/proto/management_interface.proto
@@ -547,23 +547,49 @@ enum TransportProtocol {
TCP = 1;
}
-message ShadowsocksEndpointData {
- uint32 port = 1;
- string cipher = 2;
- string password = 3;
- TransportProtocol protocol = 4;
+message DaemonEvent {
+ oneof event {
+ TunnelState tunnel_state = 1;
+ Settings settings = 2;
+ RelayList relay_list = 3;
+ AppVersionInfo version_info = 4;
+ DeviceEvent device = 5;
+ RemoveDeviceEvent remove_device = 6;
+ }
+}
+
+message RelayList {
+ repeated RelayListCountry countries = 1;
+ OpenVpnEndpointData openvpn = 2;
+ BridgeEndpointData bridge = 3;
+ WireguardEndpointData wireguard = 4;
}
message OpenVpnEndpointData {
+ repeated OpenVpnEndpoint endpoints = 1;
+}
+
+message OpenVpnEndpoint {
uint32 port = 1;
TransportProtocol protocol = 2;
}
+message BridgeEndpointData {
+ repeated ShadowsocksEndpointData shadowsocks = 1;
+}
+
+message ShadowsocksEndpointData {
+ uint32 port = 1;
+ string cipher = 2;
+ string password = 3;
+ TransportProtocol protocol = 4;
+}
+
message WireguardEndpointData {
repeated PortRange port_ranges = 1;
string ipv4_gateway = 2;
string ipv6_gateway = 3;
- bytes public_key = 4;
+ repeated uint32 udp2tcp_ports = 4;
}
message PortRange {
@@ -571,21 +597,6 @@ message PortRange {
uint32 last = 2;
}
-message DaemonEvent {
- oneof event {
- TunnelState tunnel_state = 1;
- Settings settings = 2;
- RelayList relay_list = 3;
- AppVersionInfo version_info = 4;
- DeviceEvent device = 5;
- RemoveDeviceEvent remove_device = 6;
- }
-}
-
-message RelayList {
- repeated RelayListCountry countries = 1;
-}
-
message AccountAndDevice {
string account_token = 1;
Device device = 2;
diff --git a/mullvad-management-interface/src/types.rs b/mullvad-management-interface/src/types.rs
index ff1f632e3e..4ea8a9729e 100644
--- a/mullvad-management-interface/src/types.rs
+++ b/mullvad-management-interface/src/types.rs
@@ -696,7 +696,12 @@ impl From<&mullvad_types::settings::TunnelOptions> for TunnelOptions {
impl From<mullvad_types::relay_list::RelayList> for RelayList {
fn from(relay_list: mullvad_types::relay_list::RelayList) -> Self {
- let mut proto_list = RelayList { countries: vec![] };
+ let mut proto_list = RelayList {
+ countries: vec![],
+ openvpn: Some(OpenVpnEndpointData::from(relay_list.openvpn)),
+ bridge: Some(BridgeEndpointData::from(relay_list.bridge)),
+ wireguard: Some(WireguardEndpointData::from(relay_list.wireguard)),
+ };
proto_list.countries = relay_list
.countries
.into_iter()
@@ -706,6 +711,56 @@ impl From<mullvad_types::relay_list::RelayList> for RelayList {
}
}
+impl From<mullvad_types::relay_list::OpenVpnEndpointData> for OpenVpnEndpointData {
+ fn from(openvpn: mullvad_types::relay_list::OpenVpnEndpointData) -> Self {
+ OpenVpnEndpointData {
+ endpoints: openvpn
+ .ports
+ .into_iter()
+ .map(|endpoint| OpenVpnEndpoint {
+ port: u32::from(endpoint.port),
+ protocol: TransportProtocol::from(endpoint.protocol) as i32,
+ })
+ .collect(),
+ }
+ }
+}
+
+impl From<mullvad_types::relay_list::BridgeEndpointData> for BridgeEndpointData {
+ fn from(bridge: mullvad_types::relay_list::BridgeEndpointData) -> Self {
+ BridgeEndpointData {
+ shadowsocks: bridge
+ .shadowsocks
+ .into_iter()
+ .map(|endpoint| ShadowsocksEndpointData {
+ port: u32::from(endpoint.port),
+ cipher: endpoint.cipher,
+ password: endpoint.password,
+ protocol: TransportProtocol::from(endpoint.protocol) as i32,
+ })
+ .collect(),
+ }
+ }
+}
+
+impl From<mullvad_types::relay_list::WireguardEndpointData> for WireguardEndpointData {
+ fn from(wireguard: mullvad_types::relay_list::WireguardEndpointData) -> Self {
+ WireguardEndpointData {
+ port_ranges: wireguard
+ .port_ranges
+ .into_iter()
+ .map(|(first, last)| PortRange {
+ first: u32::from(first),
+ last: u32::from(last),
+ })
+ .collect(),
+ ipv4_gateway: wireguard.ipv4_gateway.to_string(),
+ ipv6_gateway: wireguard.ipv6_gateway.to_string(),
+ udp2tcp_ports: wireguard.udp2tcp_ports.into_iter().map(u32::from).collect(),
+ }
+ }
+}
+
impl From<mullvad_types::relay_list::RelayListCountry> for RelayListCountry {
fn from(country: mullvad_types::relay_list::RelayListCountry) -> Self {
let mut proto_country = RelayListCountry {