Welcome! Log In Create A New Profile

Advanced

[nginx] Stream: allow using the session context inside handlers.

Dmitry Volyntsev
September 07, 2016 11:30AM
details: http://hg.nginx.org/nginx/rev/db422604ceb0
branches:
changeset: 6682:db422604ceb0
user: Dmitry Volyntsev <xeioex@nginx.com>
date: Tue Sep 06 21:28:17 2016 +0300
description:
Stream: allow using the session context inside handlers.

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.

diffstat:

src/stream/ngx_stream_handler.c | 37 ++++++++++++++++---------------------
1 files changed, 16 insertions(+), 21 deletions(-)

diffs (77 lines):

diff -r b9f78a4e3597 -r db422604ceb0 src/stream/ngx_stream_handler.c
--- a/src/stream/ngx_stream_handler.c Tue Sep 06 21:28:16 2016 +0300
+++ b/src/stream/ngx_stream_handler.c Tue Sep 06 21:28:17 2016 +0300
@@ -15,7 +15,6 @@ static void ngx_stream_close_connection(
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);
@@ -154,6 +153,12 @@ ngx_stream_init_connection(ngx_connectio
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,
@@ -365,27 +370,8 @@ ngx_stream_init_session_handler(ngx_even
}
#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);
}

@@ -422,6 +408,9 @@ ngx_stream_ssl_init_connection(ngx_ssl_t
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;
@@ -431,7 +420,13 @@ ngx_stream_ssl_handshake_handler(ngx_con
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

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] Stream: allow using the session context inside handlers.

Dmitry Volyntsev 221 September 07, 2016 11:30AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 280
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready