libwebsockets
Lightweight C library for HTML5 websockets
Loading...
Searching...
No Matches
lws-smd.h
Go to the documentation of this file.
1/*
2 * lws System Message Distribution
3 *
4 * Copyright (C) 2010 - 2020 Andy Green <andy@warmcat.com>
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
22 * IN THE SOFTWARE.
23 */
24
25#define LWS_SMD_MAX_PAYLOAD 384
26#define LWS_SMD_CLASS_BITFIELD_BYTES 4
27
28#define LWS_SMD_STREAMTYPENAME "_lws_smd"
29#define LWS_SMD_SS_RX_HEADER_LEN 16
30
32
33struct lws_smd_msg; /* opaque */
34struct lws_smd_peer; /* opaque */
35
36/*
37 * Well-known device classes
38 */
39
40enum {
50 LWSSMDCL_NETWORK = (1 << 2),
55 LWSSMDCL_METRICS = (1 << 3),
60 LWSSMDCL_DNS = (1 << 4),
70 LWSSMDCL_CERTS = (1 << 5),
78
80};
81
103LWS_VISIBLE LWS_EXTERN void * /* payload */
104lws_smd_msg_alloc(struct lws_context *ctx, lws_smd_class_t _class, size_t len);
105
118lws_smd_msg_free(void **payload);
119
131lws_smd_msg_send(struct lws_context *ctx, void *payload);
132
155lws_smd_msg_printf(struct lws_context *ctx, lws_smd_class_t _class,
156 const char *format, ...) LWS_FORMAT(3);
157
173
174struct lws_ss_handle;
176lws_smd_ss_msg_printf(const char *tag, uint8_t *buf, size_t *len,
177 lws_smd_class_t _class, const char *format, ...)
178 LWS_FORMAT(5);
179
198lws_smd_ss_rx_forward(void *ss_user, const uint8_t *buf, size_t len);
199
201lws_smd_sspc_rx_forward(void *ss_user, const uint8_t *buf, size_t len);
202
203typedef int (*lws_smd_notification_cb_t)(void *opaque, lws_smd_class_t _class,
204 lws_usec_t timestamp, void *buf,
205 size_t len);
206
207#define LWSSMDREG_FLAG_PROXIED_SS (1 << 0)
209
210/*
211 * lws_smd_register() - register to receive smd messages
212 *
213 * \param ctx: the lws_context
214 * \param opaque: an opaque pointer handed to the callback
215 * \param flags: typically 0
216 * \param _class_filter: bitmap of message classes we care about
217 * \param cb: the callback to receive messages
218 *
219 * Queues an allocated, prepared message for delivery to smd clients.
220 *
221 * Returns NULL on failure, or an opaque handle which may be given to
222 * lws_smd_unregister() to stop participating in the shared message queue.
223 *
224 * This is threadsafe to call from a non-service thread.
225 */
226
227LWS_VISIBLE LWS_EXTERN struct lws_smd_peer *
228lws_smd_register(struct lws_context *ctx, void *opaque, int flags,
230
231/*
232 * lws_smd_unregister() - unregister receiving smd messages
233 *
234 * \param pr: the handle returned from the registration
235 *
236 * Destroys the registration of the callback for messages and ability to send
237 * messages.
238 *
239 * It's not necessary to call this if the registration wants to survive for as
240 * long as the lws_context... lws_context_destroy will also clean up any
241 * registrations still active by then.
242 */
243
245lws_smd_unregister(struct lws_smd_peer *pr);
unsigned int uint32_t
#define LWS_FORMAT(string_index)
#define LWS_EXTERN
int64_t lws_usec_t
unsigned char uint8_t
#define LWS_VISIBLE
LWS_VISIBLE LWS_EXTERN void lws_smd_unregister(struct lws_smd_peer *pr)
@ LWSSMDCL_NETWORK
Definition lws-smd.h:50
@ LWSSMDCL_SYSTEM_STATE
Definition lws-smd.h:46
@ LWSSMDCL_METRICS
Definition lws-smd.h:55
@ LWSSMDCL_INTERACTION
Definition lws-smd.h:41
@ LWSSMDCL_USER_BASE_BITNUM
Definition lws-smd.h:79
@ LWSSMDCL_DNS
Definition lws-smd.h:60
@ LWSSMDCL_CERTS
Definition lws-smd.h:70
LWS_VISIBLE LWS_EXTERN struct lws_smd_peer * lws_smd_register(struct lws_context *ctx, void *opaque, int flags, lws_smd_class_t _class_filter, lws_smd_notification_cb_t cb)
int(* lws_smd_notification_cb_t)(void *opaque, lws_smd_class_t _class, lws_usec_t timestamp, void *buf, size_t len)
Definition lws-smd.h:203
LWS_VISIBLE LWS_EXTERN int lws_smd_ss_msg_printf(const char *tag, uint8_t *buf, size_t *len, lws_smd_class_t _class, const char *format,...) LWS_FORMAT(5)
LWS_VISIBLE LWS_EXTERN int lws_smd_sspc_rx_forward(void *ss_user, const uint8_t *buf, size_t len)
LWS_VISIBLE LWS_EXTERN void * lws_smd_msg_alloc(struct lws_context *ctx, lws_smd_class_t _class, size_t len)
LWS_VISIBLE LWS_EXTERN void lws_smd_msg_free(void **payload)
LWS_VISIBLE LWS_EXTERN int lws_smd_msg_printf(struct lws_context *ctx, lws_smd_class_t _class, const char *format,...) LWS_FORMAT(3)
uint32_t lws_smd_class_t
Definition lws-smd.h:31
LWS_VISIBLE LWS_EXTERN int lws_smd_ss_rx_forward(void *ss_user, const uint8_t *buf, size_t len)
LWS_VISIBLE LWS_EXTERN int lws_smd_msg_send(struct lws_context *ctx, void *payload)