File indexing completed on 2024-03-24 04:02:59

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 }