PokerUnicorn
Loading...
Searching...
No Matches
websocket.h
Go to the documentation of this file.
1/*
2 * PokerUnicorn Server
3 * This project uses test network, NO real coin or NO real money involved.
4 * Copyright (C) 2023, Oğuzhan Eroğlu <meowingcate@gmail.com> (https://meowingcat.io)
5 * Licensed under GPLv3 License
6 * See LICENSE for more info
7 */
8
9#pragma once
10
22#include <stdint.h>
23#include <stdbool.h>
24#include <openssl/ssl.h>
25#include <pthread.h>
26
27#include "pkrsrv.h"
28#include "ref.h"
29
30#define PKRSRV_WEBSOCKET_EXPECTED_HTTP_HEADER "GET / HTTP/1.1"
31
32#define pkrsrv_websocket_packet_frame_header \
33 uint8_t fin_rsv_opcode; \
34 uint8_t mlen8;
35;
36
37typedef struct pkrsrv_websocket_packet_frame_len8 pkrsrv_websocket_packet_frame_len8_t;
38struct __attribute__((packed))
39pkrsrv_websocket_packet_frame_len8 {
41};
42
43typedef struct pkrsrv_websocket_packet_frame_len16 pkrsrv_websocket_packet_frame_len16_t;
44struct __attribute__((packed))
45pkrsrv_websocket_packet_frame_len16 {
47 uint16_t len16;
48};
49
50typedef struct pkrsrv_websocket_packet_frame_len64 pkrsrv_websocket_packet_frame_len64_t;
51struct __attribute__((packed))
52pkrsrv_websocket_packet_frame_len64 {
54 // uint8_t len64[8];
55 int64_t len64;
56};
57
58#define PKRSRV_WEBSOCKET_GUID "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
59
60#define HTTP_HEADER_BUFF_SIZE 1000
61#define HTTP_PROP_BUFF_SIZE 40
62#define HTTP_VAL_BUFF_SIZE 50
63
72
76
77typedef struct pkrsrv_websocket_header {
78 uint8_t header0_16[2];
79 uint8_t fin;
80 uint64_t plen;
81 uint16_t plen16;
82 uint64_t plen64;
83 uint8_t opcode;
84 uint8_t is_masked;
85 unsigned char mkey[4];
86 int mask_i;
88
89typedef struct pkrsrv_websocket_payload {
90 ssize_t length;
91 unsigned char* data;
93
94typedef struct pkrsrv_websocket {
95 int (*read)(SSL* ssl, void* buffer, ssize_t length);
96 int (*write)(SSL* ssl, void* buffer, ssize_t length);
99 char* buffer;
102 pthread_mutex_t* write_mutex;
104
105extern char* pkrsrv_websocket_generate_ws_accept_key(char* websocket_key);
109extern ssize_t pkrsrv_websocket_read_payload(pkrsrv_websocket_t* ws, SSL* ssl, void* buffer, ssize_t size);
110extern ssize_t pkrsrv_websocket_send_header(pkrsrv_websocket_t* ws, SSL* ssl, ssize_t length);
111extern void pkrsrv_websocket_fragmented_begin(pkrsrv_websocket_t* ws, SSL* ssl, size_t length);
112extern ssize_t pkrsrv_websocket_fragmented_put(pkrsrv_websocket_t* ws, SSL* ssl, void* data, ssize_t length);
113
bool is_fragmented
Definition websocket.h:98
int mask_i
Definition websocket.h:86
char * buffer
Definition websocket.h:99
pkrsrv_websocket_header_t current_header
Definition websocket.h:97
ssize_t length
Definition websocket.h:90
uint64_t plen
Definition websocket.h:80
unsigned char * data
Definition websocket.h:91
uint8_t opcode
Definition websocket.h:83
uint16_t plen16
Definition websocket.h:81
uint8_t is_masked
Definition websocket.h:84
pthread_mutex_t * write_mutex
Definition websocket.h:102
int buffer_length
Definition websocket.h:100
uint64_t plen64
Definition websocket.h:82
uint8_t fin
Definition websocket.h:79
int buffer_readed
Definition websocket.h:101
struct __attribute__((packed)) pkrsrv_websocket_packet_frame_len8
Definition websocket.h:38
ssize_t pkrsrv_websocket_read_payload(pkrsrv_websocket_t *ws, SSL *ssl, void *buffer, ssize_t size)
struct pkrsrv_websocket_packet_frame_len16 pkrsrv_websocket_packet_frame_len16_t
Definition websocket.h:43
#define pkrsrv_websocket_packet_frame_header
Definition websocket.h:32
char * pkrsrv_websocket_generate_ws_accept_key(char *websocket_key)
struct pkrsrv_websocket_packet_frame_len8 pkrsrv_websocket_packet_frame_len8_t
Definition websocket.h:37
PKRSRV_WEBSOCKET_RESPONSE
Definition websocket.h:73
PKRSRV_WEBSOCKET_HTTP_HEADER_PARSER_STATE
Definition websocket.h:64
void pkrsrv_websocket_fragmented_begin(pkrsrv_websocket_t *ws, SSL *ssl, size_t length)
struct pkrsrv_websocket_packet_frame_len64 pkrsrv_websocket_packet_frame_len64_t
Definition websocket.h:50
void pkrsrv_websocket_init(pkrsrv_websocket_t *ws)
ssize_t pkrsrv_websocket_send_header(pkrsrv_websocket_t *ws, SSL *ssl, ssize_t length)
ssize_t pkrsrv_websocket_read_header(pkrsrv_websocket_t *ws, SSL *ssl)
ssize_t pkrsrv_websocket_fragmented_put(pkrsrv_websocket_t *ws, SSL *ssl, void *data, ssize_t length)
ssize_t pkrsrv_websocket_read_http_header(pkrsrv_websocket_t *ws, SSL *ssl)
@ PKRSRV_WEBSOCKET_RESPONSE_INSTANCE_PORT
Definition websocket.h:74
@ PKRSRV_WEBSOCKET_HTTP_HEADER_PARSER_STATE_VAL
Definition websocket.h:68
@ PKRSRV_WEBSOCKET_HTTP_HEADER_PARSER_STATE_PROP
Definition websocket.h:66
@ PKRSRV_WEBSOCKET_HTTP_HEADER_PARSER_STATE_CR
Definition websocket.h:69
@ PKRSRV_WEBSOCKET_HTTP_HEADER_PARSER_STATE_END
Definition websocket.h:70
@ PKRSRV_WEBSOCKET_HTTP_HEADER_PARSER_STATE_METHOD
Definition websocket.h:65
@ PKRSRV_WEBSOCKET_HTTP_HEADER_PARSER_STATE_SPACE
Definition websocket.h:67
Definition websocket.h:77
Definition websocket.h:89
Definition websocket.h:94