From 42a8a587c4669387340100e8e1cf35f1a19a8882 Mon Sep 17 00:00:00 2001 From: Benjamin Valentin Date: Fri, 23 Sep 2022 19:47:02 +0200 Subject: [PATCH] nanocoap_sock: add nanocoap_sock_{put, post}_url() --- sys/include/net/nanocoap_sock.h | 32 +++++++++++++++++++++++ sys/net/application_layer/nanocoap/sock.c | 30 +++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/sys/include/net/nanocoap_sock.h b/sys/include/net/nanocoap_sock.h index 077dde7170..610b69db57 100644 --- a/sys/include/net/nanocoap_sock.h +++ b/sys/include/net/nanocoap_sock.h @@ -240,6 +240,22 @@ ssize_t nanocoap_sock_put(nanocoap_sock_t *sock, const char *path, const void *request, size_t len, void *response, size_t len_max); +/** + * @brief Simple synchronous CoAP (confirmable) PUT to URL + * + * @param[in] url Absolute URL pointer to source path + * @param[in] request buffer containing the payload + * @param[in] len length of the payload to send + * @param[out] response buffer for the response, may be NULL + * @param[in] len_max length of @p response + * + * @returns length of response payload on success + * @returns <0 on error + */ +ssize_t nanocoap_sock_put_url(const char *url, + const void *request, size_t len, + void *response, size_t len_max); + /** * @brief Simple synchronous CoAP (confirmable) POST * @@ -257,6 +273,22 @@ ssize_t nanocoap_sock_post(nanocoap_sock_t *sock, const char *path, const void *request, size_t len, void *response, size_t len_max); +/** + * @brief Simple synchronous CoAP (confirmable) POST to URL + * + * @param[in] url Absolute URL pointer to source path + * @param[in] request buffer containing the payload + * @param[in] len length of the payload to send + * @param[out] response buffer for the response, may be NULL + * @param[in] len_max length of @p response + * + * @returns length of response payload on success + * @returns <0 on error + */ +ssize_t nanocoap_sock_post_url(const char *url, + const void *request, size_t len, + void *response, size_t len_max); + /** * @brief Performs a blockwise coap get request on a socket. * diff --git a/sys/net/application_layer/nanocoap/sock.c b/sys/net/application_layer/nanocoap/sock.c index 2d81c0b099..ff7667adcf 100644 --- a/sys/net/application_layer/nanocoap/sock.c +++ b/sys/net/application_layer/nanocoap/sock.c @@ -361,6 +361,36 @@ ssize_t nanocoap_sock_post(nanocoap_sock_t *sock, const char *path, return _sock_put_post(sock, path, COAP_METHOD_POST, request, len, response, len_max); } +static ssize_t _sock_put_post_url(const char *url, unsigned code, + const void *request, size_t len, + void *response, size_t len_max) +{ + nanocoap_sock_t sock; + int res = nanocoap_sock_url_connect(url, &sock); + if (res) { + return res; + } + + res = _sock_put_post(&sock, sock_urlpath(url), code, request, len, response, len_max); + nanocoap_sock_close(&sock); + + return res; +} + +ssize_t nanocoap_sock_put_url(const char *url, + const void *request, size_t len, + void *response, size_t len_max) +{ + return _sock_put_post_url(url, COAP_METHOD_PUT, request, len, response, len_max); +} + +ssize_t nanocoap_sock_post_url(const char *url, + const void *request, size_t len, + void *response, size_t len_max) +{ + return _sock_put_post_url(url, COAP_METHOD_POST, request, len, response, len_max); +} + ssize_t nanocoap_request(coap_pkt_t *pkt, const sock_udp_ep_t *local, const sock_udp_ep_t *remote, size_t len) {