summaryrefslogtreecommitdiffstats
path: root/src/network/socket/qsocks5socketengine.cpp
diff options
context:
space:
mode:
authorJonas M. Gastal <jgastal@gmail.com>2012-06-11 22:27:03 -0300
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-09-26 04:03:51 +0200
commit4920090da0fc937d171065694d5274221d2747c9 (patch)
tree8959b519b3ebcf772fee2db640c0b2b4818a6e85 /src/network/socket/qsocks5socketengine.cpp
parentaa9728450cc515c66545323646c66d826a1af50a (diff)
If accept fails, stop accepting new connections and emit error signal.
Task-number: QTBUG-24778 Change-Id: I6c5b685b3f861a0fafc1475c41bb35cede17d712 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/network/socket/qsocks5socketengine.cpp')
-rw-r--r--src/network/socket/qsocks5socketengine.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp
index ba7ca1b92e..bb0e911aef 100644
--- a/src/network/socket/qsocks5socketengine.cpp
+++ b/src/network/socket/qsocks5socketengine.cpp
@@ -1453,13 +1453,15 @@ int QSocks5SocketEngine::accept()
QSOCKS5_Q_DEBUG << "accept()";
- if (d->socks5State == QSocks5SocketEnginePrivate::BindSuccess) {
+ qintptr sd = -1;
+ switch (d->socks5State) {
+ case QSocks5SocketEnginePrivate::BindSuccess:
QSOCKS5_Q_DEBUG << "BindSuccess adding" << d->socketDescriptor << "to the bind store";
d->data->controlSocket->disconnect();
d->data->controlSocket->setParent(0);
d->bindData->localAddress = d->localAddress;
d->bindData->localPort = d->localPort;
- qintptr sd = d->socketDescriptor;
+ sd = d->socketDescriptor;
socks5BindStore()->add(sd, d->bindData);
d->data = 0;
d->bindData = 0;
@@ -1468,9 +1470,15 @@ int QSocks5SocketEngine::accept()
// reset state and local port/address
d->socks5State = QSocks5SocketEnginePrivate::Uninitialized; // ..??
d->socketState = QAbstractSocket::UnconnectedState;
- return sd;
+ break;
+ case QSocks5SocketEnginePrivate::ControlSocketError:
+ setError(QAbstractSocket::ProxyProtocolError, QLatin1String("Control socket error"));
+ break;
+ default:
+ setError(QAbstractSocket::ProxyProtocolError, QLatin1String("SOCKS5 proxy error"));
+ break;
}
- return -1;
+ return sd;
}
void QSocks5SocketEngine::close()