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);