connection.h revision a5b64f1abb1cb0a9718d5bf7f0ae808072237259
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen /* not disconnected yet */
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen /* normal requested disconnection */
9f19a50d5966643c4d1c5ca06868ac2ad31bc4d5Timo Sirainen /* input buffer full */
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen /* connection got disconnected */
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen /* connect() timed out */
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen /* remote didn't send input */
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen /* For UNIX socket clients this gets called immediately (unless
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen delayed_unix_client_connected_callback=TRUE) with success=TRUE,
01937f71b3ae0d5b30b813372f44a3e7e86c89dcTimo Sirainen for IP connections it gets called later:
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen If connect() fails, sets success=FALSE and errno. Streams aren't
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen initialized in that situation either. destroy() is called after
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen the callback. */
9f19a50d5966643c4d1c5ca06868ac2ad31bc4d5Timo Sirainen void (*client_connected)(struct connection *conn, bool success);
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen /* implement one of the input*() methods.
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen They return 1 = ok, continue. 0 = ok, but stop processing more
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen lines, -1 = error, disconnect the client. */
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen int (*input_line)(struct connection *conn, const char *line);
9f19a50d5966643c4d1c5ca06868ac2ad31bc4d5Timo Sirainen int (*input_args)(struct connection *conn, const char *const *args);
d6badc27cd6e8d3398877b6766cb0aaeef3a7800Timo Sirainen /* By default when only input_args() is used, or when
d6badc27cd6e8d3398877b6766cb0aaeef3a7800Timo Sirainen connection_input_line_default() is used, empty lines aren't allowed
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen since it would result in additional args[0] == NULL check. Setting
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen this to TRUE passes it through instead of logging an error. */
d6badc27cd6e8d3398877b6766cb0aaeef3a7800Timo Sirainen /* Don't call client_connected() immediately on
a2f250a332dfc1e6cd4ffd196c621eb9dbf7b8a1Timo Sirainen connection_client_connect() with UNIX sockets. This is mainly
d6badc27cd6e8d3398877b6766cb0aaeef3a7800Timo Sirainen to make the functionality identical with inet sockets, which may
a341c4cdbd4b93ba479f465ad3f569dc82f57312Timo Sirainen simplify the calling code. */
a2f250a332dfc1e6cd4ffd196c621eb9dbf7b8a1Timo Sirainen /* If connect() to UNIX socket fails with EAGAIN, retry for this many
db87d16551d1081ada01f787ea21aa3ed1402c31Timo Sirainen milliseconds before giving up (0 = try once) */
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen /* for IP client: */
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen /* received minor version */
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen enum connection_disconnect_reason disconnect_reason;
d6badc27cd6e8d3398877b6766cb0aaeef3a7800Timo Sirainenvoid connection_init_server(struct connection_list *list,
9f19a50d5966643c4d1c5ca06868ac2ad31bc4d5Timo Sirainenvoid connection_init_client_ip(struct connection_list *list,
96308127e006bb3b1108093bcf4cc1fd9481cb7aTimo Sirainenvoid connection_init_client_unix(struct connection_list *list,
6d931bbce16786df431e9ae8201a78a95084316dTimo Sirainenvoid connection_init_from_streams(struct connection_list *list,
96308127e006bb3b1108093bcf4cc1fd9481cb7aTimo Sirainen struct istream *input, struct ostream *output);
9f19a50d5966643c4d1c5ca06868ac2ad31bc4d5Timo Sirainenint connection_client_connect(struct connection *conn);
61b0637759146621cbb7edcbd0b03a71cfd66dfeTimo Sirainenvoid connection_disconnect(struct connection *conn);
61b0637759146621cbb7edcbd0b03a71cfd66dfeTimo Sirainenvoid connection_deinit(struct connection *conn);
9f19a50d5966643c4d1c5ca06868ac2ad31bc4d5Timo Sirainen/* Returns -1 = disconnected, 0 = nothing new, 1 = something new.
9f19a50d5966643c4d1c5ca06868ac2ad31bc4d5Timo Sirainen If input_full_behavior is ALLOW, may return also -2 = buffer full. */
9f19a50d5966643c4d1c5ca06868ac2ad31bc4d5Timo Sirainenint connection_input_read(struct connection *conn);
9f19a50d5966643c4d1c5ca06868ac2ad31bc4d5Timo Sirainen/* Verify that VERSION input matches what we expect. */
ca98d6a1bbe73499da758a36bfab2963375c8d06Timo Sirainenint connection_verify_version(struct connection *conn, const char *const *args);
741d705983e10046f07ef372b760bcdd169b068aTimo Sirainen/* Returns human-readable reason for why connection was disconnected. */
d6badc27cd6e8d3398877b6766cb0aaeef3a7800Timo Sirainenconst char *connection_disconnect_reason(struct connection *conn);
d6badc27cd6e8d3398877b6766cb0aaeef3a7800Timo Sirainen/* Returns human-readable reason for why connection timed out,
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen e.g. "No input for 10.023 secs". */
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenconst char *connection_input_timeout_reason(struct connection *conn);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenvoid connection_switch_ioloop(struct connection *conn);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenconnection_list_init(const struct connection_settings *set,
741d705983e10046f07ef372b760bcdd169b068aTimo Sirainenvoid connection_list_deinit(struct connection_list **list);
ca98d6a1bbe73499da758a36bfab2963375c8d06Timo Sirainenvoid connection_input_default(struct connection *conn);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainenint connection_input_line_default(struct connection *conn, const char *line);