Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mongoose
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
esp
mongoose
Commits
fecb11f2
Commit
fecb11f2
authored
8 years ago
by
Alexander Alashkin
Committed by
Cesanta Bot
8 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add CoAP server example doc. Closes cesanta/dev#4917
PUBLISHED_FROM=ee7728db61721c0628a00ed702a47f7382ad7cd7
parent
56e50c2d
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
60 additions
and
1 deletion
+60
-1
server_example.md
docs/coap/server_example.md
+60
-1
No files found.
docs/coap/server_example.md
View file @
fecb11f2
...
@@ -2,4 +2,63 @@
...
@@ -2,4 +2,63 @@
title
:
CoAP server example
title
:
CoAP server example
---
---
TBD
To create a CoAP server, follow this pattern:
1.
Create a listening connection by calling
`mg_bind()`
or
`mg_bind_opt()`
2.
2. Call
`mg_set_protocol_coap()`
for that listening connection.
3.
Create an event handler function that handles the following events:
-
`MG_EV_COAP_CON`
-
`MG_EV_COAP_NOC`
-
`MG_EV_COAP_ACK`
-
`MG_EV_COAP_RST`
Here's an example of the simplest CoAP server. Error checking is omitted for the sake of clarity:
```
c
#include "mongoose.h"
static
char
*
s_default_address
=
"udp://:5683"
;
static
void
coap_handler
(
struct
mg_connection
*
nc
,
int
ev
,
void
*
p
)
{
switch
(
ev
)
{
case
MG_EV_COAP_CON
:
{
uint32_t
res
;
struct
mg_coap_message
*
cm
=
(
struct
mg_coap_message
*
)
p
;
printf
(
"CON with msg_id = %d received
\n
"
,
cm
->
msg_id
);
res
=
mg_coap_send_ack
(
nc
,
cm
->
msg_id
);
if
(
res
==
0
)
{
printf
(
"Successfully sent ACK for message with msg_id = %d
\n
"
,
cm
->
msg_id
);
}
else
{
printf
(
"Error: %d
\n
"
,
res
);
}
break
;
}
case
MG_EV_COAP_NOC
:
case
MG_EV_COAP_ACK
:
case
MG_EV_COAP_RST
:
{
struct
mg_coap_message
*
cm
=
(
struct
mg_coap_message
*
)
p
;
printf
(
"ACK/RST/NOC with msg_id = %d received
\n
"
,
cm
->
msg_id
);
break
;
}
}
}
int
main
(
void
)
{
struct
mg_mgr
mgr
;
struct
mg_connection
*
nc
;
mg_mgr_init
(
&
mgr
,
0
);
nc
=
mg_bind
(
&
mgr
,
s_default_address
,
coap_handler
);
mg_set_protocol_coap
(
nc
);
while
(
1
)
{
mg_mgr_poll
(
&
mgr
,
1000
);
}
mg_mgr_free
(
&
mgr
);
return
0
;
}
```
See full source code at
[
CoAP server example
](
https://github.com/cesanta/mongoose/tree/master/examples/coap_server
)
.
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment