diff options
author | Steven Ceuppens <steven.ceuppens@icloud.com> | 2013-09-27 14:27:27 +0200 |
---|---|---|
committer | Kurt Pattyn <pattyn.kurt@gmail.com> | 2013-09-28 21:17:48 +0200 |
commit | 6e1e387174d20fb62a804b6e27438bcc5ea59f28 (patch) | |
tree | 68d5c273ea682a244398ba8d3c7fbeb4a5f76b9b /src/websockets/qwebsocketprotocol.h | |
parent | 315e4fa0764f8d7a568be2a8063cc33c9ec13518 (diff) | |
download | qtwebsockets-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.h | 108 |
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 |