-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconnectdialog.cpp
More file actions
97 lines (88 loc) · 3.37 KB
/
connectdialog.cpp
File metadata and controls
97 lines (88 loc) · 3.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "connectdialog.h"
#include "ui_connectdialog.h"
#include <QNetworkInterface>
#include <QDebug>
#include <QMessageBox>
connectDialog::connectDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::connectDialog)
{
ui->setupUi(this);
setWindowTitle("New Connection");
QList<QNetworkInterface> network = QNetworkInterface::allInterfaces();
foreach (QNetworkInterface i, network) {
QList<QNetworkAddressEntry> ipAll = i.addressEntries();
foreach (QNetworkAddressEntry ip, ipAll) {
if(ip.ip().protocol()==QAbstractSocket::IPv4Protocol)
localIP.append(ip.ip().toString());
}
}
//qDebug() << localIP;
inputIP = localIP.at(localIP.size()-1);
ui->serverButton->setChecked(true);
ui->clientButton->setChecked(false);
ui->ipEdit->setText(inputIP);
ui->cancelButton->setDisabled(true);
connect(ui->serverButton, SIGNAL(clicked()), this, SLOT(serverClicked()));
connect(ui->clientButton, SIGNAL(clicked()), this, SLOT(clientClicked()));
connect(ui->ipEdit, SIGNAL(textChanged(QString)), this, SLOT(inputIPChanged(QString)));
connect(ui->portEdit, SIGNAL(textChanged(QString)), this, SLOT(portChanged(QString)));
connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(cancelConnection()));
connect(ui->okButton, SIGNAL(clicked()), this, SLOT(checkFormat()));
connect(parent, SIGNAL(connectSuccess()), this, SLOT(accept()));
}
connectDialog::~connectDialog() { delete ui; }
void connectDialog::serverClicked() {
ui->clientButton->setChecked(!ui->serverButton->isChecked());
ui->ipEdit->setText(localIP.at(localIP.size()-1));
}
void connectDialog::clientClicked() {
ui->serverButton->setChecked(!ui->clientButton->isChecked());
}
void connectDialog::inputIPChanged(QString content) {
inputIP = content;
}
void connectDialog::portChanged(QString content) {
portNumber = content;
}
void connectDialog::cancelConnection() {
ui->cancelButton->setDisabled(true);
emit abort();
}
void connectDialog::checkFormat() {
ui->cancelButton->setEnabled(true);
int ip1, ip2, ip3, ip4;
if(sscanf(inputIP.toLatin1().data(), "%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4) != 4) {
QMessageBox::critical(this, "Error", "Error: IP address invalid!");
return;
}
else if(ip1 < 0 || ip1 > 255 || ip2 < 0 || ip2 > 255 || ip3 < 0 || ip3 > 255 || ip4 < 0 || ip4 > 255) {
QMessageBox::critical(this, "Error", "Error: IP address invalid!");
return;
}
if(ui->serverButton->isChecked() && !localIP.contains(inputIP)) {
QMessageBox::critical(this, "Error", "Error: Not a local IP address!");
return;
}
const char *s = portNumber.toUtf8().data();
while(*s && *s>='0' && *s<='9') s++;
if(bool(*s) == true) {
QMessageBox::critical(this, "Error", "Error: Port number invalid!");
return;
}
int num;
sscanf(portNumber.toLatin1().data(), "%d", &num);
qDebug() << "port:" << num;
if(num <= 1024 || num >= 65535) {
QMessageBox::critical(this, "Error", "Error: Port number invalid!");
return;
}
startConnection();
}
void connectDialog::startConnection() {
ui->cancelButton->setEnabled(true);
mode = (ui->clientButton->isChecked()) ? 1 : 0;
QString address = QString::number(mode) + " " + inputIP + ":" + portNumber;
qDebug() << address;
emit ipAddress(address);
}