diff options
author | Jonas M. Gastal <jgastal@gmail.com> | 2012-06-11 22:27:03 -0300 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-09-26 04:03:51 +0200 |
commit | 4920090da0fc937d171065694d5274221d2747c9 (patch) | |
tree | 8959b519b3ebcf772fee2db640c0b2b4818a6e85 /src/network/socket/qsocks5socketengine.cpp | |
parent | aa9728450cc515c66545323646c66d826a1af50a (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.cpp | 16 |
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() |