-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathws.h
116 lines (96 loc) · 3.15 KB
/
ws.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*!
* @file libxutils/src/net/ws.h
*
* This source is part of "libxutils" project
* 2015-2020 Sun Dro (s.kalatoz@gmail.com)
*
* @brief Implementation of Web Socket server and
* client functionality based on xevents and xsock.
*/
#ifndef __XUTILS_XWS_H__
#define __XUTILS_XWS_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "xstd.h"
#include "buf.h"
#define XWS_SEC_WS_VERSION 13
#define XWS_NONCE_LENGTH 16
#define XWS_GUID "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
typedef enum {
XWS_ERR_NONE,
XWS_ERR_ALLOC,
XWS_ERR_SIZE,
XWS_INVALID_ARGS,
XWS_INVALID_TYPE,
XWS_INVALID_REQUEST,
XWS_INVALID_RESPONSE,
XWS_INVALID_SEC_KEY,
XWS_MISSING_SEC_KEY,
XWS_MISSING_PAYLOAD,
XWS_FRAME_TOOBIG,
XWS_FRAME_PARSED,
XWS_FRAME_INVALID,
XWS_FRAME_COMPLETE,
XWS_FRAME_INCOMPLETE
} xws_status_t;
typedef enum {
XWS_CONTINUATION,
XWS_TEXT,
XWS_BINARY,
XWS_RESERVED1,
XWS_RESERVED2,
XWS_RESERVED3,
XWS_RESERVED4,
XWS_RESERVED5,
XWS_CLOSE,
XWS_PING,
XWS_PONG,
XWS_RESERVED6,
XWS_RESERVED7,
XWS_RESERVED8,
XWS_RESERVED9,
XWS_RESERVED10,
XWS_INVALID
} xws_frame_type_t;
typedef struct xweb_frame_ {
xws_frame_type_t eType;
xbyte_buffer_t buffer;
size_t nPayloadLength;
size_t nHeaderSize;
uint32_t nMaskKey;
uint8_t nOpCode;
xbool_t bComplete;
xbool_t bAlloc;
xbool_t bMask;
xbool_t bFin;
} xws_frame_t;
const char* XWebSock_GetStatusStr(xws_status_t eStatus);
const char* XWS_FrameTypeStr(xws_frame_type_t eType);
xws_frame_type_t XWS_FrameType(uint8_t nOpCode);
uint8_t XWS_OpCode(xws_frame_type_t eType);
void XWebFrame_Init(xws_frame_t *pFrame);
void XWebFrame_Free(xws_frame_t **pFrame);
void XWebFrame_Clear(xws_frame_t *pFrame);
void XWebFrame_Reset(xws_frame_t *pFrame);
uint8_t* XWS_CreateFrame(const uint8_t *pPayload, size_t nLength, uint8_t nOpCode, xbool_t bFin, size_t *pFrameSize);
xws_frame_t* XWebFrame_New(const uint8_t *pPayload, size_t nLength, xws_frame_type_t eType, xbool_t bFin);
xws_frame_t* XWebFrame_Alloc(xws_frame_type_t eType, size_t nBuffSize);
xws_status_t XWebFrame_Create(xws_frame_t *pFrame, const uint8_t *pPayload, size_t nLength, xws_frame_type_t eType, xbool_t bFin);
xws_status_t XWebFrame_AppendData(xws_frame_t *pFrame, uint8_t* pData, size_t nSize);
xws_status_t XWebFrame_ParseData(xws_frame_t *pFrame, uint8_t* pData, size_t nSize);
xws_status_t XWebFrame_TryParse(xws_frame_t *pFrame, uint8_t* pData, size_t nSize);
xws_status_t XWebFrame_ParseBuff(xws_frame_t *pFrame, xbyte_buffer_t *pBuffer);
xws_status_t XWebFrame_Parse(xws_frame_t *pFrame);
xws_status_t XWebFrame_Unmask(xws_frame_t *pFrame);
size_t XWebFrame_GetPayloadLength(xws_frame_t *pFrame);
size_t XWebFrame_GetFrameLength(xws_frame_t *pFrame);
size_t XWebFrame_GetExtraLength(xws_frame_t *pFrame);
xbyte_buffer_t* XWebFrame_GetBuffer(xws_frame_t *pFrame);
const uint8_t* XWebFrame_GetPayload(xws_frame_t *pFrame);
XSTATUS XWebFrame_GetExtraData(xws_frame_t *pFrame, xbyte_buffer_t *pBuffer, xbool_t bAppend);
XSTATUS XWebFrame_CutExtraData(xws_frame_t *pFrame);
#ifdef __cplusplus
}
#endif
#endif /* __XUTILS_XWS_H__ */