OSDN Git Service

Ignore packet of not first HTTP header message. maint-http-parser-fix
authorKohei TANUMA <tanuma@users.sourceforge.jp>
Thu, 1 Oct 2009 08:33:22 +0000 (17:33 +0900)
committerTATEISHI Katsuyuki <kt@wheel.jp>
Fri, 2 Oct 2009 08:12:09 +0000 (17:12 +0900)
src/http_message.cpp
src/http_request.cpp
src/http_response.cpp
src/packet_editor.cpp

index 0afd563..99a7dcb 100644 (file)
@@ -456,6 +456,7 @@ void http_message::parse(std::string message)
         }
     }
     catch (...) {
+        this->_body.clear();
         LOGGER_PUT_LOG_INFO(LOG_CAT_PACKET_EDIT_HTTP, 39,
         "Exception occured by parsing HTTP message.");
     }
index b386915..14207bb 100644 (file)
@@ -544,6 +544,9 @@ void http_request::parse(std::string request)
         }
     }
     catch (...) {
+        this->_method.clear();
+        this->_request_uri.clear();
+        this->_http_version.clear();
         LOGGER_PUT_LOG_INFO(LOG_CAT_PACKET_EDIT_HTTP, 14,
         "Exception occured by parsing HTTP request.");
     }
index 12f9262..fdd818e 100644 (file)
@@ -530,6 +530,9 @@ void http_response::parse(std::string response)
         }
     }
     catch (...) {
+        this->_http_version.clear();
+        this->_status_code.clear();
+        this->_reason_phrase.clear();
         LOGGER_PUT_LOG_INFO(LOG_CAT_PACKET_EDIT_HTTP, 31,
         "Exception occured by parsing HTTP response.");
     }
index 4a05533..629a140 100644 (file)
@@ -80,6 +80,11 @@ void packet_editor::edit_client(char* client_msg, size_t& client_length)
     it  = ::http_request_header.begin();
     end = ::http_request_header.end();
     http_request request(std::string(client_msg, client_length));
+
+    // Ignore when client_msg is not HTTP message
+    if (request.method().empty())
+        goto packet_edit_out;
+
     for (;it != end; ++it) {
         // Set request header field
         if (it->first == "set") {
@@ -138,6 +143,8 @@ void packet_editor::edit_client(char* client_msg, size_t& client_length)
      * Insert other protocol editor.
      */
 
+packet_edit_out:
+
     if (request.modified()) {
         std::string edited = request.as_string();
         // New client message is too long (over buffer size)
@@ -178,6 +185,11 @@ void packet_editor::edit_server(char* server_msg, size_t& server_length)
     it  = ::http_response_header.begin();
     end = ::http_response_header.end();
     http_response response(std::string(server_msg, server_length));
+
+    // Ignore when server_msg is not HTTP message
+    if (response.http_version().empty())
+        goto packet_edit_out;
+
     for (;it != end; ++it) {
         // Set request header field
         if (it->first == "set") {
@@ -236,6 +248,8 @@ void packet_editor::edit_server(char* server_msg, size_t& server_length)
      * Insert other protocol editor.
      */
 
+packet_edit_out:
+
     if (response.modified()) {
         std::string edited = response.as_string();
         // New server message is too long (over buffer size)