File indexing completed on 2024-05-05 09:16:35
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 }