comparison src/stream/ngx_stream_variables.c @ 6668:5e2821c2de46

Stream: the $bytes_received variable. The variable keeps the number of bytes received from the client.
author Vladimir Homutov <vl@nginx.com>
date Fri, 26 Aug 2016 15:33:02 +0300
parents eb4293155e87
children 164a0824ce20
comparison
equal deleted inserted replaced
6667:33d075b9097d 6668:5e2821c2de46
19 ngx_stream_variable_value_t *v, uintptr_t data); 19 ngx_stream_variable_value_t *v, uintptr_t data);
20 static ngx_int_t ngx_stream_variable_server_addr(ngx_stream_session_t *s, 20 static ngx_int_t ngx_stream_variable_server_addr(ngx_stream_session_t *s,
21 ngx_stream_variable_value_t *v, uintptr_t data); 21 ngx_stream_variable_value_t *v, uintptr_t data);
22 static ngx_int_t ngx_stream_variable_server_port(ngx_stream_session_t *s, 22 static ngx_int_t ngx_stream_variable_server_port(ngx_stream_session_t *s,
23 ngx_stream_variable_value_t *v, uintptr_t data); 23 ngx_stream_variable_value_t *v, uintptr_t data);
24 static ngx_int_t ngx_stream_variable_bytes_sent(ngx_stream_session_t *s, 24 static ngx_int_t ngx_stream_variable_bytes(ngx_stream_session_t *s,
25 ngx_stream_variable_value_t *v, uintptr_t data); 25 ngx_stream_variable_value_t *v, uintptr_t data);
26 static ngx_int_t ngx_stream_variable_connection(ngx_stream_session_t *s, 26 static ngx_int_t ngx_stream_variable_connection(ngx_stream_session_t *s,
27 ngx_stream_variable_value_t *v, uintptr_t data); 27 ngx_stream_variable_value_t *v, uintptr_t data);
28 28
29 static ngx_int_t ngx_stream_variable_nginx_version(ngx_stream_session_t *s, 29 static ngx_int_t ngx_stream_variable_nginx_version(ngx_stream_session_t *s,
55 ngx_stream_variable_server_addr, 0, 0, 0 }, 55 ngx_stream_variable_server_addr, 0, 0, 0 },
56 56
57 { ngx_string("server_port"), NULL, 57 { ngx_string("server_port"), NULL,
58 ngx_stream_variable_server_port, 0, 0, 0 }, 58 ngx_stream_variable_server_port, 0, 0, 0 },
59 59
60 { ngx_string("bytes_sent"), NULL, ngx_stream_variable_bytes_sent, 60 { ngx_string("bytes_sent"), NULL, ngx_stream_variable_bytes,
61 0, 0, 0 }, 61 0, 0, 0 },
62
63 { ngx_string("bytes_received"), NULL, ngx_stream_variable_bytes,
64 1, 0, 0 },
62 65
63 { ngx_string("connection"), NULL, 66 { ngx_string("connection"), NULL,
64 ngx_stream_variable_connection, 0, 0, 0 }, 67 ngx_stream_variable_connection, 0, 0, 0 },
65 68
66 { ngx_string("nginx_version"), NULL, ngx_stream_variable_nginx_version, 69 { ngx_string("nginx_version"), NULL, ngx_stream_variable_nginx_version,
459 return NGX_OK; 462 return NGX_OK;
460 } 463 }
461 464
462 465
463 static ngx_int_t 466 static ngx_int_t
464 ngx_stream_variable_bytes_sent(ngx_stream_session_t *s, 467 ngx_stream_variable_bytes(ngx_stream_session_t *s,
465 ngx_stream_variable_value_t *v, uintptr_t data) 468 ngx_stream_variable_value_t *v, uintptr_t data)
466 { 469 {
467 u_char *p; 470 u_char *p;
468 471
469 p = ngx_pnalloc(s->connection->pool, NGX_OFF_T_LEN); 472 p = ngx_pnalloc(s->connection->pool, NGX_OFF_T_LEN);
470 if (p == NULL) { 473 if (p == NULL) {
471 return NGX_ERROR; 474 return NGX_ERROR;
472 } 475 }
473 476
474 v->len = ngx_sprintf(p, "%O", s->connection->sent) - p; 477 if (data == 1) {
478 v->len = ngx_sprintf(p, "%O", s->received) - p;
479
480 } else {
481 v->len = ngx_sprintf(p, "%O", s->connection->sent) - p;
482 }
483
475 v->valid = 1; 484 v->valid = 1;
476 v->no_cacheable = 0; 485 v->no_cacheable = 0;
477 v->not_found = 0; 486 v->not_found = 0;
478 v->data = p; 487 v->data = p;
479 488