LibWS/websocket.h

40 lines
769 B
C
Raw Normal View History

2018-09-17 18:06:08 +08:00
#pragma once
#include <string>
#include "GSock/gsock.h"
int HandleKey(sock& s, const std::string& key);
int Handshake(sock& s);
struct WSFrame
{
// 1 bit
bool fin;
// 1 bit
bool rsv1, rsv2, rsv3;
// 0x0 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
// 0x1 <20>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>֡
// 0x2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
// 0x3~7 <20><><EFBFBD><EFBFBD>
// 0x8 <20><><EFBFBD>ӹر<D3B9>
// 0x9 ping
// 0xA pong
// 0xB~F <20><><EFBFBD><EFBFBD>
// 4 bit
int opcode;
// 1 bit
bool ismask;
unsigned long long len;
// 4 byte
char mask[4];
// data<74><61>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB4A6>)
std::string data;
};
int ReadFrame(sock& s, WSFrame& f);
int SendFrame(sock& s, const WSFrame& f);
int SendPong(sock& s, const WSFrame& ping);
int ReadMsg(sock& s, std::string& out_data);
int SendMsg(sock& s, const std::string& data, bool is_text = true);