33
33
#include "ServerHandler.h"
34
34
#include "Channel.h"
35
35
#include "Database.h"
36
#include "NetworkConfig.h"
37
38
QMap<QString, QIcon> ServerItem::qmIcons;
38
39
QList<PublicInfo> ConnectDialog::qlPublicServers;
277
ServerItem::ServerItem(const QString &name, const QString &host, unsigned short port, const QString &username) : QTreeWidgetItem(QTreeWidgetItem::UserType) {
277
ServerItem::ServerItem(const QString &name, const QString &host, unsigned short port, const QString &username, const QString &password) : QTreeWidgetItem(QTreeWidgetItem::UserType) {
280
280
itType = FavoriteType;
283
283
qsUsername = username;
284
qsPassword = password;
286
288
if (host.startsWith(QLatin1Char('@'))) {
407
409
if (! url.hasQueryItem(QLatin1String("title")))
408
410
url.addQueryItem(QLatin1String("title"), url.host());
410
ServerItem *si = new ServerItem(url.queryItemValue(QLatin1String("title")), url.host(), static_cast<unsigned short>(url.port()), url.userName());
411
if (! url.password().isEmpty())
412
si->qsPassword = url.password();
412
ServerItem *si = new ServerItem(url.queryItemValue(QLatin1String("title")), url.host(), static_cast<unsigned short>(url.port()), url.userName(), url.password());
414
414
if (url.hasQueryItem(QLatin1String("url")))
415
415
si->qsUrl = url.queryItemValue(QLatin1String("url"));
678
678
return qmIcons.value(name);
681
ConnectDialogEdit::ConnectDialogEdit(QWidget *p, const QString &name, const QString &host, const QString &user, unsigned short port) : QDialog(p) {
681
ConnectDialogEdit::ConnectDialogEdit(QWidget *p, const QString &name, const QString &host, const QString &user, unsigned short port, const QString &password, bool add) : QDialog(p) {
684
setWindowTitle(tr("Add Server"));
683
686
qlePort->setValidator(new QIntValidator(1, 65535, qlePort));
685
688
qleName->setText(name);
686
689
qleServer->setText(host);
687
690
qleUsername->setText(user.isEmpty() ? g.s.qsUsername : user);
688
691
qlePort->setText(QString::number(port));
692
qlePassword->setEchoMode(QLineEdit::Password);
693
qlePassword->setText(password);
694
699
connect(qleServer, SIGNAL(textChanged(const QString &)), this, SLOT(validate()));
695
700
connect(qlePort, SIGNAL(textChanged(const QString &)), this, SLOT(validate()));
696
701
connect(qleUsername, SIGNAL(textChanged(const QString &)), this, SLOT(validate()));
702
connect(qlePassword, SIGNAL(textChanged(const QString &)), this, SLOT(validate()));
703
709
qsHostname = qleServer->text().simplified();
704
710
usPort = qlePort->text().toUShort();
705
711
qsUsername = qleUsername->text().simplified();
712
qsPassword = qlePassword->text();
714
// For bonjour hosts disable the port field as it's auto-detected
715
qlePort->setDisabled(!qsHostname.isEmpty() && qsHostname.startsWith(QLatin1Char('@')));
717
// For SuperUser show password edit
718
if (qsUsername == QLatin1String("SuperUser")) {
719
qliPassword->setVisible(true);
720
qlePassword->setVisible(true);
721
qcbShowPassword->setVisible(true);
723
} else if (qsPassword.isEmpty()) {
724
qliPassword->setVisible(false);
725
qlePassword->setVisible(false);
726
qcbShowPassword->setVisible(false);
707
730
bOk = ! qsName.isEmpty() && ! qsHostname.isEmpty() && ! qsUsername.isEmpty() && usPort;
708
731
qdbbButtonBox->button(QDialogButtonBox::Ok)->setEnabled(bOk);
714
737
QDialog::accept();
717
void ConnectDialogEdit::on_qleServer_textChanged(const QString &text) {
718
qlePort->setDisabled(!text.isEmpty() && text.startsWith(QLatin1Char('@')));
740
void ConnectDialogEdit::on_qcbShowPassword_toggled(bool checked) {
741
qlePassword->setEchoMode(checked ? QLineEdit::Normal : QLineEdit::Password);
721
ConnectDialog::ConnectDialog(QWidget *p) : QDialog(p) {
744
ConnectDialog::ConnectDialog(QWidget *p, bool autoconnect) : QDialog(p), bAutoConnect(autoconnect) {
724
747
setWindowModality(Qt::WindowModal);
726
749
bPublicInit = false;
751
siAutoConnect = NULL;
728
753
if (tPublicServers.elapsed() >= 60 * 24 * 1000000ULL) {
729
754
qlPublicServers.clear();
852
877
void ConnectDialog::accept() {
853
878
ServerItem *si = static_cast<ServerItem *>(qtwServers->currentItem());
854
if (! si || si->qlAddresses.isEmpty() || si->qsHostname.isEmpty())
879
if (! si || si->qlAddresses.isEmpty() || si->qsHostname.isEmpty()) {
880
qWarning() << "Sad panda";
857
884
qsPassword = si->qsPassword;
858
885
qsServer = si->qsHostname;
901
928
unsigned short port = 64738;
903
if (g.sh && g.sh->isRunning()) {
904
g.sh->getConnectionInfo(host, port, user, pw);
905
Channel *c = Channel::get(0);
907
if (c->qsName != QLatin1String("Root"))
930
// Try to fill out fields if possible
932
ServerItem *si = ServerItem::fromMimeData(QApplication::clipboard()->mimeData());
934
// If there is server information in the clipboard assume user wants to add it
937
if (! si->qsBonjourHost.isEmpty())
938
host = QLatin1Char('@') + si->qsBonjourHost;
940
host = si->qsHostname;
945
// If connected to a server assume the user wants to add it
946
if (g.sh && g.sh->isRunning()) {
947
g.sh->getConnectionInfo(host, port, user, pw);
948
Channel *c = Channel::get(0);
950
if (c->qsName != QLatin1String("Root"))
954
user = g.s.qsUsername;
911
user = g.s.qsUsername;
913
ConnectDialogEdit *cde = new ConnectDialogEdit(this, name, host, user, port);
958
ConnectDialogEdit *cde = new ConnectDialogEdit(this, name, host, user, port, pw, true);
915
960
if (cde->exec() == QDialog::Accepted) {
916
ServerItem *si = new ServerItem(cde->qsName, cde->qsHostname, cde->usPort, cde->qsUsername);
961
ServerItem *si = new ServerItem(cde->qsName, cde->qsHostname, cde->usPort, cde->qsUsername, cde->qsPassword);
918
963
qtwServers->siFavorite->addServerItem(si);
919
964
qtwServers->setCurrentItem(si);
934
979
host = si->qsHostname;
936
ConnectDialogEdit *cde = new ConnectDialogEdit(this, si->qsName, host, si->qsUsername, si->usPort);
981
ConnectDialogEdit *cde = new ConnectDialogEdit(this, si->qsName, host, si->qsUsername, si->usPort, si->qsPassword);
938
983
if (cde->exec() == QDialog::Accepted) {
940
985
si->qsName = cde->qsName;
941
986
si->qsUsername = cde->qsUsername;
987
si->qsPassword = cde->qsPassword;
942
988
if ((cde->qsHostname != host) || (cde->usPort != si->usPort)) {
1073
1119
url.setPath(QLatin1String("/list2.cgi"));
1074
1120
url.addQueryItem(QLatin1String("version"), QLatin1String(MUMTEXT(MUMBLE_VERSION_STRING)));
1076
QNetworkRequest req(url);
1077
QNetworkReply *rep = g.nam->get(req);
1122
QNetworkReply *rep = Network::get(url);
1078
1123
connect(rep, SIGNAL(finished()), this, SLOT(finished()));
1334
1386
qhPings[addr].insert(si);
1337
if (si == qtwServers->currentItem())
1389
if (si == qtwServers->currentItem()) {
1338
1390
on_qtwServers_currentItemChanged(si, si);
1391
if (si == siAutoConnect)
1341
1396
qhDNSWait.remove(host);
1385
1440
qint64 len = sock->readDatagram(blob+4, 24, &host, &port);
1386
1441
if (len == 24) {
1442
if (host.scopeId() == QLatin1String("0"))
1443
host.setScopeId(QLatin1String(""));
1387
1445
qpAddress address(host, port);
1388
1446
if (qhPings.contains(address)) {
1389
1447
quint32 *ping = reinterpret_cast<quint32 *>(blob+4);
1420
1478
QUrl url = rep->request().url();
1421
1479
if (url.host() == g.qsRegionalHost) {
1422
1480
url.setHost(QLatin1String("mumble.info"));
1423
QNetworkRequest req(url);
1424
QNetworkReply *nrep = g.nam->get(req);
1481
QNetworkReply *nrep = Network::get(url);
1425
1482
connect(nrep, SIGNAL(finished()), this, SLOT(finished()));
1427
1484
rep->deleteLater();