Skip to content

Commit

Permalink
Stream: allow using the session context inside handlers.
Browse files Browse the repository at this point in the history
Previously, it was not possible to use the stream context
inside ngx_stream_init_connection() handlers.  Now, limit_conn,
access handlers, as well as those added later, can create
their own contexts.
  • Loading branch information
xeioex committed Sep 6, 2016
1 parent 7336c40 commit 41e7bda
Showing 1 changed file with 16 additions and 21 deletions.
37 changes: 16 additions & 21 deletions src/stream/ngx_stream_handler.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ static void ngx_stream_close_connection(ngx_connection_t *c);
static u_char *ngx_stream_log_error(ngx_log_t *log, u_char *buf, size_t len);
static void ngx_stream_proxy_protocol_handler(ngx_event_t *rev);
static void ngx_stream_init_session_handler(ngx_event_t *rev);
static void ngx_stream_init_session(ngx_connection_t *c);

#if (NGX_STREAM_SSL)
static void ngx_stream_ssl_init_connection(ngx_ssl_t *ssl, ngx_connection_t *c);
Expand Down Expand Up @@ -154,6 +153,12 @@ ngx_stream_init_connection(ngx_connection_t *c)
c->log->action = "initializing connection";
c->log_error = NGX_ERROR_INFO;

s->ctx = ngx_pcalloc(c->pool, sizeof(void *) * ngx_stream_max_module);
if (s->ctx == NULL) {
ngx_stream_close_connection(c);
return;
}

cmcf = ngx_stream_get_module_main_conf(s, ngx_stream_core_module);

s->variables = ngx_pcalloc(s->connection->pool,
Expand Down Expand Up @@ -365,27 +370,8 @@ ngx_stream_init_session_handler(ngx_event_t *rev)
}
#endif

ngx_stream_init_session(c);
}


static void
ngx_stream_init_session(ngx_connection_t *c)
{
ngx_stream_session_t *s;
ngx_stream_core_srv_conf_t *cscf;

s = c->data;
c->log->action = "handling client connection";

cscf = ngx_stream_get_module_srv_conf(s, ngx_stream_core_module);

s->ctx = ngx_pcalloc(c->pool, sizeof(void *) * ngx_stream_max_module);
if (s->ctx == NULL) {
ngx_stream_finalize_session(s, NGX_STREAM_INTERNAL_SERVER_ERROR);
return;
}

cscf->handler(s);
}

Expand Down Expand Up @@ -422,6 +408,9 @@ ngx_stream_ssl_init_connection(ngx_ssl_t *ssl, ngx_connection_t *c)
static void
ngx_stream_ssl_handshake_handler(ngx_connection_t *c)
{
ngx_stream_session_t *s;
ngx_stream_core_srv_conf_t *cscf;

if (!c->ssl->handshaked) {
ngx_stream_finalize_session(c->data, NGX_STREAM_INTERNAL_SERVER_ERROR);
return;
Expand All @@ -431,7 +420,13 @@ ngx_stream_ssl_handshake_handler(ngx_connection_t *c)
ngx_del_timer(c->read);
}

ngx_stream_init_session(c);
c->log->action = "handling client connection";

s = c->data;

cscf = ngx_stream_get_module_srv_conf(s, ngx_stream_core_module);

cscf->handler(s);
}

#endif
Expand Down

0 comments on commit 41e7bda

Please sign in to comment.