Project homepage Mailing List  Warmcat.com  API Docs  Github Mirror 
    npro  
 Modern all-safe Rust Network Protocol library supporting h1, h2, h3, ws, wt sans-IO and with socket IO + tls
git clone https://npro.rs/repo/npro
Author[]Andy Green <andy@warmcat.com> 2025-08-14 13:14 UTC
Committer[]Andy Green <andy@warmcat.com> 2025-08-14 19:49 UTC
Tree2a25824ca9a2488ad847ad54c92960388e7c4312   Raw Patch
 
power: fix tasmota client
power: fix tasmota client

diff --git a/src/power/p-comms.c b/src/power/p-comms.c index 566ee30..3f55f4d 100644 --- a/src/power/p-comms.c +++ b/src/power/p-comms.c @@ -160,13 +160,9 @@ saip_m_rx(void *userobj, const uint8_t *buf, size_t len, int flags) } if (!strcmp(sp->power_on_type, "tasmota")) { - lwsl_notice("%s: starting tasmota\n", __func__); - if (lws_ss_create(lws_ss_cx_from_user(pss), - 0, &ssi_saip_smartplug_t, - (void *)sp->power_on_url, NULL, NULL, NULL)) { - lwsl_err("%s: failed to create smartplug secure stream\n", - __func__); - } + lwsl_ss_notice(sp->ss_tasmota_on, "starting tasmota"); + if (lws_ss_client_connect(sp->ss_tasmota_on)) + lwsl_ss_err(sp->ss_tasmota_on, "failed to connect tasmota ON secure stream"); } } else { diff --git a/src/power/p-private.h b/src/power/p-private.h index 5b75277..390d071 100644 --- a/src/power/p-private.h +++ b/src/power/p-private.h @@ -63,6 +63,9 @@ typedef struct saip_server_plat { lws_sorted_usec_list_t sul_delay_off; + struct lws_ss_handle *ss_tasmota_on; + struct lws_ss_handle *ss_tasmota_off; + const char *name; const char *host; const char *depends; /* depended-on plat must stay powered if we need power */ diff --git a/src/power/p-sai.c b/src/power/p-sai.c index d340775..217e635 100644 --- a/src/power/p-sai.c +++ b/src/power/p-sai.c @@ -197,11 +197,8 @@ saip_sul_action_power_off(struct lws_sorted_usec_list *sul) lwsl_warn("%s: powering off host %s\n", __func__, sp->host); saip_notify_server_power_state(sp->host, 0, 1); - if (lws_ss_create(power.context, 0, &ssi_saip_smartplug_t, - (void *)sp->power_off_url, NULL, NULL, NULL)) { - lwsl_err("%s: failed to create smartplug secure stream\n", - __func__); - } + if (lws_ss_client_connect(sp->ss_tasmota_off)) + lwsl_ss_err(sp->ss_tasmota_off, "failed to connect tasmota OFF secure stream"); } saip_server_plat_t * @@ -364,10 +361,9 @@ local_srv_state(void *userobj, void *sh, lws_ss_constate_t state, "no power-on-url entry for %s", pn); goto bail; } - if (lws_ss_create(power.context, 0, - &ssi_saip_smartplug_t, - (void *)sp->power_on_url, - NULL, NULL, NULL)) { + + if (lws_ss_client_connect(sp->ss_tasmota_on)) { + lwsl_ss_err(sp->ss_tasmota_off, "failed to connect tasmota ON secure stream"); g->size = (size_t)lws_snprintf(g->payload, sizeof(g->payload), "power-on ss failed create %s", sp->host); goto bail; @@ -684,6 +680,30 @@ int main(int argc, const char **argv) goto bail; } + /* let's create any needed tasmota ss */ + + lws_start_foreach_dll(struct lws_dll2 *, px, power.sai_server_owner.head) { + saip_server_t *s = lws_container_of(px, saip_server_t, list); + + lws_start_foreach_dll(struct lws_dll2 *, px1, s->sai_plat_owner.head) { + saip_server_plat_t *sp = lws_container_of(px1, saip_server_plat_t, list); + + if (!strcmp(sp->power_on_type, "tasmota") && sp->power_on_url && + lws_ss_create(power.context, 0, &ssi_saip_smartplug_t, + (void *)sp->power_on_url, &sp->ss_tasmota_on, NULL, NULL)) { + lwsl_err("%s: failed to create ON smartplug secure stream\n", __func__); + } + + if (!strcmp(sp->power_off_type, "tasmota") && sp->power_off_url && + lws_ss_create(power.context, 0, &ssi_saip_smartplug_t, + (void *)sp->power_off_url, &sp->ss_tasmota_off, NULL, NULL)) { + lwsl_err("%s: failed to create OFF smartplug secure stream\n", __func__); + } + + } lws_end_foreach_dll(px1); + } lws_end_foreach_dll(px); + + { struct lws_spawn_piped_info info; char rpath[PATH_MAX]; diff --git a/src/power/p-smartplug.c b/src/power/p-smartplug.c index a0503f3..7f2ca70 100644 --- a/src/power/p-smartplug.c +++ b/src/power/p-smartplug.c @@ -26,9 +26,6 @@ #include "p-private.h" LWS_SS_USER_TYPEDEF - char payload[200]; - size_t size; - size_t pos; } saip_smartplug_t; static lws_ss_state_return_t @@ -44,18 +41,12 @@ saip_spc_state(void *userobj, void *sh, lws_ss_constate_t state, switch (state) { case LWSSSCS_CREATING: - lwsl_user("%s: binding ss to %s\n", __func__, op_url); + lwsl_notice("%s: binding ss to %s\n", __func__, op_url); if (lws_ss_set_metadata(lws_ss_from_user(pss), "url", op_url, strlen(op_url))) lwsl_warn("%s: unable to set metadata\n", __func__); - - return lws_ss_client_connect(lws_ss_from_user(pss)); - - case LWSSSCS_QOS_ACK_REMOTE: - case LWSSSCS_QOS_NACK_REMOTE: - case LWSSSCS_ALL_RETRIES_FAILED: - return LWSSSSRET_DESTROY_ME; + break; default: break; diff --git a/src/server/s-task.c b/src/server/s-task.c index 9a71351..1d2bff4 100644 --- a/src/server/s-task.c +++ b/src/server/s-task.c @@ -825,6 +825,8 @@ sais_allocate_task(struct vhd *vhd, struct pss *pss, sai_plat_t *cb, */ cb->ongoing++; + lwsl_notice("%s: pre pss->issue_task_owner count %d\n", __func__, pss->issue_task_owner.count); + lws_dll2_add_tail(&task->pending_assign_list, &pss->issue_task_owner); lws_callback_on_writable(pss->wsi); diff --git a/src/server/s-websrv.c b/src/server/s-websrv.c index 93d63d6..d67086a 100644 --- a/src/server/s-websrv.c +++ b/src/server/s-websrv.c @@ -143,6 +143,14 @@ _sais_websrv_broadcast(struct lws_ss_handle *h, void *arg) websrvss_srv_t *m = (websrvss_srv_t *)lws_ss_to_user_object(h); sais_websrv_broadcast_t *a = (sais_websrv_broadcast_t *)arg; + /* sai-web might not be taking it.. */ + + if (lws_buflist_total_len(&m->bltx) > 5000000u) { + lwsl_ss_warn(h, "server->web buflist reached 5MB"); + lws_ss_start_timeout(h, 1); + return; + } + if (lws_buflist_append_segment(&m->bltx, a->buf, a->len) < 0) { lwsl_warn("%s: buflist append fail\n", __func__); diff --git a/src/web/w-private.h b/src/web/w-private.h index 38d5a10..0e06094 100644 --- a/src/web/w-private.h +++ b/src/web/w-private.h @@ -163,7 +163,6 @@ struct pss { lws_dll2_owner_t sched; /* scheduled messages */ struct lwsac *logs_ac; - lws_dll2_owner_t issue_task_owner; /* list of sai_task_t */ int log_cache_index; int log_cache_size;
Page fetched 0s ago, creation time: 4ms (vhost etag hits: 0%, cache hits: 0%)