11#if DETWS_ENABLE_WEBHOOK
20bool put(
char *out,
size_t cap,
size_t *pos,
const char *s)
22 size_t n = strnlen(s, cap + 1);
25 memcpy(out + *pos, s, n);
32bool put_escaped(
char *out,
size_t cap,
size_t *pos,
const char *s)
37 if (c ==
'"' || c ==
'\\')
56int detws_ifttt_url(
const char *event,
const char *key,
char *out,
size_t cap)
58 if (!out || cap == 0 || !event || !key)
64 int w = snprintf(out, cap,
"https://maker.ifttt.com/trigger/%s/with/key/%s", event, key);
65 if (w < 0 || (
size_t)w >= cap)
73int detws_ifttt_payload(
const char *v1,
const char *v2,
const char *v3,
char *out,
size_t cap)
79 bool ok = put(out, cap, &pos,
"{");
80 const char *names[3] = {
"value1",
"value2",
"value3"};
81 const char *vals[3] = {v1, v2, v3};
83 for (
int i = 0; i < 3 && ok; i++)
88 ok = ok && put(out, cap, &pos,
",");
90 ok = ok && put(out, cap, &pos,
"\"");
91 ok = ok && put(out, cap, &pos, names[i]);
92 ok = ok && put(out, cap, &pos,
"\":\"");
93 ok = ok && put_escaped(out, cap, &pos, vals[i]);
94 ok = ok && put(out, cap, &pos,
"\"");
96 ok = ok && put(out, cap, &pos,
"}");
105#if DETWS_ENABLE_HTTP_CLIENT
109int detws_webhook_post(
const char *url,
const char *json)
112 return (
int)HttpClientError::HTTP_CLIENT_ERR_URL;
119int detws_webhook_post(
const char *,
const char *)
126int detws_ifttt_trigger(
const char *event,
const char *key,
const char *v1,
const char *v2,
const char *v3)
130 if (detws_ifttt_url(event, key, url,
sizeof(url)) == 0)
132 if (detws_ifttt_payload(v1, v2, v3, body,
sizeof(body)) == 0)
134 return detws_webhook_post(url, body);
#define DETWS_HTTP_CLIENT_BUF_SIZE
Receive buffer (and max response size) for the outbound HTTP client, bytes.
Zero-heap outbound HTTP(S) client over raw lwIP (DETWS_ENABLE_HTTP_CLIENT).
Shared HTTP Content-Type ("MIME") string constants (one source of truth).
Outbound webhooks / IFTTT (DETWS_ENABLE_WEBHOOK).