Skip to content

Commit 6ec7271

Browse files
Add UdpContext seek and tell
1 parent 291bc6b commit 6ec7271

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

libraries/ESP8266WiFi/src/include/UdpContext.h

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ extern "C" {
2727
void esp_yield();
2828
void esp_schedule();
2929
#include "lwip/init.h" // LWIP_VERSION_
30+
#include <assert.h>
3031
}
3132

3233

@@ -143,6 +144,17 @@ class UdpContext
143144
return _rx_buf->len - _rx_buf_offset;
144145
}
145146

147+
size_t tell() const
148+
{
149+
return _rx_buf_offset;
150+
}
151+
152+
void seek(const size_t pos)
153+
{
154+
assert(pos <= _rx_buf->len);
155+
_rx_buf_offset = pos;
156+
}
157+
146158
uint32_t getRemoteAddress()
147159
{
148160
if (!_rx_buf)
@@ -203,7 +215,7 @@ class UdpContext
203215

204216
int read()
205217
{
206-
if (!_rx_buf || _rx_buf_offset == _rx_buf->len)
218+
if (!_rx_buf || _rx_buf_offset >= _rx_buf->len)
207219
return -1;
208220

209221
char c = reinterpret_cast<char*>(_rx_buf->payload)[_rx_buf_offset];
@@ -361,6 +373,9 @@ class UdpContext
361373
void _consume(size_t size)
362374
{
363375
_rx_buf_offset += size;
376+
if (_rx_buf_offset > _rx_buf->len) {
377+
_rx_buf_offset = _rx_buf->len;
378+
}
364379
}
365380

366381
void _recv(udp_pcb *upcb, pbuf *pb,

0 commit comments

Comments
 (0)