1 /*
2  * Copyright (c) 2018 Intel Corporation
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @file
9  *
10  * @brief CoAP implementation for Zephyr.
11  */
12 
13 #ifndef ZEPHYR_INCLUDE_NET_COAP_LINK_FORMAT_H_
14 #define ZEPHYR_INCLUDE_NET_COAP_LINK_FORMAT_H_
15 
16 /**
17  * @addtogroup coap COAP Library
18  * @{
19  */
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 /**
26  * This resource should be added before all other resources that should be
27  * included in the responses of the .well-known/core resource if is to be used with
28  * coap_well_known_core_get.
29  */
30 #define COAP_WELL_KNOWN_CORE_PATH \
31 	((const char * const[]) { ".well-known", "core", NULL })
32 
33 /**
34  * @brief Build a CoAP response for a .well-known/core CoAP request.
35  *
36  * @param resource Array of known resources, terminated with an empty resource
37  * @param request A pointer to the .well-known/core CoAP request
38  * @param response A pointer to a CoAP response, will be initialized
39  * @param data A data pointer to be used to build the CoAP response
40  * @param data_len The maximum length of the data buffer
41  *
42  * @return 0 in case of success or negative in case of error.
43  */
44 int coap_well_known_core_get(struct coap_resource *resource,
45 			     const struct coap_packet *request,
46 			     struct coap_packet *response,
47 			     uint8_t *data, uint16_t data_len);
48 
49 /**
50  * @brief Build a CoAP response for a .well-known/core CoAP request.
51  *
52  * @param resources Array of known resources
53  * @param resources_len Number of resources in the array
54  * @param request A pointer to the .well-known/core CoAP request
55  * @param response A pointer to a CoAP response, will be initialized
56  * @param data A data pointer to be used to build the CoAP response
57  * @param data_len The maximum length of the data buffer
58  *
59  * @return 0 in case of success or negative in case of error.
60  */
61 int coap_well_known_core_get_len(struct coap_resource *resources,
62 				 size_t resources_len,
63 				 const struct coap_packet *request,
64 				 struct coap_packet *response,
65 				 uint8_t *data, uint16_t data_len);
66 
67 /**
68  * In case you want to add attributes to the resources included in the
69  * 'well-known/core' "virtual" resource, the 'user_data' field should point
70  * to a valid coap_core_metadata structure.
71  */
72 struct coap_core_metadata {
73 	/** List of attributes to add */
74 	const char * const *attributes;
75 	/** User specific data */
76 	void *user_data;
77 };
78 
79 #ifdef __cplusplus
80 }
81 #endif
82 
83 /**
84  * @}
85  */
86 
87 #endif /* ZEPHYR_INCLUDE_NET_COAP_LINK_FORMAT_H_ */
88