comparison src/http/v2/ngx_http_v2_filter_module.c @ 6885:25203fc377fb

Implemented the "server_tokens build" option. Based on a patch by Tom Thorogood.
author Ruslan Ermilov <ru@nginx.com>
date Tue, 31 Jan 2017 12:09:40 +0300
parents d15172ebb400
children afc60bd9008f
comparison
equal deleted inserted replaced
6884:640f03529395 6885:25203fc377fb
146 #endif 146 #endif
147 147
148 static size_t nginx_ver_len = ngx_http_v2_literal_size(NGINX_VER); 148 static size_t nginx_ver_len = ngx_http_v2_literal_size(NGINX_VER);
149 static u_char nginx_ver[ngx_http_v2_literal_size(NGINX_VER)]; 149 static u_char nginx_ver[ngx_http_v2_literal_size(NGINX_VER)];
150 150
151 static size_t nginx_ver_build_len =
152 ngx_http_v2_literal_size(NGINX_VER_BUILD);
153 static u_char nginx_ver_build[ngx_http_v2_literal_size(NGINX_VER_BUILD)];
154
151 if (!r->stream) { 155 if (!r->stream) {
152 return ngx_http_next_header_filter(r); 156 return ngx_http_next_header_filter(r);
153 } 157 }
154 158
155 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, 159 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
230 len = status ? 1 : 1 + ngx_http_v2_literal_size("418"); 234 len = status ? 1 : 1 + ngx_http_v2_literal_size("418");
231 235
232 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); 236 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
233 237
234 if (r->headers_out.server == NULL) { 238 if (r->headers_out.server == NULL) {
235 len += 1 + (clcf->server_tokens ? nginx_ver_len : sizeof(nginx)); 239
240 if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) {
241 len += 1 + nginx_ver_len;
242
243 } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) {
244 len += 1 + nginx_ver_build_len;
245
246 } else {
247 len += 1 + sizeof(nginx);
248 }
236 } 249 }
237 250
238 if (r->headers_out.date == NULL) { 251 if (r->headers_out.date == NULL) {
239 len += 1 + ngx_http_v2_literal_size("Wed, 31 Dec 1986 18:00:00 GMT"); 252 len += 1 + ngx_http_v2_literal_size("Wed, 31 Dec 1986 18:00:00 GMT");
240 } 253 }
418 *pos++ = NGX_HTTP_V2_ENCODE_RAW | 3; 431 *pos++ = NGX_HTTP_V2_ENCODE_RAW | 3;
419 pos = ngx_sprintf(pos, "%03ui", r->headers_out.status); 432 pos = ngx_sprintf(pos, "%03ui", r->headers_out.status);
420 } 433 }
421 434
422 if (r->headers_out.server == NULL) { 435 if (r->headers_out.server == NULL) {
423 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0, 436
424 "http2 output header: \"server: %s\"", 437 if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) {
425 clcf->server_tokens ? NGINX_VER : "nginx"); 438 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
439 "http2 output header: \"server: %s\"",
440 NGINX_VER);
441
442 } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) {
443 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, fc->log, 0,
444 "http2 output header: \"server: %s\"",
445 NGINX_VER_BUILD);
446
447 } else {
448 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, fc->log, 0,
449 "http2 output header: \"server: nginx\"");
450 }
426 451
427 *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_SERVER_INDEX); 452 *pos++ = ngx_http_v2_inc_indexed(NGX_HTTP_V2_SERVER_INDEX);
428 453
429 if (clcf->server_tokens) { 454 if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_ON) {
430 if (nginx_ver[0] == '\0') { 455 if (nginx_ver[0] == '\0') {
431 p = ngx_http_v2_write_value(nginx_ver, (u_char *) NGINX_VER, 456 p = ngx_http_v2_write_value(nginx_ver, (u_char *) NGINX_VER,
432 sizeof(NGINX_VER) - 1, tmp); 457 sizeof(NGINX_VER) - 1, tmp);
433 nginx_ver_len = p - nginx_ver; 458 nginx_ver_len = p - nginx_ver;
434 } 459 }
435 460
436 pos = ngx_cpymem(pos, nginx_ver, nginx_ver_len); 461 pos = ngx_cpymem(pos, nginx_ver, nginx_ver_len);
462
463 } else if (clcf->server_tokens == NGX_HTTP_SERVER_TOKENS_BUILD) {
464 if (nginx_ver_build[0] == '\0') {
465 p = ngx_http_v2_write_value(nginx_ver_build,
466 (u_char *) NGINX_VER_BUILD,
467 sizeof(NGINX_VER_BUILD) - 1, tmp);
468 nginx_ver_build_len = p - nginx_ver_build;
469 }
470
471 pos = ngx_cpymem(pos, nginx_ver_build, nginx_ver_build_len);
437 472
438 } else { 473 } else {
439 pos = ngx_cpymem(pos, nginx, sizeof(nginx)); 474 pos = ngx_cpymem(pos, nginx, sizeof(nginx));
440 } 475 }
441 } 476 }