aboutsummaryrefslogtreecommitdiffstats
path: root/foobar/portable/smtpd/smtp.h
diff options
context:
space:
mode:
Diffstat (limited to 'foobar/portable/smtpd/smtp.h')
-rw-r--r--foobar/portable/smtpd/smtp.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/foobar/portable/smtpd/smtp.h b/foobar/portable/smtpd/smtp.h
new file mode 100644
index 00000000..dc91d878
--- /dev/null
+++ b/foobar/portable/smtpd/smtp.h
@@ -0,0 +1,95 @@
+/* $OpenBSD: smtp.h,v 1.3 2019/09/02 20:05:21 eric Exp $ */
+
+/*
+ * Copyright (c) 2018 Eric Faurot <eric@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#define TLS_NO 0
+#define TLS_YES 1
+#define TLS_FORCE 2
+#define TLS_SMTPS 3
+
+#define CERT_OK 0
+#define CERT_UNKNOWN 1
+#define CERT_INVALID 2
+
+#define FAIL_INTERNAL 1 /* malloc, etc. (check errno) */
+#define FAIL_CONN 2 /* disconnect, timeout... (check errno) */
+#define FAIL_PROTO 3 /* protocol violation */
+#define FAIL_IMPL 4 /* server lacks a required feature */
+#define FAIL_RESP 5 /* rejected command */
+
+struct smtp_params {
+
+ /* Client options */
+ size_t linemax; /* max input line size */
+ size_t ibufmax; /* max input buffer size */
+ size_t obufmax; /* max output buffer size */
+
+ /* Connection settings */
+ const struct sockaddr *dst; /* address to connect to */
+ const struct sockaddr *src; /* address to bind to */
+ int timeout; /* timeout in seconds */
+
+ /* TLS options */
+ int tls_req; /* requested TLS mode */
+ int tls_verify; /* need valid server certificate */
+
+ /* SMTP options */
+ int lmtp; /* use LMTP protocol */
+ const char *helo; /* string to use with HELO */
+ const char *auth_user; /* for AUTH */
+ const char *auth_pass; /* for AUTH */
+};
+
+struct smtp_rcpt {
+ const char *to;
+ const char *dsn_notify;
+ const char *dsn_orcpt;
+ int done;
+};
+
+struct smtp_mail {
+ const char *from;
+ const char *dsn_ret;
+ const char *dsn_envid;
+ struct smtp_rcpt *rcpt;
+ int rcptcount;
+ FILE *fp;
+};
+
+struct smtp_status {
+ struct smtp_rcpt *rcpt;
+ const char *cmd;
+ const char *status;
+};
+
+struct smtp_client;
+
+/* smtp_client.c */
+struct smtp_client *smtp_connect(const struct smtp_params *, void *);
+void smtp_cert_verified(struct smtp_client *, int);
+void smtp_set_tls(struct smtp_client *, void *);
+void smtp_quit(struct smtp_client *);
+void smtp_sendmail(struct smtp_client *, struct smtp_mail *);
+
+/* callbacks */
+void smtp_verify_server_cert(void *, struct smtp_client *, void *);
+void smtp_require_tls(void *, struct smtp_client *);
+void smtp_ready(void *, struct smtp_client *);
+void smtp_failed(void *, struct smtp_client *, int, const char *);
+void smtp_closed(void *, struct smtp_client *);
+void smtp_status(void *, struct smtp_client *, struct smtp_status *);
+void smtp_done(void *, struct smtp_client *, struct smtp_mail *);