File indexing completed on 2025-03-23 12:49:50
0001 /* 0002 SPDX-FileCopyrightText: 2018 Aleksander Morgado <aleksander@aleksander.es> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "ipconfig.h" 0008 0009 #include <arpa/inet.h> 0010 0011 #include "dnsconfiguration.h" 0012 0013 #include <QVariant> 0014 0015 namespace NetworkManager 0016 { 0017 class NetworkManager::DnsConfiguration::Private 0018 { 0019 public: 0020 Private(const QStringList &theSearches, const QStringList &theOptions, const QList<DnsDomain> theDomains) 0021 : searches(theSearches) 0022 , options(theOptions) 0023 , domains(theDomains) 0024 { 0025 } 0026 Private() 0027 { 0028 } 0029 QStringList searches; 0030 QStringList options; 0031 QList<DnsDomain> domains; 0032 }; 0033 0034 } 0035 0036 NetworkManager::DnsConfiguration::DnsConfiguration(const QStringList &searches, const QStringList &options, const QList<DnsDomain> domains) 0037 : d(new Private(searches, options, domains)) 0038 { 0039 } 0040 0041 NetworkManager::DnsConfiguration::DnsConfiguration() 0042 : d(new Private()) 0043 { 0044 } 0045 0046 NetworkManager::DnsConfiguration::DnsConfiguration(const DnsConfiguration &other) 0047 : d(new Private) 0048 { 0049 *this = other; 0050 } 0051 0052 NetworkManager::DnsConfiguration::~DnsConfiguration() 0053 { 0054 delete d; 0055 } 0056 0057 QStringList NetworkManager::DnsConfiguration::searches() const 0058 { 0059 return d->searches; 0060 } 0061 0062 void NetworkManager::DnsConfiguration::setSearches(const QStringList &searches) 0063 { 0064 d->searches = searches; 0065 } 0066 0067 QStringList NetworkManager::DnsConfiguration::options() const 0068 { 0069 return d->options; 0070 } 0071 0072 void NetworkManager::DnsConfiguration::setOptions(const QStringList &options) 0073 { 0074 d->options = options; 0075 } 0076 0077 QList<NetworkManager::DnsDomain> NetworkManager::DnsConfiguration::domains() const 0078 { 0079 return d->domains; 0080 } 0081 0082 void NetworkManager::DnsConfiguration::setDomains(const QList<NetworkManager::DnsDomain> &domains) 0083 { 0084 d->domains = domains; 0085 } 0086 0087 QVariantMap NetworkManager::DnsConfiguration::toMap() const 0088 { 0089 QVariantMap map; 0090 0091 map["searches"] = d->searches; 0092 map["options"] = d->options; 0093 0094 QVariantMap domains; 0095 for (const NetworkManager::DnsDomain &domain : std::as_const(d->domains)) { 0096 QVariantMap contents; 0097 QStringList serversList; 0098 const QList<QHostAddress> servers = domain.servers(); 0099 for (const QHostAddress &address : servers) { 0100 serversList.append(address.toString()); 0101 } 0102 contents["servers"] = serversList; 0103 contents["options"] = domain.options(); 0104 domains[domain.name()] = contents; 0105 } 0106 map["domains"] = domains; 0107 0108 return map; 0109 } 0110 0111 void NetworkManager::DnsConfiguration::fromMap(const QVariantMap &map) 0112 { 0113 d->searches = map["searches"].toStringList(); 0114 d->options = map["options"].toStringList(); 0115 d->domains = QList<NetworkManager::DnsDomain>(); 0116 0117 QVariantMap domains = map["domains"].toMap(); 0118 QVariantMap::const_iterator i = domains.constBegin(); 0119 while (i != domains.constEnd()) { 0120 const QVariantMap contents = i.value().toMap(); 0121 QList<QHostAddress> addressList; 0122 const QStringList serversList = contents["servers"].toStringList(); 0123 for (const QString &server : serversList) { 0124 addressList.append(QHostAddress(server)); 0125 } 0126 NetworkManager::DnsDomain domain(i.key(), addressList, contents["options"].toStringList()); 0127 d->domains.append(domain); 0128 ++i; 0129 } 0130 } 0131 0132 NetworkManager::DnsConfiguration &NetworkManager::DnsConfiguration::operator=(const DnsConfiguration &other) 0133 { 0134 if (this == &other) { 0135 return *this; 0136 } 0137 0138 *d = *other.d; 0139 return *this; 0140 }