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.
diff --git a/src/session.c b/src/session.c
index c0b86b9..de78e7e 100644
--- a/src/session.c
+++ b/src/session.c
@@ -2222,20 +2222,20 @@
*/
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);