dovecot-2.0-sslstream: login: Proxy code API cleanup.

dovecot at dovecot.org dovecot at dovecot.org
Sat Feb 13 02:59:34 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0-sslstream/rev/6b3dc91ae0c5
changeset: 10613:6b3dc91ae0c5
user:      Timo Sirainen <tss at iki.fi>
date:      Sun Jan 31 16:13:07 2010 +0200
description:
login: Proxy code API cleanup.

diffstat:

3 files changed, 18 insertions(+), 31 deletions(-)
src/login-common/client-common-auth.c |    5 ++---
src/login-common/login-proxy.c        |   27 ++++++++++++---------------
src/login-common/login-proxy.h        |   17 ++++-------------

diffs (147 lines):

diff -r c06033a1f147 -r 6b3dc91ae0c5 src/login-common/client-common-auth.c
--- a/src/login-common/client-common-auth.c	Sun Jan 31 15:36:26 2010 +0200
+++ b/src/login-common/client-common-auth.c	Sun Jan 31 16:13:07 2010 +0200
@@ -258,9 +258,8 @@ static int proxy_start(struct client *cl
 	proxy_set.connect_timeout_msecs = reply->proxy_timeout_msecs;
 	proxy_set.ssl_flags = reply->ssl_flags;
 
-	client->login_proxy =
-		login_proxy_new(client, &proxy_set, proxy_input, client);
-	if (client->login_proxy == NULL) {
+	if (login_proxy_new(client, &proxy_set, proxy_input,
+			    &client->login_proxy) < 0) {
 		client_send_line(client, CLIENT_CMD_REPLY_AUTH_FAIL_TEMP,
 				 PROXY_FAILURE_MSG);
 		return -1;
diff -r c06033a1f147 -r 6b3dc91ae0c5 src/login-common/login-proxy.c
--- a/src/login-common/login-proxy.c	Sun Jan 31 15:36:26 2010 +0200
+++ b/src/login-common/login-proxy.c	Sun Jan 31 16:13:07 2010 +0200
@@ -37,7 +37,6 @@ struct login_proxy {
 	enum login_proxy_ssl_flags ssl_flags;
 
 	proxy_callback_t *callback;
-	void *context;
 
 	unsigned int destroying:1;
 	unsigned int disconnecting:1;
@@ -124,7 +123,7 @@ static int proxy_client_output(struct lo
 
 static void proxy_prelogin_input(struct login_proxy *proxy)
 {
-	proxy->callback(proxy->context);
+	proxy->callback(proxy->client);
 }
 
 static void proxy_plain_connected(struct login_proxy *proxy)
@@ -190,10 +189,9 @@ static void proxy_connect_timeout(struct
 	login_proxy_free(&proxy);
 }
 
-#undef login_proxy_new
-struct login_proxy *
-login_proxy_new(struct client *client, const struct login_proxy_settings *set,
-		proxy_callback_t *callback, void *context)
+int login_proxy_new(struct client *client,
+		    const struct login_proxy_settings *set,
+		    proxy_callback_t *callback, struct login_proxy **proxy_r)
 {
 	struct login_proxy *proxy;
 	struct login_proxy_record *rec;
@@ -202,27 +200,27 @@ login_proxy_new(struct client *client, c
 
 	if (set->host == NULL) {
 		i_error("proxy(%s): host not given", client->virtual_user);
-		return NULL;
+		return -1;
 	}
 
 	if (net_addr2ip(set->host, &ip) < 0) {
 		i_error("proxy(%s): %s is not a valid IP",
 			client->virtual_user, set->host);
-		return NULL;
+		return -1;
 	}
 
 	rec = login_proxy_state_get(proxy_state, &ip, set->port);
 	if (timeval_cmp(&rec->last_failure, &rec->last_success) > 0 &&
 	    rec->num_waiting_connections != 0) {
 		/* the server is down. fail immediately */
-	       return NULL;
+	       return -1;
 	}
 
 	fd = net_connect_ip(&ip, set->port, NULL);
 	if (fd < 0) {
 		i_error("proxy(%s): connect(%s, %u) failed: %m",
 			client->virtual_user, set->host, set->port);
-		return NULL;
+		return -1;
 	}
 
 	proxy = i_new(struct login_proxy, 1);
@@ -240,15 +238,15 @@ login_proxy_new(struct client *client, c
 		proxy->to = timeout_add(set->connect_timeout_msecs,
 					proxy_connect_timeout, proxy);
 	}
-
 	proxy->callback = callback;
-	proxy->context = context;
 
 	proxy->client_fd = -1;
 
 	proxy->state_rec = rec;
 	rec->num_waiting_connections++;
-	return proxy;
+
+	*proxy_r = proxy;
+	return 0;
 }
 
 void login_proxy_free(struct login_proxy **_proxy)
@@ -296,7 +294,7 @@ void login_proxy_free(struct login_proxy
 		i_assert(proxy->client_io == NULL);
 		i_assert(proxy->client_output == NULL);
 
-		proxy->callback(proxy->context);
+		proxy->callback(proxy->client);
 	}
 
 	net_disconnect(proxy->server_fd);
@@ -384,7 +382,6 @@ void login_proxy_detach(struct login_pro
 	i_stream_destroy(&proxy->server_input);
 
 	proxy->callback = NULL;
-	proxy->context = NULL;
 
 	DLLIST_PREPEND(&login_proxies, proxy);
 
diff -r c06033a1f147 -r 6b3dc91ae0c5 src/login-common/login-proxy.h
--- a/src/login-common/login-proxy.h	Sun Jan 31 15:36:26 2010 +0200
+++ b/src/login-common/login-proxy.h	Sun Jan 31 16:13:07 2010 +0200
@@ -21,22 +21,13 @@ struct login_proxy_settings {
 };
 
 /* Called when new input comes from proxy. */
-typedef void proxy_callback_t(void *context);
+typedef void proxy_callback_t(struct client *client);
 
 /* 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 struct login_proxy_settings *set,
-		proxy_callback_t *callback, void *context);
-#ifdef CONTEXT_TYPE_SAFETY
-#  define login_proxy_new(client, set, callback, context) \
-	({(void)(1 ? 0 : callback(context)); \
-	  login_proxy_new(client, set, \
-		(proxy_callback_t *)callback, context); })
-#else
-#  define login_proxy_new(client, set, callback, context) \
-	  login_proxy_new(client, set, (proxy_callback_t *)callback, context)
-#endif
+int login_proxy_new(struct client *client,
+		    const struct login_proxy_settings *set,
+		    proxy_callback_t *callback, struct login_proxy **proxy_r);
 /* Free the proxy. This should be called if authentication fails. */
 void login_proxy_free(struct login_proxy **proxy);
 


More information about the dovecot-cvs mailing list