Logging embedded Perl return value

davidc nginx-forum at nginx.us
Wed Jul 8 07:26:54 MSD 2009


I tried patching nginx to produce a '210 Custom Response' which is just a 2xx
success response but without any content. As it doesn't use content I thought
it should behave like the existing HTTP_NO_CONTENT response.

Is there any problem in doing it this way? Is there a better way to add it?

diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/modules/ngx_http_headers_filter_module.c nginx-0.7.61/src/http/modules/ngx_http_headers_filter_module.c
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/modules/ngx_http_headers_filter_module.c        2009-03-26 21:34:37.000000000 +0800
--- nginx-0.7.61/src/http/modules/ngx_http_headers_filter_module.c      2009-07-08 10:25:54.000000000 +0800
***************
*** 145,150 ****
--- 145,151 ----
          || r != r->main
          || (r->headers_out.status != NGX_HTTP_OK
              && r->headers_out.status != NGX_HTTP_NO_CONTENT
+             && r->headers_out.status != NGX_HTTP_CUSTOM_RESPONSE
              && r->headers_out.status != NGX_HTTP_MOVED_PERMANENTLY
              && r->headers_out.status != NGX_HTTP_MOVED_TEMPORARILY
              && r->headers_out.status != NGX_HTTP_NOT_MODIFIED))
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/modules/perl/nginx.pm nginx-0.7.61/src/http/modules/perl/nginx.pm
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/modules/perl/nginx.pm   2009-06-22 17:23:35.000000000 +0800
--- nginx-0.7.61/src/http/modules/perl/nginx.pm 2009-07-08 10:23:53.000000000 +0800
***************
*** 16,21 ****
--- 16,22 ----
      HTTP_CREATED
      HTTP_NO_CONTENT
      HTTP_PARTIAL_CONTENT
+     HTTP_CUSTOM_RESPONSE

      HTTP_MOVED_PERMANENTLY
      HTTP_MOVED_TEMPORARILY
***************
*** 61,66 ****
--- 62,68 ----
  use constant HTTP_CREATED                   => 201;
  use constant HTTP_NO_CONTENT                => 204;
  use constant HTTP_PARTIAL_CONTENT           => 206;
+ use constant HTTP_CUSTOM_RESPONSE           => 210;

  use constant HTTP_MOVED_PERMANENTLY         => 301;
  use constant HTTP_MOVED_TEMPORARILY         => 302;
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_header_filter_module.c nginx-0.7.61/src/http/ngx_http_header_filter_module.c
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_header_filter_module.c 2009-05-18 20:58:19.000000000 +0800
--- nginx-0.7.61/src/http/ngx_http_header_filter_module.c       2009-07-08 10:36:55.000000000 +0800
***************
*** 58,67 ****
      ngx_string("204 No Content"),
      ngx_null_string,  /* "205 Reset Content" */
      ngx_string("206 Partial Content"),

      /* ngx_null_string, */  /* "207 Multi-Status" */

! #define NGX_HTTP_LAST_LEVEL_200  207
  #define NGX_HTTP_LEVEL_200       (NGX_HTTP_LAST_LEVEL_200 - 200)

      /* ngx_null_string, */  /* "300 Multiple Choices" */
--- 58,71 ----
      ngx_string("204 No Content"),
      ngx_null_string,  /* "205 Reset Content" */
      ngx_string("206 Partial Content"),
+     ngx_null_string,
+     ngx_null_string,
+     ngx_null_string,
+     ngx_string("210 Custom Response"),

      /* ngx_null_string, */  /* "207 Multi-Status" */

! #define NGX_HTTP_LAST_LEVEL_200  211
  #define NGX_HTTP_LEVEL_200       (NGX_HTTP_LAST_LEVEL_200 - 200)

      /* ngx_null_string, */  /* "300 Multiple Choices" */
***************
*** 220,226 ****
          {
              /* 2XX */

!             if (status == NGX_HTTP_NO_CONTENT) {
                  r->header_only = 1;
                  r->headers_out.content_type.len = 0;
                  r->headers_out.content_type.data = NULL;
--- 224,230 ----
          {
              /* 2XX */

!             if (status == NGX_HTTP_NO_CONTENT || status == NGX_HTTP_CUSTOM_RESPONSE) {
                  r->header_only = 1;
                  r->headers_out.content_type.len = 0;
                  r->headers_out.content_type.data = NULL;
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_request.c nginx-0.7.61/src/http/ngx_http_request.c
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_request.c      2009-06-22 17:31:33.000000000 +0800
--- nginx-0.7.61/src/http/ngx_http_request.c    2009-07-08 10:23:21.000000000 +0800
***************
*** 1852,1858 ****

      if (rc >= NGX_HTTP_SPECIAL_RESPONSE
          || rc == NGX_HTTP_CREATED
!         || rc == NGX_HTTP_NO_CONTENT)
      {
          if (rc == NGX_HTTP_CLOSE) {
              ngx_http_close_request(r, rc);
--- 1852,1859 ----

      if (rc >= NGX_HTTP_SPECIAL_RESPONSE
          || rc == NGX_HTTP_CREATED
!         || rc == NGX_HTTP_NO_CONTENT
!         || rc == NGX_HTTP_CUSTOM_RESPONSE)
      {
          if (rc == NGX_HTTP_CLOSE) {
              ngx_http_close_request(r, rc);
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_request.h nginx-0.7.61/src/http/ngx_http_request.h
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_request.h      2009-05-22 19:05:26.000000000 +0800
--- nginx-0.7.61/src/http/ngx_http_request.h    2009-07-08 10:22:48.000000000 +0800
***************
*** 67,72 ****
--- 67,74 ----
  #define NGX_HTTP_NO_CONTENT                204
  #define NGX_HTTP_PARTIAL_CONTENT           206

+ #define NGX_HTTP_CUSTOM_RESPONSE           210
+
  #define NGX_HTTP_SPECIAL_RESPONSE          300
  #define NGX_HTTP_MOVED_PERMANENTLY         301
  #define NGX_HTTP_MOVED_TEMPORARILY         302
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_script.c nginx-0.7.61/src/http/ngx_http_script.c
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_script.c       2009-04-27 19:32:33.000000000 +0800
--- nginx-0.7.61/src/http/ngx_http_script.c     2009-07-08 10:27:24.000000000 +0800
***************
*** 1281,1287 ****

      e->status = code->status;

!     if (code->status == NGX_HTTP_NO_CONTENT) {
          e->request->header_only = 1;
          e->request->zero_body = 1;
      }
--- 1281,1289 ----

      e->status = code->status;

!     if (code->status == NGX_HTTP_NO_CONTENT
!         || code->status == NGX_HTTP_CUSTOM_RESPONSE) {
!
          e->request->header_only = 1;
          e->request->zero_body = 1;
      }
diff -crB /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_special_response.c nginx-0.7.61/src/http/ngx_http_special_response.c
*** /usr/src/redhat/BUILD/nginx-0.7.61/src/http/ngx_http_special_response.c     2009-05-25 17:06:29.000000000 +0800
--- nginx-0.7.61/src/http/ngx_http_special_response.c   2009-07-08 10:28:09.000000000 +0800
***************
*** 404,410 ****
          err = 0;
          r->header_only = 1;

!     } else if (error == NGX_HTTP_NO_CONTENT) {
          /* 204 */
          err = 0;

--- 404,410 ----
          err = 0;
          r->header_only = 1;

!     } else if (error == NGX_HTTP_NO_CONTENT || error == NGX_HTTP_CUSTOM_RESPONSE) {
          /* 204 */
          err = 0;

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,933,3857#msg-3857






More information about the nginx mailing list