My Project
WebSocketFrame.h
1 #pragma once
2 #include "WebSocketCommon.h"
3 #include "ByteBuffer.h"
4 #include <vector>
5 using namespace std;
6 namespace NPL
7 {
8  namespace WebSocket
9  {
10 
12  {
13  public:
15  ~WebSocketFrame();
16  std::vector<byte>& getMask() {
17  return mask;
18  };
19  byte getOpCode() {
20  return (byte)(finRsvOp & 0x0F);
21  };
22 
23  ByteBuffer getPayload() {
24  return data;
25  };
26  int getPayloadLength() {
27  return data.bytesRemaining();
28  };
29  bool isMasked() {
30  return masked;
31  }
32  bool isFin() {
33  return (byte)(finRsvOp & 0x80) != 0;
34  };
35  void setFin(bool fin) {
36  // set bit 1
37  finRsvOp = (byte)((finRsvOp & 0x7F) | (fin ? 0x80 : 0x00));
38  };
39  void setMask(const std::vector<byte>& maskingKey);
40  void setMask(const byte* data, int nCount=4);
41  void setMasked(bool mask) {
42  masked = mask;
43  };
44  void setOpCode(byte op) {
45  finRsvOp = (byte)((finRsvOp & 0xF0) | (op & 0x0F));
46  };
47  void setPayload(ByteBuffer& buffer) {
48  data.clear();
49  append(buffer,buffer.bytesRemaining());
50  };
51  void append(ByteBuffer& buffer,int needed_len);;
52  void setRsv1(bool rsv1) {
53  // set bit 2
54  finRsvOp = (byte)((finRsvOp & 0xBF) | (rsv1 ? 0x40 : 0x00));
55  };
56  void setRsv2(bool rsv2) {
57  // set bit 3
58  finRsvOp = (byte)((finRsvOp & 0xDF) | (rsv2 ? 0x20 : 0x00));
59  };
60  void setRsv3(bool rsv3) {
61  // set bit 4
62  finRsvOp = (byte)((finRsvOp & 0xEF) | (rsv3 ? 0x10 : 0x00));
63  };
64  bool isRsv1() {
65  return (byte)(finRsvOp & 0x40) != 0;
66  };
67  bool isRsv2() {
68  return (byte)(finRsvOp & 0x20) != 0;
69  };
70  bool isRsv3() {
71  return (byte)(finRsvOp & 0x10) != 0;
72  };
73  bool hasPayload() {
74  return getPayloadLength() > 0;
75  };
76  void reset();;
77  void assertValid();
78 
79  void loadData(std::vector<byte>& outData);
80  int size() { return data.bytesRemaining(); };
81  private:
93  byte finRsvOp;
94  bool masked;
95  ByteBuffer data;
96  std::vector<byte> mask;
97  };
98  }
99 }
define this to enable debugging of NPL code in visual studio
Definition: INPL.h:9
Definition: ByteBuffer.h:47
uint32_t bytesRemaining()
Bytes Remaining Returns the number of bytes from the current read position till the end of the buffer...
Definition: ByteBuffer.cpp:71
Definition: WebSocketFrame.h:11