login-proxy.h revision ec23e16ed879e289d12c6e1a5f9745dd3979004a
2N/A#ifndef LOGIN_PROXY_H
2N/A#define LOGIN_PROXY_H
2N/A
2N/Astruct client;
2N/Astruct login_proxy;
2N/A
2N/Aenum login_proxy_ssl_flags {
2N/A /* Use SSL/TLS enabled */
2N/A PROXY_SSL_FLAG_YES = 0x01,
2N/A /* Don't do SSL handshake immediately after connected */
2N/A PROXY_SSL_FLAG_STARTTLS = 0x02,
2N/A /* Don't require that the received certificate is valid */
2N/A PROXY_SSL_FLAG_ANY_CERT = 0x04
2N/A};
2N/A
2N/Astruct login_proxy_settings {
2N/A const char *host;
2N/A unsigned int port;
2N/A unsigned int connect_timeout_msecs;
2N/A enum login_proxy_ssl_flags ssl_flags;
2N/A};
2N/A
2N/A/* Called when new input comes from proxy. */
2N/Atypedef void proxy_callback_t(void *context);
2N/A
2N/A/* Create a proxy to given host. Returns NULL if failed. Given callback is
2N/A called when new input is available from proxy. */
2N/Astruct login_proxy *
2N/Alogin_proxy_new(struct client *client, const struct login_proxy_settings *set,
2N/A proxy_callback_t *callback, void *context);
2N/A#ifdef CONTEXT_TYPE_SAFETY
2N/A# define login_proxy_new(client, set, callback, context) \
2N/A ({(void)(1 ? 0 : callback(context)); \
2N/A login_proxy_new(client, set, \
2N/A (proxy_callback_t *)callback, context); })
2N/A#else
2N/A# define login_proxy_new(client, set, callback, context) \
2N/A login_proxy_new(client, set, (proxy_callback_t *)callback, context)
2N/A#endif
2N/A/* Free the proxy. This should be called if authentication fails. */
2N/Avoid login_proxy_free(struct login_proxy **proxy);
2N/A
2N/A/* Return TRUE if host/port/destuser combination points to same as current
2N/A connection. */
2N/Abool login_proxy_is_ourself(const struct client *client, const char *host,
2N/A unsigned int port, const char *destuser);
2N/A
2N/A/* Detach proxy from client. This is done after the authentication is
2N/A successful and all that is left is the dummy proxying. */
2N/Avoid login_proxy_detach(struct login_proxy *proxy);
2N/A
2N/A/* STARTTLS command was issued. */
2N/Aint login_proxy_starttls(struct login_proxy *proxy);
2N/A
2N/Astruct istream *login_proxy_get_istream(struct login_proxy *proxy);
2N/Astruct ostream *login_proxy_get_ostream(struct login_proxy *proxy);
2N/A
2N/Aconst char *login_proxy_get_host(const struct login_proxy *proxy) ATTR_PURE;
2N/Aunsigned int login_proxy_get_port(const struct login_proxy *proxy) ATTR_PURE;
2N/Aenum login_proxy_ssl_flags
2N/Alogin_proxy_get_ssl_flags(const struct login_proxy *proxy) ATTR_PURE;
2N/A
2N/Avoid login_proxy_init(void);
2N/Avoid login_proxy_deinit(void);
2N/A
2N/A#endif
2N/A