mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-08 22:37:27 +00:00
[MINOR] new function stream_int_cond_close()
This one will be used to conditionally send a message upon a close on a stream interface. It will not overwrite any existing data.
This commit is contained in:
parent
7c96f678fa
commit
5d881d0f3a
@ -32,6 +32,7 @@
|
||||
int stream_int_check_timeouts(struct stream_interface *si);
|
||||
void stream_int_report_error(struct stream_interface *si);
|
||||
void stream_int_retnclose(struct stream_interface *si, const struct chunk *msg);
|
||||
void stream_int_cond_close(struct stream_interface *si, const struct chunk *msg);
|
||||
|
||||
/* functions used when running a stream interface as a task */
|
||||
void stream_int_update(struct stream_interface *si);
|
||||
|
@ -80,6 +80,28 @@ void stream_int_retnclose(struct stream_interface *si, const struct chunk *msg)
|
||||
buffer_auto_close(si->ob);
|
||||
}
|
||||
|
||||
/* This function aborts all of the client's requests and stops the server's
|
||||
* response with the data that are already present. If the response buffer
|
||||
* empty, then the message in arguments will be sent. This ensures that
|
||||
* we won't mix an HTTP response with pending data. The buffer is marked for
|
||||
* read shutdown on the server side to protect the message or any pending
|
||||
* data, and the buffer write is enabled. The message is contained in a
|
||||
* "chunk". If it is null, then an empty message is used. The reply buffer
|
||||
* doesn't need to be empty before this. The goal of this function is to
|
||||
* return error messages to a client but only when it is possible.
|
||||
*/
|
||||
void stream_int_cond_close(struct stream_interface *si, const struct chunk *msg)
|
||||
{
|
||||
buffer_abort(si->ib);
|
||||
buffer_erase(si->ib); /* remove any pending request */
|
||||
buffer_shutr_now(si->ob);
|
||||
if (!si->ob->l && msg && msg->len)
|
||||
buffer_write(si->ob, msg->str, msg->len);
|
||||
|
||||
si->ob->wex = tick_add_ifset(now_ms, si->ob->wto);
|
||||
buffer_auto_close(si->ob);
|
||||
}
|
||||
|
||||
/* default update function for scheduled tasks, not used for embedded tasks */
|
||||
void stream_int_update(struct stream_interface *si)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user