Files
amnezia-client/client/containers/containers_defs.cpp
T

191 lines
6.5 KiB
C++
Raw Normal View History

2021-09-09 20:15:44 +03:00
#include "containers_defs.h"
QDebug operator<<(QDebug debug, const amnezia::DockerContainer &c)
{
QDebugStateSaver saver(debug);
2021-09-20 21:51:28 +03:00
debug.nospace() << ContainerProps::containerToString(c);
2021-09-09 20:15:44 +03:00
return debug;
}
2021-09-20 21:51:28 +03:00
amnezia::DockerContainer ContainerProps::containerFromString(const QString &container){
QMetaEnum metaEnum = QMetaEnum::fromType<DockerContainer>();
for (int i = 0; i < metaEnum.keyCount(); ++i) {
DockerContainer c = static_cast<DockerContainer>(i);
if (container == containerToString(c)) return c;
}
2021-09-09 20:15:44 +03:00
return DockerContainer::None;
}
2021-09-20 21:51:28 +03:00
QString ContainerProps::containerToString(amnezia::DockerContainer c){
if (c == DockerContainer::None) return "none";
2021-09-28 02:36:38 +03:00
if (c == DockerContainer::Cloak) return "amnezia-openvpn-cloak";
2021-09-20 21:51:28 +03:00
QMetaEnum metaEnum = QMetaEnum::fromType<DockerContainer>();
QString containerKey = metaEnum.valueToKey(static_cast<int>(c));
2021-09-28 02:36:38 +03:00
2021-09-20 21:51:28 +03:00
return "amnezia-" + containerKey.toLower();
2021-09-09 20:15:44 +03:00
}
QString ContainerProps::containerTypeToString(amnezia::DockerContainer c){
if (c == DockerContainer::None) return "none";
if (c == DockerContainer::Ipsec) return "ikev2";
QMetaEnum metaEnum = QMetaEnum::fromType<DockerContainer>();
QString containerKey = metaEnum.valueToKey(static_cast<int>(c));
return containerKey.toLower();
}
QVector<amnezia::Proto> ContainerProps::protocolsForContainer(amnezia::DockerContainer container)
2021-09-09 20:15:44 +03:00
{
switch (container) {
2021-09-28 02:36:38 +03:00
case DockerContainer::None:
return { };
2021-09-09 20:15:44 +03:00
case DockerContainer::OpenVpn:
return { Proto::OpenVpn };
2021-09-09 20:15:44 +03:00
2021-09-20 21:51:28 +03:00
case DockerContainer::ShadowSocks:
return { Proto::OpenVpn, Proto::ShadowSocks };
2021-09-09 20:15:44 +03:00
2021-09-20 21:51:28 +03:00
case DockerContainer::Cloak:
return { Proto::OpenVpn, Proto::ShadowSocks, Proto::Cloak };
2021-09-09 20:15:44 +03:00
2021-10-04 19:07:49 +03:00
case DockerContainer::Ipsec:
return { Proto::Ikev2 /*, Protocol::L2tp */};
2021-10-04 19:07:49 +03:00
2021-09-24 13:14:35 +03:00
case DockerContainer::Dns:
return { };
2021-11-17 23:42:17 +03:00
case DockerContainer::Sftp:
return { Proto::Sftp};
2021-11-17 23:42:17 +03:00
2021-09-09 20:15:44 +03:00
default:
return { defaultProtocol(container) };
2021-09-09 20:15:44 +03:00
}
}
2021-09-20 21:51:28 +03:00
QList<DockerContainer> ContainerProps::allContainers()
2021-09-09 20:15:44 +03:00
{
2021-09-20 21:51:28 +03:00
QMetaEnum metaEnum = QMetaEnum::fromType<DockerContainer>();
QList<DockerContainer> all;
for (int i = 0; i < metaEnum.keyCount(); ++i) {
all.append(static_cast<DockerContainer>(i));
}
return all;
2021-09-09 20:15:44 +03:00
}
2021-09-20 21:51:28 +03:00
QMap<DockerContainer, QString> ContainerProps::containerHumanNames()
2021-09-09 20:15:44 +03:00
{
return {
{DockerContainer::None, "Not installed"},
2021-09-09 20:15:44 +03:00
{DockerContainer::OpenVpn, "OpenVPN"},
2021-09-20 21:51:28 +03:00
{DockerContainer::ShadowSocks, "OpenVpn over ShadowSocks"},
{DockerContainer::Cloak, "OpenVpn over Cloak"},
{DockerContainer::WireGuard, "WireGuard"},
2021-11-15 18:17:28 +03:00
{DockerContainer::Ipsec, QObject::tr("IPsec")},
2021-10-04 19:07:49 +03:00
2022-07-30 16:20:41 +03:00
{DockerContainer::TorWebSite, QObject::tr("Web site in Tor network")},
2021-09-20 21:51:28 +03:00
{DockerContainer::Dns, QObject::tr("DNS Service")},
2021-11-17 23:42:17 +03:00
//{DockerContainer::FileShare, QObject::tr("SMB file sharing service")},
{DockerContainer::Sftp, QObject::tr("Sftp file sharing service")}
2021-09-09 20:15:44 +03:00
};
}
2021-09-20 21:51:28 +03:00
QMap<DockerContainer, QString> ContainerProps::containerDescriptions()
2021-09-09 20:15:44 +03:00
{
return {
{DockerContainer::OpenVpn, QObject::tr("OpenVPN container")},
2021-09-20 21:51:28 +03:00
{DockerContainer::ShadowSocks, QObject::tr("Container with OpenVpn and ShadowSocks")},
{DockerContainer::Cloak, QObject::tr("Container with OpenVpn and ShadowSocks protocols "
2021-09-09 20:15:44 +03:00
"configured with traffic masking by Cloak plugin")},
2021-09-20 21:51:28 +03:00
{DockerContainer::WireGuard, QObject::tr("WireGuard container")},
2021-10-04 19:07:49 +03:00
{DockerContainer::Ipsec, QObject::tr("IPsec container")},
2022-07-30 16:20:41 +03:00
{DockerContainer::TorWebSite, QObject::tr("Web site in Tor network")},
2021-09-20 21:51:28 +03:00
{DockerContainer::Dns, QObject::tr("DNS Service")},
2021-11-17 23:42:17 +03:00
//{DockerContainer::FileShare, QObject::tr("SMB file sharing service - is Window file sharing protocol")},
{DockerContainer::Sftp, QObject::tr("Sftp file sharing service - is secure FTP service")}
2021-09-09 20:15:44 +03:00
};
}
2021-09-20 21:51:28 +03:00
amnezia::ServiceType ContainerProps::containerService(DockerContainer c)
2021-09-09 20:15:44 +03:00
{
switch (c) {
2021-09-20 21:51:28 +03:00
case DockerContainer::None : return ServiceType::None;
case DockerContainer::OpenVpn : return ServiceType::Vpn;
case DockerContainer::Cloak : return ServiceType::Vpn;
case DockerContainer::ShadowSocks : return ServiceType::Vpn;
case DockerContainer::WireGuard : return ServiceType::Vpn;
2021-10-04 19:07:49 +03:00
case DockerContainer::Ipsec : return ServiceType::Vpn;
case DockerContainer::TorWebSite : return ServiceType::Other;
2021-09-20 21:51:28 +03:00
case DockerContainer::Dns : return ServiceType::Other;
2021-11-17 23:42:17 +03:00
//case DockerContainer::FileShare : return ServiceType::Other;
2021-10-04 19:07:49 +03:00
case DockerContainer::Sftp : return ServiceType::Other;
2021-09-20 21:51:28 +03:00
default: return ServiceType::Other;
2021-09-09 20:15:44 +03:00
}
}
2021-09-20 21:51:28 +03:00
Proto ContainerProps::defaultProtocol(DockerContainer c)
2021-09-20 21:51:28 +03:00
{
2021-10-04 19:07:49 +03:00
switch (c) {
case DockerContainer::None : return Proto::Any;
case DockerContainer::OpenVpn : return Proto::OpenVpn;
case DockerContainer::Cloak : return Proto::Cloak;
case DockerContainer::ShadowSocks : return Proto::ShadowSocks;
case DockerContainer::WireGuard : return Proto::WireGuard;
case DockerContainer::Ipsec : return Proto::Ikev2;
case DockerContainer::TorWebSite : return Proto::TorWebSite;
case DockerContainer::Dns : return Proto::Dns;
2021-11-17 23:42:17 +03:00
//case DockerContainer::FileShare : return Protocol::FileShare;
case DockerContainer::Sftp : return Proto::Sftp;
default: return Proto::Any;
2021-10-04 19:07:49 +03:00
}
2021-09-20 21:51:28 +03:00
}
bool ContainerProps::isSupportedByCurrentPlatform(DockerContainer c)
2021-12-04 16:13:34 +03:00
{
#ifdef Q_OS_WINDOWS
return true;
#elif defined (Q_OS_IOS)
switch (c) {
case DockerContainer::WireGuard: return true;
case DockerContainer::OpenVpn: return true;
// case DockerContainer::ShadowSocks: return true;
2021-12-04 16:13:34 +03:00
default: return false;
}
2021-12-04 05:24:11 -08:00
#elif defined (Q_OS_MAC)
2022-01-23 15:25:53 -08:00
switch (c) {
case DockerContainer::WireGuard: return false;
case DockerContainer::Ipsec: return false;
default: return true;
}
2021-12-04 05:24:11 -08:00
2021-12-04 16:13:34 +03:00
#elif defined (Q_OS_ANDROID)
switch (c) {
case DockerContainer::WireGuard: return true;
case DockerContainer::OpenVpn: return true;
2022-04-01 10:05:58 +05:30
case DockerContainer::ShadowSocks: return true;
2021-12-04 16:13:34 +03:00
default: return false;
}
#elif defined (Q_OS_LINUX)
2022-04-14 16:41:39 -07:00
return true;
2021-12-04 16:13:34 +03:00
#else
return false;
#endif
}
QStringList ContainerProps::fixedPortsForContainer(DockerContainer c)
{
switch (c) {
case DockerContainer::Ipsec : return QStringList{"500", "4500"};
default: return {};
}
}