42 snmp_pbuf_stream_init(
struct snmp_pbuf_stream* pbuf_stream,
struct pbuf* p,
u16_t offset,
u16_t length)
44 pbuf_stream->offset = offset;
45 pbuf_stream->length = length;
46 pbuf_stream->pbuf = p;
52 snmp_pbuf_stream_read(
struct snmp_pbuf_stream* pbuf_stream,
u8_t* data)
54 if (pbuf_stream->length == 0) {
62 pbuf_stream->offset++;
63 pbuf_stream->length--;
69 snmp_pbuf_stream_write(
struct snmp_pbuf_stream* pbuf_stream,
u8_t data)
71 return snmp_pbuf_stream_writebuf(pbuf_stream, &data, 1);
75 snmp_pbuf_stream_writebuf(
struct snmp_pbuf_stream* pbuf_stream,
const void* buf,
u16_t buf_len)
77 if (pbuf_stream->length < buf_len) {
85 pbuf_stream->offset += buf_len;
86 pbuf_stream->length -= buf_len;
92 snmp_pbuf_stream_writeto(
struct snmp_pbuf_stream* pbuf_stream,
struct snmp_pbuf_stream* target_pbuf_stream,
u16_t len)
95 if ((pbuf_stream ==
NULL) || (target_pbuf_stream ==
NULL)) {
98 if ((len > pbuf_stream->length) || (len > target_pbuf_stream->length)) {
103 len =
LWIP_MIN(pbuf_stream->length, target_pbuf_stream->length);
110 struct pbuf*
pbuf =
pbuf_skip(pbuf_stream->pbuf, pbuf_stream->offset, &target_offset);
112 if ((pbuf ==
NULL) || (pbuf->
len == 0)) {
117 err = snmp_pbuf_stream_writebuf(target_pbuf_stream, &((
u8_t*)pbuf->
payload)[target_offset], chunk_len);
122 pbuf_stream->offset += chunk_len;
123 pbuf_stream->length -= chunk_len;
131 snmp_pbuf_stream_seek(
struct snmp_pbuf_stream* pbuf_stream,
s32_t offset)
133 if ((offset < 0) || (offset > pbuf_stream->length)) {
138 pbuf_stream->offset += (
u16_t)offset;
139 pbuf_stream->length -= (
u16_t)offset;
145 snmp_pbuf_stream_seek_abs(
struct snmp_pbuf_stream* pbuf_stream,
u32_t offset)
147 s32_t rel_offset = offset - pbuf_stream->offset;
148 return snmp_pbuf_stream_seek(pbuf_stream, rel_offset);
struct pbuf * pbuf_skip(struct pbuf *in, u16_t in_offset, u16_t *out_offset)
u16_t pbuf_copy_partial(struct pbuf *buf, void *dataptr, u16_t len, u16_t offset)
err_t pbuf_take_at(struct pbuf *buf, const void *dataptr, u16_t len, u16_t offset)