libwebsockets
Lightweight C library for HTML5 websockets
Loading...
Searching...
No Matches
lws-system.h File Reference
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  lws_system_ops
 

Macros

#define LWSSYSGAUTH_HEX   (1 << 0)
 

Typedefs

typedef struct lws_system_blob lws_system_blob_t
 
typedef void(* lws_attach_cb_t) (struct lws_context *context, int tsi, void *opaque)
 
typedef struct lws_system_ops lws_system_ops_t
 

Enumerations

enum  lws_system_blob_item_t {
  LWS_SYSBLOB_TYPE_AUTH , LWS_SYSBLOB_TYPE_CLIENT_CERT_DER = LWS_SYSBLOB_TYPE_AUTH + 2 , LWS_SYSBLOB_TYPE_CLIENT_KEY_DER , LWS_SYSBLOB_TYPE_DEVICE_SERIAL ,
  LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION , LWS_SYSBLOB_TYPE_DEVICE_TYPE , LWS_SYSBLOB_TYPE_NTP_SERVER , LWS_SYSBLOB_TYPE_MQTT_CLIENT_ID ,
  LWS_SYSBLOB_TYPE_MQTT_USERNAME , LWS_SYSBLOB_TYPE_MQTT_PASSWORD , LWS_SYSBLOB_TYPE_COUNT
}
 
enum  lws_system_states_t {
  LWS_SYSTATE_UNKNOWN , LWS_SYSTATE_CONTEXT_CREATED , LWS_SYSTATE_INITIALIZED , LWS_SYSTATE_IFACE_COLDPLUG ,
  LWS_SYSTATE_DHCP , LWS_SYSTATE_CPD_PRE_TIME , LWS_SYSTATE_TIME_VALID , LWS_SYSTATE_CPD_POST_TIME ,
  LWS_SYSTATE_POLICY_VALID , LWS_SYSTATE_REGISTERED , LWS_SYSTATE_AUTH1 , LWS_SYSTATE_AUTH2 ,
  LWS_SYSTATE_ONE_TIME_UPDATES , LWS_SYSTATE_OPERATIONAL , LWS_SYSTATE_POLICY_INVALID , LWS_SYSTATE_CONTEXT_DESTROYING ,
  LWS_SYSTATE_AWAITING_MODAL_UPDATING , LWS_SYSTATE_MODAL_UPDATING
}
 
enum  lws_cpd_result_t { LWS_CPD_UNKNOWN = 0 , LWS_CPD_INTERNET_OK , LWS_CPD_CAPTIVE_PORTAL , LWS_CPD_NO_INTERNET }
 
enum  {
  LWSDH_IPV4_SUBNET_MASK = 0 , LWSDH_IPV4_BROADCAST , LWSDH_LEASE_SECS , LWSDH_REBINDING_SECS ,
  LWSDH_RENEWAL_SECS , _LWSDH_NUMS_COUNT , LWSDH_SA46_IP = 0 , LWSDH_SA46_DNS_SRV_1 ,
  LWSDH_SA46_DNS_SRV_2 , LWSDH_SA46_DNS_SRV_3 , LWSDH_SA46_DNS_SRV_4 , LWSDH_SA46_IPV4_ROUTER ,
  LWSDH_SA46_NTP_SERVER , LWSDH_SA46_DHCP_SERVER , _LWSDH_SA46_COUNT
}
 

Functions

LWS_EXTERN LWS_VISIBLE void lws_system_blob_direct_set (lws_system_blob_t *b, const uint8_t *ptr, size_t len)
 
LWS_EXTERN LWS_VISIBLE void lws_system_blob_heap_empty (lws_system_blob_t *b)
 
LWS_EXTERN LWS_VISIBLE int lws_system_blob_heap_append (lws_system_blob_t *b, const uint8_t *ptr, size_t len)
 
LWS_EXTERN LWS_VISIBLE size_t lws_system_blob_get_size (lws_system_blob_t *b)
 
LWS_EXTERN LWS_VISIBLE int lws_system_blob_get_single_ptr (lws_system_blob_t *b, const uint8_t **ptr)
 
LWS_EXTERN LWS_VISIBLE int lws_system_blob_get (lws_system_blob_t *b, uint8_t *ptr, size_t *len, size_t ofs)
 
LWS_EXTERN LWS_VISIBLE void lws_system_blob_destroy (lws_system_blob_t *b)
 
LWS_EXTERN LWS_VISIBLE lws_system_blob_tlws_system_get_blob (struct lws_context *context, lws_system_blob_item_t type, int idx)
 
LWS_EXTERN LWS_VISIBLE int lws_tls_jit_trust_got_cert_cb (struct lws_context *cx, void *got_opaque, const uint8_t *skid, size_t skid_len, const uint8_t *der, size_t der_len)
 
LWS_EXTERN LWS_VISIBLE const lws_system_ops_tlws_system_get_ops (struct lws_context *context)
 
LWS_EXTERN LWS_VISIBLE int __lws_system_attach (struct lws_context *context, int tsi, lws_attach_cb_t cb, lws_system_states_t state, void *opaque, struct lws_attach_item **get)
 

Data Structure Documentation

◆ lws_system_ops

struct lws_system_ops

Definition at line 171 of file lws-system.h.

+ Collaboration diagram for lws_system_ops:
Data Fields
int(*)(void) reboot
int(*)(lws_usec_t us) set_clock
int(*)(struct lws_context *context, int tsi, lws_attach_cb_t cb, lws_system_states_t state, void *opaque, struct lws_attach_item **get) attach

if get is NULL, add an attach callback request to the pt for cb with arg opaque, that should be called when we're at or past system state state.

If get is non-NULL, look for the first listed item on the pt whose state situation is ready, and set *get to point to it. If no items, or none where the system state is right, set *get to NULL.

It's done like this so (*attach) can perform system-specific locking outside of lws core, for both getting and adding items the same so it is thread-safe. A non-threadsafe helper __lws_system_attach() is provided to do the actual work inside the system-specific locking.

int(*)(struct lws_context *context) captive_portal_detect_request

Check if we can go out on the internet cleanly, or if we are being redirected or intercepted by a captive portal. Start the check that proceeds asynchronously, and report the results by calling lws_captive_portal_detect_result() api

int(*)(struct lws_context *cx, const uint8_t *skid, size_t skid_len, void *got_opaque) jit_trust_query

user defined trust store search, if we do trust a cert with SKID matching skid / skid_len, then it should get hold of the DER for the matching root CA and call lws_tls_jit_trust_got_cert_cb(..., got_opaque) before cleaning up and returning. The DER should be destroyed if in heap before returning.

uint32_t wake_latency_us

time taken for this device to wake from suspend, in us

Macro Definition Documentation

◆ LWSSYSGAUTH_HEX

#define LWSSYSGAUTH_HEX   (1 << 0)

Definition at line 240 of file lws-system.h.

Typedef Documentation

◆ lws_system_blob_t

typedef struct lws_system_blob lws_system_blob_t

Definition at line 63 of file lws-system.h.

◆ lws_attach_cb_t

typedef void(* lws_attach_cb_t) (struct lws_context *context, int tsi, void *opaque)

Definition at line 163 of file lws-system.h.

◆ lws_system_ops_t

Enumeration Type Documentation

◆ lws_system_blob_item_t

Enumerator
LWS_SYSBLOB_TYPE_AUTH 
LWS_SYSBLOB_TYPE_CLIENT_CERT_DER 
LWS_SYSBLOB_TYPE_CLIENT_KEY_DER 
LWS_SYSBLOB_TYPE_DEVICE_SERIAL 
LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION 
LWS_SYSBLOB_TYPE_DEVICE_TYPE 
LWS_SYSBLOB_TYPE_NTP_SERVER 
LWS_SYSBLOB_TYPE_MQTT_CLIENT_ID 
LWS_SYSBLOB_TYPE_MQTT_USERNAME 
LWS_SYSBLOB_TYPE_MQTT_PASSWORD 
LWS_SYSBLOB_TYPE_COUNT 

Definition at line 33 of file lws-system.h.

33 {
44
45#if defined(LWS_WITH_SECURE_STREAMS_AUTH_SIGV4)
46 /* extend 4 more auth blobs, each has 2 slots */
47 LWS_SYSBLOB_TYPE_EXT_AUTH1,
48 LWS_SYSBLOB_TYPE_EXT_AUTH2 = LWS_SYSBLOB_TYPE_EXT_AUTH1 + 2,
49 LWS_SYSBLOB_TYPE_EXT_AUTH3 = LWS_SYSBLOB_TYPE_EXT_AUTH2 + 2,
50 LWS_SYSBLOB_TYPE_EXT_AUTH4 = LWS_SYSBLOB_TYPE_EXT_AUTH3 + 2,
51 LWS_SYSBLOB_TYPE_EXT_AUTH4_1,
52#endif
53
54 LWS_SYSBLOB_TYPE_COUNT /* ... always last */
lws_system_blob_item_t
Definition lws-system.h:33
@ LWS_SYSBLOB_TYPE_NTP_SERVER
Definition lws-system.h:40
@ LWS_SYSBLOB_TYPE_MQTT_USERNAME
Definition lws-system.h:42
@ LWS_SYSBLOB_TYPE_MQTT_PASSWORD
Definition lws-system.h:43
@ LWS_SYSBLOB_TYPE_MQTT_CLIENT_ID
Definition lws-system.h:41
@ LWS_SYSBLOB_TYPE_CLIENT_CERT_DER
Definition lws-system.h:35
@ LWS_SYSBLOB_TYPE_COUNT
Definition lws-system.h:54
@ LWS_SYSBLOB_TYPE_DEVICE_SERIAL
Definition lws-system.h:37
@ LWS_SYSBLOB_TYPE_DEVICE_FW_VERSION
Definition lws-system.h:38
@ LWS_SYSBLOB_TYPE_AUTH
Definition lws-system.h:34
@ LWS_SYSBLOB_TYPE_DEVICE_TYPE
Definition lws-system.h:39
@ LWS_SYSBLOB_TYPE_CLIENT_KEY_DER
Definition lws-system.h:36

◆ lws_system_states_t

Enumerator
LWS_SYSTATE_UNKNOWN 
LWS_SYSTATE_CONTEXT_CREATED 
LWS_SYSTATE_INITIALIZED 
LWS_SYSTATE_IFACE_COLDPLUG 
LWS_SYSTATE_DHCP 
LWS_SYSTATE_CPD_PRE_TIME 
LWS_SYSTATE_TIME_VALID 
LWS_SYSTATE_CPD_POST_TIME 
LWS_SYSTATE_POLICY_VALID 
LWS_SYSTATE_REGISTERED 
LWS_SYSTATE_AUTH1 
LWS_SYSTATE_AUTH2 
LWS_SYSTATE_ONE_TIME_UPDATES 
LWS_SYSTATE_OPERATIONAL 
LWS_SYSTATE_POLICY_INVALID 
LWS_SYSTATE_CONTEXT_DESTROYING 
LWS_SYSTATE_AWAITING_MODAL_UPDATING 
LWS_SYSTATE_MODAL_UPDATING 

Definition at line 105 of file lws-system.h.

105 { /* keep system_state_names[] in sync in context.c */
107
108 LWS_SYSTATE_CONTEXT_CREATED, /* context was just created */
109 LWS_SYSTATE_INITIALIZED, /* protocols initialized. Lws itself
110 * can operate normally */
111 LWS_SYSTATE_IFACE_COLDPLUG, /* existing net ifaces iterated */
112 LWS_SYSTATE_DHCP, /* at least one net iface configured */
113 LWS_SYSTATE_CPD_PRE_TIME, /* Captive portal detect without valid
114 * time, good for non-https tests... if
115 * you care about it, implement and
116 * call lws_system_ops_t
117 * .captive_portal_detect_request()
118 * and move the state forward according
119 * to the result. */
120 LWS_SYSTATE_TIME_VALID, /* ntpclient ran, or hw time valid...
121 * tls cannot work until we reach here
122 */
123 LWS_SYSTATE_CPD_POST_TIME, /* Captive portal detect after time was
124 * time, good for https tests... if
125 * you care about it, implement and
126 * call lws_system_ops_t
127 * .captive_portal_detect_request()
128 * and move the state forward according
129 * to the result. */
130
131 LWS_SYSTATE_POLICY_VALID, /* user code knows how to operate... */
132 LWS_SYSTATE_REGISTERED, /* device has an identity... */
133 LWS_SYSTATE_AUTH1, /* identity used for main auth token */
134 LWS_SYSTATE_AUTH2, /* identity used for optional auth */
135
136 LWS_SYSTATE_ONE_TIME_UPDATES, /* pre-OPERATIONAL one-time updates,
137 * when a firmware needs to perform
138 * one-time upgrades to state before
139 * OPERATIONAL */
140
141 LWS_SYSTATE_OPERATIONAL, /* user code can operate normally */
142
143 LWS_SYSTATE_POLICY_INVALID, /* user code is changing its policies
144 * drop everything done with old
145 * policy, switch to new then enter
146 * LWS_SYSTATE_POLICY_VALID */
147 LWS_SYSTATE_CONTEXT_DESTROYING, /* Context is being destroyed */
148 LWS_SYSTATE_AWAITING_MODAL_UPDATING, /* We're negotiating with the
149 * user code for update mode */
150 LWS_SYSTATE_MODAL_UPDATING, /* We're updating the firmware */
lws_system_states_t
Definition lws-system.h:105
@ LWS_SYSTATE_POLICY_VALID
Definition lws-system.h:131
@ LWS_SYSTATE_AUTH1
Definition lws-system.h:133
@ LWS_SYSTATE_MODAL_UPDATING
Definition lws-system.h:150
@ LWS_SYSTATE_AUTH2
Definition lws-system.h:134
@ LWS_SYSTATE_CONTEXT_DESTROYING
Definition lws-system.h:147
@ LWS_SYSTATE_CPD_PRE_TIME
Definition lws-system.h:113
@ LWS_SYSTATE_AWAITING_MODAL_UPDATING
Definition lws-system.h:148
@ LWS_SYSTATE_UNKNOWN
Definition lws-system.h:106
@ LWS_SYSTATE_IFACE_COLDPLUG
Definition lws-system.h:111
@ LWS_SYSTATE_DHCP
Definition lws-system.h:112
@ LWS_SYSTATE_REGISTERED
Definition lws-system.h:132
@ LWS_SYSTATE_OPERATIONAL
Definition lws-system.h:141
@ LWS_SYSTATE_INITIALIZED
Definition lws-system.h:109
@ LWS_SYSTATE_ONE_TIME_UPDATES
Definition lws-system.h:136
@ LWS_SYSTATE_TIME_VALID
Definition lws-system.h:120
@ LWS_SYSTATE_CONTEXT_CREATED
Definition lws-system.h:108
@ LWS_SYSTATE_POLICY_INVALID
Definition lws-system.h:143
@ LWS_SYSTATE_CPD_POST_TIME
Definition lws-system.h:123

◆ lws_cpd_result_t

Enumerator
LWS_CPD_UNKNOWN 
LWS_CPD_INTERNET_OK 
LWS_CPD_CAPTIVE_PORTAL 
LWS_CPD_NO_INTERNET 

Definition at line 155 of file lws-system.h.

155 {
156 LWS_CPD_UNKNOWN = 0, /* test didn't happen ince last DHCP acq yet */
157 LWS_CPD_INTERNET_OK, /* no captive portal: our CPD test passed OK,
158 * we can go out on the internet */
159 LWS_CPD_CAPTIVE_PORTAL, /* we inferred we're behind a captive portal */
160 LWS_CPD_NO_INTERNET, /* we couldn't touch anything */
lws_cpd_result_t
Definition lws-system.h:155
@ LWS_CPD_UNKNOWN
Definition lws-system.h:156
@ LWS_CPD_CAPTIVE_PORTAL
Definition lws-system.h:159
@ LWS_CPD_NO_INTERNET
Definition lws-system.h:160
@ LWS_CPD_INTERNET_OK
Definition lws-system.h:157

◆ anonymous enum

anonymous enum
Enumerator
LWSDH_IPV4_SUBNET_MASK 
LWSDH_IPV4_BROADCAST 
LWSDH_LEASE_SECS 
LWSDH_REBINDING_SECS 
LWSDH_RENEWAL_SECS 
_LWSDH_NUMS_COUNT 
LWSDH_SA46_IP 
LWSDH_SA46_DNS_SRV_1 
LWSDH_SA46_DNS_SRV_2 
LWSDH_SA46_DNS_SRV_3 
LWSDH_SA46_DNS_SRV_4 
LWSDH_SA46_IPV4_ROUTER 
LWSDH_SA46_NTP_SERVER 
LWSDH_SA46_DHCP_SERVER 
_LWSDH_SA46_COUNT 

Definition at line 305 of file lws-system.h.

305 {
311
313
314 LWSDH_SA46_IP = 0,
322
324};
@ LWSDH_REBINDING_SECS
Definition lws-system.h:309
@ LWSDH_SA46_DNS_SRV_4
Definition lws-system.h:318
@ LWSDH_SA46_IPV4_ROUTER
Definition lws-system.h:319
@ LWSDH_IPV4_BROADCAST
Definition lws-system.h:307
@ LWSDH_SA46_NTP_SERVER
Definition lws-system.h:320
@ _LWSDH_NUMS_COUNT
Definition lws-system.h:312
@ LWSDH_SA46_IP
Definition lws-system.h:314
@ LWSDH_SA46_DHCP_SERVER
Definition lws-system.h:321
@ LWSDH_SA46_DNS_SRV_3
Definition lws-system.h:317
@ LWSDH_IPV4_SUBNET_MASK
Definition lws-system.h:306
@ LWSDH_RENEWAL_SECS
Definition lws-system.h:310
@ LWSDH_SA46_DNS_SRV_1
Definition lws-system.h:315
@ LWSDH_LEASE_SECS
Definition lws-system.h:308
@ LWSDH_SA46_DNS_SRV_2
Definition lws-system.h:316
@ _LWSDH_SA46_COUNT
Definition lws-system.h:323

Function Documentation

◆ lws_system_blob_direct_set()

LWS_EXTERN LWS_VISIBLE void lws_system_blob_direct_set ( lws_system_blob_t * b,
const uint8_t * ptr,
size_t len )

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_system_blob_heap_empty()

LWS_EXTERN LWS_VISIBLE void lws_system_blob_heap_empty ( lws_system_blob_t * b)

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_system_blob_heap_append()

LWS_EXTERN LWS_VISIBLE int lws_system_blob_heap_append ( lws_system_blob_t * b,
const uint8_t * ptr,
size_t len )

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_system_blob_get_size()

LWS_EXTERN LWS_VISIBLE size_t lws_system_blob_get_size ( lws_system_blob_t * b)

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_system_blob_get_single_ptr()

LWS_EXTERN LWS_VISIBLE int lws_system_blob_get_single_ptr ( lws_system_blob_t * b,
const uint8_t ** ptr )

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_system_blob_get()

LWS_EXTERN LWS_VISIBLE int lws_system_blob_get ( lws_system_blob_t * b,
uint8_t * ptr,
size_t * len,
size_t ofs )

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_system_blob_destroy()

LWS_EXTERN LWS_VISIBLE void lws_system_blob_destroy ( lws_system_blob_t * b)

References LWS_EXTERN, and LWS_VISIBLE.

◆ lws_system_get_blob()

LWS_EXTERN LWS_VISIBLE lws_system_blob_t * lws_system_get_blob ( struct lws_context * context,
lws_system_blob_item_t type,
int idx )

◆ lws_tls_jit_trust_got_cert_cb()

LWS_EXTERN LWS_VISIBLE int lws_tls_jit_trust_got_cert_cb ( struct lws_context * cx,
void * got_opaque,
const uint8_t * skid,
size_t skid_len,
const uint8_t * der,
size_t der_len )

◆ lws_system_get_ops()

LWS_EXTERN LWS_VISIBLE const lws_system_ops_t * lws_system_get_ops ( struct lws_context * context)

lws_system_get_ops() - get ahold of the system ops struct from the context

Parameters
contextthe lws_context

Returns the system ops struct. It may return NULL and if not, anything in there may be NULL.

References LWS_EXTERN, and LWS_VISIBLE.

◆ __lws_system_attach()

LWS_EXTERN LWS_VISIBLE int __lws_system_attach ( struct lws_context * context,
int tsi,
lws_attach_cb_t cb,
lws_system_states_t state,
void * opaque,
struct lws_attach_item ** get )

__lws_system_attach() - get and set items on context attach list

Parameters
contextcontext to get or set attach items to
tsithread service index (normally 0)
cbcallback to call from context event loop thread
statethe lws_system state we have to be in or have passed through
opaqueoptional pointer to user specific info given to callback
getNULL, or pointer to pointer to take detached tail item on exit

This allows other threads to enqueue callback requests to happen from a pt's event loop thread safely. The callback gets the context pointer and a user opaque pointer that can be optionally given when the item is added to the attach list.

This api is the no-locking core function for getting and setting items on the pt's attach list. The lws_system operation (*attach) is the actual api that user and internal code calls for this feature, it should perform system-specific locking, call this helper, release the locking and then return the result. This api is public only so it can be used in the locked implementation of (*attach).

If get is NULL, then the call adds to the head of the pt attach list using cb, state, and opaque; if get is non-NULL, then *get is set to the first waiting attached item that meets the state criteria and that item is removed from the list.

This is a non-threadsafe helper only designed to be called from implementations of struct lws_system's (*attach) operation where system- specific locking has been applied around it, making it threadsafe.