1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
Commit Graph

263 Commits

Author SHA1 Message Date
Marian Buschsieweke
d10ab413a0
Merge pull request #20952 from benpicco/nanocoap-block_robust
nanocoap/sock: re-try if wrong block was received
2024-11-05 17:24:17 +00:00
Benjamin Valentin
9b25c033de nanocoap/sock: re-try if wrong block was received 2024-11-05 18:06:31 +01:00
Marian Buschsieweke
c70075b073
Merge pull request #20950 from maribu/sys/net/nanocoap/coap_get_response_hdr_len
sys/net/nanocoap: add and use coap_get_response_hdr_len()
2024-11-05 13:09:51 +00:00
Marian Buschsieweke
68beb52f14
sys/net/nanocoap: add and use coap_get_response_hdr_len()
Before, handlers writing blockwise transfer assumed that the response
header length will match the request header length. This is true for
UDP, but not for TCP: The CoAP over TCP header contains a Len field,
that gets extended for larger messages. Since the reply often is indeed
larger than the request, this is indeed often the case for CoAP over
TCP.

Note: Right now, no CoAP over TCP implementation is upstream. However,
      getting rid of incorrect assumptions now will make life easier
      later on.
2024-11-05 10:46:02 +01:00
Marian Buschsieweke
2c93dc9c3b
sys/net/nanocoap: fix coap_build_reply_header()
In case no payload is added, `coap_build_reply_header()` would return
`sizeof(coap_hdr_t) + token_length` regardless of the actual header
length returned by `coap_build_hdr()`. These can be different if
RFC 8974 extended tokens are enabled (module `nanocoap_token_ext`
used): If an extended token length field is used, its size is not
considered.

Co-authored-by: benpicco <benpicco@googlemail.com>
2024-11-04 21:18:07 +01:00
benpicco
bada659375
Merge pull request #20918 from maribu/sys/net/nanocoap/coap_pkt_set_code
sys/nanocoap: add coap_pkt_set_code()
2024-10-17 16:02:19 +00:00
Marian Buschsieweke
f16875b6ec
sys/nanocoap: add coap_pkt_set_code()
This adds a small convenience function to set the CoAP code of a packet
and converts users of coap_hdr_set_code() where applicable.
2024-10-17 14:56:54 +02:00
Marian Buschsieweke
835571c0a7
sys/net/nanocoap: fix UB when building hdr
Some calls to `coap_build_hdr()` were done with the target buffer for
the header and the source buffer for the token overlapping:
They reuse the buffer that held the request to assemble the response in.
We cannot use `memcpy()` in this case to copy the token into the target
buffer, as source and destination would (fully) overlap.

This commit makes reusing the request buffer for the response a special
case: `memcpy()` is only used to copy the token if source and
destination address of the token differ.

An alternative fix would have been to use `memmove()` unconditionally.
But `memmove()` does not make any assumption about the layout of target
and source buffer, while we know that the token either will already be
at the right position (when reusing the request buffer for the response)
or be in a non-overlapping buffer (when generating a fresh token). This
approach is more efficient than `memmove()`.
2024-10-17 14:02:06 +02:00
Marian Buschsieweke
1fa7db2eda
Merge pull request #20855 from benpicco/coap_block_finish-fix
nanocoap: always write at least 1 byte in coap_block2_finish()
2024-09-12 15:01:19 +00:00
Fabian Hüßler
95b46ee2a5 sys/net/application_layer/nanocoap: add nanocoap_sock_get_non 2024-09-10 16:43:44 +02:00
Benjamin Valentin
66fe083d9b nanocoap: always write at least 1 byte in coap_block2_finish()
The CoAP block option gets written twice:
First a 'dummy' value is written by `coap_opt_add_block2()`, later this gets
overwritten by the real option value by coap_block2_finish().

The problem arises when the size of the option changes.
If the option ends up smaller than the dummy, we have garbage bytes after the
real option value, corrupting the packet.

To mitigate this, always write at least one option byte (which will be a 0 byte)
to ensure the dummy data is overwritten.

fixes #20686
2024-09-07 16:11:23 +02:00
Fabian Hüßler
c1535d25ba nanocoap: constify coap_match_path() API 2024-08-21 17:49:48 +02:00
Benjamin Valentin
312a550f1a treewide: remove THREAD_CREATE_STACKTEST from thread creation 2024-07-29 11:45:58 +02:00
benpicco
4ba7c46e4d
Merge pull request #20711 from fabian18/pr/gcoap_aux_local_in_req_send
gcoap: propagate local tx aux to gcoap_req_send() and in _handler_req()
2024-07-05 12:07:38 +00:00
benpicco
78da4bc1c7
Merge pull request #20725 from fabian18/pr/nanocoap_sock_fix_ctx_release
nanocoap/sock: fix state handling for mismatching message ID in `nanocoap_sock_request_cb()`
2024-06-07 16:19:13 +00:00
Fabian Hüßler
5145b29b55 nanocoap/sock: fix context release 2024-06-06 11:24:41 +02:00
Fabian Hüßler
f4b1306460 gcoap: pass aux local to _handle_req() 2024-05-31 12:04:48 +02:00
benpicco
251ea7f75a
Merge pull request #20687 from benpicco/nanocoap_fs
nanocoap_fs: add nanoCoAP as VFS backend (remote CoAP fs)
2024-05-29 15:00:24 +00:00
Benjamin Valentin
a87687c14e nanocoap_fs: add nanoCoAP as VFS backend 2024-05-29 11:32:22 +02:00
Benjamin Valentin
994211d955 nanocoap_sock: add nanocoap_sock_get_block() 2024-05-28 11:42:32 +02:00
benpicco
e62c25a015
Merge pull request #20690 from benpicco/nanocoap_get_blockwise_to_buf
nanocoap_sock: add nanocoap_get_blockwise_to_buf()
2024-05-27 16:53:44 +00:00
Fabian Hüßler
b6aa7a6ea5 nanocoap/sock: fix response token matching for piggybacked ACKs 2024-05-27 17:58:44 +02:00
Fabian Hüßler
afc9f9bf28 nanocoap/sock: nanocoap_sock_request_cb(): fix state handling 2024-05-27 17:58:44 +02:00
Fabian Hüßler
058ab2ce40 nanocoap/sock: nanocoap_sock_request_cb(): wait for response without cb 2024-05-27 17:58:16 +02:00
Fabian Hüßler
ec9a114f7a nanocoap/sock: stop retransmissions after empty ACK 2024-05-27 09:54:02 +02:00
Benjamin Valentin
c5cfecb311 nanocoap_sock: add nanocoap_get_blockwise_to_buf() 2024-05-23 16:11:52 +02:00
Benjamin Valentin
4a431c8d1a nanocoap_fileserver: add support for size2 option 2024-05-22 20:16:25 +02:00
benpicco
3f41494e59
Merge pull request #20266 from benpicco/nanocoap_reply_separate
nanocoap_sock: implement separate response
2024-05-21 17:45:22 +00:00
Benjamin Valentin
dd458cb993 nanocoap_sock: use normal udp sock in nanocoap_server() 2024-05-21 19:27:57 +02:00
Benjamin Valentin
7e69c13630 nanocoap_sock: implement nanocoap_sock_send_separate() 2024-05-21 19:27:57 +02:00
Benjamin Valentin
330a6cfb91 nanocoap_sock: add local information to coap_request_ctx_t 2024-05-21 19:27:57 +02:00
Benjamin Valentin
c280076594 nanocoap: add coap_build_empty_ack() 2024-05-21 19:27:57 +02:00
Benjamin Valentin
2c232dd0d2 nanocoap: don't set type & code twice in coap_build_reply() 2024-05-21 19:25:55 +02:00
Benjamin Valentin
879d312960 nanocoap: make token const in coap_build_hdr() 2024-05-21 19:25:55 +02:00
Benjamin Valentin
2e8f257171 nanocoap_link_format: don't drop characters in fragmented entries 2024-05-07 22:45:37 +02:00
Benjamin Valentin
13fd806f4f nanocoap_sock: add option to include token for block-wise 2024-04-10 12:36:53 +02:00
Teufelchen
b5f9772292
Merge pull request #20434 from benpicco/DTLS_MAX_BUF-fix
coap: ensure DTLS buffer is at least 200 bytes
2024-04-05 08:22:11 +00:00
Benjamin Valentin
39ba95a3ed sys/net/nanocoap: ensure DTLS buffer is at least 200 bytes 2024-04-03 21:09:29 +02:00
MrKevinWeiss
e0fdc3c16c
*Kconfig*: Modify Kconfig to remove dep model 2024-03-27 10:28:12 +01:00
Marian Buschsieweke
3d13f1fd19
Merge pull request #20499 from benpicco/coap_build_hdr-const
nanocoap: allow token to be const in coap_build_hdr()
2024-03-22 15:35:38 +00:00
Benjamin Valentin
6154c1270d nanocoap: allow token to be const in coap_build_hdr() 2024-03-22 16:02:45 +01:00
MrKevinWeiss
575ab684fe
sys/net/coap: cast in non-config define
If we try to set the compile-time config we need to always remember casting, instead, just cast in the places that are not exposed to users
2024-03-21 14:26:45 +01:00
benpicco
e3ce765a04
Merge pull request #20191 from benpicco/coap_get_method
nanocoap: introduce coap_get_method()
2024-03-19 18:20:31 +00:00
Benjamin Valentin
408218f631 nanocoap_sock: support build with IPv4 2024-03-17 17:39:44 +01:00
Benjamin Valentin
446509c177 gcoap_fileserver: use coap_get_method() 2024-02-28 11:49:56 +01:00
Marian Buschsieweke
609ad44f39
Merge pull request #20245 from benpicco/nanocoap_sock-pathquery
nanocoap_sock: always use coap_opt_put_uri_pathquery()
2024-02-19 18:28:38 +00:00
benpicco
d08fb3f144
Merge pull request #20043 from bergzand/pr/nanocoap_cache_options
nanocoap/cache: Extend with option-only cache keygen
2024-02-13 15:23:59 +00:00
011891b9cf
nanocoap/cache: Extend with option-only cache keygen
To generate cache keys based on only the options of a request. This for
matching requests of a blockwise transfer with each other
2024-02-12 21:20:39 +01:00
benpicco
d00fdcb301
Merge pull request #20030 from benpicco/nanocoap_fileserver
gcoap_fileserver: rename to nanocoap_fileserver
2024-02-01 09:08:49 +00:00
Benjamin Valentin
be399d59d0 gcoap_fileserver: rename to nanocoap_fileserver 2024-01-30 16:59:00 +01:00