7#ifndef __PROSECCOAP_H__
8#define __PROSECCOAP_H__
115 uint16_t _currentOptionNumber;
176 size_t _messageLength;
191 ErrorCode _insert(
size_t startPosition,
const uint8_t *data,
size_t length);
204 ErrorCode _remove(
size_t startPosition,
size_t length);
214 static uint16_t _getNextId();
223 void _setId(uint16_t
id);
270 return this->_message;
316 return (this->_message[0] >> 6) & 0x03;
325 return this->_messageLength;
362 uint16_t
getId()
const;
432 bool matchesToken(
const uint8_t *token,
size_t length)
const;
682 struct RetransmissionEntry
697 unsigned long nextAttemptDeadline = 0;
708 RetransmissionEntry() =
default;
722 void set(
Coap::Message message, IPAddress ip, uint16_t port);
742 unsigned long getDeadline()
const
744 return this->nextAttemptDeadline;
752 void setAsCompleted()
774 class RetransmissionQueue
783 RetransmissionQueue() =
default;
843 Detail::UriRegistry _serverRegistry;
845 Detail::RetransmissionQueue _retransmissionQueue;
863 Node(UDP &
udp, uint16_t port) : _udp(&
udp), _port(port), _responseHandler(nullptr), _retransmissionQueue() {}
This header file contains detail functions, not meant for public use.
Utility functions for the ProsecCoAP library.
A CoAP message.
Definition ProsecCoAP.h:164
uint16_t getId() const
Get the message ID.
Definition ProsecCoAP.cpp:159
void setCode(MessageCode code)
Set the message code.
Definition ProsecCoAP.cpp:238
MessageCode getCode() const
Get the message code.
Definition ProsecCoAP.cpp:243
ErrorCode getObserveValue(uint32_t &observeValue)
Extract the Observe option value, if present.
Definition ProsecCoAP.cpp:893
MessageType getType() const
Get the message type.
Definition ProsecCoAP.cpp:231
ErrorCode getPath(String *path) const
Retrieve all the URI path and URI query options from the message and concatenate them into a single s...
Definition ProsecCoAP.cpp:952
size_t getLength() const
Get the message length.
Definition ProsecCoAP.h:323
ErrorCode getPayload(const uint8_t *&payload, size_t &length) const
Get the payload from the message.
Definition ProsecCoAP.cpp:764
size_t getTokenLength() const
Get the current token length.
Definition ProsecCoAP.cpp:248
static ErrorCode fromUdp(UDP *udp, Message &message)
Build a CoAP message reading from a UDP instance.
Definition ProsecCoAP.cpp:53
uint8_t getVersion() const
Get the CoAP version of this message.
Definition ProsecCoAP.h:314
ErrorCode addPort(uint16_t port)
Add the Uri-Port option to the message.
Definition ProsecCoAP.cpp:570
ErrorCode addPayload(const uint8_t *payload, size_t length)
Add a payload to the message.
Definition ProsecCoAP.cpp:802
ErrorCode addOption(Option option)
Add an option to the message.
Definition ProsecCoAP.h:476
ErrorCode addOption(OptionNumber number, const uint8_t *value, size_t length)
Add an option to the message.
Definition ProsecCoAP.cpp:312
OptionIterator getOptionIterator() const
Return an iterator over the message options.
Definition ProsecCoAP.cpp:551
Message()
Builds a default CoAP message.
Definition ProsecCoAP.h:235
const uint8_t * asRaw() const
Get the raw binary representation of the message.
Definition ProsecCoAP.h:268
ErrorCode buildResponse(MessageCode code, Message &response) const
Build a response message based on a request message.
Definition ProsecCoAP.cpp:86
const uint8_t * getToken() const
Get the pointer to the current token.
Definition ProsecCoAP.cpp:294
ErrorCode addPath(const char *path)
Add the URI path and query to the message.
Definition ProsecCoAP.cpp:588
bool isObserveDeregister()
Check if the message is an Observe deregister GET request.
Definition ProsecCoAP.cpp:938
ErrorCode buildNotification(Observer &observer, Message ¬ification) const
Build a notification message for the given observer.
Definition ProsecCoAP.cpp:109
ErrorCode setToken(const uint8_t *token, size_t length)
Sets the token of the message with the given value and length.
Definition ProsecCoAP.cpp:254
bool isObserveRegister()
Check if the message is an Observe register GET request.
Definition ProsecCoAP.cpp:924
ErrorCode addRandomToken(size_t length)
Add a token of the given length to the message.
Definition ProsecCoAP.cpp:278
bool matchesToken(const uint8_t *token, size_t length) const
Check if the message token matches the given token and length.
Definition ProsecCoAP.cpp:301
ErrorCode addHost(IPAddress ip)
Add the Uri-Host option to the message.
Definition ProsecCoAP.cpp:557
void setType(MessageType type)
Set the message type.
Definition ProsecCoAP.cpp:223
Message(MessageType type, MessageCode code)
Builds a CoAP message with the given type and code.
Definition ProsecCoAP.h:247
The CoAP node that runs on this device.
Definition ProsecCoAP.h:834
Node(UDP &udp, uint16_t port)
Build a CoAP node using the given UDP instance and port.
Definition ProsecCoAP.h:863
ErrorCode loop()
Perform a single iteration of the CoAP event loop.
Definition ProsecCoAP.cpp:1094
ErrorCode start()
Start the CoAP instance.
Definition ProsecCoAP.cpp:1081
void setResponseHandler(Callback handler)
Set the response callback.
Definition ProsecCoAP.h:898
uint16_t getPort() const
Get the local port used by this CoAP node.
Definition ProsecCoAP.h:869
ErrorCode sendMessage(const Message &message, IPAddress ip, uint16_t port)
Send a CoAP message to the specified IP address and port.
Definition ProsecCoAP.cpp:1195
ErrorCode serve(const char *path, Callback callback)
Serve a given URI path with the specified callback.
Definition ProsecCoAP.cpp:1076
Node(UDP &udp)
Build a CoAP node using the given UDP instance.
Definition ProsecCoAP.h:855
A remote CoAP observer, actively observing a resource.
Definition Observers.h:23
The option iterator.
Definition ProsecCoAP.h:98
OptionIterator(const Message &message)
Initialize the option iterator for the given message.
Definition ProsecCoAP.cpp:544
ErrorCode next(Option &option)
Get the next option in the message.
Definition ProsecCoAP.cpp:662
#define COAP_ACK_MAX_TIMEOUT_MS
The precomputed maximum ACK timeout derived from the minimum timeout and the random factor.
Definition Definitions.h:85
#define COAP_MAX_MESSAGE_SIZE
Maximum size of a CoAP message in bytes.
Definition Definitions.h:46
#define COAP_MAX_RETRANSMIT
The maximum number of retransmission attempts for confirmable messages. Default to 4 as per RFC 7252,...
Definition Definitions.h:92
#define COAP_CONFIRMABLE_MESSAGE_QUEUE_SIZE
The maximum number of confirmable messages that are stored for retransmission.
Definition Definitions.h:104
ErrorCode getRandomToken(size_t length, uint8_t *buffer)
Generate a random token of the given length.
Definition ProsecCoAP.cpp:8
constexpr uint16_t COAP_DEFAULT_PORT
The default CoAP port number.
Definition Definitions.h:139
Namespace for the library.
Definition Definitions.h:155
void(* Callback)(Message &message, IPAddress ip, uint16_t port)
Callback function type for handling incoming messages.
Definition Definitions.h:355
ErrorCode
Error codes used in the library.
Definition Definitions.h:321
MessageType
The CoAP message type.
Definition Definitions.h:164
OptionNumber
Definition Definitions.h:255
MessageCode
The CoAP code.
Definition Definitions.h:186
ContentFormat
The CoAP content format.
Definition Definitions.h:286
WiFiUDP udp
Definition serverEsp32.ino:17
IPAddress ip(192, 168, 0, DEVICE_ID)
A CoAP option.
Definition ProsecCoAP.h:62
Option(OptionNumber number, const uint8_t *value, size_t length)
Build a CoAP option.
Definition ProsecCoAP.h:87
size_t length
Length of the option value in bytes.
Definition ProsecCoAP.h:78
OptionNumber number
The option number.
Definition ProsecCoAP.h:68
const uint8_t * value
Pointer to the option value.
Definition ProsecCoAP.h:74
Option()
Definition ProsecCoAP.h:80