Zephyr API Documentation  3.6.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
service.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 Meta
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_NET_HTTP_SERVICE_H_
8#define ZEPHYR_INCLUDE_NET_HTTP_SERVICE_H_
9
17#include <stdint.h>
18#include <stddef.h>
19
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
29 const char *resource;
30 void *detail;
31};
32
50#define HTTP_RESOURCE_DEFINE(_name, _service, _resource, _detail) \
51 const STRUCT_SECTION_ITERABLE_ALTERNATE(http_resource_desc_##_service, http_resource_desc, \
52 _name) = { \
53 .resource = _resource, \
54 .detail = (void *)(_detail), \
55 }
56
58 const char *host;
60 void *detail;
61 size_t concurrent;
62 size_t backlog;
65#if defined(CONFIG_NET_SOCKETS_SOCKOPT_TLS)
66 const sec_tag_t *sec_tag_list;
67 size_t sec_tag_list_size;
68#endif
69};
70
71#define __z_http_service_define(_name, _host, _port, _concurrent, _backlog, _detail, _res_begin, \
72 _res_end, ...) \
73 static const STRUCT_SECTION_ITERABLE(http_service_desc, _name) = { \
74 .host = _host, \
75 .port = (uint16_t *)(_port), \
76 .detail = (void *)(_detail), \
77 .concurrent = (_concurrent), \
78 .backlog = (_backlog), \
79 .res_begin = (_res_begin), \
80 .res_end = (_res_end), \
81 COND_CODE_1(CONFIG_NET_SOCKETS_SOCKOPT_TLS, \
82 (.sec_tag_list = COND_CODE_0(NUM_VA_ARGS_LESS_1(__VA_ARGS__), (NULL), \
83 (GET_ARG_N(1, __VA_ARGS__))),), ()) \
84 COND_CODE_1(CONFIG_NET_SOCKETS_SOCKOPT_TLS, \
85 (.sec_tag_list_size = COND_CODE_0(NUM_VA_ARGS_LESS_1(__VA_ARGS__), (0),\
86 (GET_ARG_N(1, GET_ARGS_LESS_N(1, __VA_ARGS__))))), ())\
87 }
88
107#define HTTP_SERVICE_DEFINE_EMPTY(_name, _host, _port, _concurrent, _backlog, _detail) \
108 __z_http_service_define(_name, _host, _port, _concurrent, _backlog, _detail, NULL, NULL)
109
130#define HTTPS_SERVICE_DEFINE_EMPTY(_name, _host, _port, _concurrent, _backlog, _detail, \
131 _sec_tag_list, _sec_tag_list_size) \
132 __z_http_service_define(_name, _host, _port, _concurrent, _backlog, _detail, NULL, NULL, \
133 _sec_tag_list, _sec_tag_list_size); \
134 BUILD_ASSERT(IS_ENABLED(CONFIG_NET_SOCKETS_SOCKOPT_TLS), \
135 "TLS is required for HTTP secure (CONFIG_NET_SOCKETS_SOCKOPT_TLS)")
136
155#define HTTP_SERVICE_DEFINE(_name, _host, _port, _concurrent, _backlog, _detail) \
156 extern struct http_resource_desc _CONCAT(_http_resource_desc_##_name, _list_start)[]; \
157 extern struct http_resource_desc _CONCAT(_http_resource_desc_##_name, _list_end)[]; \
158 __z_http_service_define(_name, _host, _port, _concurrent, _backlog, _detail, \
159 &_CONCAT(_http_resource_desc_##_name, _list_start)[0], \
160 &_CONCAT(_http_resource_desc_##_name, _list_end)[0])
161
182#define HTTPS_SERVICE_DEFINE(_name, _host, _port, _concurrent, _backlog, _detail, \
183 _sec_tag_list, _sec_tag_list_size) \
184 extern struct http_resource_desc _CONCAT(_http_resource_desc_##_name, _list_start)[]; \
185 extern struct http_resource_desc _CONCAT(_http_resource_desc_##_name, _list_end)[]; \
186 __z_http_service_define(_name, _host, _port, _concurrent, _backlog, _detail, \
187 &_CONCAT(_http_resource_desc_##_name, _list_start)[0], \
188 &_CONCAT(_http_resource_desc_##_name, _list_end)[0], \
189 _sec_tag_list, _sec_tag_list_size); \
190 BUILD_ASSERT(IS_ENABLED(CONFIG_NET_SOCKETS_SOCKOPT_TLS), \
191 "TLS is required for HTTP secure (CONFIG_NET_SOCKETS_SOCKOPT_TLS)")
192
198#define HTTP_SERVICE_COUNT(_dst) STRUCT_SECTION_COUNT(http_service_desc, _dst)
199
205#define HTTP_SERVICE_RESOURCE_COUNT(_service) ((_service)->res_end - (_service)->res_begin)
206
212#define HTTP_SERVICE_FOREACH(_it) STRUCT_SECTION_FOREACH(http_service_desc, _it)
213
222#define HTTP_RESOURCE_FOREACH(_service, _it) \
223 STRUCT_SECTION_FOREACH_ALTERNATE(http_resource_desc_##_service, http_resource_desc, _it)
224
234#define HTTP_SERVICE_FOREACH_RESOURCE(_service, _it) \
235 for (struct http_resource_desc *_it = (_service)->res_begin; ({ \
236 __ASSERT(_it <= (_service)->res_end, "unexpected list end location"); \
237 _it < (_service)->res_end; \
238 }); \
239 _it++)
240
241#ifdef __cplusplus
242}
243#endif
244
249#endif /* ZEPHYR_INCLUDE_NET_HTTP_SERVICE_H_ */
int sec_tag_t
Secure tag, a reference to TLS credential.
Definition: tls_credentials.h:72
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
Definition: service.h:28
const char * resource
Definition: service.h:29
void * detail
Definition: service.h:30
Definition: service.h:57
uint16_t * port
Definition: service.h:59
struct http_resource_desc * res_begin
Definition: service.h:63
const char * host
Definition: service.h:58
struct http_resource_desc * res_end
Definition: service.h:64
void * detail
Definition: service.h:60
size_t concurrent
Definition: service.h:61
size_t backlog
Definition: service.h:62
TLS credentials management.
Macro utilities.