From b44c873d61138c70cede03dbee2170b4c45e7511 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 31 Dec 2013 23:16:50 +0100 Subject: [PATCH] MEDIUM: session: prepare to support earlier transitions to the established state At the moment it is possible in sess_prepare_conn_req() to switch to the established state when the target is an applet. But sess_update_stream_int() will soon also have the ability to set the established state via connect_server() when a connection is reused, leading to a synchronous connect. So prepare the code to handle this SI_ST_ASS -> SI_ST_EST transition, which really matches what's done in the lower layers. --- src/session.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/session.c b/src/session.c index c0b86b9b7..de78e7e27 100644 --- a/src/session.c +++ b/src/session.c @@ -2222,20 +2222,20 @@ struct task *process_session(struct task *t) */ if (s->si[1].state != SI_ST_REQ) sess_update_stream_int(s, &s->si[1]); - if (s->si[1].state == SI_ST_REQ) { + if (s->si[1].state == SI_ST_REQ) sess_prepare_conn_req(s, &s->si[1]); - /* applets directly go to the ESTABLISHED state */ - if (unlikely(s->si[1].state == SI_ST_EST)) - sess_establish(s, &s->si[1]); + /* applets directly go to the ESTABLISHED state */ + if (unlikely(s->si[1].state == SI_ST_EST)) + sess_establish(s, &s->si[1]); - /* Now we can add the server name to a header (if requested) */ - /* check for HTTP mode and proxy server_name_hdr_name != NULL */ - if ((s->flags & SN_BE_ASSIGNED) && - (s->be->mode == PR_MODE_HTTP) && - (s->be->server_id_hdr_name != NULL && objt_server(s->target))) { - http_send_name_header(&s->txn, s->be, objt_server(s->target)->id); - } + /* Now we can add the server name to a header (if requested) */ + /* check for HTTP mode and proxy server_name_hdr_name != NULL */ + if ((s->si[1].state >= SI_ST_CON) && + (s->be->server_id_hdr_name != NULL) && + (s->be->mode == PR_MODE_HTTP) && + objt_server(s->target)) { + http_send_name_header(&s->txn, s->be, objt_server(s->target)->id); } srv = objt_server(s->target);