40 lines
769 B
C
40 lines
769 B
C
|
#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);
|