diff options
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 13 | ||||
| -rw-r--r-- | mullvad-management-interface/proto/management_interface.proto | 53 | ||||
| -rw-r--r-- | mullvad-management-interface/src/types.rs | 57 |
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 { |
