#include "config.h"
#include <stdio.h>
#include <string.h>

/**
 * rfc822 - Parsing of RFC822 emails
 *
 * This code allows easy processing of RFC822/RFC2822/RFC5322
 * formatted email messages.  For now only read-only operation is
 * supported.
 *
 * The important design goals are these:
 * - Be lazy.  Don't compute immediately compute fancy indexes for the
 *   message.  Just reading messages into the system and then sending
 *   them out again should not incur a serious performance hit.
 * - But cache.  Once the user does request data that needs parsing,
 *   cache the results in suitable data structures so that if lots
 *   more lookups are done they're then fast.
 * - Cope with ill-formatted messages.  Even if the input is not
 *   RFC822 compliant, don't SEGV and try to return as much useful
 *   data as possible.
 *
 * Define TAL_USE_TALLOC to use libtalloc as the allocator, otherwise
 * it will use ccan/tal (usually done on the cmdline, as tal/str will need
 * it too).
 *
 * Example:
 *	// Outputs "body\n"
 *	// Given "From" outputs <from@example.com>
 *	// Given "To" outputs <to@example.com>
 *	char buf[] = "From: <from@example.com>\n"
 *		     "To: <to@example.com>\n\n"
 *                   "body\n";
 *	struct rfc822_msg *msg;
 *	struct bytestring out;
 *
 *	msg = rfc822_start(NULL, buf, sizeof(buf));
 *	if (!argv[1])
 *		out = rfc822_body(msg);
 *	else {
 *		struct rfc822_header *hdr;
 *		hdr = rfc822_first_header_of_name(msg, argv[1]);
 *		if (!hdr)
 *			exit(1);
 *		out = rfc822_header_unfolded_value(msg, hdr);
 *	}
 *	fwrite(out.ptr, 1, out.len, stdout);
 *	rfc822_free(msg);
 *
 * License: LGPL (v2.1 or any later version)
 *
 */
int main(int argc, char *argv[])
{
	/* Expect exactly one argument */
	if (argc != 2)
		return 1;

	if (strcmp(argv[1], "depends") == 0) {
#ifdef TAL_USE_TALLOC
		printf("ccan/tal/talloc\n");
#else
		printf("ccan/tal\n");
#endif
		printf("ccan/list\n");
		printf("ccan/str\n");
		printf("ccan/bytestring\n");
		printf("ccan/mem\n");
		return 0;
	}

	if (strcmp(argv[1], "testdepends") == 0) {
		printf("ccan/failtest\n");
		printf("ccan/foreach\n");
		printf("ccan/array_size\n");
		printf("ccan/tal/str\n");
		return 0;
	}

	return 1;
}
