aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKurt Pattyn <pattyn.kurt@gmail.com>2013-08-13 16:42:48 +0200
committerKurt Pattyn <pattyn.kurt@gmail.com>2013-08-13 16:42:48 +0200
commit0e23f36c80fea4aaca9d3d1e181b45542cef3004 (patch)
tree9b9a90fbc17f1ae67b68605dadfeafe4c9f35926
parent26e7635b3baa95f27a0a25d983f10c6c98395234 (diff)
Added setErrorStringv0.9.0
-rw-r--r--source/websocket.cpp48
-rw-r--r--source/websocket.h2
2 files changed, 40 insertions, 10 deletions
diff --git a/source/websocket.cpp b/source/websocket.cpp
index abb1949..e225f5f 100644
--- a/source/websocket.cpp
+++ b/source/websocket.cpp
@@ -170,6 +170,7 @@ const quint64 FRAME_SIZE_IN_BYTES = 512 * 512 * 2; //maximum size of a frame whe
WebSocket::WebSocket(QString origin, WebSocketProtocol::Version version, QObject *parent) :
QObject(parent),
m_pSocket(new QTcpSocket(this)),
+ m_errorString(),
m_version(version),
m_resourceName(),
m_requestUrl(),
@@ -200,6 +201,7 @@ WebSocket::WebSocket(QString origin, WebSocketProtocol::Version version, QObject
WebSocket::WebSocket(QTcpSocket *pTcpSocket, WebSocketProtocol::Version version, QObject *parent) :
QObject(parent),
m_pSocket(pTcpSocket),
+ m_errorString(pTcpSocket->errorString()),
m_version(version),
m_resourceName(),
m_requestUrl(),
@@ -255,7 +257,14 @@ QAbstractSocket::SocketError WebSocket::error() const
*/
QString WebSocket::errorString() const
{
- return m_pSocket->errorString();
+ if (!m_errorString.isEmpty())
+ {
+ return m_errorString;
+ }
+ else
+ {
+ return m_pSocket->errorString();
+ }
}
/*!
@@ -613,6 +622,8 @@ QByteArray WebSocket::getFrameHeader(WebSocketProtocol::OpCode opCode, quint64 p
}
else
{
+ //setErrorString("WebSocket::getHeader: payload too big!");
+ //Q_EMIT error(QAbstractSocket::DatagramTooLargeError);
qDebug() << "WebSocket::getHeader: payload too big!";
}
@@ -667,7 +678,6 @@ qint64 WebSocket::doWriteFrames(const QByteArray &data, bool isBinary)
char *currentData = payload + currentPosition;
if (m_mustMask)
{
- //WARNING: currentData is written over
WebSocketProtocol::mask(currentData, size, maskingKey);
}
qint64 written = m_pSocket->write(currentData, static_cast<qint64>(size));
@@ -678,8 +688,10 @@ qint64 WebSocket::doWriteFrames(const QByteArray &data, bool isBinary)
}
else
{
- qDebug() << "WebSocket::doWriteFrames: Error writing bytes to socket:" << m_pSocket->errorString();
+ setErrorString("WebSocket::doWriteFrames: Error writing bytes to socket: " + m_pSocket->errorString());
+ qDebug() << errorString();
m_pSocket->flush();
+ Q_EMIT error(QAbstractSocket::NetworkError);
break;
}
}
@@ -688,7 +700,9 @@ qint64 WebSocket::doWriteFrames(const QByteArray &data, bool isBinary)
}
if (payloadWritten != data.size())
{
- qDebug() << "Bytes written" << payloadWritten << "!=" << "data size:" << data.size();
+ setErrorString("Bytes written " + QString::number(payloadWritten) + " != " + QString::number(data.size()));
+ qDebug() << errorString();
+ Q_EMIT error(QAbstractSocket::NetworkError);
}
return payloadWritten;
}
@@ -791,6 +805,8 @@ void WebSocket::processHandshake(QTcpSocket *pSocket)
}
bool ok = false;
+ QString errorDescription;
+
const QString regExpStatusLine("^(HTTP/1.1)\\s([0-9]+)\\s(.*)");
const QRegExp regExp(regExpStatusLine);
QString statusLine = readLine(pSocket);
@@ -811,7 +827,7 @@ void WebSocket::processHandshake(QTcpSocket *pSocket)
}
if (!ok)
{
- qDebug() << "WebSocket::processHandshake: Invalid statusline in response:" << statusLine;
+ errorDescription = "WebSocket::processHandshake: Invalid statusline in response: " + statusLine;
}
else
{
@@ -844,12 +860,12 @@ void WebSocket::processHandshake(QTcpSocket *pSocket)
ok = (accept == acceptKey);
if (!ok)
{
- qDebug() << "WebSocket::processHandshake: Accept-Key received from server" << qPrintable(acceptKey) << "does not match the client key" << qPrintable(accept);
+ errorDescription = "WebSocket::processHandshake: Accept-Key received from server " + acceptKey + " does not match the client key " + accept;
}
}
else
{
- qDebug() << "WebSocket::processHandshake: Invalid statusline in response:" << statusLine;
+ errorDescription = "WebSocket::processHandshake: Invalid statusline in response: " + statusLine;
}
}
else if (httpStatusCode == 400) //HTTP/1.1 400 Bad Request
@@ -861,25 +877,27 @@ void WebSocket::processHandshake(QTcpSocket *pSocket)
{
//if needed to switch protocol version, then we are finished here
//because we cannot handle other protocols than the RFC one (v13)
- qDebug() << "WebSocket::processHandshake: Server requests a version that we don't support:" << versions;
+ errorDescription = "WebSocket::processHandshake: Server requests a version that we don't support: " + versions.join(", ");
ok = false;
}
else
{
//we tried v13, but something different went wrong
- qDebug() << "WebSocket::processHandshake: Unknown error condition encountered. Aborting connection.";
+ errorDescription = "WebSocket::processHandshake: Unknown error condition encountered. Aborting connection.";
ok = false;
}
}
}
else
{
- qDebug() << "WebSocket::processHandshake: Unhandled http status code" << httpStatusCode;
+ errorDescription = "WebSocket::processHandshake: Unhandled http status code " + QString::number(httpStatusCode);
ok = false;
}
if (!ok)
{
+ qDebug() << errorDescription;
+ setErrorString(errorDescription);
Q_EMIT error(QAbstractSocket::ConnectionRefusedError);
}
else
@@ -1164,6 +1182,16 @@ void WebSocket::setSocketState(QAbstractSocket::SocketState state)
}
/*!
+ \internal
+ Sets the error string.
+ Only used internally.
+*/
+void WebSocket::setErrorString(QString errorString)
+{
+ m_errorString = errorString;
+}
+
+/*!
Returns the local address
*/
QHostAddress WebSocket::localAddress() const
diff --git a/source/websocket.h b/source/websocket.h
index 99f3271..eb003cd 100644
--- a/source/websocket.h
+++ b/source/websocket.h
@@ -100,6 +100,7 @@ private:
void setExtension(QString extension);
void enableMasking(bool enable);
void setSocketState(QAbstractSocket::SocketState state);
+ void setErrorString(QString errorString);
qint64 doWriteData(const QByteArray &data, bool isBinary);
qint64 doWriteFrames(const QByteArray &data, bool isBinary);
@@ -129,6 +130,7 @@ private:
friend class WebSocketServer;
QTcpSocket *m_pSocket;
+ QString m_errorString;
WebSocketProtocol::Version m_version;
QUrl m_resource;
QString m_resourceName;