summaryrefslogtreecommitdiff
path: root/src/websockets/qwebsocketprotocol.h
diff options
context:
space:
mode:
authorSteven Ceuppens <steven.ceuppens@icloud.com>2013-09-27 14:27:27 +0200
committerKurt Pattyn <pattyn.kurt@gmail.com>2013-09-28 21:17:48 +0200
commit6e1e387174d20fb62a804b6e27438bcc5ea59f28 (patch)
tree68d5c273ea682a244398ba8d3c7fbeb4a5f76b9b /src/websockets/qwebsocketprotocol.h
parent315e4fa0764f8d7a568be2a8063cc33c9ec13518 (diff)
downloadqtwebsockets-6e1e387174d20fb62a804b6e27438bcc5ea59f28.tar.gz
Changes to integrate the websocket module as a full Qt Add-On module
- Changed project files to use Qt structure - Moved existing sources into subdirectory, to make room for moduels - Created a "import/qmlwebsocket" module skeleton (works, but needs to be extended) - Modified examples to not use "include(.pri)", but use "QT += websocket" - Added qml example skeleton (works, but no useful functionality yet) Project can be build with: $ qmake $ make $ make install Module can be used in other projects with QT += websockets Change-Id: I2123026958b264670dbf8a978dee76edf5855806 Reviewed-by: Kurt Pattyn <pattyn.kurt@gmail.com>
Diffstat (limited to 'src/websockets/qwebsocketprotocol.h')
-rw-r--r--src/websockets/qwebsocketprotocol.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/websockets/qwebsocketprotocol.h b/src/websockets/qwebsocketprotocol.h
new file mode 100644
index 0000000..2d1bea3
--- /dev/null
+++ b/src/websockets/qwebsocketprotocol.h
@@ -0,0 +1,108 @@
+/*
+QWebSockets implements the WebSocket protocol as defined in RFC 6455.
+Copyright (C) 2013 Kurt Pattyn (pattyn.kurt@gmail.com)
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#ifndef QWEBSOCKETPROTOCOL_H
+#define QWEBSOCKETPROTOCOL_H
+
+#include <qglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+class QString;
+class QByteArray;
+
+namespace QWebSocketProtocol
+{
+enum Version
+{
+ V_Unknow = -1,
+ V_0 = 0,
+ //hybi-01, hybi-02 and hybi-03 not supported
+ V_4 = 4,
+ V_5 = 5,
+ V_6 = 6,
+ V_7 = 7,
+ V_8 = 8,
+ V_13 = 13,
+ V_LATEST = V_13
+};
+
+Version versionFromString(const QString &versionString);
+
+enum CloseCode
+{
+ CC_NORMAL = 1000,
+ CC_GOING_AWAY = 1001,
+ CC_PROTOCOL_ERROR = 1002,
+ CC_DATATYPE_NOT_SUPPORTED = 1003,
+ CC_RESERVED_1004 = 1004,
+ CC_MISSING_STATUS_CODE = 1005,
+ CC_ABNORMAL_DISCONNECTION = 1006,
+ CC_WRONG_DATATYPE = 1007,
+ CC_POLICY_VIOLATED = 1008,
+ CC_TOO_MUCH_DATA = 1009,
+ CC_MISSING_EXTENSION = 1010,
+ CC_BAD_OPERATION = 1011,
+ CC_TLS_HANDSHAKE_FAILED = 1015
+};
+
+enum OpCode
+{
+ OC_CONTINUE = 0x0,
+ OC_TEXT = 0x1,
+ OC_BINARY = 0x2,
+ OC_RESERVED_3 = 0x3,
+ OC_RESERVED_4 = 0x4,
+ OC_RESERVED_5 = 0x5,
+ OC_RESERVED_6 = 0x6,
+ OC_RESERVED_7 = 0x7,
+ OC_CLOSE = 0x8,
+ OC_PING = 0x9,
+ OC_PONG = 0xA,
+ OC_RESERVED_B = 0xB,
+ OC_RESERVED_C = 0xC,
+ OC_RESERVED_D = 0xD,
+ OC_RESERVED_E = 0xE,
+ OC_RESERVED_F = 0xF
+};
+
+
+inline bool isOpCodeReserved(OpCode code)
+{
+ return ((code > OC_BINARY) && (code < OC_CLOSE)) || (code > OC_PONG);
+}
+inline bool isCloseCodeValid(int closeCode)
+{
+ return (closeCode > 999) && (closeCode < 5000) &&
+ (closeCode != CC_RESERVED_1004) && //see RFC6455 7.4.1
+ (closeCode != CC_MISSING_STATUS_CODE) &&
+ (closeCode != CC_ABNORMAL_DISCONNECTION) &&
+ ((closeCode >= 3000) || (closeCode < 1012));
+}
+
+void mask(QByteArray *payload, quint32 maskingKey);
+void mask(char *payload, quint64 size, quint32 maskingKey);
+
+inline Version currentVersion() { return V_LATEST; }
+
+} //end namespace QWebSocketProtocol
+
+QT_END_NAMESPACE
+
+#endif // QWEBSOCKETPROTOCOL_H