imap.h 2.34 KB
Newer Older
Kim Vandry's avatar
Kim Vandry committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
#ifndef __IMAPLL_H__
#define __IMAPLL_H__

#ifdef USE_OPENSSL
#include <openssl/ssl.h>
#endif
#include <poll.h>

enum imap_ll_tltype {
	TLTYPE_UNTAGGED = 1,
	TLTYPE_TAGGED = 2,
	TLTYPE_LIST = 3,
	TLTYPE_SQLIST = 4,
	TLTYPE_ATOM = 5,
	TLTYPE_STRING = 6,
	TLTYPE_CONTINUATION = 7,
	/* the following only for imap_ll_build */
	TLTYPE_END = 100,
	TLTYPE_POP = 101,
	TLTYPE_SUB = 102
};

struct imap_ll_tokenlist {
	enum imap_ll_tltype type;
	char *leaf;
	size_t leaflen;
	struct imap_ll_tokenlist *parent;
	struct imap_ll_tokenlist *next;
	/* children */
	struct imap_ll_tokenlist *first;
	struct imap_ll_tokenlist *last;
};

struct imap_ll *imap_ll_connect(const char *host, const char *port);
struct imap_ll *imap_ll_pipe_connect(const char *command);
void imap_ll_timeout(struct imap_ll *, int seconds);
struct imap_ll_tokenlist *imap_ll_waitline(struct imap_ll *);
void imap_ll_freeline(struct imap_ll_tokenlist *);
struct imap_ll_tokenlist *imap_ll_build(enum imap_ll_tltype maintype, ...);
void imap_ll_append(struct imap_ll_tokenlist *, struct imap_ll_tokenlist *);
void imap_ll_pprint(struct imap_ll_tokenlist *, int indent, FILE *);
struct imap_ll_tokenlist *imap_ll_command(struct imap_ll *, struct imap_ll_tokenlist *, int timeout);
const char *imap_ll_status(struct imap_ll_tokenlist *);
44
int imap_ll_is_trycreate(struct imap_ll_tokenlist *);
Kim Vandry's avatar
Kim Vandry committed
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82

#ifdef USE_OPENSSL
enum imap_ll_starttls_result {
	IMAP_LL_STARTTLS_FAILED_PROCEED,	/* STARTTLS failed but session still OK */
	IMAP_LL_STARTTLS_FAILED,	/* session must be closed */
	IMAP_LL_STARTTLS_FAILED_CERT,	/* certificate problem (session must be closed) */
	IMAP_LL_STARTTLS_SUCCESS	/* certificate problem (session must be closed) */
};
enum imap_ll_starttls_result imap_ll_starttls(struct imap_ll *, SSL_CTX *, const char *servername);
#endif

void imap_ll_logout(struct imap_ll *);

enum imap_login_result {
	imap_login_ok = 0,
	imap_login_denied = 1,
	imap_login_error = 2
};

enum imap_login_result
imap_login(
	struct imap_ll *,
	const char *username, size_t username_len,
	const char *password, size_t password_len
#ifdef USE_OPENSSL
	, SSL_CTX *, const char *servername
#endif
);

/* returns the uidvalidity of the opened folder if successful */
const char *imap_select(
	struct imap_ll *,
	const char *foldername, size_t foldername_len,
	int need_write,
	long *exists_p	/* optional, return number of messages which exist */
);

#endif