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;