dovecot-2.0: login: Proxy code API cleanup.
dovecot at dovecot.org
dovecot at dovecot.org
Sun Jan 31 17:57:17 EET 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/6b3dc91ae0c5
changeset: 10612: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