#ifndef __APP_WEBSOCKET_FRAME_H__
#define __APP_WEBSOCKET_FRAME_H__
#include "memory.hpp"
class buffer;
struct websocket_frame
{
websocket_frame();
~websocket_frame();
static const unsigned int fix_min_len = 2;
static const unsigned int fix_masking_len = 4;
static const unsigned int fix_126_len = 2;
static const unsigned int fix_127_len = 8;
bool fin;
bool rsv1;
bool rsv2;
bool rsv3;
unsigned char opcode;
bool mask;
unsigned char payload_len ;
unsigned short payload_126_len;
unsigned long long payload_127_len;
unsigned char masking_key[4];
shared_ptr<buffer> payload;
unsigned int get_head_len() const ;
unsigned int get_total_len() const ;
unsigned int get_payload_len() const ;
//解包
int unpakcage( const shared_ptr<buffer> & buf );
//打包
unsigned int package_size() ;
shared_ptr<buffer> package() ;
protected:
void set_masking_key( unsigned char * data, int offset);
void get_masking_key( unsigned char * data, int offset);
};
#endif
#include "websocket_frame.hpp"
#include "buffer_pool.hpp"
#include <cstring>
#include <glog/logging.h>
#include <cstdlib>
websocket_frame::websocket_frame():fin(false)
,rsv1(false),rsv2(false),rsv3(false),mask(false),opcode(0)
,payload_len(0),payload_126_len(0),payload_127_l