Packet.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * Packet.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include <WString.h>
14 
18 struct Packet {
19  uint8_t* data;
20  mutable uint16_t pos;
21 
22  Packet(void* data, uint16_t pos = 0) : data(static_cast<uint8_t*>(data)), pos(pos)
23  {
24  }
25 
26  const uint8_t* ptr() const
27  {
28  return data + pos;
29  }
30 
31  uint8_t* ptr()
32  {
33  return data + pos;
34  }
35 
36  void skip(uint16_t len) const
37  {
38  pos += len;
39  }
40 
41  uint8_t peek8() const
42  {
43  return data[pos];
44  }
45 
46  uint8_t read8() const
47  {
48  return data[pos++];
49  }
50 
51  void read(void* buffer, uint16_t len) const
52  {
53  memcpy(buffer, ptr(), len);
54  pos += len;
55  }
56 
57  String readString(uint16_t length) const
58  {
59  String s;
60  if(s.setLength(length)) {
61  read(s.begin(), length);
62  } else {
63  pos += length;
64  }
65  return s;
66  }
67 
68  void write8(uint8_t value)
69  {
70  data[pos++] = value;
71  }
72 
73  void write(const void* s, uint16_t len)
74  {
75  memcpy(ptr(), s, len);
76  pos += len;
77  }
78 };
79 
83 struct NetworkPacket : public Packet {
84  using Packet::Packet;
85 
86  uint16_t peek16() const
87  {
88  return (data[pos] << 8) | data[pos + 1];
89  }
90 
91  uint16_t read16() const
92  {
93  return (read8() << 8) | read8();
94  }
95 
96  uint32_t read32() const
97  {
98  return (read16() << 16) | read16();
99  }
100 
101  void write16(uint16_t value)
102  {
103  write8(value >> 8);
104  write8(value & 0xff);
105  }
106 
107  void write32(uint32_t value)
108  {
109  write16(value >> 16);
110  write16(value & 0xffff);
111  }
112 };
113 
117 struct HostPacket : public Packet {
118  using Packet::Packet;
119 
120  uint16_t peek16() const
121  {
122  return data[pos] | (data[pos + 1] << 8);
123  }
124 
125  uint16_t read16() const
126  {
127  return read8() | (read8() << 8);
128  }
129 
130  uint32_t read32() const
131  {
132  return read16() | (read16() << 16);
133  }
134 
135  void write16(uint16_t value)
136  {
137  write8(value & 0xff);
138  write8(value >> 8);
139  }
140 
141  void write32(uint32_t value)
142  {
143  write16(value & 0xffff);
144  write16(value >> 16);
145  }
146 };
The String class.
Definition: WString.h:137
bool setLength(size_t length)
set the string length accordingly, expanding if necessary
char * begin()
Get a modifiable pointer to String content.
Definition: WString.h:625
Helper class for reading/writing packet content in host byte-order (LSB first)
Definition: Packet.h:117
void write16(uint16_t value)
Definition: Packet.h:135
void write32(uint32_t value)
Definition: Packet.h:141
uint16_t read16() const
Definition: Packet.h:125
uint32_t read32() const
Definition: Packet.h:130
uint16_t peek16() const
Definition: Packet.h:120
Helper class for reading/writing packet content in network byte-order (MSB first)
Definition: Packet.h:83
void write32(uint32_t value)
Definition: Packet.h:107
uint32_t read32() const
Definition: Packet.h:96
void write16(uint16_t value)
Definition: Packet.h:101
uint16_t read16() const
Definition: Packet.h:91
uint16_t peek16() const
Definition: Packet.h:86
Helper class for reading/writing packet content.
Definition: Packet.h:18
uint8_t read8() const
Definition: Packet.h:46
void write8(uint8_t value)
Definition: Packet.h:68
uint8_t * ptr()
Definition: Packet.h:31
uint8_t peek8() const
Definition: Packet.h:41
void skip(uint16_t len) const
Definition: Packet.h:36
const uint8_t * ptr() const
Definition: Packet.h:26
uint16_t pos
Definition: Packet.h:20
void read(void *buffer, uint16_t len) const
Definition: Packet.h:51
String readString(uint16_t length) const
Definition: Packet.h:57
void write(const void *s, uint16_t len)
Definition: Packet.h:73
Packet(void *data, uint16_t pos=0)
Definition: Packet.h:22
uint8_t * data
Definition: Packet.h:19