3
#include<qpushbutton.h>
6
#include<qmessagebox.h>
8
#include<qprogressbar.h>
9
#include<qradiobutton.h>
10
#include<qbuttongroup.h>
15
#include"xmpp_jidlink.h"
16
#include"xmpp_xmlcommon.h"
17
#include"psiaccount.h"
18
#include"busywidget.h"
20
#define TOTAL_SIZE 32768
21
#define PACKET_SIZE 8192
22
#define PACKET_DELAY 2000
24
class JLTestDlg::Private
30
QRadioButton *rb_dtcp, *rb_ibb;
32
QProgressBar *pr_status;
33
QButtonGroup *bg_type;
41
JLTestDlg::JLTestDlg(const Jid &j, PsiAccount *pa)
42
:QDialog(0, 0, false, WDestructiveClose)
47
d->mode = ModeConnect;
49
setCaption("Link Test");
51
d->pb_test->setText(tr("Connect"));
53
d->rb_dtcp->setChecked(true);
56
JLTestDlg::JLTestDlg(const Jid &j, JidLink *jl, PsiAccount *pa)
57
:QDialog(0, 0, false, WDestructiveClose)
64
setCaption("Link Test");
66
d->pb_test->setText(tr("Accept"));
67
if(jl->type() == JidLink::DTCP)
68
d->rb_dtcp->setChecked(true);
70
d->rb_ibb->setChecked(true);
71
d->bg_type->setEnabled(false);
74
void JLTestDlg::init()
76
QVBoxLayout *vb = new QVBoxLayout(this, 8);
79
QLabel *l = new QLabel(QString("Link test with %1").arg(d->jid.full()), this);
83
d->bg_type = new QButtonGroup(1, Vertical, "Type", this);
84
vb->addWidget(d->bg_type);
85
d->rb_dtcp = new QRadioButton("Direct (S5B)", d->bg_type);
86
d->rb_ibb = new QRadioButton("Thru-server (IBB)", d->bg_type);
89
QGroupBox *gr = new QGroupBox(1, Horizontal, "Status", this);
90
d->pr_status = new QProgressBar(100, gr);
91
d->pr_status->setProgress(0);
92
d->lb_status = new QLabel(gr);
93
d->lb_status->setText("Idle");
98
QHBoxLayout *hb = new QHBoxLayout(vb);
99
d->busy = new BusyWidget(this);
100
hb->addWidget(d->busy);
101
d->pb_test = new QPushButton(this);
102
connect(d->pb_test, SIGNAL(clicked()), SLOT(start()));
103
hb->addWidget(d->pb_test);
104
QPushButton *pb_close = new QPushButton(tr("Close"), this);
105
connect(pb_close, SIGNAL(clicked()), SLOT(close()));
106
hb->addWidget(pb_close);
108
d->pb_test->setFocus();
111
JLTestDlg::~JLTestDlg()
120
void JLTestDlg::reset()
122
d->mode = ModeConnect;
123
d->pb_test->setEnabled(true);
124
d->pb_test->setText(tr("Connect"));
125
d->lb_status->setText("Idle");
126
d->pr_status->setProgress(0);
127
d->bg_type->setEnabled(true);
130
void JLTestDlg::start()
132
if(d->mode == ModeConnect) {
134
if(d->rb_dtcp->isChecked())
135
type = JidLink::DTCP;
139
d->jl = new JidLink(d->pa->client());
140
connect(d->jl, SIGNAL(connected()), SLOT(jl_connected()));
141
connect(d->jl, SIGNAL(connectionClosed()), SLOT(jl_connectionClosed()));
142
connect(d->jl, SIGNAL(error(int)), SLOT(jl_error(int)));
143
connect(d->jl, SIGNAL(bytesWritten(int)), SLOT(jl_bytesWritten(int)));
144
connect(d->jl, SIGNAL(readyRead()), SLOT(jl_readyRead()));
146
QDomElement e = textTag(d->pa->client()->doc(), "comment", "this is only a test!");
147
d->jl->connectToJid(d->jid, type, e);
149
d->bg_type->setEnabled(false);
150
d->lb_status->setText("Requesting...");
153
connect(d->jl, SIGNAL(connected()), SLOT(jl_connected()));
154
connect(d->jl, SIGNAL(connectionClosed()), SLOT(jl_connectionClosed()));
155
connect(d->jl, SIGNAL(error(int)), SLOT(jl_error(int)));
156
connect(d->jl, SIGNAL(bytesWritten(int)), SLOT(jl_bytesWritten(int)));
157
connect(d->jl, SIGNAL(readyRead()), SLOT(jl_readyRead()));
161
d->lb_status->setText("Connecting...");
165
d->pb_test->setEnabled(false);
168
void JLTestDlg::jl_connected()
170
d->lb_status->setText("Transferring data...");
173
if(d->mode == ModeConnect)
177
void JLTestDlg::jl_connectionClosed()
184
QMessageBox::information(this, tr("Error"), tr("Connection closed."));
189
void JLTestDlg::jl_error(int)
197
/*if(x == DTCPConnection::ErrRequest)
198
str = tr("Error during request!");
199
else if(x == DTCPConnection::ErrConnect)
200
str = tr("Error during connect!");
202
str = tr("Socket error!");*/
203
str = tr("Stream or connection error.");
205
QMessageBox::information(this, tr("Error"), str);
210
void JLTestDlg::jl_readyRead()
214
printf("got [%d] bytes\n", r.size());
216
d->numBytes += r.size();
217
int percent = 100 * d->numBytes / TOTAL_SIZE;
218
d->pr_status->setProgress(percent);
220
if(d->numBytes >= TOTAL_SIZE) {
227
d->lb_status->setText("Finished");
231
void JLTestDlg::jl_bytesWritten(int x)
234
int percent = 100 * d->numBytes / TOTAL_SIZE;
235
d->pr_status->setProgress(percent);
237
if(d->jl->bytesToWrite() > 0)
240
if(d->numBytes >= TOTAL_SIZE) {
244
d->jl->deleteLater();
247
d->lb_status->setText("Finished");
250
QTimer::singleShot(PACKET_DELAY, this, SLOT(doNext()));
254
void JLTestDlg::doNext()
262
void JLTestDlg::writePacket()
264
QByteArray a(PACKET_SIZE);
265
for(int n = 0; n < (int)a.size(); ++n)