Go to the documentation of this file.
32 #define TRACE_LEVEL COAP_TRACE_LEVEL
44 #if (COAP_SERVER_SUPPORT == ENABLED)
67 #if (COAP_SERVER_DTLS_SUPPORT == ENABLED)
73 #if (COAP_SERVER_OBSERVE_SUPPORT == ENABLED)
86 #if (COAP_SERVER_DTLS_SUPPORT == ENABLED)
94 #if (COAP_SERVER_OBSERVE_SUPPORT == ENABLED)
112 #if (COAP_SERVER_DTLS_SUPPORT == ENABLED || COAP_SERVER_OBSERVE_SUPPORT == ENABLED)
117 TRACE_INFO(
"Initializing CoAP server...\r\n");
120 if(context == NULL || settings == NULL)
123 #if (COAP_SERVER_DTLS_SUPPORT == ENABLED)
128 #if (COAP_SERVER_OBSERVE_SUPPORT == ENABLED)
143 context->taskParams = settings->
task;
153 context->netContext = settings->
interface->netContext;
161 context->interface = settings->
interface;
162 context->port = settings->
port;
166 #if (COAP_SERVER_DTLS_SUPPORT == ENABLED)
169 context->sessions = settings->
sessions;
172 for(i = 0; i < context->numSessions; i++)
181 #if (COAP_SERVER_OBSERVE_SUPPORT == ENABLED)
184 context->resources = settings->
resources;
187 for(i = 0; i < context->numResources; i++)
194 context->observers = settings->
observers;
197 for(i = 0; i < context->numObservers; i++)
207 context->mid = (uint16_t)
netGetRand(context->netContext);
229 #if (COAP_SERVER_DTLS_SUPPORT == ENABLED && TLS_TICKET_SUPPORT == ENABLED)
265 const uint8_t *cookieSecret,
size_t cookieSecretLen)
267 #if (COAP_SERVER_DTLS_SUPPORT == ENABLED)
269 if(context == NULL || cookieSecret == NULL)
275 osMemcpy(context->cookieSecret, cookieSecret, cookieSecretLen);
277 context->cookieSecretLen = cookieSecretLen;
316 if(context->socket == NULL)
342 if(context->udpInitCallback != NULL)
345 error = context->udpInitCallback(context, context->socket);
352 context->stop =
FALSE;
353 context->running =
TRUE;
357 context, &context->taskParams);
374 context->running =
FALSE;
378 context->socket = NULL;
394 #if (COAP_SERVER_DTLS_SUPPORT == ENABLED)
408 #if (NET_RTOS_SUPPORT == ENABLED)
410 context->stop =
TRUE;
415 while(context->running)
421 #if (COAP_SERVER_DTLS_SUPPORT == ENABLED)
423 for(i = 0; i < context->numSessions; i++)
432 context->socket = NULL;
449 #if (COAP_SERVER_OBSERVE_SUPPORT == ENABLED)
455 if(context == NULL || uri == NULL)
475 for(i = 0; i < context->numResources; i++)
478 if(context->resources[i].uri[0] ==
'\0')
480 resource = &context->resources[i];
492 resource->dataLen = 0;
496 resource->seqNum =
netGetRand(context->netContext) & 0x00FFFFFF;
528 #if (COAP_SERVER_OBSERVE_SUPPORT == ENABLED)
535 if(context == NULL || uri == NULL)
557 resource->dataLen =
length;
562 resource->seqNum = (resource->seqNum + 1) & 0x00FFFFFF;
565 for(i = 0; i < context->numObservers; i++)
568 observer = &context->observers[i];
571 if(observer->resource == resource)
574 observer->changed =
TRUE;
609 #if (COAP_SERVER_OBSERVE_SUPPORT == ENABLED)
616 if(context == NULL || uri == NULL)
632 for(i = 0; i < context->numObservers; i++)
635 observer = &context->observers[i];
638 if(observer->resource == resource)
642 observer->resource = NULL;
645 observer->changed =
TRUE;
681 #if (NET_RTOS_SUPPORT == ENABLED)
690 eventDesc.
socket = context->socket;
701 context->running =
FALSE;
713 msg.
data = context->buffer;
728 context->bufferLen = msg.
length;
734 context->remotePort = msg.
srcPort;
739 #if (COAP_SERVER_DTLS_SUPPORT == ENABLED)
741 if(context->dtlsInitCallback != NULL)
766 #if (NET_RTOS_SUPPORT == ENABLED)
786 #if (COAP_SERVER_DTLS_SUPPORT == ENABLED && TLS_TICKET_SUPPORT == ENABLED)
NetInterface * interface
Underlying network interface.
OsTaskId osCreateTask(const char_t *name, OsTaskCode taskCode, void *arg, const OsTaskParameters *params)
Create a task.
error_t socketBind(Socket *socket, const IpAddr *localIpAddr, uint16_t localPort)
Associate a local address with a socket.
error_t tlsInitTicketContext(TlsTicketContext *ticketContext)
Initialize ticket encryption context.
bool_t osCreateMutex(OsMutex *mutex)
Create a mutex object.
Message and ancillary data.
#define OS_INVALID_TASK_ID
void socketClose(Socket *socket)
Close an existing socket.
error_t coapServerUpdateResource(CoapServerContext *context, const char_t *uri, const void *data, size_t length)
Update the state of an observable resource.
void coapServerTask(CoapServerContext *context)
CoAP server task.
uint_t numSessions
Maximum number of DTLS sessions.
CoapServerUdpInitCallback udpInitCallback
UDP initialization callback.
void * data
Pointer to the payload.
Helper functions for CoAP server.
error_t coapServerProcessMessage(CoapServerContext *context, const uint8_t *data, size_t length)
Process CoAP message.
Structure describing socket events.
#define COAP_SERVER_TICK_INTERVAL
uint16_t port
CoAP port number.
error_t coapServerDeleteResource(CoapServerContext *context, const char_t *uri)
Delete an observable resource.
OsTaskParameters task
Task parameters.
void osDeleteTask(OsTaskId taskId)
Delete a task.
NetInterface * interface
Underlying network interface.
const SocketMsg SOCKET_DEFAULT_MSG
void coapServerTick(CoapServerContext *context)
Handle periodic operations.
size_t length
Actual length of the payload, in bytes.
uint_t numObservers
Maximum number of observers.
@ ERROR_INVALID_PARAMETER
Invalid parameter.
#define osMemcpy(dest, src, length)
uint32_t netGetRand(NetContext *context)
Generate a random 32-bit value.
CoapServerObserveCallback observeCallback
Observe callback.
bool_t ipIsMulticastAddr(const IpAddr *ipAddr)
Determine whether an IP address is a multicast address.
void(* OsTaskCode)(void *arg)
Task routine.
#define COAP_SERVER_PRIORITY
CoapObserver * observers
Observers.
void coapServerDeleteSession(CoapDtlsSession *session)
Delete DTLS session.
void osDeleteEvent(OsEvent *event)
Delete an event object.
IpAddr srcIpAddr
Source IP address.
error_t socketReceiveMsg(Socket *socket, SocketMsg *message, uint_t flags)
Receive a message from a connectionless socket.
NetContext * netGetDefaultContext(void)
Get default TCP/IP stack context.
const OsTaskParameters OS_TASK_DEFAULT_PARAMS
error_t coapServerInit(CoapServerContext *context, const CoapServerSettings *settings)
CoAP server initialization.
uint_t eventFlags
Returned events.
NetContext * netContext
TCP/IP stack context.
CoapResource * coapServerFindResource(CoapServerContext *context, const char_t *uri)
Search the list of resources for a given URI.
error_t socketPoll(SocketEventDesc *eventDesc, uint_t size, OsEvent *extEvent, systime_t timeout)
Wait for one of a set of sockets to become ready to perform I/O.
#define socketBindToInterface
IpAddr destIpAddr
Destination IP address.
void osDeleteMutex(OsMutex *mutex)
Delete a mutex object.
error_t coapServerDemultiplexSession(CoapServerContext *context)
DTLS session demultiplexing.
Data logging functions for debugging purpose (CoAP)
#define COAP_SERVER_MAX_URI_LEN
void coapServerDeinit(CoapServerContext *context)
Release CoAP server context.
uint_t numResources
Maximum number of observable resources.
void osAcquireMutex(OsMutex *mutex)
Acquire ownership of the specified mutex object.
void coapServerGetDefaultSettings(CoapServerSettings *settings)
Initialize settings with default values.
void osReleaseMutex(OsMutex *mutex)
Release ownership of the specified mutex object.
Socket * socketOpenEx(NetContext *context, uint_t type, uint_t protocol)
Create a socket.
#define CoapServerContext
CoapServerRequestCallback requestCallback
CoAP request callback.
Transport protocol abstraction layer.
error_t coapServerSetCookieSecret(CoapServerContext *context, const uint8_t *cookieSecret, size_t cookieSecretLen)
Set cookie secret.
bool_t osCreateEvent(OsEvent *event)
Create an event object.
size_t size
Size of the payload, in bytes.
error_t coapServerCreateResource(CoapServerContext *context, const char_t *uri)
Create a new observable resource.
void osDelayTask(systime_t delay)
Delay routine.
void osSetEvent(OsEvent *event)
Set the specified event object to the signaled state.
CoapServerDtlsInitCallback dtlsInitCallback
DTLS initialization callback.
void tlsFreeTicketContext(TlsTicketContext *ticketContext)
Properly dispose ticket encryption context.
CoapResource * resources
Observable resources.
#define COAP_SERVER_STACK_SIZE
#define COAP_SERVER_MAX_COOKIE_SECRET_SIZE
Socket * socket
Handle to a socket to monitor.
#define osMemset(p, value, length)
error_t coapServerStop(CoapServerContext *context)
Stop CoAP server.
CoapDtlsSession * sessions
DTLS sessions.
uint16_t srcPort
Source port.
error_t socketSetTimeout(Socket *socket, systime_t timeout)
Set timeout value for blocking operations.
#define COAP_SERVER_BUFFER_SIZE
error_t coapServerStart(CoapServerContext *context)
Start CoAP server.
uint_t eventMask
Requested events.
#define COAP_SERVER_MAX_OBS_RESOURCE_SIZE