about summary refs log tree commit diff
path: root/archive.h
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-04-09 15:53:31 -0400
committerJune McEnroe <june@causal.agency>2020-04-09 15:53:31 -0400
commitcd60193ce40431cd05da4da66fb4156034b8f330 (patch)
treea433e65f0b01ceb3711fbf29fc277ff389a2f849 /archive.h
parentSend FETCH for uncached UIDs (diff)
downloadbubger-cd60193ce40431cd05da4da66fb4156034b8f330.tar.gz
bubger-cd60193ce40431cd05da4da66fb4156034b8f330.zip
Parse envelopes
Diffstat (limited to 'archive.h')
-rw-r--r--archive.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/archive.h b/archive.h
new file mode 100644
index 0000000..9ec1f89
--- /dev/null
+++ b/archive.h
@@ -0,0 +1,57 @@
+/* Copyright (C) 2020  C. McEnroe <june@causal.agency>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+#include <time.h>
+
+struct Address {
+	char *name;
+	const char *mailbox;
+	const char *host;
+};
+
+struct AddressList {
+	size_t len;
+	struct Address *addrs;
+};
+
+struct Envelope {
+	struct tm date;
+	char *subject;
+	struct Address from, sender, replyTo;
+	struct AddressList to, cc, bcc;
+	const char *inReplyTo;
+	const char *messageID;
+};
+
+static inline void envelopeFree(struct Envelope envelope) {
+	free(envelope.subject);
+	free(envelope.from.name);
+	free(envelope.sender.name);
+	free(envelope.replyTo.name);
+	for (size_t i = 0; i < envelope.to.len; ++i) {
+		free(envelope.to.addrs[i].name);
+	}
+	for (size_t i = 0; i < envelope.cc.len; ++i) {
+		free(envelope.cc.addrs[i].name);
+	}
+	for (size_t i = 0; i < envelope.bcc.len; ++i) {
+		free(envelope.bcc.addrs[i].name);
+	}
+	free(envelope.to.addrs);
+	free(envelope.cc.addrs);
+	free(envelope.bcc.addrs);
+}