File indexing completed on 2024-04-28 15:33:15

0001 /*
0002     SPDX-FileCopyrightText: Pranav Gade <pranavgade20@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "tcsetting.h"
0008 #include "tcsetting_p.h"
0009 
0010 #include <QDebug>
0011 
0012 #if !NM_CHECK_VERSION(1, 10, 0)
0013 #define NM_SETTING_TC_CONFIG_SETTING_NAME "tc"
0014 
0015 #define NM_SETTING_TC_CONFIG_QDISCS "qdiscs"
0016 #define NM_SETTING_TC_CONFIG_TFILTERS "tfilters"
0017 #endif
0018 
0019 NetworkManager::TcSettingPrivate::TcSettingPrivate()
0020     : name(NM_SETTING_TC_CONFIG_SETTING_NAME)
0021 {
0022 }
0023 
0024 NetworkManager::TcSetting::TcSetting()
0025     : Setting(Setting::Tc)
0026     , d_ptr(new TcSettingPrivate())
0027 {
0028 }
0029 
0030 NetworkManager::TcSetting::TcSetting(const Ptr &other)
0031     : Setting(other)
0032     , d_ptr(new TcSettingPrivate())
0033 {
0034     setQdiscs(other->qdiscs());
0035     setTfilters(other->tfilters());
0036 }
0037 
0038 NetworkManager::TcSetting::~TcSetting()
0039 {
0040     delete d_ptr;
0041 }
0042 
0043 QString NetworkManager::TcSetting::name() const
0044 {
0045     Q_D(const TcSetting);
0046 
0047     return d->name;
0048 }
0049 
0050 void NetworkManager::TcSetting::setQdiscs(const NMVariantMapList &qdiscs)
0051 {
0052     Q_D(TcSetting);
0053 
0054     d->qdiscs = qdiscs;
0055 }
0056 
0057 NMVariantMapList NetworkManager::TcSetting::qdiscs() const
0058 {
0059     Q_D(const TcSetting);
0060 
0061     return d->qdiscs;
0062 }
0063 
0064 void NetworkManager::TcSetting::setTfilters(const NMVariantMapList &tfilters)
0065 {
0066     Q_D(TcSetting);
0067 
0068     d->tfilters = tfilters;
0069 }
0070 
0071 NMVariantMapList NetworkManager::TcSetting::tfilters() const
0072 {
0073     Q_D(const TcSetting);
0074 
0075     return d->tfilters;
0076 }
0077 
0078 void NetworkManager::TcSetting::fromMap(const QVariantMap &setting)
0079 {
0080     if (setting.contains(QLatin1String(NM_SETTING_TC_CONFIG_QDISCS))) {
0081         setQdiscs(qdbus_cast<NMVariantMapList>(setting.value(QLatin1String(NM_SETTING_TC_CONFIG_QDISCS))));
0082     }
0083 
0084     if (setting.contains(QLatin1String(NM_SETTING_TC_CONFIG_TFILTERS))) {
0085         setTfilters(qdbus_cast<NMVariantMapList>(setting.value(QLatin1String(NM_SETTING_TC_CONFIG_TFILTERS))));
0086     }
0087 }
0088 
0089 QVariantMap NetworkManager::TcSetting::toMap() const
0090 {
0091     QVariantMap setting;
0092 
0093     if (!qdiscs().empty()) {
0094         setting.insert(QLatin1String(NM_SETTING_TC_CONFIG_QDISCS), QVariant::fromValue(qdiscs()));
0095     }
0096 
0097     if (!tfilters().empty()) {
0098         setting.insert(QLatin1String(NM_SETTING_TC_CONFIG_TFILTERS), QVariant::fromValue(tfilters()));
0099     }
0100 
0101     return setting;
0102 }
0103 
0104 QDebug NetworkManager::operator<<(QDebug dbg, const NetworkManager::TcSetting &setting)
0105 {
0106     dbg.nospace() << "type: " << setting.typeAsString(setting.type()) << '\n';
0107     dbg.nospace() << "initialized: " << !setting.isNull() << '\n';
0108 
0109     dbg.nospace() << NM_SETTING_TC_CONFIG_QDISCS << ": " << '\n';
0110     const NMVariantMapList qdiscList = setting.qdiscs();
0111     for (const QVariantMap &qdisc : qdiscList) {
0112         QVariantMap::const_iterator i = qdisc.constBegin();
0113         while (i != qdisc.constEnd()) {
0114             dbg.nospace() << i.key() << ": " << i.value() << '\n';
0115         }
0116     }
0117     dbg.nospace() << NM_SETTING_TC_CONFIG_TFILTERS << ": " << '\n';
0118     const NMVariantMapList tfiltersList = setting.tfilters();
0119     for (const QVariantMap &tfilter : tfiltersList) {
0120         QVariantMap::const_iterator i = tfilter.constBegin();
0121         while (i != tfilter.constEnd()) {
0122             dbg.nospace() << i.key() << ": " << i.value() << '\n';
0123         }
0124     }
0125 
0126     return dbg.maybeSpace();
0127 }