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