# HG changeset patch # User Timo Sirainen # Date 1264947187 -7200 # Node ID 6b3dc91ae0c55d833c17e2668c9244b6ad723446 # Parent c06033a1f147e526e13c21de4da05c068809ca3d login: Proxy code API cleanup. 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 @@ 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 @@ 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 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ }; /* 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);