ソースを参照

Add HttpHandler::initRequest for Init and Reset

ithewei 3 年 前
コミット
35adcfed6c
3 ファイル変更18 行追加12 行削除
  1. 16 11
      http/server/HttpHandler.cpp
  2. 1 0
      http/server/HttpHandler.h
  3. 1 1
      http/server/HttpService.cpp

+ 16 - 11
http/server/HttpHandler.cpp

@@ -45,20 +45,11 @@ bool HttpHandler::Init(int http_version, hio_t* io) {
         resp->http_major = req->http_major = 2;
         resp->http_minor = req->http_minor = 0;
     }
-    parser->InitRequest(req.get());
     if (io) {
         writer.reset(new hv::HttpResponseWriter(io, resp));
         writer->status = hv::SocketChannel::CONNECTED;
     }
-    // NOTE: hook http_cb
-    req->http_cb = [this](HttpMessage* msg, http_parser_state state, const char* data, size_t size) {
-        if (state == HP_HEADERS_COMPLETE) {
-            onHeadersComplete();
-        }
-        if (api_handler && api_handler->state_handler) {
-            api_handler->state_handler(getHttpContext(), state, data, size);
-        }
-    };
+    initRequest();
     return true;
 }
 
@@ -66,14 +57,28 @@ void HttpHandler::Reset() {
     state = WANT_RECV;
     req->Reset();
     resp->Reset();
-    parser->InitRequest(req.get());
     ctx = NULL;
     api_handler = NULL;
     closeFile();
     if (writer) {
         writer->Begin();
         writer->onwrite = NULL;
+        writer->onclose = NULL;
     }
+    initRequest();
+}
+
+void HttpHandler::initRequest() {
+    parser->InitRequest(req.get());
+    // NOTE: hook http_cb
+    req->http_cb = [this](HttpMessage* msg, http_parser_state state, const char* data, size_t size) {
+        if (state == HP_HEADERS_COMPLETE) {
+            onHeadersComplete();
+        }
+        if (api_handler && api_handler->state_handler) {
+            api_handler->state_handler(getHttpContext(), state, data, size);
+        }
+    };
 }
 
 bool HttpHandler::SwitchHTTP2() {

+ 1 - 0
http/server/HttpHandler.h

@@ -98,6 +98,7 @@ private:
     bool isFileOpened();
 
     const HttpContextPtr& getHttpContext();
+    void initRequest();
     void onHeadersComplete();
 
     int defaultRequestHandler();

+ 1 - 1
http/server/HttpService.cpp

@@ -9,7 +9,7 @@ void HttpService::AddApi(const char* path, http_method method, const http_handle
     auto iter = api_handlers.find(path);
     if (iter == api_handlers.end()) {
         // add path
-        method_handlers = std::shared_ptr<http_method_handlers>(new http_method_handlers);
+        method_handlers = std::make_shared<http_method_handlers>();
         api_handlers[path] = method_handlers;
     }
     else {