Added check on QT_NO_NETWORKPROXY to include proxy functionality only when required
[contrib/qtwebsockets.git] / src / qwebsocketprotocol.h
1 /**
2  * @file websocketprotocol.h
3  * @brief Contains constants related to the WebSocket standard.
4  * @author Kurt Pattyn (pattyn.kurt@gmail.com)
5  */
6 #ifndef QWEBSOCKETPROTOCOL_H
7 #define QWEBSOCKETPROTOCOL_H
8
9 #include <qglobal.h>
10
11 QT_BEGIN_NAMESPACE
12
13 class QString;
14 class QByteArray;
15
16 namespace QWebSocketProtocol
17 {
18         enum Version
19         {
20                 V_Unknow = -1,
21                 V_0 = 0,
22                 //hybi-01, hybi-02 and hybi-03 not supported
23                 V_4 = 4,
24                 V_5 = 5,
25                 V_6 = 6,
26                 V_7 = 7,
27                 V_8 = 8,
28                 V_13 = 13,
29                 V_LATEST = V_13
30         };
31
32         Version versionFromString(const QString &versionString);
33
34         enum CloseCode
35         {
36                 CC_NORMAL                                       = 1000,
37                 CC_GOING_AWAY                           = 1001,
38                 CC_PROTOCOL_ERROR                       = 1002,
39                 CC_DATATYPE_NOT_SUPPORTED       = 1003,
40                 CC_RESERVED_1004                        = 1004,
41                 CC_MISSING_STATUS_CODE          = 1005,
42                 CC_ABNORMAL_DISCONNECTION       = 1006,
43                 CC_WRONG_DATATYPE                       = 1007,
44                 CC_POLICY_VIOLATED                      = 1008,
45                 CC_TOO_MUCH_DATA                        = 1009,
46                 CC_MISSING_EXTENSION            = 1010,
47                 CC_BAD_OPERATION                        = 1011,
48                 CC_TLS_HANDSHAKE_FAILED         = 1015
49         };
50
51         enum OpCode
52         {
53                 OC_CONTINUE             = 0x0,
54                 OC_TEXT                 = 0x1,
55                 OC_BINARY               = 0x2,
56                 OC_RESERVED_3   = 0x3,
57                 OC_RESERVED_4   = 0x4,
58                 OC_RESERVED_5   = 0x5,
59                 OC_RESERVED_6   = 0x6,
60                 OC_RESERVED_7   = 0x7,
61                 OC_CLOSE                = 0x8,
62                 OC_PING                 = 0x9,
63                 OC_PONG                 = 0xA,
64                 OC_RESERVED_B   = 0xB,
65                 OC_RESERVED_V   = 0xC,
66                 OC_RESERVED_D   = 0xD,
67                 OC_RESERVED_E   = 0xE,
68                 OC_RESERVED_F   = 0xF
69         };
70
71
72         inline bool isOpCodeReserved(OpCode code)
73         {
74                 return ((code > OC_BINARY) && (code < OC_CLOSE)) || (code > OC_PONG);
75         }
76         inline bool isCloseCodeValid(int closeCode)
77         {
78                 return  (closeCode > 999) && (closeCode < 5000) &&
79                                 (closeCode != CC_RESERVED_1004) &&          //see RFC6455 7.4.1
80                                 (closeCode != CC_MISSING_STATUS_CODE) &&
81                                 (closeCode != CC_ABNORMAL_DISCONNECTION) &&
82                                 ((closeCode >= 3000) || (closeCode < 1012));
83         }
84
85         void mask(QByteArray *payload, quint32 maskingKey);
86         void mask(char *payload, quint64 size, quint32 maskingKey);
87
88         inline Version currentVersion() { return V_LATEST; }
89
90 }       //end namespace QWebSocketProtocol
91
92 QT_END_NAMESPACE
93
94 #endif // QWEBSOCKETPROTOCOL_H