Mercurial > dovecot > core-2.2
diff src/login-common/login-proxy.h @ 9165:96678e83eab6 HEAD
imap/pop3 proxy: Support SSL/TLS connections to remote servers.
passdb can return ssl=yes, ssl=any-cert and starttls options.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 28 Apr 2009 22:55:03 -0400 |
parents | 6324a79d3ee1 |
children | e30495ae11de |
line wrap: on
line diff
--- a/src/login-common/login-proxy.h Tue Apr 28 19:57:10 2009 -0400 +++ b/src/login-common/login-proxy.h Tue Apr 28 22:55:03 2009 -0400 @@ -3,24 +3,32 @@ struct login_proxy; +enum login_proxy_ssl_flags { + /* Use SSL/TLS enabled */ + PROXY_SSL_FLAG_YES = 0x01, + /* Don't do SSL handshake immediately after connected */ + PROXY_SSL_FLAG_STARTTLS = 0x02, + /* Don't require that the received certificate is valid */ + PROXY_SSL_FLAG_ANY_CERT = 0x04 +}; + /* Called when new input comes from proxy. */ -typedef void proxy_callback_t(struct istream *input, struct ostream *output, - void *context); +typedef void proxy_callback_t(void *context); /* Create a proxy to given host. Returns NULL if failed. Given callback is called when new input is available from proxy. */ struct login_proxy * login_proxy_new(struct client *client, const char *host, unsigned int port, + enum login_proxy_ssl_flags ssl_flags, proxy_callback_t *callback, void *context); #ifdef CONTEXT_TYPE_SAFETY -# define login_proxy_new(client, host, port, callback, context) \ - ({(void)(1 ? 0 : callback((struct istream *)NULL, \ - (struct ostream *)NULL, context)); \ - login_proxy_new(client, host, port, \ +# define login_proxy_new(client, host, port, ssl_flags, callback, context) \ + ({(void)(1 ? 0 : callback(context)); \ + login_proxy_new(client, host, port, ssl_flags, \ (proxy_callback_t *)callback, context); }) #else -# define login_proxy_new(client, host, port, callback, context) \ - login_proxy_new(client, host, port, \ +# define login_proxy_new(client, host, port, ssl_flags, callback, context) \ + login_proxy_new(client, host, port, ssl_flags, \ (proxy_callback_t *)callback, context) #endif /* Free the proxy. This should be called if authentication fails. */ @@ -36,8 +44,16 @@ void login_proxy_detach(struct login_proxy *proxy, struct istream *client_input, struct ostream *client_output); +/* STARTTLS command was issued. */ +int login_proxy_starttls(struct login_proxy *proxy); + +struct istream *login_proxy_get_istream(struct login_proxy *proxy); +struct ostream *login_proxy_get_ostream(struct login_proxy *proxy); + const char *login_proxy_get_host(const struct login_proxy *proxy) ATTR_PURE; unsigned int login_proxy_get_port(const struct login_proxy *proxy) ATTR_PURE; +enum login_proxy_ssl_flags +login_proxy_get_ssl_flags(const struct login_proxy *proxy) ATTR_PURE; void login_proxy_deinit(void);