Переглянути джерело

fix #246: set end flag before write

ithewei 3 роки тому
батько
коміт
7e433d3ab8
2 змінених файлів з 7 додано та 5 видалено
  1. 5 5
      http/server/HttpResponseWriter.h
  2. 2 0
      unittest/sizeof_test.cpp

+ 5 - 5
http/server/HttpResponseWriter.h

@@ -10,13 +10,13 @@ class HttpResponseWriter : public SocketChannel {
 public:
 public:
     HttpResponsePtr response;
     HttpResponsePtr response;
     enum State {
     enum State {
-        SEND_BEGIN,
+        SEND_BEGIN = 0,
         SEND_HEADER,
         SEND_HEADER,
         SEND_BODY,
         SEND_BODY,
         SEND_CHUNKED,
         SEND_CHUNKED,
         SEND_CHUNKED_END,
         SEND_CHUNKED_END,
         SEND_END,
         SEND_END,
-    } state;
+    } state: 8, end: 8;
     HttpResponseWriter(hio_t* io, const HttpResponsePtr& resp)
     HttpResponseWriter(hio_t* io, const HttpResponsePtr& resp)
         : SocketChannel(io)
         : SocketChannel(io)
         , response(resp)
         , response(resp)
@@ -32,7 +32,7 @@ public:
     // Begin -> EndHeaders("Transfer-Encoding", "chunked") -> WriteChunked -> WriteChunked -> ... -> End
     // Begin -> EndHeaders("Transfer-Encoding", "chunked") -> WriteChunked -> WriteChunked -> ... -> End
 
 
     int Begin() {
     int Begin() {
-        state = SEND_BEGIN;
+        state = end = SEND_BEGIN;
         return 0;
         return 0;
     }
     }
 
 
@@ -131,8 +131,8 @@ public:
     }
     }
 
 
     int End(const char* buf = NULL, int len = -1) {
     int End(const char* buf = NULL, int len = -1) {
-        if (state == SEND_END) return 0;
-        state = SEND_END;
+        if (end == SEND_END) return 0;
+        end = SEND_END;
 
 
         if (!isConnected()) {
         if (!isConnected()) {
             return -1;
             return -1;

+ 2 - 0
unittest/sizeof_test.cpp

@@ -17,6 +17,7 @@
 #include "HttpContext.h"
 #include "HttpContext.h"
 #include "HttpServer.h"
 #include "HttpServer.h"
 #include "HttpHandler.h"
 #include "HttpHandler.h"
+#include "HttpResponseWriter.h"
 
 
 #include "WebSocketChannel.h"
 #include "WebSocketChannel.h"
 #include "WebSocketParser.h"
 #include "WebSocketParser.h"
@@ -51,6 +52,7 @@ int main() {
     printf("sizeof(class HttpContext)=%lu\n", sizeof(HttpContext));
     printf("sizeof(class HttpContext)=%lu\n", sizeof(HttpContext));
     printf("sizeof(class HttpServer)=%lu\n", sizeof(HttpServer));
     printf("sizeof(class HttpServer)=%lu\n", sizeof(HttpServer));
     printf("sizeof(class HttpHandler)=%lu\n", sizeof(HttpHandler));
     printf("sizeof(class HttpHandler)=%lu\n", sizeof(HttpHandler));
+    printf("sizeof(class HttpResponseWrite)=%lu\n", sizeof(HttpResponseWriter));
     // websocket
     // websocket
     printf("sizeof(class WebSocketChannel)=%lu\n", sizeof(WebSocketChannel));
     printf("sizeof(class WebSocketChannel)=%lu\n", sizeof(WebSocketChannel));
     printf("sizeof(class WebSocketParser)=%lu\n", sizeof(WebSocketParser));
     printf("sizeof(class WebSocketParser)=%lu\n", sizeof(WebSocketParser));