mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-14 17:13:50 +01:00
net/unicoap: add documentation
This commit is contained in:
parent
0db81c5de7
commit
5e353a3967
@ -1324,7 +1324,10 @@ HTML_EXTRA_FILES = src/css/bootstrap.min.css \
|
|||||||
src/js/jquery.smartmenus.bootstrap.min.js \
|
src/js/jquery.smartmenus.bootstrap.min.js \
|
||||||
src/js/jquery-ui.min.js \
|
src/js/jquery-ui.min.js \
|
||||||
src/js/menu.js \
|
src/js/menu.js \
|
||||||
src/js/riot-doxy.js
|
src/js/riot-doxy.js \
|
||||||
|
../../sys/net/application_layer/unicoap/docs/unicoap-layers.svg \
|
||||||
|
../../sys/net/application_layer/unicoap/docs/unicoap-layers-comms.svg \
|
||||||
|
../../sys/net/application_layer/unicoap/docs/unicoap-layers-comms-apis.svg
|
||||||
|
|
||||||
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
|
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
|
||||||
# will adjust the colors in the style sheet and background images according to
|
# will adjust the colors in the style sheet and background images according to
|
||||||
|
|||||||
51
sys/net/application_layer/unicoap/docs/doc.md
Normal file
51
sys/net/application_layer/unicoap/docs/doc.md
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
@defgroup net_unicoap unicoap: Unified CoAP Suite
|
||||||
|
@ingroup net
|
||||||
|
@brief Send requests and create server resources using the Constrained Application Protocol across different transports
|
||||||
|
@{
|
||||||
|
|
||||||
|
Module. Specify `USEMODULE += unicoap` in your application's Makefile.
|
||||||
|
|
||||||
|
@warning `unicoap` is work in progress. Not all functionality is implemented in RIOT yet, however
|
||||||
|
the documentation already exists. Do not expect everything to work yet.
|
||||||
|
|
||||||
|
`unicoap` is RIOT's unified and modular framework for communication via the Constrained Application
|
||||||
|
Protocol. `unicoap` supports different transports and several CoAP features, enabled by
|
||||||
|
a **layered** and **modular** design. Support for each CoAP transport, such as UDP, is available through
|
||||||
|
[drivers](@ref net_unicoap_drivers).
|
||||||
|
|
||||||
|
`unicoap` aims to eventually replace @ref net_gcoap, @ref net_nanocoap, and @ref net_nanosock,
|
||||||
|
in favor of a more beginner-friendly and easily extensible design.
|
||||||
|
|
||||||
|
## CoAP
|
||||||
|
|
||||||
|
The [Constrained Application Protocol (CoAP)](https://datatracker.ietf.org/doc/html/rfc7252)
|
||||||
|
is a lightweight alternative to HTTP. HTTP as a general-purpose application protocol carries a
|
||||||
|
significant overhead and is thus problematic for IoT networks with limited bandwidth and
|
||||||
|
nodes with little memory. CoAP covers a range of features needed in the IoT, such as resource
|
||||||
|
discovery, message fragmentation, and end-to-end message protection.
|
||||||
|
|
||||||
|
## Quick start
|
||||||
|
|
||||||
|
In your application Makefile, add
|
||||||
|
```Makefile
|
||||||
|
USEMODULE += unicoap
|
||||||
|
USEMODULE += unicoap_driver_udp
|
||||||
|
```
|
||||||
|
|
||||||
|
`unicoap` enables support for CoAP over various transport protocols. Currently, `unicoap` supports
|
||||||
|
a @ref net_unicoap_drivers_udp and @ref net_unicoap_drivers_dtls.
|
||||||
|
You must specify at least one driver to use networking functionality. If you just want to
|
||||||
|
[use message APIs](@ref net_unicoap_message_example), you can use the framing implementation of
|
||||||
|
each driver, such as the @ref net_unicoap_drivers_rfc7252_pdu submodule for the RFC 7252 PDU format.
|
||||||
|
`unicoap` implements both a client and a server.
|
||||||
|
|
||||||
|
To configure `unicoap`, go to the @ref net_unicoap_config.
|
||||||
|
For extending `unicoap`, refer to @ref net_unicoap_internal.
|
||||||
|
|
||||||
|
<!--
|
||||||
|
FIXME: undefined references, upcoming PR
|
||||||
|
If you are already using `unicoap` und want to go the extra mile, head to
|
||||||
|
@ref net_unicoap_optimizing.
|
||||||
|
-->
|
||||||
|
|
||||||
|
@}
|
||||||
158
sys/net/application_layer/unicoap/docs/internals.doc.md
Normal file
158
sys/net/application_layer/unicoap/docs/internals.doc.md
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
@defgroup net_unicoap_internal Behind The Scenes of unicoap
|
||||||
|
@ingroup net_unicoap
|
||||||
|
@{
|
||||||
|
|
||||||
|
## CoAP 101
|
||||||
|
CoAP was originally specified in [RFC 7252](https://datatracker.ietf.org/doc/html/rfc7252)
|
||||||
|
and could only be used in combination with UDP and DTLS as transport protocols.
|
||||||
|
[RFC 8223](https://datatracker.ietf.org/doc/html/rfc8323) modified the CoAP format
|
||||||
|
for sending CoAP messages over TCP, TLS, and WebSockets (including WebSockets over TLS).
|
||||||
|
There is also an Internet Draft for [CoAP over GATT (BLE)](https://datatracker.ietf.org/doc/draft-amsuess-core-coap-over-gatt).
|
||||||
|
|
||||||
|
Each of these standards leverage different messaging models, i.e., what timeouts to apply, how
|
||||||
|
reliable transmission is implemented, and what messages are allowed to be sent
|
||||||
|
in response to a certain message type. A custom CoAP PDU header (i.e., another PDU
|
||||||
|
format) has been specified for CoAP over reliable transports.
|
||||||
|
For instance, CoAP over UDP and over DTLS share the same PDU format; so do CoAP over TCP and TLS.
|
||||||
|
The set of protocol characteristics that vary depending on the _transport_ forms a specific version
|
||||||
|
of CoAP, which is called a _CoAP combination_ in `unicoap`.
|
||||||
|
For instance, CoAP over UDP is CoAP combination, so is CoAP over DTLS.
|
||||||
|
|
||||||
|
## Layered Design
|
||||||
|
|
||||||
|
The design of `unicoap` involves three distinct layers that reflect the layered approach of CoAP,
|
||||||
|
as shown in the figure below. Conceptually, newly received message traverse these layers up to
|
||||||
|
the application, and data sent by the application travels in the opposite direction.
|
||||||
|
Located beneath the application, the _exchange_ layer embodies the REST model of CoAP.
|
||||||
|
It is responsible for handling advanced CoAP features operating above the request-response exchanges,
|
||||||
|
such as [resource observation](/FIXME-upcoming-pr-net_unicoap_client_resource_observation)
|
||||||
|
and [block-wise transfer](/FIXME-upcoming-pr-net_unicoap_blockwise).
|
||||||
|
This layer is shared between CoAP combinations, i.e., the REST semantics remain the same,
|
||||||
|
regardless of the messaging model and transport beneath.
|
||||||
|
Since messaging differs between CoAP combinations, a modular design to ease the addition
|
||||||
|
of new CoAP combinations was necessary: The layer dedicated to _messaging_ covers framing and can
|
||||||
|
accommodate a custom reliability mechanism, such as the one specified in RFC 7252
|
||||||
|
(using the four tempers `CON`, `NON`, `ACK`, `RST`). Serializing messages and parsing PDUs received
|
||||||
|
from the network are also handled by the messaging layer.
|
||||||
|
The transport layer at the bottom manages different transport protocols.
|
||||||
|
Here, `unicoap` coordinates with the operating system networking interface.
|
||||||
|
|
||||||
|
<img src="unicoap-layers.svg" alt="Figure 1: Layered Design of unicoap" width="500em"/>
|
||||||
|
|
||||||
|
### Overview of CoAP Combinations
|
||||||
|
To better illustrate what parts of the CoAP stack differ, have a look
|
||||||
|
at the following graph, where each node represents a version of a certain layer. Each leaf node stands for
|
||||||
|
a different CoAP combination ("CoAP over ...") specification.
|
||||||
|
```
|
||||||
|
Requests/Responses
|
||||||
|
RFC 7252, RFC 7641, RFC 7959, ...
|
||||||
|
(incl. Resource Observation, Block-Wise Transfers)
|
||||||
|
/ \
|
||||||
|
/ \
|
||||||
|
/ \
|
||||||
|
Specification: RFC 7252 RFC 8323
|
||||||
|
| |
|
||||||
|
+-+- Messaging shared between largely shared between
|
||||||
|
| | Model: UDP & DTLS TCP, TLS & WebSockets
|
||||||
|
| | | / \
|
||||||
|
| | | / \
|
||||||
|
| +- PDU Format: shared between shared between WebSockets
|
||||||
|
| UDP & DTLS TCP & TLS / \
|
||||||
|
| / \ / \ / \
|
||||||
|
| / \ / \ / \
|
||||||
|
+-- Transport UDP DTLS TCP TLS WebSockets WebSockets
|
||||||
|
Protocol: over TLS
|
||||||
|
|
||||||
|
Figure 2: Differences between CoAP combinations
|
||||||
|
```
|
||||||
|
|
||||||
|
#### CoAP over UDP and CoAP over DTLS (RFC 7252)
|
||||||
|
CoAP over UDP and DTLS works with messages of different types. A message can be confirmable (a `CON`
|
||||||
|
message), non-confirmable (`NON`), an acknowledgment message (`ACK`), or a reset message (`RST`).
|
||||||
|
Confirmable messages elicit an acknowledgement message to be sent by the peer. Hence, RFC 7252
|
||||||
|
provides optional reliability (i.e., retransmission using an exponential back-of mechanism)
|
||||||
|
using confirmable and acknowledgement messages.
|
||||||
|
|
||||||
|
@see [RFC 7252](https://datatracker.ietf.org/doc/html/rfc7252)
|
||||||
|
|
||||||
|
#### CoAP over TCP, CoAP over TLS, and CoAP over WebScokets (RFC 8323)
|
||||||
|
RFC 8323 eliminates the need for reliability to be implemented on the application layer, as the underlying
|
||||||
|
transport protocol already provides reliability. While message processing looks the same for both
|
||||||
|
CoAP over TCP/TLS ([RFC 8323, Section 3](https://datatracker.ietf.org/doc/html/rfc8323#section-3)) and
|
||||||
|
CoAP over WebSockets ([RFC 8323, Section 4](https://datatracker.ietf.org/doc/html/rfc8323#section-4)),
|
||||||
|
the PDU format employed *does* vary a little between them.
|
||||||
|
|
||||||
|
@see [RFC 8323](https://datatracker.ietf.org/doc/html/rfc8323)
|
||||||
|
|
||||||
|
#### CoAP over GATT over Bluetooth Low Energy (BLE) (IETF Draft)
|
||||||
|
The [CoAP over GATT (BLE)](https://datatracker.ietf.org/doc/draft-amsuess-core-coap-over-gatt)
|
||||||
|
messaging layer works entirely different from previously specified Constrained Application Protocol variants.
|
||||||
|
Hence, the PDU format is also custom and optimized to take as little space as possible to reduce airtime.
|
||||||
|
|
||||||
|
@see [`draft-amsuess-core-coap-over-gatt`](https://datatracker.ietf.org/doc/draft-amsuess-core-coap-over-gatt)
|
||||||
|
|
||||||
|
### Drivers
|
||||||
|
|
||||||
|
To integrate new CoAP combinations, functionality for messaging and transport layer must be added.
|
||||||
|
The `unicoap` design refers to these integrations collectively as a _driver_ that represents
|
||||||
|
a CoAP combination, such as CoAP over DTLS. Each driver is a RIOT module you can import. For instance,
|
||||||
|
to use the CoAP over UDP driver, you import the `unicoap_driver_udp` by adding it to the `USEMODULE`
|
||||||
|
Makefile variable: `USEMODULE += unicoap_driver_udp`.
|
||||||
|
|
||||||
|
Drivers themselves can in turn consist of a shared module for messaging and a specific transport
|
||||||
|
support module. For example, the CoAP over DTLS driver encompasses a transport module for DTLS networking;
|
||||||
|
and depends on the common RFC 7252 messaging module also employed by the CoAP over UDP driver.
|
||||||
|
You can see this relationship in `Makefile.dep` in the `unicoap` source directory: The common
|
||||||
|
messaging module is a shared dependency of both the @ref net_unicoap_drivers_udp and @ref net_unicoap_drivers_dtls.
|
||||||
|
driver module. We encourage you to follow the same approach for CoAP combinations that share a common
|
||||||
|
messaging model, such as CoAP over TCP, TLS, and WebSockets when implementing these.
|
||||||
|
|
||||||
|
On a high level, each driver interacts with the upper layers on these three occasions:
|
||||||
|
|
||||||
|
- **Initialization and deinitialization**:
|
||||||
|
Drivers must provide an [initialization](/FIXME-upcoming-pr-unicoap_init) and [teardown](/FIXME-upcoming-pr-unicoap_deinit)
|
||||||
|
These may be used for setup work in the transport and messaging layer such as for creating
|
||||||
|
sockets or establishing connections to peripherals, alongside allocating objects required for messaging.
|
||||||
|
|
||||||
|
- **Sending side / Outbound**:
|
||||||
|
A driver must expose a standardized API for [sending from the messaging layer](/FIXME-upcoming-pr-unicoap_messaging_send).
|
||||||
|
The exchange layer will call into this functionality, prompting the driver to perform any due
|
||||||
|
work in the messaging layer like attempting to retransmit the message. Apart from the message,
|
||||||
|
as well as the remote and local endpoint, this function accepts flags that customize transmission
|
||||||
|
behavior. The RFC 7252 message type is abstracted into a _reliability_ flag the messaging layer in
|
||||||
|
the CoAP over UDP and DTLS drivers interpret as an instruction to send a confirmable message. When
|
||||||
|
finished, the messaging layer serializes the message and forwards it to the transport
|
||||||
|
implementation.
|
||||||
|
|
||||||
|
- **Receiving side / Inbound**:
|
||||||
|
Upon receipt of a new message, each driver will need to invoke an [exchange-layer processing function](/FIXME-upcoming-pr-unicoap_exchange_process).
|
||||||
|
|
||||||
|
- **Ping**: Due to the variability in ping mechanisms (empty `CON` in CoAP over UDP and `7.03` message in CoAP over reliable transports), each driver can implement a ping function. unicoap bundles these APIs and provides a [single, generic ping function that multiplexes](/FIXME-upcoming-pr-unicoap_ping) between the driver implementations.
|
||||||
|
|
||||||
|
### Communication Between Layers
|
||||||
|
|
||||||
|
The following figure illustrates communication between layers in a block-wise transfer,
|
||||||
|
where a client request from the application may result in multiple
|
||||||
|
[`unicoap_messaging_send`](/FIXME-upcoming-pr-unicoap_messaging_send) and
|
||||||
|
[`unicoap_exchange_process`](/FIXME-upcoming-pr-unicoap_exchange_process) calls between the
|
||||||
|
exchange and messaging layer:
|
||||||
|
|
||||||
|
<img src="unicoap-layers-comms.svg" alt="Figure 3: Communication between layers" width="600em"/>
|
||||||
|
|
||||||
|
The next schematic depicts how these APIs are implemented, based on the CoAP over UDP and
|
||||||
|
CoAP over DTLS drivers that share the RFC 7252 messaging implementation:
|
||||||
|
|
||||||
|
<img src="unicoap-layers-comms-apis.svg" alt="Figure 4: APIs for communication between layers" width="700em"/>
|
||||||
|
|
||||||
|
Both the CoAP over UDP and CoAP over DTLS driver support sending vectored data, hence the `sendv`
|
||||||
|
suffixes in the function names depicted in the figure above.
|
||||||
|
|
||||||
|
## Adding a New Driver
|
||||||
|
|
||||||
|
In the `unicoap` codebase you will encounter several marks (`MARK: ...`)
|
||||||
|
that help with extending the suite.
|
||||||
|
|
||||||
|
- **MARK: unicoap_driver_extension_point**: Every region of code that would need to be extended to support a new transport protocol or driver is
|
||||||
|
annotated with this mark.
|
||||||
|
|
||||||
|
@}
|
||||||
292
sys/net/application_layer/unicoap/docs/message-example.doc.md
Normal file
292
sys/net/application_layer/unicoap/docs/message-example.doc.md
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
@defgroup net_unicoap_message_example Using Message APIs
|
||||||
|
@ingroup net_unicoap_message
|
||||||
|
@brief A demo of `unicoap` message APIs
|
||||||
|
@{
|
||||||
|
|
||||||
|
Sample code.
|
||||||
|
This example demonstrates how you can use `unicoap` message and options APIs and how to parse PDUs.
|
||||||
|
You can find a demo application in the `examples/networking/coap/unicoap_message` folder.
|
||||||
|
|
||||||
|
## Bytes to Message (Deserializing)
|
||||||
|
|
||||||
|
### Parsing a PDU
|
||||||
|
|
||||||
|
To start, let us assume `pdu` is a buffer containing the CoAP PDU.
|
||||||
|
```c
|
||||||
|
const uint8_t pdu[] = { /* ... */ };
|
||||||
|
```
|
||||||
|
|
||||||
|
Next, allocate a result structure.
|
||||||
|
|
||||||
|
```c
|
||||||
|
unicoap_parser_result_t parsed = { 0 };
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, call one of the message parsers. CoAP supports different transports which is why the CoAP PDU
|
||||||
|
header varies. In this case, let us assume we received the message over UDP or DTLS. In these cases,
|
||||||
|
we use the RFC 7252 PDU format. Using the result structure frees you of needing to allocate options
|
||||||
|
and a message struct and to wire up options with message struct.
|
||||||
|
|
||||||
|
```c
|
||||||
|
if ((res = unicoap_pdu_parse_rfc7252_result(pdu, sizeof(pdu), &parsed)) < 0) {
|
||||||
|
puts("Error: parsing failed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
unicoap_message_t* message = &parsed.message;
|
||||||
|
```
|
||||||
|
|
||||||
|
Because the header varies, transport-dependent details like the RFC 7252 message type and ID
|
||||||
|
are accessible via the
|
||||||
|
@ref unicoap_message_properties_t::rfc7252 member.
|
||||||
|
|
||||||
|
```c
|
||||||
|
printf("CoAP message has token=<%i bytes>\n",
|
||||||
|
parsed.properties.token_length);
|
||||||
|
|
||||||
|
printf("CoAP over UDP/DTLS has id=%i type=%s\n",
|
||||||
|
parsed.properties.rfc7252.id,
|
||||||
|
unicoap_string_from_rfc7252_type(parsed.properties.rfc7252.type));
|
||||||
|
```
|
||||||
|
|
||||||
|
### Inspecting a Message
|
||||||
|
|
||||||
|
You use the
|
||||||
|
@ref unicoap_message_is_request,
|
||||||
|
@ref unicoap_message_is_response, and
|
||||||
|
@ref unicoap_message_is_signal
|
||||||
|
methods to check whether a given message is a request, response, or signaling message.
|
||||||
|
|
||||||
|
The corresponding typed view of the code is accessible through
|
||||||
|
@ref unicoap_message_t.method,
|
||||||
|
@ref unicoap_message_t.status, and
|
||||||
|
@ref unicoap_message_t.signal.
|
||||||
|
|
||||||
|
You can also obtain a human-readable constant null-terminated C string. There are also versions
|
||||||
|
available for status codes and signal numbers. To get a string description of the CoAP code
|
||||||
|
without checking the message class first, use @ref unicoap_string_from_code.
|
||||||
|
|
||||||
|
```c
|
||||||
|
const char* method_name = unicoap_string_from_method(message->method);
|
||||||
|
```
|
||||||
|
|
||||||
|
The payload and payload size in bytes can be retrieved the
|
||||||
|
@ref unicoap_message_t.payload and
|
||||||
|
@ref unicoap_message_t.payload_size members.
|
||||||
|
|
||||||
|
### Reading Options
|
||||||
|
|
||||||
|
First, let us dump all options to the standard output.
|
||||||
|
|
||||||
|
```c
|
||||||
|
unicoap_options_dump_all(message->options);
|
||||||
|
```
|
||||||
|
|
||||||
|
To read options like `Content-Format` which can occur no more than once, you use
|
||||||
|
@ref unicoap_options_t::unicoap_options_get_content_format.
|
||||||
|
Read accessors for non-repeatable options are prefixed with `unicoap_options_get`.
|
||||||
|
|
||||||
|
```c
|
||||||
|
unicoap_content_format_t format = 0;
|
||||||
|
|
||||||
|
if (unicoap_options_get_content_format(message->options, &format) < 0) {
|
||||||
|
puts("Error: could not read Content-Format!");
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(format == UNICOAP_FORMAT_JSON);
|
||||||
|
```
|
||||||
|
|
||||||
|
Options like `Uri-Query` can occur more than once. For these types of options, `unicoap` defines
|
||||||
|
several convenience accessors. Let us retrieve the first `Uri-Query` option.
|
||||||
|
|
||||||
|
```c
|
||||||
|
const char* query = NULL;
|
||||||
|
|
||||||
|
ssize_t res = unicoap_options_get_first_uri_query(message->options, &query);
|
||||||
|
if (res < 0) {
|
||||||
|
if (res == -ENOENT) {
|
||||||
|
puts("Message has no Uri-Query option");
|
||||||
|
}
|
||||||
|
printf("Error: could read first Uri-Query option");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `first` getter provides a view into the PDU buffer. The returned string
|
||||||
|
is thus not null-terminated.
|
||||||
|
|
||||||
|
```c
|
||||||
|
printf("First URI query: '%.*s'\n", (int)res, query);
|
||||||
|
```
|
||||||
|
|
||||||
|
In the case of URI queries, you can also retrieve queries by name (if they obey the `name=value`
|
||||||
|
format).
|
||||||
|
|
||||||
|
```c
|
||||||
|
res = unicoap_options_get_first_uri_query_by_name(message->options, "color", &query);
|
||||||
|
if (res < 0) {
|
||||||
|
/* The getter also fails in cases where no option was found */
|
||||||
|
if (res == -ENOENT) {
|
||||||
|
puts("Message has no 'color' query");
|
||||||
|
}
|
||||||
|
printf("Error: could read first 'color' query");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
For a number of repeatable options, such as `Uri-Path`, `Location-Path`, `Uri-Query`,
|
||||||
|
and `Location-Query`, `unicoap` offers accessors that generate the original, contiguous representation.
|
||||||
|
This means that multiple `Uri-Path` options are stitched back together, forming the `/original/path`.
|
||||||
|
These accessores do copy. Now, let us create a query string (`?a=1&b=2&c=3`).
|
||||||
|
|
||||||
|
```c
|
||||||
|
char query_string[50] = { 0 };
|
||||||
|
|
||||||
|
res = unicoap_options_copy_uri_queries(message->options, query_string, sizeof(query_string));
|
||||||
|
if (res < 0) {
|
||||||
|
puts("Error: could not generate URI query string");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, you can iterate over all query options, avoiding the copy operation and allocation.
|
||||||
|
To do this, you will need to allocate an
|
||||||
|
@ref unicoap_options_iterator_t and initialize it using
|
||||||
|
@ref unicoap_options_iterator_t::unicoap_options_iterator_init.
|
||||||
|
This is the main tool to iterate over options.
|
||||||
|
`unicoap` exposes multiple methods for getting the next instance of a repeatable option.
|
||||||
|
|
||||||
|
```c
|
||||||
|
unicoap_options_iterator_t iterator;
|
||||||
|
unicoap_options_iterator_init(&iterator, message->options);
|
||||||
|
|
||||||
|
while ((res = unicoap_options_get_next_uri_query(&iterator, &query)) >= 0) {
|
||||||
|
printf("- URI query: '%.*s'\n", (int)res, query);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The option iterator can also be used to iterate over all options, regardless of their type.
|
||||||
|
|
||||||
|
```c
|
||||||
|
unicoap_options_iterator_init(&iterator, message->options);
|
||||||
|
unicoap_option_number_t number;
|
||||||
|
const uint8_t* value = NULL;
|
||||||
|
|
||||||
|
while ((res = unicoap_options_get_next(&iterator, &number, &value)) >= 0) {
|
||||||
|
const char* name = unicoap_string_from_option_number(number);
|
||||||
|
printf("- option %s nr=%i contains %" PRIuSIZE " bytes\n", name, number, res);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Message to Bytes (Serializing)
|
||||||
|
|
||||||
|
### Creating a Message Container
|
||||||
|
|
||||||
|
Since we want to add options to the CoAP message, we need to allocate an options buffer first.
|
||||||
|
To avoid the boilerplate necessary for allocating a helper structure and buffer and the initialization
|
||||||
|
work, you just need to call
|
||||||
|
@ref UNICOAP_OPTIONS_ALLOC and provide the desired buffer capacity.
|
||||||
|
|
||||||
|
```c
|
||||||
|
UNICOAP_OPTIONS_ALLOC(options, 100);
|
||||||
|
```
|
||||||
|
|
||||||
|
Now, let us initialize a message. You can either use the designated initializer or initializer
|
||||||
|
function.
|
||||||
|
|
||||||
|
```c
|
||||||
|
unicoap_request_init_string_with_options(&message, UNICOAP_METHOD_POST, "Hello, World!", &options);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Customizing Options
|
||||||
|
|
||||||
|
To set non-repeatable options like `Content-Format`, use `unicoap_options_set` accessors.
|
||||||
|
|
||||||
|
```c
|
||||||
|
int res = unicoap_options_set_content_format(&options, UNICOAP_FORMAT_TEXT);
|
||||||
|
if (res < 0) {
|
||||||
|
puts("Error: could not set Content-Format");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
For repeatable options, `unicoap` provides two versions. You can either add multiple instances
|
||||||
|
of an option like `Uri-Path` by providing the original, contiguous representation (e.g., the path).
|
||||||
|
|
||||||
|
```c
|
||||||
|
int res = unicoap_options_add_uri_path_string(&options, "/thermostat/temperature");
|
||||||
|
if (res < 0) {
|
||||||
|
if (res == -ENOBUFS) {
|
||||||
|
puts("Error: options buffer too small");
|
||||||
|
}
|
||||||
|
puts("Error: could not add URI path");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Or, you can add _components_ individually as follows.
|
||||||
|
|
||||||
|
```c
|
||||||
|
res = unicoap_options_add_uri_path_component_string(&options, "thermostat");
|
||||||
|
if (res < 0) {
|
||||||
|
puts("Error: could not add path component");
|
||||||
|
}
|
||||||
|
res = unicoap_options_add_uri_path_component_string(&options, "temperature");
|
||||||
|
if (res < 0) {
|
||||||
|
puts("Error: could not add path component");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The same applies to `Uri-Query`.
|
||||||
|
|
||||||
|
```c
|
||||||
|
res = unicoap_options_add_uri_queries_string(&options, "unit=C&friendly=yes");
|
||||||
|
if (res < 0) {
|
||||||
|
puts("Error: could not add URI query");
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`unicoap` offers versions for both null-terminated C strings and strings without a null-terminator
|
||||||
|
that require a length indication instead. Example:
|
||||||
|
@ref unicoap_options_t::unicoap_options_add_uri_queries and
|
||||||
|
@ref unicoap_options_t::unicoap_options_add_uri_queries_string, or
|
||||||
|
@ref unicoap_options_t::unicoap_options_add_uri_query and
|
||||||
|
@ref unicoap_options_t::unicoap_options_add_uri_query_string.
|
||||||
|
|
||||||
|
### Serializing a Message
|
||||||
|
|
||||||
|
First, allocate a buffer with a capacity of your choice.
|
||||||
|
|
||||||
|
```c
|
||||||
|
uint8_t pdu[200];
|
||||||
|
```
|
||||||
|
|
||||||
|
The header format varies depending on the transport. Let's use CoAP over UDP or CoAP over DTLS,
|
||||||
|
i.e., the RFC 7252 format.
|
||||||
|
|
||||||
|
@remark In this very simple scenario, we don't use a token. Very constrained nodes
|
||||||
|
are allowed to handle one request at a time and thus don't need a token to differentiate
|
||||||
|
responses to outstanding requests.
|
||||||
|
|
||||||
|
```c
|
||||||
|
unicoap_message_properties_t properties = {
|
||||||
|
.token = NULL,
|
||||||
|
.token_length = 0,
|
||||||
|
.rfc7252 = {
|
||||||
|
.id = 0xABCD,
|
||||||
|
.type = UNICOAP_TYPE_NON
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, call the serializer appropriate for the transport.
|
||||||
|
|
||||||
|
```c
|
||||||
|
ssize_t res = unicoap_pdu_build_rfc7252(pdu, sizeof(pdu), message, &properties);
|
||||||
|
if (res < 0) {
|
||||||
|
if (res == -ENOBUFS) {
|
||||||
|
puts("Error: PDU buffer too small");
|
||||||
|
}
|
||||||
|
puts("Error: could not serialize message");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("The final PDU has a size of %" PRIuSIZE " bytes.\n", res);
|
||||||
|
```
|
||||||
|
|
||||||
|
@}
|
||||||
24
sys/net/application_layer/unicoap/docs/message.doc.md
Normal file
24
sys/net/application_layer/unicoap/docs/message.doc.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
@defgroup net_unicoap_message Message APIs
|
||||||
|
@ingroup net_unicoap
|
||||||
|
@brief Create and serialize CoAP messages
|
||||||
|
@{
|
||||||
|
|
||||||
|
@ref unicoap_message_t is the central container type for CoAP messages. To see how to access
|
||||||
|
CoAP options, see @ref net_unicoap_options. You may also look at the [guide to using CoAP
|
||||||
|
messages](https://guides.riot-os.org/FIXME)
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
```c
|
||||||
|
unicoap_message_t message;
|
||||||
|
|
||||||
|
const char payload[] = "Hello, World!";
|
||||||
|
unicoap_request_init_string(&message, UNICOAP_METHOD_POST, payload, &options);
|
||||||
|
```
|
||||||
|
|
||||||
|
You can access the CoAP code through different views, including as ast
|
||||||
|
@ref unicoap_message_t.method,
|
||||||
|
@ref unicoap_message_t.status, or
|
||||||
|
@ref unicoap_message_t.signal number.
|
||||||
|
|
||||||
|
@}
|
||||||
50
sys/net/application_layer/unicoap/docs/pdu.doc.md
Normal file
50
sys/net/application_layer/unicoap/docs/pdu.doc.md
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
@defgroup net_unicoap_pdu Parsing and Serialization
|
||||||
|
@ingroup net_unicoap_message
|
||||||
|
@brief Tools for parsing PDUs and serializing messages and options
|
||||||
|
|
||||||
|
## Parsing
|
||||||
|
To parse a message on your own, use one of the parsers in @ref net_unicoap_message and
|
||||||
|
@ref unicoap_parser_result_t. The parsed message structure helps you allocate everything needed in
|
||||||
|
one go.
|
||||||
|
|
||||||
|
```c
|
||||||
|
// Parse an RFC 7252 PDU
|
||||||
|
uint8_t pdu[] = {
|
||||||
|
0x40, 0x02, 0xfe, 0xb1, 0xb9, 0x61, 0x63, 0x74, 0x75, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x04, 0x6c, 0x65, 0x64, 0x73, 0x11, 0x32, 0x37, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3d, 0x67, 0x21, 0x32, 0xff, 0x6d, 0x6f, 0x64, 0x65, 0x3d, 0x6f, 0x6e
|
||||||
|
};
|
||||||
|
|
||||||
|
unicoap_parser_result_t parsed = { 0 }; // Zero-initialize everything
|
||||||
|
|
||||||
|
// Parse message
|
||||||
|
ssize_t res = unicoap_pdu_parse_rfc7252_result(pdu, sizeof(pdu), &parsed);
|
||||||
|
|
||||||
|
// Handle errors
|
||||||
|
if (res < 0) {
|
||||||
|
// eat error
|
||||||
|
}
|
||||||
|
|
||||||
|
// parsed.message contains the parsed message
|
||||||
|
```
|
||||||
|
|
||||||
|
## Serializing
|
||||||
|
To serialize a message on your own, decide whether you need vectored data or contiguous data.
|
||||||
|
To get vectored data, you use `unicoap_pdu_buildv_*` functions, depending on the CoAP transport you intend to use.
|
||||||
|
Vectored data is represented using an @ref iolist_t.
|
||||||
|
If you want to build a contiguous storage body, refer to the `unicoap_pdu_build_*` methods, also depending
|
||||||
|
on the transport.
|
||||||
|
|
||||||
|
```c
|
||||||
|
// Build an RFC 7252 PDU
|
||||||
|
uint8_t pdu[MY_CAPACITY] = { 0 };
|
||||||
|
ssize_t size = unicoap_pdu_build_rfc7252(pdu, sizeof(pdu), message, properties);
|
||||||
|
|
||||||
|
// Handle errors
|
||||||
|
if (res < 0) {
|
||||||
|
// eat error
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Implementation
|
||||||
|
Parsing and serialization are each done in two steps:
|
||||||
|
1. Message header up until options is parsed/serialized by driver
|
||||||
|
2. Options are parsed/serialized by common `unicoap` implementation
|
||||||
2023
sys/net/application_layer/unicoap/docs/unicoap-layers-comms-apis.svg
Normal file
2023
sys/net/application_layer/unicoap/docs/unicoap-layers-comms-apis.svg
Normal file
File diff suppressed because it is too large
Load Diff
|
After Width: | Height: | Size: 96 KiB |
903
sys/net/application_layer/unicoap/docs/unicoap-layers-comms.svg
Normal file
903
sys/net/application_layer/unicoap/docs/unicoap-layers-comms.svg
Normal file
@ -0,0 +1,903 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
height="602.30389"
|
||||||
|
viewBox="0 0 1135.7111 602.30389"
|
||||||
|
width="1135.7111"
|
||||||
|
version="1.1"
|
||||||
|
id="svg125"
|
||||||
|
sodipodi:docname="layers-comms.svg"
|
||||||
|
inkscape:version="1.3.2 (091e20e, 2023-11-25)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview125"
|
||||||
|
pagecolor="#505050"
|
||||||
|
bordercolor="#eeeeee"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:showpageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
inkscape:deskcolor="#505050"
|
||||||
|
inkscape:zoom="0.21851852"
|
||||||
|
inkscape:cx="693.30508"
|
||||||
|
inkscape:cy="320.33898"
|
||||||
|
inkscape:window-width="1312"
|
||||||
|
inkscape:window-height="449"
|
||||||
|
inkscape:window-x="309"
|
||||||
|
inkscape:window-y="25"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="svg125" />
|
||||||
|
<defs
|
||||||
|
id="defs22">
|
||||||
|
<g
|
||||||
|
id="a">
|
||||||
|
<path
|
||||||
|
d="M 13.03125,0 H 2.34375 v -18.5625 h 10.6875 v 3.21875 H 6.265625 v 4.078125 H 12.5625 V -8.03125 H 6.265625 V -3.25 h 6.765625 z m 0,0"
|
||||||
|
id="path1" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="b">
|
||||||
|
<path
|
||||||
|
d="m 13.296875,-5.15625 c 0,1.105469 -0.273437,2.0625 -0.8125,2.875 -0.53125,0.8125 -1.308594,1.4375 -2.328125,1.875 C 9.144531,0.0273438 7.910156,0.25 6.453125,0.25 5.804688,0.25 5.175781,0.207031 4.5625,0.125 3.945312,0.0390625 3.359375,-0.0820312 2.796875,-0.25 2.234375,-0.414062 1.695312,-0.617188 1.1875,-0.859375 v -3.65625 c 0.882812,0.386719 1.800781,0.734375 2.75,1.046875 C 4.882812,-3.15625 5.820312,-3 6.75,-3 7.394531,-3 7.914062,-3.082031 8.3125,-3.25 8.707031,-3.414062 8.992188,-3.644531 9.171875,-3.9375 9.347656,-4.238281 9.4375,-4.582031 9.4375,-4.96875 9.4375,-5.425781 9.28125,-5.820312 8.96875,-6.15625 8.65625,-6.488281 8.222656,-6.796875 7.671875,-7.078125 7.128906,-7.367188 6.515625,-7.679688 5.828125,-8.015625 5.398438,-8.210938 4.929688,-8.457031 4.421875,-8.75 3.910156,-9.039062 3.425781,-9.398438 2.96875,-9.828125 2.507812,-10.253906 2.132812,-10.769531 1.84375,-11.375 c -0.292969,-0.601562 -0.4375,-1.328125 -0.4375,-2.171875 0,-1.101563 0.253906,-2.050781 0.765625,-2.84375 0.507813,-0.789063 1.234375,-1.394531 2.171875,-1.8125 0.945312,-0.414063 2.0625,-0.625 3.34375,-0.625 0.96875,0 1.890625,0.117187 2.765625,0.34375 0.875,0.21875 1.789063,0.542969 2.75,0.96875 l -1.265625,3.0625 c -0.855469,-0.351563 -1.621094,-0.625 -2.296875,-0.8125 -0.679687,-0.1875 -1.371094,-0.28125 -2.078125,-0.28125 -0.492188,0 -0.90625,0.07813 -1.25,0.234375 -0.34375,0.15625 -0.609375,0.375 -0.796875,0.65625 C 5.335938,-14.375 5.25,-14.046875 5.25,-13.671875 c 0,0.4375 0.128906,0.808594 0.390625,1.109375 0.257813,0.304688 0.648437,0.59375 1.171875,0.875 0.519531,0.273438 1.171875,0.59375 1.953125,0.96875 0.945313,0.449219 1.753906,0.917969 2.421875,1.40625 0.675781,0.492188 1.195312,1.0625 1.5625,1.71875 0.363281,0.65625 0.546875,1.46875 0.546875,2.4375 z m 0,0"
|
||||||
|
id="path2" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="c">
|
||||||
|
<path
|
||||||
|
d="m 13.703125,0 -1.34375,-4.421875 H 5.59375 L 4.234375,0 H 0 l 6.546875,-18.640625 h 4.8125 L 17.9375,0 Z M 11.40625,-7.71875 10.0625,-12.03125 C 9.976562,-12.320312 9.863281,-12.691406 9.71875,-13.140625 9.582031,-13.597656 9.445312,-14.0625 9.3125,-14.53125 9.175781,-15 9.0625,-15.40625 8.96875,-15.75 c -0.085938,0.34375 -0.199219,0.773438 -0.34375,1.28125 -0.148438,0.511719 -0.289062,0.996094 -0.421875,1.453125 -0.136719,0.460937 -0.234375,0.789063 -0.296875,0.984375 l -1.328125,4.3125 z m 0,0"
|
||||||
|
id="path3" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="d">
|
||||||
|
<path
|
||||||
|
d="m 9.375,-10.421875 h 7.375 v 9.625 C 15.769531,-0.472656 14.753906,-0.21875 13.703125,-0.03125 12.660156,0.15625 11.472656,0.25 10.140625,0.25 8.296875,0.25 6.726562,-0.113281 5.4375,-0.84375 4.15625,-1.570312 3.179688,-2.644531 2.515625,-4.0625 c -0.667969,-1.425781 -1,-3.175781 -1,-5.25 0,-1.9375 0.375,-3.613281 1.125,-5.03125 0.75,-1.425781 1.84375,-2.53125 3.28125,-3.3125 1.445313,-0.78125 3.207031,-1.171875 5.28125,-1.171875 0.988281,0 1.957031,0.109375 2.90625,0.328125 0.957031,0.210938 1.828125,0.480469 2.609375,0.8125 l -1.3125,3.15625 c -0.5625,-0.289062 -1.210938,-0.53125 -1.9375,-0.71875 -0.730469,-0.195312 -1.492188,-0.296875 -2.28125,-0.296875 -1.148438,0 -2.140625,0.261719 -2.984375,0.78125 -0.84375,0.523437 -1.496094,1.257813 -1.953125,2.203125 -0.460938,0.949219 -0.6875,2.058594 -0.6875,3.328125 0,1.210937 0.160156,2.28125 0.484375,3.21875 0.332031,0.9375 0.851563,1.671875 1.5625,2.203125 0.71875,0.53125 1.644531,0.796875 2.78125,0.796875 0.5625,0 1.035156,-0.023437 1.421875,-0.078125 0.382812,-0.0625 0.75,-0.125 1.09375,-0.1875 V -7.140625 H 9.375 Z m 0,0"
|
||||||
|
id="path4" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="e">
|
||||||
|
<path
|
||||||
|
d="M 2.34375,0 V -18.5625 H 6.265625 V 0 Z m 0,0"
|
||||||
|
id="path5" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="f">
|
||||||
|
<path
|
||||||
|
d="m 18.796875,0 h -5 L 5.71875,-14.046875 H 5.609375 c 0.03125,0.585937 0.054687,1.171875 0.078125,1.765625 0.03125,0.59375 0.054688,1.1875 0.078125,1.78125 0.03125,0.585938 0.0625,1.171875 0.09375,1.765625 V 0 H 2.34375 v -18.5625 h 4.953125 l 8.0625,13.90625 h 0.09375 C 15.429688,-5.226562 15.40625,-5.796875 15.375,-6.359375 15.351562,-6.929688 15.332031,-7.5 15.3125,-8.0625 c -0.02344,-0.570312 -0.03906,-1.144531 -0.04687,-1.71875 v -8.78125 h 3.53125 z m 0,0"
|
||||||
|
id="path6" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="g">
|
||||||
|
<path
|
||||||
|
d="M 9.5,0 H 5.5625 V -15.28125 H 0.515625 V -18.5625 H 14.53125 v 3.28125 H 9.5 Z m 0,0"
|
||||||
|
id="path7" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="h">
|
||||||
|
<path
|
||||||
|
d="m 7.75,-18.5625 c 1.675781,0 3.0625,0.203125 4.15625,0.609375 1.101562,0.40625 1.921875,1.023437 2.453125,1.84375 0.53125,0.824219 0.796875,1.859375 0.796875,3.109375 0,0.84375 -0.164062,1.585938 -0.484375,2.21875 -0.324219,0.636719 -0.746094,1.179688 -1.265625,1.625 -0.523438,0.4375 -1.089844,0.792969 -1.703125,1.0625 L 17.171875,0 h -4.375 l -4.4375,-7.125 H 6.265625 V 0 H 2.34375 v -18.5625 z m -0.28125,3.21875 H 6.265625 v 5.015625 h 1.28125 c 1.300781,0 2.234375,-0.210937 2.796875,-0.640625 0.5625,-0.4375 0.84375,-1.082031 0.84375,-1.9375 0,-0.875 -0.304688,-1.5 -0.90625,-1.875 -0.605469,-0.375 -1.542969,-0.5625 -2.8125,-0.5625 z m 0,0"
|
||||||
|
id="path8" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="i">
|
||||||
|
<path
|
||||||
|
d="m 8.265625,-18.5625 c 2.394531,0 4.140625,0.515625 5.234375,1.546875 1.101562,1.03125 1.65625,2.449219 1.65625,4.25 0,0.8125 -0.125,1.589844 -0.375,2.328125 -0.242188,0.742188 -0.636719,1.398438 -1.1875,1.96875 -0.554688,0.574219 -1.292969,1.027344 -2.21875,1.359375 -0.929688,0.335937 -2.070312,0.5 -3.421875,0.5 h -1.6875 V 0 H 2.34375 V -18.5625 Z M 8.0625,-15.34375 H 6.265625 v 5.515625 H 7.5625 c 0.738281,0 1.378906,-0.09375 1.921875,-0.28125 0.539063,-0.195313 0.957031,-0.503906 1.25,-0.921875 0.300781,-0.414062 0.453125,-0.945312 0.453125,-1.59375 0,-0.914062 -0.257812,-1.597656 -0.765625,-2.046875 C 9.910156,-15.117188 9.125,-15.34375 8.0625,-15.34375 Z m 0,0"
|
||||||
|
id="path9" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="j">
|
||||||
|
<path
|
||||||
|
d="m 19.1875,-9.3125 c 0,1.4375 -0.183594,2.746094 -0.546875,3.921875 C 18.285156,-4.222656 17.75,-3.21875 17.03125,-2.375 c -0.71875,0.84375 -1.636719,1.496094 -2.75,1.953125 C 13.175781,0.0234375 11.863281,0.25 10.34375,0.25 8.832031,0.25 7.519531,0.0234375 6.40625,-0.421875 5.300781,-0.878906 4.382812,-1.53125 3.65625,-2.375 2.9375,-3.21875 2.398438,-4.226562 2.046875,-5.40625 1.691406,-6.582031 1.515625,-7.890625 1.515625,-9.328125 c 0,-1.925781 0.3125,-3.597656 0.9375,-5.015625 0.632813,-1.425781 1.609375,-2.535156 2.921875,-3.328125 1.3125,-0.789063 2.976562,-1.1875 5,-1.1875 2.007812,0 3.664062,0.398437 4.96875,1.1875 1.300781,0.792969 2.265625,1.902344 2.890625,3.328125 0.632813,1.429688 0.953125,3.105469 0.953125,5.03125 z m -13.546875,0 c 0,1.304688 0.160156,2.421875 0.484375,3.359375 0.320312,0.929687 0.832031,1.648437 1.53125,2.15625 0.695312,0.5 1.59375,0.75 2.6875,0.75 1.113281,0 2.019531,-0.25 2.71875,-0.75 0.695312,-0.507813 1.203125,-1.226563 1.515625,-2.15625 0.320313,-0.9375 0.484375,-2.054687 0.484375,-3.359375 0,-1.9375 -0.367188,-3.460938 -1.09375,-4.578125 -0.730469,-1.125 -1.929688,-1.6875 -3.59375,-1.6875 -1.117188,0 -2.023438,0.257813 -2.71875,0.765625 -0.699219,0.5 -1.210938,1.21875 -1.53125,2.15625 -0.324219,0.929688 -0.484375,2.042969 -0.484375,3.34375 z m 0,0"
|
||||||
|
id="path10" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="k">
|
||||||
|
<path
|
||||||
|
d="m 10.21875,-15.546875 c -0.75,0 -1.417969,0.148437 -2,0.4375 -0.585938,0.292969 -1.074219,0.714844 -1.46875,1.265625 -0.386719,0.542969 -0.683594,1.203125 -0.890625,1.984375 -0.199219,0.78125 -0.296875,1.65625 -0.296875,2.625 0,1.3125 0.160156,2.433594 0.484375,3.359375 0.320313,0.929688 0.828125,1.636719 1.515625,2.125 0.6875,0.492188 1.570312,0.734375 2.65625,0.734375 0.75,0 1.503906,-0.082031 2.265625,-0.25 C 13.242188,-3.441406 14.066406,-3.6875 14.953125,-4 v 3.296875 C 14.128906,-0.359375 13.320312,-0.113281 12.53125,0.03125 11.738281,0.175781 10.847656,0.25 9.859375,0.25 7.941406,0.25 6.363281,-0.144531 5.125,-0.9375 3.894531,-1.726562 2.984375,-2.835938 2.390625,-4.265625 1.804688,-5.691406 1.515625,-7.351562 1.515625,-9.25 c 0,-1.40625 0.1875,-2.691406 0.5625,-3.859375 0.382813,-1.164063 0.941406,-2.175781 1.671875,-3.03125 0.738281,-0.863281 1.648438,-1.523437 2.734375,-1.984375 1.082031,-0.46875 2.328125,-0.703125 3.734375,-0.703125 0.925781,0 1.851562,0.121094 2.78125,0.359375 0.925781,0.230469 1.8125,0.546875 2.65625,0.953125 l -1.265625,3.1875 c -0.699219,-0.320313 -1.402344,-0.601563 -2.109375,-0.84375 -0.699219,-0.25 -1.386719,-0.375 -2.0625,-0.375 z m 0,0"
|
||||||
|
id="path11" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="l">
|
||||||
|
<path
|
||||||
|
d="M 2.359375,0 V -2.296875 H 5.875 V -15.21875 H 2.359375 v -2.296875 h 9.6875 v 2.296875 h -3.53125 v 12.921875 h 3.53125 V 0 Z m 0,0"
|
||||||
|
id="path12" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="m">
|
||||||
|
<path
|
||||||
|
d="m 1.9375,0 v -17.515625 h 3.265625 l 5.109375,14.5625 c -0.03125,-0.457031 -0.07422,-1.003906 -0.125,-1.640625 -0.04297,-0.644531 -0.07422,-1.3125 -0.09375,-2 -0.02344,-0.6875 -0.03125,-1.3125 -0.03125,-1.875 v -9.046875 h 2.390625 V 0 H 9.1875 L 4.109375,-14.5625 c 0.03125,0.417969 0.0625,0.9375 0.09375,1.5625 0.039063,0.617188 0.070313,1.261719 0.09375,1.9375 0.03125,0.667969 0.046875,1.292969 0.046875,1.875 V 0 Z m 0,0"
|
||||||
|
id="path13" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="n">
|
||||||
|
<path
|
||||||
|
d="m 5.90625,0 v -15.140625 h -4.6875 v -2.40625 h 11.953125 v 2.40625 H 8.5 V 0 Z m 0,0"
|
||||||
|
id="path14" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="o">
|
||||||
|
<path
|
||||||
|
d="m 1.984375,0 v -17.515625 h 4.90625 c 1.144531,0 2.140625,0.21875 2.984375,0.65625 0.851562,0.4375 1.515625,1.058594 1.984375,1.859375 0.476563,0.804688 0.71875,1.746094 0.71875,2.828125 V -5.375 c 0,1.074219 -0.242187,2.023438 -0.71875,2.84375 -0.46875,0.8125 -1.132813,1.4375 -1.984375,1.875 C 9.03125,-0.21875 8.035156,0 6.890625,0 Z m 2.59375,-2.359375 h 2.3125 c 0.957031,0 1.710937,-0.265625 2.265625,-0.796875 C 9.707031,-3.6875 9.984375,-4.425781 9.984375,-5.375 v -6.796875 c 0,-0.925781 -0.277344,-1.65625 -0.828125,-2.1875 -0.554688,-0.539063 -1.308594,-0.8125 -2.265625,-0.8125 h -2.3125 z m 0,0"
|
||||||
|
id="path15" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="p">
|
||||||
|
<path
|
||||||
|
d="m 2.25,0 v -17.515625 h 10.296875 v 2.296875 h -7.75 V -10.25 h 6.921875 v 2.28125 H 4.796875 v 5.671875 h 7.75 V 0 Z m 0,0"
|
||||||
|
id="path16" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="q">
|
||||||
|
<path
|
||||||
|
d="m 2.015625,0 v -17.515625 h 5.5 c 1.101563,0 2.0625,0.214844 2.875,0.640625 0.8125,0.417969 1.445313,1.011719 1.90625,1.78125 0.457031,0.773438 0.6875,1.671875 0.6875,2.703125 0,1.179687 -0.304687,2.195313 -0.90625,3.046875 -0.59375,0.855469 -1.40625,1.460938 -2.4375,1.8125 L 13.21875,0 h -2.953125 l -3.1875,-7.203125 H 4.609375 V 0 Z m 2.59375,-9.484375 h 2.90625 c 0.863281,0 1.550781,-0.257813 2.0625,-0.78125 0.507813,-0.519531 0.765625,-1.210937 0.765625,-2.078125 0,-0.894531 -0.257812,-1.597656 -0.765625,-2.109375 -0.511719,-0.507813 -1.199219,-0.765625 -2.0625,-0.765625 h -2.90625 z m 0,0"
|
||||||
|
id="path17" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="r">
|
||||||
|
<path
|
||||||
|
d="M 7.265625,0.234375 C 6.085938,0.234375 5.070312,0.0390625 4.21875,-0.34375 3.375,-0.738281 2.71875,-1.300781 2.25,-2.03125 1.789062,-2.757812 1.5625,-3.625 1.5625,-4.625 H 4.125 c 0,0.792969 0.28125,1.417969 0.84375,1.875 0.5625,0.460938 1.335938,0.6875 2.328125,0.6875 0.925781,0 1.648437,-0.222656 2.171875,-0.671875 0.53125,-0.445313 0.796875,-1.0625 0.796875,-1.84375 0,-0.65625 -0.183594,-1.222656 -0.546875,-1.703125 C 9.363281,-6.769531 8.851562,-7.097656 8.1875,-7.265625 l -2.21875,-0.65625 c -1.273438,-0.363281 -2.257812,-0.988281 -2.953125,-1.875 -0.699219,-0.894531 -1.046875,-1.957031 -1.046875,-3.1875 0,-0.957031 0.210938,-1.796875 0.640625,-2.515625 0.4375,-0.71875 1.050781,-1.273438 1.84375,-1.671875 0.800781,-0.40625 1.75,-0.609375 2.84375,-0.609375 1.601563,0 2.882813,0.433594 3.84375,1.296875 0.96875,0.867187 1.460937,2.023437 1.484375,3.46875 h -2.59375 c 0,-0.757813 -0.246094,-1.359375 -0.734375,-1.796875 C 8.804688,-15.257812 8.125,-15.484375 7.25,-15.484375 c -0.855469,0 -1.523438,0.210937 -2,0.625 -0.480469,0.40625 -0.71875,0.976563 -0.71875,1.703125 0,0.65625 0.175781,1.226562 0.53125,1.703125 0.363281,0.480469 0.882812,0.820313 1.5625,1.015625 l 2.234375,0.671875 c 1.28125,0.355469 2.265625,0.980469 2.953125,1.875 0.6875,0.898437 1.03125,1.964844 1.03125,3.203125 0,0.980469 -0.234375,1.84375 -0.703125,2.59375 -0.460937,0.742188 -1.105469,1.3125 -1.9375,1.71875 -0.835937,0.4023438 -1.8125,0.609375 -2.9375,0.609375 z m 0,0"
|
||||||
|
id="path18" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="s">
|
||||||
|
<path
|
||||||
|
d="M 2.015625,0 V -17.515625 H 7.75 c 1.132812,0 2.117188,0.21875 2.953125,0.65625 0.84375,0.429687 1.492187,1.039063 1.953125,1.828125 0.457031,0.792969 0.6875,1.726562 0.6875,2.796875 0,1.054687 -0.234375,1.980469 -0.703125,2.78125 -0.460937,0.804687 -1.105469,1.421875 -1.9375,1.859375 C 9.867188,-7.164062 8.882812,-6.953125 7.75,-6.953125 H 4.609375 V 0 Z m 2.59375,-9.28125 H 7.75 c 0.894531,0 1.609375,-0.265625 2.140625,-0.796875 0.539063,-0.539063 0.8125,-1.257813 0.8125,-2.15625 0,-0.914063 -0.273437,-1.632813 -0.8125,-2.15625 C 9.359375,-14.921875 8.644531,-15.1875 7.75,-15.1875 H 4.609375 Z m 0,0"
|
||||||
|
id="path19" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="t">
|
||||||
|
<path
|
||||||
|
d="M 7.203125,0.234375 C 6.109375,0.234375 5.164062,0.0273438 4.375,-0.375 3.582031,-0.78125 2.972656,-1.367188 2.546875,-2.140625 2.128906,-2.921875 1.921875,-3.832031 1.921875,-4.875 v -7.765625 c 0,-1.0625 0.207031,-1.972656 0.625,-2.734375 0.425781,-0.769531 1.035156,-1.359375 1.828125,-1.765625 0.789062,-0.414063 1.734375,-0.625 2.828125,-0.625 1.082031,0 2.019531,0.210937 2.8125,0.625 0.789063,0.40625 1.398437,0.996094 1.828125,1.765625 0.425781,0.761719 0.640625,1.664062 0.640625,2.703125 V -4.875 c 0,1.042969 -0.214844,1.953125 -0.640625,2.734375 -0.429688,0.773437 -1.039062,1.359375 -1.828125,1.765625 -0.792969,0.4023438 -1.730469,0.609375 -2.8125,0.609375 z m 0,-2.296875 c 0.875,0 1.539063,-0.242188 2,-0.734375 0.457031,-0.488281 0.6875,-1.179687 0.6875,-2.078125 v -7.765625 c 0,-0.914063 -0.230469,-1.613281 -0.6875,-2.09375 -0.460937,-0.476563 -1.125,-0.71875 -2,-0.71875 -0.867187,0 -1.53125,0.242187 -2,0.71875 -0.460937,0.480469 -0.6875,1.179687 -0.6875,2.09375 V -4.875 c 0,0.898438 0.226563,1.589844 0.6875,2.078125 0.46875,0.492187 1.132813,0.734375 2,0.734375 z m 0,0"
|
||||||
|
id="path20" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="u">
|
||||||
|
<path
|
||||||
|
d="M 7.296875,0.234375 C 6.203125,0.234375 5.25,0.0273438 4.4375,-0.375 3.632812,-0.78125 3.015625,-1.367188 2.578125,-2.140625 2.140625,-2.921875 1.921875,-3.832031 1.921875,-4.875 v -7.765625 c 0,-1.0625 0.21875,-1.972656 0.65625,-2.734375 0.4375,-0.769531 1.054687,-1.359375 1.859375,-1.765625 0.8125,-0.414063 1.765625,-0.625 2.859375,-0.625 1.082031,0 2.023437,0.210937 2.828125,0.625 0.800781,0.417969 1.421875,1.007813 1.859375,1.765625 0.4375,0.761719 0.65625,1.671875 0.65625,2.734375 H 10.0625 c 0,-0.914063 -0.246094,-1.613281 -0.734375,-2.09375 -0.480469,-0.476563 -1.15625,-0.71875 -2.03125,-0.71875 -0.886719,0 -1.574219,0.242187 -2.0625,0.71875 -0.480469,0.480469 -0.71875,1.167969 -0.71875,2.0625 V -4.875 c 0,0.898438 0.238281,1.589844 0.71875,2.078125 0.488281,0.492187 1.175781,0.734375 2.0625,0.734375 0.875,0 1.550781,-0.242188 2.03125,-0.734375 C 9.816406,-3.285156 10.0625,-3.976562 10.0625,-4.875 h 2.578125 c 0,1.042969 -0.21875,1.949219 -0.65625,2.71875 -0.4375,0.761719 -1.058594,1.351562 -1.859375,1.765625 -0.804688,0.4140625 -1.746094,0.625 -2.828125,0.625 z m 0,0"
|
||||||
|
id="path21" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
id="v">
|
||||||
|
<path
|
||||||
|
d="m 9.234375,-14.796875 c 0.269531,0 0.554687,0.01563 0.859375,0.04687 0.3125,0.03125 0.578125,0.07031 0.796875,0.109375 l -0.28125,2.46875 c -0.210937,-0.05078 -0.453125,-0.09375 -0.734375,-0.125 -0.273438,-0.03906 -0.527344,-0.0625 -0.765625,-0.0625 -0.5625,0 -1.101563,0.109375 -1.609375,0.328125 -0.511719,0.210938 -0.960938,0.515625 -1.34375,0.921875 C 5.769531,-10.710938 5.46875,-10.226562 5.25,-9.65625 5.03125,-9.082031 4.921875,-8.425781 4.921875,-7.6875 V 0 H 2.25 v -14.53125 h 2.140625 l 0.3125,2.625 h 0.125 c 0.300781,-0.53125 0.660156,-1.015625 1.078125,-1.453125 0.425781,-0.4375 0.921875,-0.785156 1.484375,-1.046875 0.5625,-0.257812 1.175781,-0.390625 1.84375,-0.390625 z m 0,0"
|
||||||
|
id="path22" />
|
||||||
|
</g>
|
||||||
|
</defs>
|
||||||
|
<path
|
||||||
|
d="M 79.683596,354.01486 H 1056.0235 c 16.5859,0 26.539,0 33.1758,2.34375 10.4765,3.8164 18.7304,12.07031 22.5468,22.54687 1.5977,4.05078 2.3438,10.36328 2.3438,15.10938 0,4.74218 -0.7461,11.05468 -2.3438,15.10547 -3.8164,10.48046 -12.0703,18.73437 -22.5468,22.54687 -6.6368,2.34766 -16.5899,2.34766 -33.1758,2.34766 H 79.683596 c -16.58594,0 -26.53907,0 -33.17188,-2.34766 -10.48047,-3.8125 -18.73437,-12.06641 -22.54687,-22.54687 -1.60157,-4.05079 -2.34766,-10.36329 -2.34766,-15.10547 0,-4.7461 0.74609,-11.0586 2.34766,-15.10938 3.8125,-10.47656 12.0664,-18.73047 22.54687,-22.54687 6.63281,-2.34375 16.58594,-2.34375 33.17188,-2.34375 z m 0,0"
|
||||||
|
fill="#55c1a7"
|
||||||
|
fill-opacity="0.2"
|
||||||
|
id="path23" />
|
||||||
|
<path
|
||||||
|
d="M 79.683594,354.01485 H 1056.0235 c 16.5859,0 26.539,0 33.1719,2.34375 10.4804,3.81641 18.7343,12.07032 22.5507,22.54688 1.5977,4.05078 2.3438,10.36328 2.3438,15.10937 0,4.74219 -0.7461,11.05469 -2.3438,15.10547 -3.8164,10.48047 -12.0703,18.73438 -22.5507,22.54688 -6.6329,2.34765 -16.586,2.34765 -33.1719,2.34765 H 79.683594 c -16.585938,0 -26.539063,0 -33.171875,-2.34765 -10.480469,-3.8125 -18.734375,-12.06641 -22.546875,-22.54688 -1.601563,-4.05078 -2.347656,-10.36328 -2.347656,-15.10547 0,-4.74609 0.746093,-11.05859 2.347656,-15.10937 3.8125,-10.47656 12.066406,-18.73047 22.546875,-22.54688 6.632812,-2.34375 16.585937,-2.34375 33.171875,-2.34375 z m 0,0"
|
||||||
|
fill="none"
|
||||||
|
stroke="#55c1a7"
|
||||||
|
stroke-width="1.1"
|
||||||
|
id="path24" />
|
||||||
|
<g
|
||||||
|
fill="#4caf98"
|
||||||
|
id="g32"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<path
|
||||||
|
d="M 10.1875,0 5.71875,-14.5625 H 5.609375 c 0.019531,0.34375 0.046875,0.867188 0.078125,1.5625 0.039062,0.699219 0.078125,1.445312 0.109375,2.234375 0.039063,0.792969 0.0625,1.5 0.0625,2.125 V 0 H 2.34375 V -18.5625 H 7.6875 l 4.40625,14.1875 h 0.0625 l 4.671875,-14.1875 h 5.34375 V 0 h -3.65625 v -8.78125 c 0,-0.582031 0.0078,-1.253906 0.03125,-2.015625 0.01953,-0.769531 0.04687,-1.5 0.07813,-2.1875 0.03125,-0.6875 0.05469,-1.203125 0.07813,-1.546875 H 18.59375 L 13.796875,0 Z m 0,0"
|
||||||
|
transform="translate(310.4748,625.811)"
|
||||||
|
id="path25" />
|
||||||
|
<use
|
||||||
|
x="334.73019"
|
||||||
|
xlink:href="#a"
|
||||||
|
y="625.81097"
|
||||||
|
id="use25" />
|
||||||
|
<use
|
||||||
|
x="349.02759"
|
||||||
|
xlink:href="#b"
|
||||||
|
y="625.81097"
|
||||||
|
id="use26" />
|
||||||
|
<use
|
||||||
|
x="363.091"
|
||||||
|
xlink:href="#b"
|
||||||
|
y="625.81097"
|
||||||
|
id="use27" />
|
||||||
|
<use
|
||||||
|
x="377.15439"
|
||||||
|
xlink:href="#c"
|
||||||
|
y="625.81097"
|
||||||
|
id="use28" />
|
||||||
|
<use
|
||||||
|
x="394.83179"
|
||||||
|
xlink:href="#d"
|
||||||
|
y="625.81097"
|
||||||
|
id="use29" />
|
||||||
|
<use
|
||||||
|
x="413.39319"
|
||||||
|
xlink:href="#e"
|
||||||
|
y="625.81097"
|
||||||
|
id="use30" />
|
||||||
|
<use
|
||||||
|
x="421.7366"
|
||||||
|
xlink:href="#f"
|
||||||
|
y="625.81097"
|
||||||
|
id="use31" />
|
||||||
|
<use
|
||||||
|
x="442.612"
|
||||||
|
xlink:href="#d"
|
||||||
|
y="625.81097"
|
||||||
|
id="use32" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="M 80.285156,457.01486 H 1055.4219 c 16.75,0 26.7969,0 33.4961,2.35937 10.6016,3.85547 18.9531,12.20703 22.8125,22.8125 1.5977,4.10547 2.3594,10.11328 2.3594,14.82813 0,4.71093 -0.7617,10.71875 -2.3594,14.82812 -3.8594,10.60157 -12.2109,18.95313 -22.8125,22.8125 -6.6992,2.35938 -16.7461,2.35938 -33.4961,2.35938 H 80.285156 c -16.74609,0 -26.79687,0 -33.49609,-2.35938 -10.60157,-3.85937 -18.95313,-12.21093 -22.8125,-22.8125 -1.59766,-4.10937 -2.35938,-10.11718 -2.35938,-14.82812 0,-4.71485 0.76172,-10.72266 2.35938,-14.82813 3.85937,-10.60547 12.21093,-18.95703 22.8125,-22.8125 6.69922,-2.35937 16.75,-2.35937 33.49609,-2.35937 z m 0,0"
|
||||||
|
fill="#00a2ff"
|
||||||
|
fill-opacity="0.2"
|
||||||
|
id="path32" />
|
||||||
|
<path
|
||||||
|
d="M 80.285156,457.01485 H 1055.4219 c 16.7461,0 26.7969,0 33.4961,2.35938 10.6016,3.85547 18.9531,12.20703 22.8125,22.8125 1.5977,4.10547 2.3594,10.11328 2.3594,14.82812 0,4.71094 -0.7617,10.71875 -2.3594,14.82813 -3.8594,10.60156 -12.2109,18.95312 -22.8125,22.8125 -6.6992,2.35937 -16.75,2.35937 -33.4961,2.35937 H 80.285156 c -16.746094,0 -26.796875,0 -33.496094,-2.35937 -10.601562,-3.85938 -18.953125,-12.21094 -22.8125,-22.8125 -1.597656,-4.10938 -2.359374,-10.11719 -2.359374,-14.82813 0,-4.71484 0.761718,-10.72265 2.359374,-14.82812 3.859375,-10.60547 12.210938,-18.95703 22.8125,-22.8125 6.699219,-2.35938 16.75,-2.35938 33.496094,-2.35938 z m 0,0"
|
||||||
|
fill="none"
|
||||||
|
stroke="#00a2ff"
|
||||||
|
stroke-width="1.1"
|
||||||
|
id="path33" />
|
||||||
|
<g
|
||||||
|
fill="#00a2ff"
|
||||||
|
id="g41"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<use
|
||||||
|
x="310.86209"
|
||||||
|
xlink:href="#g"
|
||||||
|
y="728.81097"
|
||||||
|
id="use33" />
|
||||||
|
<use
|
||||||
|
x="325.65869"
|
||||||
|
xlink:href="#h"
|
||||||
|
y="728.81097"
|
||||||
|
id="use34" />
|
||||||
|
<use
|
||||||
|
x="342.56131"
|
||||||
|
xlink:href="#c"
|
||||||
|
y="728.81097"
|
||||||
|
id="use35" />
|
||||||
|
<use
|
||||||
|
x="360.2439"
|
||||||
|
xlink:href="#f"
|
||||||
|
y="728.81097"
|
||||||
|
id="use36" />
|
||||||
|
<use
|
||||||
|
x="381.12451"
|
||||||
|
xlink:href="#b"
|
||||||
|
y="728.81097"
|
||||||
|
id="use37" />
|
||||||
|
<use
|
||||||
|
x="395.19312"
|
||||||
|
xlink:href="#i"
|
||||||
|
y="728.81097"
|
||||||
|
id="use38" />
|
||||||
|
<use
|
||||||
|
x="411.2637"
|
||||||
|
xlink:href="#j"
|
||||||
|
y="728.81097"
|
||||||
|
id="use39" />
|
||||||
|
<use
|
||||||
|
x="431.7023"
|
||||||
|
xlink:href="#h"
|
||||||
|
y="728.81097"
|
||||||
|
id="use40" />
|
||||||
|
<use
|
||||||
|
x="448.60489"
|
||||||
|
xlink:href="#g"
|
||||||
|
y="728.81097"
|
||||||
|
id="use41" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 253.66016,165.74533 h 594.6016 c 16.75,0 26.7968,0 33.5,2.35937 10.6015,3.85938 18.9531,12.21094 22.8125,22.8125 1.5976,4.10938 2.3593,10.11719 2.3593,14.82813 0,4.71093 -0.7617,10.71875 -2.3593,14.82812 -3.8594,10.60156 -12.211,18.95313 -22.8125,22.8125 -6.7032,2.35938 -16.75,2.35938 -33.5,2.35938 h -594.6016 c -16.75,0 -26.80078,0 -33.5,-2.35938 -10.60156,-3.85937 -18.95313,-12.21094 -22.8125,-22.8125 -1.59766,-4.10937 -2.35938,-10.11719 -2.35938,-14.82812 0,-4.71094 0.76172,-10.71875 2.35938,-14.82813 3.85937,-10.60156 12.21094,-18.95312 22.8125,-22.8125 6.69922,-2.35937 16.75,-2.35937 33.5,-2.35937 z m 0,0"
|
||||||
|
fill="#f6891e"
|
||||||
|
fill-opacity="0.2"
|
||||||
|
id="path41" />
|
||||||
|
<path
|
||||||
|
d="m 253.66016,165.74532 h 594.60156 c 16.75,0 26.80078,0 33.5,2.35938 10.60157,3.85937 18.95313,12.21094 22.8125,22.8125 1.59766,4.10937 2.35938,10.11719 2.35938,14.82812 0,4.71094 -0.76172,10.71875 -2.35938,14.82813 -3.85937,10.60156 -12.21093,18.95312 -22.8125,22.8125 -6.69922,2.35937 -16.75,2.35937 -33.5,2.35937 H 253.66016 c -16.75,0 -26.80078,0 -33.5,-2.35937 -10.60157,-3.85938 -18.95313,-12.21094 -22.8125,-22.8125 -1.59766,-4.10938 -2.35938,-10.11719 -2.35938,-14.82813 0,-4.71093 0.76172,-10.71875 2.35938,-14.82812 3.85937,-10.60156 12.21093,-18.95313 22.8125,-22.8125 6.69922,-2.35938 16.75,-2.35938 33.5,-2.35938 z m 0,0"
|
||||||
|
fill="none"
|
||||||
|
stroke="#f6891e"
|
||||||
|
stroke-width="1.1"
|
||||||
|
id="path42" />
|
||||||
|
<g
|
||||||
|
fill="#f6891e"
|
||||||
|
id="g47"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<use
|
||||||
|
x="484.2334"
|
||||||
|
xlink:href="#a"
|
||||||
|
y="437.5426"
|
||||||
|
id="use42" />
|
||||||
|
<path
|
||||||
|
d="m 17.34375,0 h -4.5 L 8.53125,-7.015625 4.21875,0 H 0 L 6.15625,-9.578125 0.390625,-18.5625 h 4.34375 l 4,6.671875 3.921875,-6.671875 h 4.234375 l -5.8125,9.203125 z m 0,0"
|
||||||
|
transform="translate(498.536,437.5426)"
|
||||||
|
id="path43" />
|
||||||
|
<use
|
||||||
|
x="515.62061"
|
||||||
|
xlink:href="#k"
|
||||||
|
y="437.5426"
|
||||||
|
id="use43" />
|
||||||
|
<path
|
||||||
|
d="M 17.546875,0 H 13.625 V -8.015625 H 6.265625 V 0 H 2.34375 v -18.5625 h 3.921875 v 7.28125 H 13.625 v -7.28125 h 3.921875 z m 0,0"
|
||||||
|
transform="translate(531.9252,437.5426)"
|
||||||
|
id="path44" />
|
||||||
|
<use
|
||||||
|
x="551.5578"
|
||||||
|
xlink:href="#c"
|
||||||
|
y="437.5426"
|
||||||
|
id="use44" />
|
||||||
|
<use
|
||||||
|
x="569.24042"
|
||||||
|
xlink:href="#f"
|
||||||
|
y="437.5426"
|
||||||
|
id="use45" />
|
||||||
|
<use
|
||||||
|
x="590.12097"
|
||||||
|
xlink:href="#d"
|
||||||
|
y="437.5426"
|
||||||
|
id="use46" />
|
||||||
|
<use
|
||||||
|
x="608.68762"
|
||||||
|
xlink:href="#a"
|
||||||
|
y="437.5426"
|
||||||
|
id="use47" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="M 81.816406,0.55001077 H 1053.8907 c 17.1601,0 27.457,0 34.3203,2.39062523 10.914,3.972656 19.5156,12.574218 23.4883,23.488281 1.5937,4.273437 2.3906,9.453125 2.3906,14.121094 0,4.667968 -0.7969,9.847656 -2.3906,14.121093 -3.9727,10.914063 -12.5743,19.511719 -23.4883,23.488282 -6.8633,2.390625 -17.1602,2.390625 -34.3203,2.390625 H 81.816406 c -17.160156,0 -27.457031,0 -34.320312,-2.390625 C 36.582031,74.182823 27.980469,65.585167 24.007812,54.671104 c -1.59375,-4.273437 -2.390624,-9.453125 -2.390624,-14.121093 0,-4.667969 0.796874,-9.847657 2.390624,-14.121094 C 27.980469,15.514854 36.582031,6.913292 47.496094,2.940636 54.359375,0.55001077 64.65625,0.55001077 81.816406,0.55001077 Z m 0,0"
|
||||||
|
fill="#cf2189"
|
||||||
|
fill-opacity="0.2"
|
||||||
|
stroke="#cf2189"
|
||||||
|
stroke-opacity="0.6"
|
||||||
|
stroke-width="1.1"
|
||||||
|
id="path47" />
|
||||||
|
<g
|
||||||
|
fill="#cf2189"
|
||||||
|
id="g57"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<use
|
||||||
|
x="311.6319"
|
||||||
|
xlink:href="#c"
|
||||||
|
y="272.34729"
|
||||||
|
id="use48" />
|
||||||
|
<use
|
||||||
|
x="329.3093"
|
||||||
|
xlink:href="#i"
|
||||||
|
y="272.34729"
|
||||||
|
id="use49" />
|
||||||
|
<use
|
||||||
|
x="345.37469"
|
||||||
|
xlink:href="#i"
|
||||||
|
y="272.34729"
|
||||||
|
id="use50" />
|
||||||
|
<path
|
||||||
|
d="M 2.34375,0 V -18.5625 H 6.265625 V -3.25 h 7.53125 V 0 Z m 0,0"
|
||||||
|
transform="translate(361.4401,272.3473)"
|
||||||
|
id="path50" />
|
||||||
|
<use
|
||||||
|
x="375.86749"
|
||||||
|
xlink:href="#e"
|
||||||
|
y="272.34729"
|
||||||
|
id="use51" />
|
||||||
|
<use
|
||||||
|
x="384.21091"
|
||||||
|
xlink:href="#k"
|
||||||
|
y="272.34729"
|
||||||
|
id="use52" />
|
||||||
|
<use
|
||||||
|
x="400.51031"
|
||||||
|
xlink:href="#c"
|
||||||
|
y="272.34729"
|
||||||
|
id="use53" />
|
||||||
|
<use
|
||||||
|
x="418.18771"
|
||||||
|
xlink:href="#g"
|
||||||
|
y="272.34729"
|
||||||
|
id="use54" />
|
||||||
|
<use
|
||||||
|
x="432.9791"
|
||||||
|
xlink:href="#e"
|
||||||
|
y="272.34729"
|
||||||
|
id="use55" />
|
||||||
|
<use
|
||||||
|
x="441.32251"
|
||||||
|
xlink:href="#j"
|
||||||
|
y="272.34729"
|
||||||
|
id="use56" />
|
||||||
|
<use
|
||||||
|
x="461.75589"
|
||||||
|
xlink:href="#f"
|
||||||
|
y="272.34729"
|
||||||
|
id="use57" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="M 85.464844,333.01485 H 1050.2422 c 24.6407,0 39.4258,0 49.2813,4.11329 14.207,5.17187 25.3984,16.36328 30.5703,30.57422 4.1172,9.85546 4.1172,24.64062 4.1172,49.27734 v 57.5 c 0,24.64063 0,39.42578 -4.1172,49.28125 -5.1719,14.20703 -16.3633,25.40234 -30.5703,30.57422 -9.8555,4.11328 -24.6406,4.11328 -49.2813,4.11328 H 85.464844 c -24.640625,0 -39.421875,0 -49.277344,-4.11328 C 21.976562,549.16329 10.785156,537.96798 5.6132813,523.76095 1.5,513.90548 1.5,499.12033 1.5,474.4797 v -57.5 c 0,-24.63672 0,-39.42188 4.1132813,-49.27734 5.1718747,-14.21094 16.3632807,-25.40235 30.5742187,-30.57422 9.855469,-4.11329 24.636719,-4.11329 49.277344,-4.11329 z m 0,0"
|
||||||
|
fill="none"
|
||||||
|
stroke="#5e5e5e"
|
||||||
|
stroke-dasharray="6, 6"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path57" />
|
||||||
|
<path
|
||||||
|
d="M 59.730469,79.975792 V 319.81173"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path58" />
|
||||||
|
<path
|
||||||
|
d="m 53.128906,318.31173 6.60156,13.20313 6.60156,-13.20313 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path59" />
|
||||||
|
<path
|
||||||
|
d="m 108.10547,183.87814 h 20.60937 c 9.51954,0 15.23047,0 19.03907,1.3164 6.07422,2.21094 10.85937,6.9961 13.07031,13.07032 0.87109,2.39843 1.31641,4.92968 1.31641,7.48046 0,2.55079 -0.44532,5.08204 -1.31641,7.48047 -2.21094,6.07422 -6.99609,10.85938 -13.07031,13.07032 -3.8086,1.3164 -9.51953,1.3164 -19.03907,1.3164 h -20.60937 c -9.519533,0 -15.23047,0 -19.039064,-1.3164 -6.074219,-2.21094 -10.859375,-6.9961 -13.070312,-13.07032 -0.875,-2.39843 -1.320313,-4.92968 -1.320313,-7.48047 0,-2.55078 0.445313,-5.08203 1.320313,-7.48046 2.210937,-6.07422 6.996093,-10.85938 13.070312,-13.07032 3.808594,-1.3164 9.519531,-1.3164 19.039064,-1.3164 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
stroke="#929292"
|
||||||
|
stroke-width="0.6"
|
||||||
|
id="path60" />
|
||||||
|
<g
|
||||||
|
fill="#ffffff"
|
||||||
|
id="g63"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<use
|
||||||
|
x="355.63269"
|
||||||
|
xlink:href="#l"
|
||||||
|
y="436.20099"
|
||||||
|
id="use60" />
|
||||||
|
<use
|
||||||
|
x="369.79269"
|
||||||
|
xlink:href="#m"
|
||||||
|
y="436.20099"
|
||||||
|
id="use61" />
|
||||||
|
<use
|
||||||
|
x="383.9527"
|
||||||
|
xlink:href="#l"
|
||||||
|
y="436.20099"
|
||||||
|
id="use62" />
|
||||||
|
<use
|
||||||
|
x="398.1127"
|
||||||
|
xlink:href="#n"
|
||||||
|
y="436.20099"
|
||||||
|
id="use63" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
fill="#5e5e5e"
|
||||||
|
id="g67"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<g
|
||||||
|
id="g64">
|
||||||
|
<path
|
||||||
|
d="m 18.0625,-9.828125 c 0,2.179687 -0.402344,3.996094 -1.203125,5.453125 C 16.054688,-2.925781 14.894531,-1.832031 13.375,-1.09375 11.863281,-0.363281 10.03125,0 7.875,0 H 2.578125 V -19.28125 H 8.46875 c 1.96875,0 3.664062,0.359375 5.09375,1.078125 1.4375,0.71875 2.546875,1.78125 3.328125,3.1875 0.78125,1.398437 1.171875,3.125 1.171875,5.1875 z M 15.234375,-9.75 c 0,-1.644531 -0.273437,-3.003906 -0.8125,-4.078125 -0.53125,-1.070313 -1.320313,-1.867187 -2.359375,-2.390625 C 11.019531,-16.738281 9.75,-17 8.25,-17 H 5.28125 v 14.703125 h 2.5 c 2.488281,0 4.351562,-0.617187 5.59375,-1.859375 1.238281,-1.25 1.859375,-3.113281 1.859375,-5.59375 z m 0,0"
|
||||||
|
transform="translate(778.178,823.9531)"
|
||||||
|
id="path63" />
|
||||||
|
<use
|
||||||
|
x="797.60449"
|
||||||
|
xlink:href="#v"
|
||||||
|
y="823.95312"
|
||||||
|
id="use64" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="M 4.90625,-14.53125 V 0 H 2.25 v -14.53125 z m -1.3125,-5.5 c 0.425781,0 0.789062,0.125 1.09375,0.375 0.300781,0.25 0.453125,0.652344 0.453125,1.203125 C 5.140625,-17.898438 4.988281,-17.5 4.6875,-17.25 4.382812,-17 4.019531,-16.875 3.59375,-16.875 3.164062,-16.875 2.800781,-17 2.5,-17.25 2.207031,-17.5 2.0625,-17.898438 2.0625,-18.453125 c 0,-0.550781 0.144531,-0.953125 0.4375,-1.203125 0.300781,-0.25 0.664062,-0.375 1.09375,-0.375 z m 0,0"
|
||||||
|
transform="translate(808.661,823.9531)"
|
||||||
|
id="path64" />
|
||||||
|
<g
|
||||||
|
id="g66">
|
||||||
|
<path
|
||||||
|
d="M 5.53125,0 0,-14.53125 h 2.8125 l 3.09375,8.671875 C 6.101562,-5.296875 6.300781,-4.675781 6.5,-4 c 0.195312,0.679688 0.332031,1.234375 0.40625,1.671875 H 7 C 7.082031,-2.773438 7.226562,-3.332031 7.4375,-4 7.65625,-4.675781 7.863281,-5.296875 8.0625,-5.859375 l 3.078125,-8.671875 H 13.96875 L 8.421875,0 Z m 0,0"
|
||||||
|
transform="translate(815.5595,823.9531)"
|
||||||
|
id="path65" />
|
||||||
|
<path
|
||||||
|
d="m 7.953125,-14.796875 c 1.257813,0 2.34375,0.273437 3.25,0.8125 0.90625,0.542969 1.597656,1.308594 2.078125,2.296875 0.488281,0.980469 0.734375,2.136719 0.734375,3.46875 v 1.515625 H 4.15625 c 0.019531,1.554687 0.414062,2.746094 1.1875,3.578125 0.78125,0.824219 1.867188,1.234375 3.265625,1.234375 0.925781,0 1.75,-0.082031 2.46875,-0.25 0.71875,-0.175781 1.460937,-0.4375 2.234375,-0.78125 v 2.21875 c -0.730469,0.335937 -1.464844,0.582031 -2.203125,0.734375 -0.730469,0.15625 -1.605469,0.234375 -2.625,0.234375 -1.40625,0 -2.640625,-0.28125 -3.703125,-0.84375 -1.054688,-0.5625 -1.875,-1.394531 -2.46875,-2.5 -0.585938,-1.101563 -0.875,-2.460937 -0.875,-4.078125 0,-1.601562 0.265625,-2.972656 0.796875,-4.109375 C 2.773438,-12.398438 3.53125,-13.269531 4.5,-13.875 c 0.976562,-0.613281 2.128906,-0.921875 3.453125,-0.921875 z m -0.015625,2.0625 c -1.074219,0 -1.9375,0.351563 -2.59375,1.046875 -0.648438,0.699219 -1.027344,1.699219 -1.140625,3 h 7.140625 c 0,-0.800781 -0.125,-1.503906 -0.375,-2.109375 -0.25,-0.601563 -0.625,-1.078125 -1.125,-1.421875 -0.492188,-0.34375 -1.125,-0.515625 -1.90625,-0.515625 z m 0,0"
|
||||||
|
transform="translate(829.262,823.9531)"
|
||||||
|
id="path66" />
|
||||||
|
</g>
|
||||||
|
<use
|
||||||
|
x="844.34149"
|
||||||
|
xlink:href="#v"
|
||||||
|
y="823.95312"
|
||||||
|
id="use66" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="M 1075.2969,81.077355 V 319.81173"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path67" />
|
||||||
|
<path
|
||||||
|
d="m 1068.6954,318.31173 6.6015,13.20313 6.5977,-13.20313 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path68" />
|
||||||
|
<path
|
||||||
|
d="m 973.20706,183.90548 h 48.80864 c 9.5195,0 15.2343,0 19.039,1.32031 6.0743,2.21094 10.8594,6.9961 13.0703,13.07032 0.875,2.39453 1.3204,4.92578 1.3204,7.47656 0,2.55078 -0.4454,5.08203 -1.3204,7.48047 -2.2109,6.07422 -6.996,10.85937 -13.0703,13.07031 -3.8047,1.31641 -9.5195,1.31641 -19.039,1.31641 h -48.80864 c -9.5196,0 -15.2305,0 -19.0391,-1.31641 -6.0742,-2.21094 -10.8594,-6.99609 -13.0703,-13.07031 -0.875,-2.39844 -1.3203,-4.92969 -1.3203,-7.48047 0,-2.55078 0.4453,-5.08203 1.3203,-7.47656 2.2109,-6.07422 6.9961,-10.85938 13.0703,-13.07032 3.8086,-1.32031 9.5195,-1.32031 19.0391,-1.32031 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path69" />
|
||||||
|
<path
|
||||||
|
d="m 973.20703,183.90548 h 48.80857 c 9.5196,0 15.2305,0 19.0391,1.32031 6.0742,2.21094 10.8594,6.9961 13.0703,13.07032 0.875,2.39453 1.3203,4.92578 1.3203,7.47656 0,2.55078 -0.4453,5.08203 -1.3203,7.48047 -2.2109,6.07422 -6.9961,10.85937 -13.0703,13.07031 -3.8086,1.31641 -9.5195,1.31641 -19.0391,1.31641 h -48.80857 c -9.51953,0 -15.23047,0 -19.03906,-1.31641 -6.07422,-2.21094 -10.85938,-6.99609 -13.07031,-13.07031 -0.875,-2.39844 -1.32032,-4.92969 -1.32032,-7.48047 0,-2.55078 0.44532,-5.08203 1.32032,-7.47656 2.21093,-6.07422 6.99609,-10.85938 13.07031,-13.07032 3.80859,-1.32031 9.51953,-1.32031 19.03906,-1.32031 z m 0,0"
|
||||||
|
fill="none"
|
||||||
|
stroke="#929292"
|
||||||
|
stroke-width="0.6"
|
||||||
|
id="path70" />
|
||||||
|
<g
|
||||||
|
fill="#ffffff"
|
||||||
|
id="g75"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<use
|
||||||
|
x="1220.6689"
|
||||||
|
xlink:href="#o"
|
||||||
|
y="436.22961"
|
||||||
|
id="use70" />
|
||||||
|
<use
|
||||||
|
x="1234.829"
|
||||||
|
xlink:href="#p"
|
||||||
|
y="436.22961"
|
||||||
|
id="use71" />
|
||||||
|
<use
|
||||||
|
x="1248.989"
|
||||||
|
xlink:href="#l"
|
||||||
|
y="436.22961"
|
||||||
|
id="use72" />
|
||||||
|
<use
|
||||||
|
x="1263.149"
|
||||||
|
xlink:href="#m"
|
||||||
|
y="436.22961"
|
||||||
|
id="use73" />
|
||||||
|
<use
|
||||||
|
x="1277.309"
|
||||||
|
xlink:href="#l"
|
||||||
|
y="436.22961"
|
||||||
|
id="use74" />
|
||||||
|
<use
|
||||||
|
x="1291.469"
|
||||||
|
xlink:href="#n"
|
||||||
|
y="436.22961"
|
||||||
|
id="use75" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="M 227.54297,81.050011 V 153.5461"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path75" />
|
||||||
|
<path
|
||||||
|
d="m 220.94532,152.04611 6.59765,13.19922 6.60156,-13.19922 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path76" />
|
||||||
|
<path
|
||||||
|
d="m 279.66797,101.15939 h 62.80859 c 9.51954,0 15.23047,0 19.03907,1.32031 6.07422,2.21094 10.85937,6.99609 13.07031,13.07031 0.87109,2.39844 1.32031,4.92969 1.32031,7.48047 0,2.55078 -0.44922,5.08203 -1.32031,7.47656 -2.21094,6.07422 -6.99609,10.85938 -13.07031,13.07031 -3.8086,1.32032 -9.51953,1.32032 -19.03907,1.32032 h -62.80859 c -9.51953,0 -15.23047,0 -19.03906,-1.32032 -6.07422,-2.21093 -10.85938,-6.99609 -13.07032,-13.07031 -0.87109,-2.39453 -1.32031,-4.92578 -1.32031,-7.47656 0,-2.55078 0.44922,-5.08203 1.32031,-7.48047 2.21094,-6.07422 6.9961,-10.85937 13.07032,-13.07031 3.80859,-1.32031 9.51953,-1.32031 19.03906,-1.32031 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
stroke="#929292"
|
||||||
|
stroke-width="0.6"
|
||||||
|
id="path77" />
|
||||||
|
<g
|
||||||
|
fill="#ffffff"
|
||||||
|
id="g81"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<use
|
||||||
|
x="527.22742"
|
||||||
|
xlink:href="#q"
|
||||||
|
y="353.48511"
|
||||||
|
id="use77" />
|
||||||
|
<use
|
||||||
|
x="541.38739"
|
||||||
|
xlink:href="#p"
|
||||||
|
y="353.48511"
|
||||||
|
id="use78" />
|
||||||
|
<path
|
||||||
|
d="M 9.953125,4.3125 7.375,0.03125 7.75,0.21875 c -0.0625,0 -0.140625,0 -0.234375,0 -0.09375,0.007812 -0.199219,0.015625 -0.3125,0.015625 -1.09375,0 -2.046875,-0.2148438 -2.859375,-0.640625 C 3.53125,-0.84375 2.898438,-1.445312 2.453125,-2.21875 2.003906,-3 1.78125,-3.90625 1.78125,-4.9375 v -7.640625 c 0,-1.050781 0.222656,-1.960937 0.671875,-2.734375 0.445313,-0.769531 1.078125,-1.367188 1.890625,-1.796875 0.8125,-0.4375 1.765625,-0.65625 2.859375,-0.65625 1.101563,0 2.054687,0.21875 2.859375,0.65625 0.8125,0.429687 1.441406,1.027344 1.890625,1.796875 0.445313,0.773438 0.671875,1.683594 0.671875,2.734375 V -4.9375 c 0,1.054688 -0.230469,1.980469 -0.6875,2.78125 -0.460938,0.804688 -1.109375,1.402344 -1.953125,1.796875 L 12.84375,4.3125 Z m -2.75,-6.359375 c 0.875,0 1.5625,-0.257813 2.0625,-0.78125 C 9.773438,-3.359375 10.03125,-4.0625 10.03125,-4.9375 v -7.640625 c 0,-0.894531 -0.257812,-1.601563 -0.765625,-2.125 -0.5,-0.519531 -1.1875,-0.78125 -2.0625,-0.78125 -0.867187,0 -1.554687,0.261719 -2.0625,0.78125 -0.511719,0.523437 -0.765625,1.230469 -0.765625,2.125 V -4.9375 c 0,0.875 0.25,1.578125 0.75,2.109375 0.5,0.523437 1.191406,0.78125 2.078125,0.78125 z m 0,0"
|
||||||
|
transform="translate(555.5474,353.4851)"
|
||||||
|
id="path78" />
|
||||||
|
<path
|
||||||
|
d="m 7.203125,0.234375 c -1.679687,0 -2.976563,-0.457031 -3.890625,-1.375 -0.917969,-0.914063 -1.375,-2.164063 -1.375,-3.75 v -12.625 h 2.59375 v 12.625 c 0,0.875 0.21875,1.570313 0.65625,2.078125 0.445312,0.511719 1.117188,0.765625 2.015625,0.765625 0.875,0 1.535156,-0.253906 1.984375,-0.765625 0.445312,-0.507812 0.671875,-1.203125 0.671875,-2.078125 v -12.625 h 2.59375 v 12.625 c 0,1.585937 -0.460937,2.835937 -1.375,3.75 -0.90625,0.917969 -2.199219,1.375 -3.875,1.375 z m 0,0"
|
||||||
|
transform="translate(569.7074,353.4851)"
|
||||||
|
id="path79" />
|
||||||
|
<use
|
||||||
|
x="583.86737"
|
||||||
|
xlink:href="#p"
|
||||||
|
y="353.48511"
|
||||||
|
id="use79" />
|
||||||
|
<use
|
||||||
|
x="598.0274"
|
||||||
|
xlink:href="#r"
|
||||||
|
y="353.48511"
|
||||||
|
id="use80" />
|
||||||
|
<use
|
||||||
|
x="612.18738"
|
||||||
|
xlink:href="#n"
|
||||||
|
y="353.48511"
|
||||||
|
id="use81" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="M 875.50781,163.64767 V 91.151573"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path81" />
|
||||||
|
<path
|
||||||
|
d="m 882.10936,92.651577 -6.6015,-13.19922 -6.5977,13.19922 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path82" />
|
||||||
|
<path
|
||||||
|
d="m 733.44531,99.56173 h 87.42579 c 9.51953,0 15.23047,0 19.03906,1.32031 6.07422,2.21094 10.85937,6.9961 13.07031,13.07031 0.8711,2.39844 1.31641,4.92969 1.31641,7.48047 0,2.55078 -0.44531,5.08203 -1.31641,7.47657 -2.21094,6.07421 -6.99609,10.85937 -13.07031,13.07031 -3.80859,1.32031 -9.51953,1.32031 -19.03906,1.32031 h -87.42579 c -9.51953,0 -15.23047,0 -19.03906,-1.32031 -6.07422,-2.21094 -10.85937,-6.9961 -13.07031,-13.07031 -0.8711,-2.39454 -1.32032,-4.92579 -1.32032,-7.47657 0,-2.55078 0.44922,-5.08203 1.32032,-7.48047 2.21094,-6.07421 6.99609,-10.85937 13.07031,-13.07031 3.80859,-1.32031 9.51953,-1.32031 19.03906,-1.32031 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
stroke="#929292"
|
||||||
|
stroke-width="0.6"
|
||||||
|
id="path83" />
|
||||||
|
<g
|
||||||
|
fill="#ffffff"
|
||||||
|
id="g90"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<use
|
||||||
|
x="986.23767"
|
||||||
|
xlink:href="#q"
|
||||||
|
y="351.27811"
|
||||||
|
id="use83" />
|
||||||
|
<use
|
||||||
|
x="1000.3977"
|
||||||
|
xlink:href="#p"
|
||||||
|
y="351.27811"
|
||||||
|
id="use84" />
|
||||||
|
<use
|
||||||
|
x="1014.5577"
|
||||||
|
xlink:href="#r"
|
||||||
|
y="351.27811"
|
||||||
|
id="use85" />
|
||||||
|
<use
|
||||||
|
x="1028.7177"
|
||||||
|
xlink:href="#s"
|
||||||
|
y="351.27811"
|
||||||
|
id="use86" />
|
||||||
|
<use
|
||||||
|
x="1042.8777"
|
||||||
|
xlink:href="#t"
|
||||||
|
y="351.27811"
|
||||||
|
id="use87" />
|
||||||
|
<use
|
||||||
|
x="1057.0377"
|
||||||
|
xlink:href="#m"
|
||||||
|
y="351.27811"
|
||||||
|
id="use88" />
|
||||||
|
<use
|
||||||
|
x="1071.1978"
|
||||||
|
xlink:href="#r"
|
||||||
|
y="351.27811"
|
||||||
|
id="use89" />
|
||||||
|
<use
|
||||||
|
x="1085.3577"
|
||||||
|
xlink:href="#p"
|
||||||
|
y="351.27811"
|
||||||
|
id="use90" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 225.94141,246.24532 v 95.56641"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path90" />
|
||||||
|
<path
|
||||||
|
d="m 219.33985,340.31173 6.60156,13.20313 6.59766,-13.20313 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path91" />
|
||||||
|
<path
|
||||||
|
d="m 279.66797,267.01095 h 20.60937 c 9.51954,0 15.23047,0 19.03907,1.32031 6.07422,2.21094 10.85937,6.9961 13.07031,13.07031 0.87109,2.39454 1.32031,4.92579 1.32031,7.47657 0,2.55078 -0.44922,5.08203 -1.32031,7.48047 -2.21094,6.07421 -6.99609,10.85937 -13.07031,13.07031 -3.8086,1.3164 -9.51953,1.3164 -19.03907,1.3164 h -20.60937 c -9.51953,0 -15.23047,0 -19.03906,-1.3164 -6.07422,-2.21094 -10.85938,-6.9961 -13.07032,-13.07031 -0.87109,-2.39844 -1.32031,-4.92969 -1.32031,-7.48047 0,-2.55078 0.44922,-5.08203 1.32031,-7.47657 2.21094,-6.07421 6.9961,-10.85937 13.07032,-13.07031 3.80859,-1.32031 9.51953,-1.32031 19.03906,-1.32031 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
stroke="#929292"
|
||||||
|
stroke-width="0.6"
|
||||||
|
id="path92" />
|
||||||
|
<g
|
||||||
|
fill="#ffffff"
|
||||||
|
id="g95"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<use
|
||||||
|
x="527.19562"
|
||||||
|
xlink:href="#r"
|
||||||
|
y="519.33508"
|
||||||
|
id="use92" />
|
||||||
|
<use
|
||||||
|
x="541.35559"
|
||||||
|
xlink:href="#p"
|
||||||
|
y="519.33508"
|
||||||
|
id="use93" />
|
||||||
|
<use
|
||||||
|
x="555.51562"
|
||||||
|
xlink:href="#m"
|
||||||
|
y="519.33508"
|
||||||
|
id="use94" />
|
||||||
|
<use
|
||||||
|
x="569.6756"
|
||||||
|
xlink:href="#o"
|
||||||
|
y="519.33508"
|
||||||
|
id="use95" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 225.94141,434.51485 v 10.73438"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path95" />
|
||||||
|
<path
|
||||||
|
d="m 219.33985,443.74923 6.60156,13.19922 6.59766,-13.19922 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path96" />
|
||||||
|
<path
|
||||||
|
d="m 518.53906,445.77657 v 10.73829"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path97" />
|
||||||
|
<path
|
||||||
|
d="m 525.14063,447.27658 -6.60156,-13.19922 -6.59766,13.19922 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path98" />
|
||||||
|
<path
|
||||||
|
d="m 518.53906,257.94454 v 95.57032"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path99" />
|
||||||
|
<path
|
||||||
|
d="m 525.14063,259.44454 -6.60156,-13.19921 -6.59766,13.19921 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path100" />
|
||||||
|
<path
|
||||||
|
d="m 404.22656,267.01095 h 62.80469 c 9.52344,0 15.23438,0 19.04297,1.32031 6.07422,2.21094 10.85938,6.9961 13.07031,13.07031 0.8711,2.39454 1.31641,4.92579 1.31641,7.47657 0,2.55078 -0.44531,5.08203 -1.31641,7.48047 -2.21093,6.07421 -6.99609,10.85937 -13.07031,13.07031 -3.80859,1.3164 -9.51953,1.3164 -19.04297,1.3164 h -62.80469 c -9.52343,0 -15.23437,0 -19.04297,-1.3164 -6.07421,-2.21094 -10.85937,-6.9961 -13.07031,-13.07031 -0.87109,-2.39844 -1.31641,-4.92969 -1.31641,-7.48047 0,-2.55078 0.44532,-5.08203 1.31641,-7.47657 2.21094,-6.07421 6.9961,-10.85937 13.07031,-13.07031 3.8086,-1.32031 9.51954,-1.32031 19.04297,-1.32031 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
stroke="#929292"
|
||||||
|
stroke-width="0.6"
|
||||||
|
id="path101" />
|
||||||
|
<g
|
||||||
|
fill="#ffffff"
|
||||||
|
id="g107"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<use
|
||||||
|
x="651.784"
|
||||||
|
xlink:href="#s"
|
||||||
|
y="519.33508"
|
||||||
|
id="use101" />
|
||||||
|
<use
|
||||||
|
x="665.94397"
|
||||||
|
xlink:href="#q"
|
||||||
|
y="519.33508"
|
||||||
|
id="use102" />
|
||||||
|
<use
|
||||||
|
x="680.104"
|
||||||
|
xlink:href="#t"
|
||||||
|
y="519.33508"
|
||||||
|
id="use103" />
|
||||||
|
<use
|
||||||
|
x="694.26398"
|
||||||
|
xlink:href="#u"
|
||||||
|
y="519.33508"
|
||||||
|
id="use104" />
|
||||||
|
<use
|
||||||
|
x="708.42401"
|
||||||
|
xlink:href="#p"
|
||||||
|
y="519.33508"
|
||||||
|
id="use105" />
|
||||||
|
<use
|
||||||
|
x="722.58398"
|
||||||
|
xlink:href="#r"
|
||||||
|
y="519.33508"
|
||||||
|
id="use106" />
|
||||||
|
<use
|
||||||
|
x="736.74402"
|
||||||
|
xlink:href="#r"
|
||||||
|
y="519.33508"
|
||||||
|
id="use107" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 586.14453,247.31954 v 95.56641"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path107" />
|
||||||
|
<path
|
||||||
|
d="m 579.54688,341.38595 6.59765,13.19922 6.60157,-13.19922 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path108" />
|
||||||
|
<path
|
||||||
|
d="m 639.875,268.08517 h 20.60547 c 9.51953,0 15.23437,0 19.03906,1.3164 6.07422,2.21094 10.85938,6.9961 13.07031,13.07032 0.875,2.39843 1.32032,4.92968 1.32032,7.48046 0,2.55079 -0.44532,5.08204 -1.32032,7.48047 -2.21093,6.07422 -6.99609,10.85938 -13.07031,13.07032 -3.80469,1.3164 -9.51953,1.3164 -19.03906,1.3164 H 639.875 c -9.52344,0 -15.23437,0 -19.04297,-1.3164 -6.07422,-2.21094 -10.85937,-6.9961 -13.07031,-13.07032 -0.87109,-2.39843 -1.31641,-4.92968 -1.31641,-7.48047 0,-2.55078 0.44532,-5.08203 1.31641,-7.48046 2.21094,-6.07422 6.99609,-10.85938 13.07031,-13.07032 3.8086,-1.3164 9.51953,-1.3164 19.04297,-1.3164 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
stroke="#929292"
|
||||||
|
stroke-width="0.6"
|
||||||
|
id="path109" />
|
||||||
|
<g
|
||||||
|
fill="#ffffff"
|
||||||
|
id="g112"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<use
|
||||||
|
x="887.40033"
|
||||||
|
xlink:href="#r"
|
||||||
|
y="520.40808"
|
||||||
|
id="use109" />
|
||||||
|
<use
|
||||||
|
x="901.5603"
|
||||||
|
xlink:href="#p"
|
||||||
|
y="520.40808"
|
||||||
|
id="use110" />
|
||||||
|
<use
|
||||||
|
x="915.72028"
|
||||||
|
xlink:href="#m"
|
||||||
|
y="520.40808"
|
||||||
|
id="use111" />
|
||||||
|
<use
|
||||||
|
x="929.88031"
|
||||||
|
xlink:href="#o"
|
||||||
|
y="520.40808"
|
||||||
|
id="use112" />
|
||||||
|
</g>
|
||||||
|
<path
|
||||||
|
d="m 586.14453,435.58517 v 10.73437"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path112" />
|
||||||
|
<path
|
||||||
|
d="m 579.54688,444.81954 6.59765,13.20313 6.60157,-13.20313 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path113" />
|
||||||
|
<path
|
||||||
|
d="m 875.50781,446.21407 v 10.73438"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path114" />
|
||||||
|
<path
|
||||||
|
d="m 882.10936,447.71408 -6.6015,-13.19922 -6.5977,13.19922 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path115" />
|
||||||
|
<path
|
||||||
|
d="m 875.50781,258.38204 v 95.56641"
|
||||||
|
fill="none"
|
||||||
|
stroke="#64707b"
|
||||||
|
stroke-width="3"
|
||||||
|
id="path116" />
|
||||||
|
<path
|
||||||
|
d="m 882.10936,259.88204 -6.6015,-13.20312 -6.5977,13.20312 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path117" />
|
||||||
|
<path
|
||||||
|
d="m 761.19146,267.44454 h 62.8085 c 9.5196,0 15.2344,0 19.043,1.32032 6.0742,2.21093 10.8555,6.99609 13.0664,13.07031 0.875,2.39844 1.3203,4.92969 1.3203,7.48047 0,2.55078 -0.4453,5.08203 -1.3203,7.47656 -2.2109,6.07422 -6.9922,10.85938 -13.0664,13.07031 -3.8086,1.32032 -9.5234,1.32032 -19.043,1.32032 h -62.8085 c -9.5196,0 -15.2305,0 -19.0391,-1.32032 -6.0742,-2.21093 -10.85939,-6.99609 -13.07033,-13.07031 -0.87109,-2.39453 -1.3164,-4.92578 -1.3164,-7.47656 0,-2.55078 0.44531,-5.08203 1.3164,-7.48047 2.21094,-6.07422 6.99613,-10.85938 13.07033,-13.07031 3.8086,-1.32032 9.5195,-1.32032 19.0391,-1.32032 z m 0,0"
|
||||||
|
fill="#64707b"
|
||||||
|
id="path118" />
|
||||||
|
<path
|
||||||
|
d="M 761.19531,267.44454 H 824 c 9.51954,0 15.23438,0 19.04297,1.32032 6.07422,2.21093 10.85938,6.99609 13.07031,13.07031 0.8711,2.39844 1.31641,4.92969 1.31641,7.48047 0,2.55078 -0.44531,5.08203 -1.31641,7.47656 -2.21093,6.07422 -6.99609,10.85937 -13.07031,13.07031 -3.80859,1.32031 -9.52343,1.32031 -19.04297,1.32031 h -62.80469 c -9.52343,0 -15.23437,0 -19.04297,-1.32031 -6.07421,-2.21094 -10.85937,-6.99609 -13.07031,-13.07031 -0.87109,-2.39453 -1.31641,-4.92578 -1.31641,-7.47656 0,-2.55078 0.44532,-5.08203 1.31641,-7.48047 2.21094,-6.07422 6.9961,-10.85938 13.07031,-13.07031 3.8086,-1.32032 9.51954,-1.32032 19.04297,-1.32032 z m 0,0"
|
||||||
|
fill="none"
|
||||||
|
stroke="#929292"
|
||||||
|
stroke-width="0.6"
|
||||||
|
id="path119" />
|
||||||
|
<g
|
||||||
|
fill="#ffffff"
|
||||||
|
id="g125"
|
||||||
|
transform="translate(-265.83984,-221.91483)">
|
||||||
|
<use
|
||||||
|
x="1008.753"
|
||||||
|
xlink:href="#s"
|
||||||
|
y="519.77032"
|
||||||
|
id="use119" />
|
||||||
|
<use
|
||||||
|
x="1022.913"
|
||||||
|
xlink:href="#q"
|
||||||
|
y="519.77032"
|
||||||
|
id="use120" />
|
||||||
|
<use
|
||||||
|
x="1037.073"
|
||||||
|
xlink:href="#t"
|
||||||
|
y="519.77032"
|
||||||
|
id="use121" />
|
||||||
|
<use
|
||||||
|
x="1051.233"
|
||||||
|
xlink:href="#u"
|
||||||
|
y="519.77032"
|
||||||
|
id="use122" />
|
||||||
|
<use
|
||||||
|
x="1065.3929"
|
||||||
|
xlink:href="#p"
|
||||||
|
y="519.77032"
|
||||||
|
id="use123" />
|
||||||
|
<use
|
||||||
|
x="1079.553"
|
||||||
|
xlink:href="#r"
|
||||||
|
y="519.77032"
|
||||||
|
id="use124" />
|
||||||
|
<use
|
||||||
|
x="1093.713"
|
||||||
|
xlink:href="#r"
|
||||||
|
y="519.77032"
|
||||||
|
id="use125" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 48 KiB |
2395
sys/net/application_layer/unicoap/docs/unicoap-layers.svg
Normal file
2395
sys/net/application_layer/unicoap/docs/unicoap-layers.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 120 KiB |
11
sys/net/application_layer/unicoap/drivers/doc.md
Normal file
11
sys/net/application_layer/unicoap/drivers/doc.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
@defgroup net_unicoap_drivers Drivers
|
||||||
|
@ingroup net_unicoap
|
||||||
|
@brief Collection of transport drivers
|
||||||
|
@{
|
||||||
|
|
||||||
|
Drivers enable you to use different transports while still relying on the same high-level CoAP
|
||||||
|
API. Each driver implements framing and a messaging model optimized for the given transport.
|
||||||
|
Which transport you choose depends on the deployment. For most constrained deployments,
|
||||||
|
we recommend the @ref net_unicoap_drivers_udp or @ref net_unicoap_drivers_dtls.
|
||||||
|
|
||||||
|
@}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
@defgroup net_unicoap_drivers_rfc7252_pdu RFC 7252 Framing
|
||||||
|
@ingroup net_unicoap_drivers
|
||||||
|
@brief Parse and serialize RFC 7252 PDUs
|
||||||
|
@{
|
||||||
|
|
||||||
|
Module. Specify `USEMODULE += unicoap_driver_rfc7252_pdu` in your application's Makefile.
|
||||||
|
|
||||||
|
This module allows you to use the RFC 7252 parser without having to import the
|
||||||
|
@ref net_unicoap_drivers_udp or @ref net_unicoap_drivers_dtls, i.e., without a network backend.
|
||||||
|
This is particularly handy if you want to experiment with `unicoap` or write tests that don't
|
||||||
|
need the ability to do network I/O.
|
||||||
|
|
||||||
|
## PDU Format
|
||||||
|
|
||||||
|
```
|
||||||
|
0 1 2 3
|
||||||
|
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
|Ver| T | TKL | Code | Message ID |
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
| Token (if any, TKL bytes) ...
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
| Options (if any) ...
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
|1 1 1 1 1 1 1 1| Payload (if any) ...
|
||||||
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||||
|
```
|
||||||
|
|
||||||
|
@see [RFC 7252, Message Format](https://datatracker.ietf.org/doc/html/rfc7252#section-3)
|
||||||
|
@}
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
@defgroup net_unicoap_drivers_dtls CoAP over DTLS Driver
|
||||||
|
@ingroup net_unicoap_drivers
|
||||||
|
@brief Use CoAP over DTLS, with optional reliability
|
||||||
|
@{
|
||||||
|
|
||||||
|
Module. Specify `USEMODULE += unicoap_driver_dtls` in your application's Makefile.
|
||||||
|
|
||||||
|
Include these headers required for managing DTLS credentials.
|
||||||
|
```c
|
||||||
|
#include "net/sock/dtls/creds.h"
|
||||||
|
#include "net/credman.h"
|
||||||
|
#include "net/dsm.h"
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, in your application, call @ref sock_dtls_add_credential to add a DTLS credential.
|
||||||
|
<!--
|
||||||
|
FIXME: undefined references, upcoming PR
|
||||||
|
If you need
|
||||||
|
to access the DTLS socket, call @ref unicoap_transport_io_dtls_get_socket(). You must add
|
||||||
|
DTLS credentials yourself.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
FIXME: undefined references, upcoming PR
|
||||||
|
To change the UDP port `unicoap` is listening on, modify @ref CONFIG_UNICOAP_DTLS_PORT.
|
||||||
|
The CoAP over DTLS driver uses the same socket both for client and server functionality.
|
||||||
|
|
||||||
|
@see @ref UNICOAP_PROTO_DTLS
|
||||||
|
-->
|
||||||
|
@see @ref unicoap_rfc7252_message_type_t
|
||||||
|
|
||||||
|
This is the dependency graph of this driver:
|
||||||
|
|
||||||
|
```
|
||||||
|
unicoap_driver_dtls
|
||||||
|
├── unicoap_driver_rfc7252_common
|
||||||
|
│ ├── unicoap_driver_rfc7252_common_messaging
|
||||||
|
│ └── unicoap_driver_rfc7252_common_pdu
|
||||||
|
├── unicoap_sock_support
|
||||||
|
│ ├── sock_async
|
||||||
|
│ ├── sock_async_event
|
||||||
|
│ ├── sock_aux_local
|
||||||
|
│ └── sock_util
|
||||||
|
├── ... (operating system networking modules)
|
||||||
|
.
|
||||||
|
```
|
||||||
|
|
||||||
|
@}
|
||||||
32
sys/net/application_layer/unicoap/drivers/rfc7252/udp/doc.md
Normal file
32
sys/net/application_layer/unicoap/drivers/rfc7252/udp/doc.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
@defgroup net_unicoap_drivers_udp CoAP over UDP Driver
|
||||||
|
@ingroup net_unicoap_drivers
|
||||||
|
@brief Use CoAP over the UDP transport protocol, with optional reliability
|
||||||
|
@{
|
||||||
|
|
||||||
|
Module. Specify `USEMODULE += unicoap_driver_udp` in your application's Makefile.
|
||||||
|
|
||||||
|
<!--
|
||||||
|
FIXME: undefined references, upcoming PR
|
||||||
|
To change the UDP port `unicoap` is listening on, modify @ref CONFIG_UNICOAP_UDP_PORT.
|
||||||
|
The CoAP over UDP driver uses the same socket both for client and server functionality.
|
||||||
|
|
||||||
|
@see @ref UNICOAP_PROTO_UDP
|
||||||
|
-->
|
||||||
|
@see @ref unicoap_rfc7252_message_type_t
|
||||||
|
|
||||||
|
This is the dependency graph of this driver:
|
||||||
|
|
||||||
|
```
|
||||||
|
unicoap_driver_udp
|
||||||
|
├── unicoap_driver_rfc7252_common
|
||||||
|
│ ├── unicoap_driver_rfc7252_common_messaging
|
||||||
|
│ └── unicoap_driver_rfc7252_common_pdu
|
||||||
|
├── unicoap_sock_support
|
||||||
|
│ ├── sock_async
|
||||||
|
│ ├── sock_async_event
|
||||||
|
│ ├── sock_aux_local
|
||||||
|
│ └── sock_util
|
||||||
|
└── ... (operating system networking module)
|
||||||
|
```
|
||||||
|
|
||||||
|
@}
|
||||||
Loading…
x
Reference in New Issue
Block a user