session = p_new(pool, struct smtp_submit_session, 1);
session->pool = pool;
+ session->set = *set;
session->set.hostname = p_strdup_empty(pool, set->hostname);
session->set.submission_host = p_strdup_empty(pool, set->submission_host);
session->set.sendmail_path = p_strdup_empty(pool, set->sendmail_path);
}
static void
-smtp_submit_send_host(struct smtp_submit *subm,
- unsigned int timeout_secs)
+smtp_submit_send_host(struct smtp_submit *subm)
{
const struct smtp_submit_settings *set = &subm->session->set;
struct lmtp_client_settings client_set;
client_set.mail_from = subm->return_path == NULL ? "<>" :
t_strconcat("<", subm->return_path, ">", NULL);
client_set.my_hostname = set->hostname;
- client_set.timeout_secs = timeout_secs;
+ client_set.timeout_secs = set->submission_timeout;
lmtp_client = lmtp_client_init(&client_set,
smtp_submit_send_host_finished, subm);
}
static void
-smtp_submit_send_sendmail(struct smtp_submit *subm,
- unsigned int timeout_secs)
+smtp_submit_send_sendmail(struct smtp_submit *subm)
{
const struct smtp_submit_settings *set = &subm->session->set;
const char *const *sendmail_args, *sendmail_bin, *str;
array_append_zero(&args);
i_zero(&pc_set);
- pc_set.client_connect_timeout_msecs = timeout_secs * 1000;
- pc_set.input_idle_timeout_msecs = timeout_secs * 1000;
+ pc_set.client_connect_timeout_msecs = set->submission_timeout * 1000;
+ pc_set.input_idle_timeout_msecs = set->submission_timeout * 1000;
restrict_access_init(&pc_set.restrict_set);
pc = program_client_local_create
io_loop_stop(current_ioloop);
}
-int smtp_submit_run_timeout(struct smtp_submit *subm,
- unsigned int timeout_secs, const char **error_r)
+int smtp_submit_run(struct smtp_submit *subm,
+ const char **error_r)
{
struct smtp_submit_run_context rctx;
struct ioloop *ioloop;
io_loop_set_running(ioloop);
i_zero(&rctx);
- smtp_submit_run_async(subm, timeout_secs,
+ smtp_submit_run_async(subm,
smtp_submit_run_callback, &rctx);
if (io_loop_is_running(ioloop))
return rctx.status;
}
-int smtp_submit_run(struct smtp_submit *submit, const char **error_r)
-{
- return smtp_submit_run_timeout(submit, 0, error_r);
-}
-
#undef smtp_submit_run_async
void smtp_submit_run_async(struct smtp_submit *subm,
- unsigned int timeout_secs,
smtp_submit_callback_t *callback, void *context)
{
const struct smtp_submit_settings *set = &subm->session->set;
(&subm->output, IO_BLOCK_SIZE);
if (set->submission_host != NULL) {
- smtp_submit_send_host(subm, timeout_secs);
+ smtp_submit_send_host(subm);
} else {
- smtp_submit_send_sendmail(subm, timeout_secs);
+ smtp_submit_send_sendmail(subm);
}
}
static int
test_client_smtp_send_simple(const struct smtp_submit_settings *smtp_set,
const char *message, const char *host,
- unsigned int timeout_secs, const char **error_r);
+ const char **error_r);
static int
test_client_smtp_send_simple_port(const struct smtp_submit_settings *smtp_set,
const char *message, unsigned int port,
- unsigned int timeout_secs, const char **error_r);
+ const char **error_r);
/* test*/
static const char *test_tmp_dir_get(void);
int ret;
ret = test_client_smtp_send_simple(submit_set,
- test_message1, "host.invalid", 5, &error);
+ test_message1, "host.invalid", &error);
test_out_reason("run (ret < 0)", ret < 0, error);
return FALSE;
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 5;
test_begin("host lookup failed");
test_expect_errors(1);
int ret;
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 5, &error);
+ test_message1, bind_ports[0], &error);
test_out_reason("run (ret < 0)", ret < 0, error);
return FALSE;
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 5;
test_begin("connection refused");
test_expect_errors(1);
io_loop_time_refresh();
time = ioloop_time;
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 1, &error);
+ test_message1, bind_ports[0], &error);
test_out_reason("run (ret < 0)", ret < 0, error);
io_loop_time_refresh();
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 1;
test_begin("connection timed out");
test_expect_errors(0);
int ret;
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 5, &error);
+ test_message1, bind_ports[0], &error);
// FIXME: lmtp client handles this wrong, the greeting is not "bad"
//test_out_reason("run", ret == 0, error);
test_out_reason("run (ret < 0)", ret < 0, error);
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 5;
test_begin("bad greeting");
test_expect_errors(0);
int ret;
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 5, &error);
+ test_message1, bind_ports[0], &error);
// FIXME: lmtp client handles this wrong, the greeting is not "bad"
//test_out_reason("run", ret == 0, error);
test_out_reason("run (ret < 0)", ret < 0, error);
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 5;
test_begin("denied helo");
test_expect_errors(0);
int ret;
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 5, &error);
+ test_message1, bind_ports[0], &error);
// FIXME: lmtp client handles this wrong, the greeting is not "bad"
//test_out_reason("run", ret == 0, error);
test_out_reason("run (ret < 0)", ret < 0, error);
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 5;
test_begin("disconnect helo");
test_expect_errors(0);
int ret;
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 5, &error);
+ test_message1, bind_ports[0], &error);
// FIXME: lmtp client handles this wrong, the greeting is not "bad"
//test_out_reason("run", ret == 0, error);
test_out_reason("run (ret < 0)", ret < 0, error);
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 5;
test_begin("denied mail");
test_expect_errors(0);
int ret;
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 5, &error);
+ test_message1, bind_ports[0], &error);
test_out_reason("run (ret == 0)", ret == 0, error);
return FALSE;
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 5;
test_begin("denied rcpt");
test_expect_errors(0);
smtp_submit_set = *submit_set;
smtp_submit_set.submission_host =
t_strdup_printf("127.0.0.1:%u", bind_ports[0]);
+ smtp_submit_set.submission_timeout = 1000;
smtp_submit = smtp_submit_init_simple(&smtp_submit_set, "sender@example.com");
output = smtp_submit_send(smtp_submit);
o_stream_send_str(output, test_message1);
- ret = smtp_submit_run_timeout(smtp_submit, 1000, &error);
+ ret = smtp_submit_run(smtp_submit, &error);
test_out_reason("run (ret == 0)", ret == 0, error);
smtp_submit_deinit(&smtp_submit);
int ret;
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 5, &error);
+ test_message1, bind_ports[0], &error);
test_out_reason("run (ret == 0)", ret == 0, error);
return FALSE;
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 5;
test_begin("denied data");
test_expect_errors(0);
int ret;
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 5, &error);
+ test_message1, bind_ports[0], &error);
test_out_reason("run (ret == 0)", ret == 0, error);
return FALSE;
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 5;
test_begin("data failure");
test_expect_errors(0);
int ret;
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 5, &error);
+ test_message1, bind_ports[0], &error);
test_out_reason("run (ret < 0)", ret < 0, error);
return FALSE;
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 5;
test_begin("data disconnect");
test_expect_errors(0);
io_loop_time_refresh();
time = ioloop_time;
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 2, &error);
+ test_message1, bind_ports[0], &error);
test_out_reason("run (ret < 0)", ret < 0, error);
io_loop_time_refresh();
struct smtp_submit_settings smtp_submit_set;
test_client_defaults(&smtp_submit_set);
+ smtp_submit_set.submission_timeout = 2;
test_begin("data timeout");
test_expect_errors(0);
/* send the message */
ret = test_client_smtp_send_simple_port(submit_set,
- test_message1, bind_ports[0], 5, &error);
+ test_message1, bind_ports[0], &error);
test_out_reason("run (ret > 0)", ret > 0, error);
/* verify delivery */
ctx->count = 2;
smtp_submit_set = *submit_set;
+ smtp_submit_set.submission_timeout = 5;
/* submit 1 */
smtp_submit_set.submission_host =
output = smtp_submit_send(smtp_submit1);
o_stream_send_str(output, test_message1);
- smtp_submit_run_async(smtp_submit1, 5,
+ smtp_submit_run_async(smtp_submit1,
test_client_parallel_delivery_callback, ctx);
/* submit 2 */
output = smtp_submit_send(smtp_submit2);
o_stream_send_str(output, test_message2);
- smtp_submit_run_async(smtp_submit2, 5,
+ smtp_submit_run_async(smtp_submit2,
test_client_parallel_delivery_callback, ctx);
io_loop_run(ioloop);
smtp_submit_set = *submit_set;
smtp_submit_set.sendmail_path = sendmail_path;
+ smtp_submit_set.submission_timeout = 5;
smtp_submit = smtp_submit_init_simple(&smtp_submit_set, "sender@example.com");
output = smtp_submit_send(smtp_submit);
o_stream_send_str(output, test_message1);
- ret = smtp_submit_run_timeout(smtp_submit, 5, &error);
+ ret = smtp_submit_run(smtp_submit, &error);
test_out_reason("run (ret < 0)", ret < 0, error);
smtp_submit_deinit(&smtp_submit);
smtp_submit_set = *submit_set;
smtp_submit_set.sendmail_path = sendmail_path;
+ smtp_submit_set.submission_timeout = 5;
smtp_submit = smtp_submit_init_simple(&smtp_submit_set, "sender@example.com");
output = smtp_submit_send(smtp_submit);
o_stream_send_str(output, test_message1);
- ret = smtp_submit_run_timeout(smtp_submit, 5, &error);
+ ret = smtp_submit_run(smtp_submit, &error);
test_out_reason("run (ret > 0)", ret > 0, error);
smtp_submit_deinit(&smtp_submit);
TEST_BIN_DIR"/sendmail-success.sh %s", msg_path2);
smtp_submit_set = *submit_set;
+ smtp_submit_set.submission_timeout = 5;
/* submit 1 */
smtp_submit_set.sendmail_path = sendmail_path1;
output = smtp_submit_send(smtp_submit1);
o_stream_send_str(output, test_message1);
- smtp_submit_run_async(smtp_submit1, 5,
+ smtp_submit_run_async(smtp_submit1,
test_client_parallel_sendmail_callback, ctx);
/* submit 2 */
output = smtp_submit_send(smtp_submit2);
o_stream_send_str(output, test_message2);
- smtp_submit_run_async(smtp_submit2, 5,
+ smtp_submit_run_async(smtp_submit2,
test_client_parallel_sendmail_callback, ctx);
io_loop_run(ioloop);
static int
test_client_smtp_send_simple(const struct smtp_submit_settings *smtp_set,
const char *message, const char *host,
- unsigned int timeout_secs, const char **error_r)
+ const char **error_r)
{
struct smtp_submit_settings smtp_submit_set;
struct smtp_submit *smtp_submit;
output = smtp_submit_send(smtp_submit);
o_stream_send_str(output, message);
- ret = smtp_submit_run_timeout(smtp_submit, timeout_secs, error_r);
+ ret = smtp_submit_run(smtp_submit, error_r);
smtp_submit_deinit(&smtp_submit);
}
static int
-test_client_smtp_send_simple_port(const struct smtp_submit_settings *smtp_set,
+test_client_smtp_send_simple_port(
+ const struct smtp_submit_settings *smtp_set,
const char *message, unsigned int port,
- unsigned int timeout_secs, const char **error_r)
+ const char **error_r)
{
const char *host = t_strdup_printf("127.0.0.1:%u", port);
return test_client_smtp_send_simple(smtp_set,
- message, host, timeout_secs, error_r);
+ message, host, error_r);
}
/*