File indexing completed on 2024-04-21 05:01:39

0001 /*
0002     Smb4K's container class for information about a host.
0003 
0004     SPDX-FileCopyrightText: 2008-2023 Alexander Reinholdt <alexander.reinholdt@kdemail.net>
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 // application specific includes
0009 #include "smb4khost.h"
0010 #include "smb4kauthinfo.h"
0011 
0012 // Qt includes
0013 #include <QDebug>
0014 #include <QStringList>
0015 #include <QUrl>
0016 
0017 // KDE includes
0018 #include <KIconLoader>
0019 
0020 class Smb4KHostPrivate
0021 {
0022 public:
0023     QString workgroup;
0024     QHostAddress ip;
0025     bool isMaster;
0026 };
0027 
0028 Smb4KHost::Smb4KHost(const QUrl &url)
0029     : Smb4KBasicNetworkItem(Host)
0030     , d(new Smb4KHostPrivate)
0031 {
0032     d->isMaster = false;
0033     *pIcon = KDE::icon(QStringLiteral("network-server"));
0034     *pUrl = url;
0035 }
0036 
0037 Smb4KHost::Smb4KHost(const Smb4KHost &host)
0038     : Smb4KBasicNetworkItem(host)
0039     , d(new Smb4KHostPrivate)
0040 {
0041     *d = *host.d;
0042 
0043     if (pIcon->isNull()) {
0044         *pIcon = KDE::icon(QStringLiteral("network-server"));
0045     }
0046 }
0047 
0048 Smb4KHost::Smb4KHost()
0049     : Smb4KBasicNetworkItem(Host)
0050     , d(new Smb4KHostPrivate)
0051 {
0052     d->isMaster = false;
0053     *pIcon = KDE::icon(QStringLiteral("network-server"));
0054 }
0055 
0056 Smb4KHost::~Smb4KHost()
0057 {
0058 }
0059 
0060 void Smb4KHost::setHostName(const QString &name)
0061 {
0062     pUrl->setHost(name);
0063     pUrl->setScheme(QStringLiteral("smb"));
0064 }
0065 
0066 QString Smb4KHost::hostName() const
0067 {
0068     return pUrl->host().toUpper();
0069 }
0070 
0071 void Smb4KHost::setWorkgroupName(const QString &workgroup)
0072 {
0073     d->workgroup = workgroup.toUpper();
0074 }
0075 
0076 QString Smb4KHost::workgroupName() const
0077 {
0078     return d->workgroup;
0079 }
0080 
0081 void Smb4KHost::setIpAddress(const QString &ip)
0082 {
0083     d->ip.setAddress(ip);
0084 }
0085 
0086 void Smb4KHost::setIpAddress(const QHostAddress &address)
0087 {
0088     if (!address.isNull() && address.protocol() != QAbstractSocket::UnknownNetworkLayerProtocol) {
0089         d->ip = address;
0090     }
0091 }
0092 
0093 QString Smb4KHost::ipAddress() const
0094 {
0095     return d->ip.toString();
0096 }
0097 
0098 bool Smb4KHost::hasIpAddress() const
0099 {
0100     return !d->ip.isNull();
0101 }
0102 
0103 void Smb4KHost::setIsMasterBrowser(bool master)
0104 {
0105     d->isMaster = master;
0106 }
0107 
0108 bool Smb4KHost::isMasterBrowser() const
0109 {
0110     return d->isMaster;
0111 }
0112 
0113 void Smb4KHost::setUserName(const QString &name)
0114 {
0115     pUrl->setUserName(name);
0116 }
0117 
0118 QString Smb4KHost::userName() const
0119 {
0120     return pUrl->userName();
0121 }
0122 
0123 void Smb4KHost::setPassword(const QString &passwd)
0124 {
0125     pUrl->setPassword(passwd);
0126 }
0127 
0128 QString Smb4KHost::password() const
0129 {
0130     return pUrl->password();
0131 }
0132 
0133 void Smb4KHost::setPort(int port)
0134 {
0135     pUrl->setPort(port);
0136 }
0137 
0138 int Smb4KHost::port() const
0139 {
0140     return pUrl->port();
0141 }
0142 
0143 void Smb4KHost::update(Smb4KHost *host)
0144 {
0145     if (QString::compare(workgroupName(), host->workgroupName()) == 0 && QString::compare(hostName(), host->hostName()) == 0) {
0146         *pUrl = host->url();
0147         setComment(host->comment());
0148         setIsMasterBrowser(host->isMasterBrowser());
0149 
0150         // Do not kill the already discovered IP address
0151         if (!hasIpAddress() && host->hasIpAddress()) {
0152             setIpAddress(host->ipAddress());
0153         }
0154     }
0155 }
0156 
0157 Smb4KHost &Smb4KHost::operator=(const Smb4KHost &other)
0158 {
0159     *d = *other.d;
0160     return *this;
0161 }