Lines Matching +full:test +full:- +full:sequencer
2 * Abstract SMTP support for libwebsockets - SMTP sequencer
4 * Copyright (C) 2016-2019 Andy Green <andy@warmcat.com>
24 * This sequencer sits above the abstract protocol, and manages queueing,
27 * Having the sequencer means that, eg, we can manage retries after complete
33 #include "private-lib-core.h"
34 #include "private-lib-abstract-protocols-smtp.h"
58 /* sequencer messages specific to this sequencer */
66 * We're going to bind to the raw-skt transport, so tell that what we want it
90 pd2 = lws_dll2_get_head(&s->emails_owner); in lws_smtpc_kick_internal()
100 if (s->connstate == LSMTPSS_DISCONNECTED) { in lws_smtpc_kick_internal()
102 s->apt[0].u.value = s->args.helo; in lws_smtpc_kick_internal()
103 s->apt[0].name_index = LTMI_PSMTP_V_HELO; in lws_smtpc_kick_internal()
104 s->apt[1].u.value = (void *)e; in lws_smtpc_kick_internal()
105 s->apt[1].name_index = LTMI_PSMTP_V_LWS_SMTP_EMAIL_T; in lws_smtpc_kick_internal()
111 s->abs = lws_abstract_alloc(s->args.vhost, NULL, "smtp.raw_skt", in lws_smtpc_kick_internal()
112 s->apt, smtp_rs_transport_tokens, in lws_smtpc_kick_internal()
113 s->seq, NULL); in lws_smtpc_kick_internal()
114 if (!s->abs) in lws_smtpc_kick_internal()
117 s->instance = lws_abs_bind_and_create_instance(s->abs); in lws_smtpc_kick_internal()
118 if (!s->instance) { in lws_smtpc_kick_internal()
119 lws_abstract_free(&s->abs); in lws_smtpc_kick_internal()
125 s->connstate = LSMTPSS_CONNECTING; in lws_smtpc_kick_internal()
126 lws_seq_timeout_us(s->seq, 10 * LWS_USEC_PER_SEC); in lws_smtpc_kick_internal()
132 if (s->abs->at->state(s->abs->ati)) { in lws_smtpc_kick_internal()
137 s->abs->at->ask_for_writeable(s->abs->ati); in lws_smtpc_kick_internal()
146 if (s->abs->at->client_conn(s->abs)) { in lws_smtpc_kick_internal()
152 e->tries++; in lws_smtpc_kick_internal()
153 e->last_try = lws_now_secs(); in lws_smtpc_kick_internal()
161 * Sequencer will handle it via the event loop.
169 lws_sequencer_event(s->seq, LWSSEQ_USER_BASE + disp, e); in email_result()
180 if (e->done) in cleanup()
181 e->done(e, "destroying", 10); in cleanup()
195 case LWSSEQ_CREATED: /* our sequencer just got started */ in smtp_sequencer_cb()
198 s->connstate = LSMTPSS_DISCONNECTED; in smtp_sequencer_cb()
199 s->state = 0; /* first thing we'll do is the first url */ in smtp_sequencer_cb()
203 lws_dll2_foreach_safe(&s->pending_owner, NULL, cleanup); in smtp_sequencer_cb()
215 s->connstate = LSMTPSS_CONNECTED; in smtp_sequencer_cb()
221 s->connstate = LSMTPSS_DISCONNECTED; in smtp_sequencer_cb()
236 * Creates an lws_sequencer to manage the test sequence
246 * Create a sequencer in the event loop to manage the SMTP queue in lws_smtp_sequencer_create()
249 seq = lws_sequencer_create(args->vhost->context, 0, in lws_smtp_sequencer_create()
251 smtp_sequencer_cb, "smtp-seq"); in lws_smtp_sequencer_create()
253 lwsl_err("%s: unable to create sequencer\n", __func__); in lws_smtp_sequencer_create()
257 s->abs = *args->abs; in lws_smtp_sequencer_create()
258 s->args = *args; in lws_smtp_sequencer_create()
259 s->seq = seq; in lws_smtp_sequencer_create()
263 if (!s->args.helo[0]) in lws_smtp_sequencer_create()
264 strcpy(s->args.helo, "default-helo"); in lws_smtp_sequencer_create()
265 if (!s->args.email_queue_max) in lws_smtp_sequencer_create()
266 s->args.email_queue_max = 8; in lws_smtp_sequencer_create()
267 if (!s->args.retry_interval) in lws_smtp_sequencer_create()
268 s->args.retry_interval = 15 * 60; in lws_smtp_sequencer_create()
269 if (!s->args.delivery_timeout) in lws_smtp_sequencer_create()
270 s->args.delivery_timeout = 12 * 60 * 60; in lws_smtp_sequencer_create()
278 /* sequencer destruction destroys all assets */ in lws_smtp_sequencer_destroy()
279 lws_sequencer_destroy(&s->seq); in lws_smtp_sequencer_destroy()
289 if (s->emails_owner.count > s->args.email_queue_max) { in lws_smtpc_add_email()
291 (int)s->args.email_queue_max); in lws_smtpc_add_email()
305 e->data = data; in lws_smtpc_add_email()
306 e->done = done; in lws_smtpc_add_email()
308 lws_strncpy(e->from, sender, sizeof(e->from)); in lws_smtpc_add_email()
309 lws_strncpy(e->to, recipient, sizeof(e->to)); in lws_smtpc_add_email()
313 e->added = lws_now_secs(); in lws_smtpc_add_email()
314 e->last_try = 0; in lws_smtpc_add_email()
315 e->tries = 0; in lws_smtpc_add_email()
317 lws_dll2_clear(&e->list); in lws_smtpc_add_email()
318 lws_dll2_add_tail(&e->list, &s->emails_owner); in lws_smtpc_add_email()