diff options
| author | Odd Stranne <odd@mullvad.net> | 2020-02-19 23:14:03 +0100 |
|---|---|---|
| committer | Odd Stranne <odd@mullvad.net> | 2020-02-20 10:59:23 +0100 |
| commit | 11eb3b408be98d7ecbdcc561075010477c465df4 (patch) | |
| tree | a86aa39d8d2d6e42dd0fb716ea7fc0d48081badb | |
| parent | 037b0cbd63b2f9162731dbad0e219e99cb0a7f2a (diff) | |
| download | mullvadvpn-11eb3b408be98d7ecbdcc561075010477c465df4.tar.xz mullvadvpn-11eb3b408be98d7ecbdcc561075010477c465df4.zip | |
De-duplicate code that sorts IP addresses
| -rw-r--r-- | windows/winfw/src/winfw/rules/dns/permitnontunnel.cpp | 27 | ||||
| -rw-r--r-- | windows/winfw/src/winfw/rules/dns/permittunnel.cpp | 27 | ||||
| -rw-r--r-- | windows/winfw/src/winfw/rules/shared.cpp | 40 | ||||
| -rw-r--r-- | windows/winfw/src/winfw/rules/shared.h | 13 | ||||
| -rw-r--r-- | windows/winfw/src/winfw/winfw.vcxproj | 2 | ||||
| -rw-r--r-- | windows/winfw/src/winfw/winfw.vcxproj.filters | 6 |
6 files changed, 65 insertions, 50 deletions
diff --git a/windows/winfw/src/winfw/rules/dns/permitnontunnel.cpp b/windows/winfw/src/winfw/rules/dns/permitnontunnel.cpp index 0af09a2d8b..729254d1f4 100644 --- a/windows/winfw/src/winfw/rules/dns/permitnontunnel.cpp +++ b/windows/winfw/src/winfw/rules/dns/permitnontunnel.cpp @@ -2,6 +2,7 @@ #include "permitnontunnel.h" #include <winfw/mullvadguids.h> #include <winfw/rules/ports.h> +#include <winfw/rules/shared.h> #include <libwfp/filterbuilder.h> #include <libwfp/conditionbuilder.h> #include <libwfp/conditions/conditionport.h> @@ -17,31 +18,7 @@ namespace rules::dns PermitNonTunnel::PermitNonTunnel(std::optional<std::wstring> tunnelInterfaceAlias, const std::vector<wfp::IpAddress> &hosts) : m_tunnelInterfaceAlias(std::move(tunnelInterfaceAlias)) { - if (hosts.empty()) - { - THROW_ERROR("Invalid argument: No hosts specified"); - } - - for (const auto &host : hosts) - { - switch (host.type()) - { - case wfp::IpAddress::Type::Ipv4: - { - m_hostsIpv4.push_back(host); - break; - } - case wfp::IpAddress::Type::Ipv6: - { - m_hostsIpv6.push_back(host); - break; - } - default: - { - THROW_ERROR("Missing case handler in switch clause"); - } - } - } + SplitAddresses(hosts, m_hostsIpv4, m_hostsIpv6); } bool PermitNonTunnel::apply(IObjectInstaller &objectInstaller) diff --git a/windows/winfw/src/winfw/rules/dns/permittunnel.cpp b/windows/winfw/src/winfw/rules/dns/permittunnel.cpp index 64211ef17f..cc1af84223 100644 --- a/windows/winfw/src/winfw/rules/dns/permittunnel.cpp +++ b/windows/winfw/src/winfw/rules/dns/permittunnel.cpp @@ -2,6 +2,7 @@ #include "permittunnel.h" #include <winfw/mullvadguids.h> #include <winfw/rules/ports.h> +#include <winfw/rules/shared.h> #include <libwfp/filterbuilder.h> #include <libwfp/conditionbuilder.h> #include <libwfp/conditions/conditionport.h> @@ -17,31 +18,7 @@ namespace rules::dns PermitTunnel::PermitTunnel(const std::wstring &tunnelInterfaceAlias, const std::vector<wfp::IpAddress> &hosts) : m_tunnelInterfaceAlias(tunnelInterfaceAlias) { - if (hosts.empty()) - { - THROW_ERROR("Invalid argument: No hosts specified"); - } - - for (const auto &host : hosts) - { - switch (host.type()) - { - case wfp::IpAddress::Type::Ipv4: - { - m_hostsIpv4.push_back(host); - break; - } - case wfp::IpAddress::Type::Ipv6: - { - m_hostsIpv6.push_back(host); - break; - } - default: - { - THROW_ERROR("Missing case handler in switch clause"); - } - } - } + SplitAddresses(hosts, m_hostsIpv4, m_hostsIpv6); } bool PermitTunnel::apply(IObjectInstaller &objectInstaller) diff --git a/windows/winfw/src/winfw/rules/shared.cpp b/windows/winfw/src/winfw/rules/shared.cpp new file mode 100644 index 0000000000..66cbbdfc83 --- /dev/null +++ b/windows/winfw/src/winfw/rules/shared.cpp @@ -0,0 +1,40 @@ +#include "stdafx.h" +#include "shared.h" +#include <libcommon/error.h> + +namespace rules +{ + +void SplitAddresses(const IpSet &in, IpSet &outIpv4, IpSet &outIpv6) +{ + if (in.empty()) + { + THROW_ERROR("Invalid argument: No hosts specified"); + } + + outIpv4.clear(); + outIpv6.clear(); + + for (const auto &host : in) + { + switch (host.type()) + { + case wfp::IpAddress::Type::Ipv4: + { + outIpv4.push_back(host); + break; + } + case wfp::IpAddress::Type::Ipv6: + { + outIpv6.push_back(host); + break; + } + default: + { + THROW_ERROR("Missing case handler in switch clause"); + } + } + } +} + +} diff --git a/windows/winfw/src/winfw/rules/shared.h b/windows/winfw/src/winfw/rules/shared.h new file mode 100644 index 0000000000..1b08d3ed02 --- /dev/null +++ b/windows/winfw/src/winfw/rules/shared.h @@ -0,0 +1,13 @@ +#pragma once + +#include <vector> +#include <libwfp/ipaddress.h> + +namespace rules +{ + +using IpSet = std::vector<wfp::IpAddress>; + +void SplitAddresses(const IpSet &in, IpSet &outIpv4, IpSet &outIpv6); + +} diff --git a/windows/winfw/src/winfw/winfw.vcxproj b/windows/winfw/src/winfw/winfw.vcxproj index c3805cfec8..c999f5aaca 100644 --- a/windows/winfw/src/winfw/winfw.vcxproj +++ b/windows/winfw/src/winfw/winfw.vcxproj @@ -38,6 +38,7 @@ <ClCompile Include="rules\dns\blockall.cpp" /> <ClCompile Include="rules\dns\permitnontunnel.cpp" /> <ClCompile Include="rules\dns\permittunnel.cpp" /> + <ClCompile Include="rules\shared.cpp" /> <ClCompile Include="sessioncontroller.cpp" /> <ClCompile Include="sessionrecord.cpp" /> <ClCompile Include="stdafx.cpp"> @@ -71,6 +72,7 @@ <ClInclude Include="rules\dns\permitnontunnel.h" /> <ClInclude Include="rules\dns\permittunnel.h" /> <ClInclude Include="rules\ports.h" /> + <ClInclude Include="rules\shared.h" /> <ClInclude Include="wfpobjecttype.h" /> <ClInclude Include="rules\ifirewallrule.h" /> <ClInclude Include="sessioncontroller.h" /> diff --git a/windows/winfw/src/winfw/winfw.vcxproj.filters b/windows/winfw/src/winfw/winfw.vcxproj.filters index 40d7c95067..46c0594c10 100644 --- a/windows/winfw/src/winfw/winfw.vcxproj.filters +++ b/windows/winfw/src/winfw/winfw.vcxproj.filters @@ -55,6 +55,9 @@ <ClCompile Include="rules\dns\permittunnel.cpp"> <Filter>rules\dns</Filter> </ClCompile> + <ClCompile Include="rules\shared.cpp"> + <Filter>rules</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="stdafx.h" /> @@ -120,6 +123,9 @@ <ClInclude Include="rules\dns\permittunnel.h"> <Filter>rules\dns</Filter> </ClInclude> + <ClInclude Include="rules\shared.h"> + <Filter>rules</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <Filter Include="rules"> |
