OSDN Git Service

Added to edit HTTP request/response header.
[ultramonkey-l7/sslproxy.git] / src / sslproxymain.cpp
index 0078a20..05255ed 100644 (file)
@@ -74,11 +74,10 @@ long session_cache_mode;
 long session_cache_size;
 long session_cache_timeout;
 std::string conn_log_flag;
-bool edit_client_msg;
-bool edit_server_msg;
-int x_forwarded_for_mode;
-std::string custom_field;
-
+bool client_packet_edit = DEFAULT_CLIENT_EDIT;
+bool server_packet_edit = DEFAULT_SERVER_EDIT;
+std::list<std::pair<std::string, std::string > > http_request_header;
+std::list<std::pair<std::string, std::string > > http_response_header;
 
 /*!
  * Convert verify option string to intger(#define).
@@ -1196,104 +1195,84 @@ static int getParameters(std::string config_filename)
                        conn_log_flag = DEFAULT_CONN_LOG_FLAG;
                }
 
-               // Get parameter "edit_client_msg".
-               if (Parameter::getInstance().isStringExist(PARAM_COMP_SSLPROXY, "edit_client_msg")) {
-                       std::string edit_client = Parameter::getInstance().getStringValue(PARAM_COMP_SSLPROXY, 
-                                                                        "edit_client_msg");
-                       /*-------- DEBUG LOG --------*/
-                       if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_SSLPROXY_COMMON)) {
-                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_SSLPROXY_COMMON, 40, // XXX fix log
-                                       "function : static int getParameters("
-                                       "std::string config_filename) : "
-                                       "get edit_client_msg OK.");
-                       }
-                       /*------ DEBUG LOG END ------*/
-                       if (edit_client == "") {
-                               LOGGER_PUT_LOG_WARN(LOG_CAT_SSLPROXY_COMMON, 23, // XXX fix log
-                                                   "edit_client_msg parameter is nothing. "
-                                                   "Use default value.");
-                               edit_client_msg = DEFAULT_EDIT_CLIENT_MSG;
-                       } else if (edit_client != "on" && edit_client != "off") {
-                               LOGGER_PUT_LOG_ERROR(LOG_CAT_SSLPROXY_COMMON, 20, // XXX fix log
-                                                    "Invalid edit_client_msg parameter value.");
-                               throw -1;
-                       }
-                       if (edit_client == "on")
-                               edit_client_msg = true;
-                       else
-                               edit_client_msg = false;
-               } else {
-                       LOGGER_PUT_LOG_WARN(LOG_CAT_SSLPROXY_COMMON, 999, // XXX fix log
-                                           "edit_client_msg parameter not found. "
-                                           "Use default value.");
-                       edit_client_msg = DEFAULT_EDIT_CLIENT_MSG;
-               }
-
-               // Get parameter "edit_server_msg".
-               if (Parameter::getInstance().isStringExist(PARAM_COMP_SSLPROXY, "edit_server_msg")) {
-                       std::string edit_server = Parameter::getInstance().getStringValue(PARAM_COMP_SSLPROXY, 
-                                                                        "edit_server_msg");
+               // Get parameter "http_request_header".
+               if (Parameter::getInstance().isStringExist(PARAM_COMP_SSLPROXY, "http_request_header")) {
+                       std::multimap<std::string, std::string> request_map;
+                       Parameter::getInstance().getStringMapValue(PARAM_COMP_SSLPROXY, 
+                           "http_request_header", request_map);
                        /*-------- DEBUG LOG --------*/
                        if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_SSLPROXY_COMMON)) {
-                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_SSLPROXY_COMMON, 40, // XXX fix log
-                                       "function : static int getParameters("
-                                       "std::string config_filename) : "
-                                       "get edit_server_msg OK.");
+                               LOGGER_PUT_LOG_DEBUG(LOG_CAT_SSLPROXY_COMMON, 61, // XXX fix log
+                                   "function : static int getParameters("
+                                   "std::string config_filename) : "
+                                   "get http_request_header OK.");
                        }
                        /*------ DEBUG LOG END ------*/
-                       if (edit_server == "") {
-                               LOGGER_PUT_LOG_WARN(LOG_CAT_SSLPROXY_COMMON, 23, // XXX fix log
-                                                   "edit_server_msg parameter is nothing. "
-                                                   "Use default value.");
-                               edit_server_msg = DEFAULT_EDIT_SERVER_MSG;
-                       } else if (edit_server != "on" && edit_server != "off") {
-                               LOGGER_PUT_LOG_ERROR(LOG_CAT_SSLPROXY_COMMON, 20, // XXX fix log
-                                                    "Invalid edit_server_msg parameter value.");
-                               throw -1;
+                       std::multimap<std::string, std::string>::iterator it  = request_map.begin();
+                       std::multimap<std::string, std::string>::iterator end = request_map.end();
+                       while (it != end) {
+                               int delimiter_pos = it->second.find(':');
+                               if (delimiter_pos == std::string::npos) {
+                                       LOGGER_PUT_LOG_ERROR(LOG_CAT_SSLPROXY_COMMON, 20, // XXX fix log
+                                           "Invalid http_request_header parameter value.");
+                                       throw -1;
+                               }
+                               std::pair<std::string, std::string> header_pair(
+                                   it->second.substr(0, delimiter_pos),
+                                   it->second.substr(delimiter_pos + 1, it->second.size() - delimiter_pos) );
+                               if ( header_pair.first != "set"
+                                 && header_pair.first != "unset"
+                                 && header_pair.first != "add"
+                                 && header_pair.first != "replace" ) {
+                                       LOGGER_PUT_LOG_ERROR(LOG_CAT_SSLPROXY_COMMON, 20, // XXX fix log
+                                           "Invalid http_request_header parameter value.");
+                                       throw -1;
+                               }
+LOGGER_PUT_LOG_ERROR(LOG_CAT_SSLPROXY_COMMON, 20, "read: mode(%s) value(%s)", header_pair.first.c_str(), header_pair.second.c_str());
+                               ::http_request_header.push_back(header_pair);
+                               ::client_packet_edit = true;
+                               it++;
                        }
-                       if (edit_server == "on")
-                               edit_server_msg = true;
-                       else
-                               edit_server_msg = false;
-               } else {
-                       LOGGER_PUT_LOG_WARN(LOG_CAT_SSLPROXY_COMMON, 999, // XXX fix log
-                                           "edit_server_msg parameter not found. "
-                                           "Use default value.");
-                       edit_server_msg = DEFAULT_EDIT_SERVER_MSG;
                }
 
-               // Get parameter "x_forwarded_for_mode".
-               if (Parameter::getInstance().isStringExist(PARAM_COMP_SSLPROXY, "x_forwarded_for_mode")) {
-                       std::string x_forwarded = Parameter::getInstance().getStringValue(PARAM_COMP_SSLPROXY, 
-                                                                               "x_forwarded_for_mode");
+               // Get parameter "http_response_header".
+               if (Parameter::getInstance().isStringExist(PARAM_COMP_SSLPROXY, "http_response_header")) {
+                       std::multimap<std::string, std::string> response_map;
+                       Parameter::getInstance().getStringMapValue(PARAM_COMP_SSLPROXY, 
+                           "http_response_header", response_map);
                        /*-------- DEBUG LOG --------*/
                        if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_SSLPROXY_COMMON)) {
                                LOGGER_PUT_LOG_DEBUG(LOG_CAT_SSLPROXY_COMMON, 61, // XXX fix log
-                                       "function : static int getParameters("
-                                       "std::string config_filename) : "
-                                       "get x_forwarded_for_mode OK.");
+                                   "function : static int getParameters("
+                                   "std::string config_filename) : "
+                                   "get http_response_header OK.");
                        }
                        /*------ DEBUG LOG END ------*/
-                       if (x_forwarded == "") {
-                               LOGGER_PUT_LOG_WARN(LOG_CAT_SSLPROXY_COMMON, 23, // XXX fix log
-                                                   "x_forwarded_for_mode parameter is nothing. "
-                                                   "Use default value.");
-                               x_forwarded_for_mode = DEFAULT_X_FORWARDED_FOR_MODE;
-                       } else if (x_forwarded != "add") {
-                               x_forwarded_for_mode = ADD_X_FORWARDED_FOR;
-                       } else if (x_forwarded != "set") {
-                               x_forwarded_for_mode = SET_X_FORWARDED_FOR;
-                       } else if (x_forwarded != "delete") {
-                               x_forwarded_for_mode = DELETE_X_FORWARDED_FOR;
-                       } else if (x_forwarded != "none") {
-                               x_forwarded_for_mode = NONE_X_FORWARDED_FOR;
-                       } else {
-                               LOGGER_PUT_LOG_ERROR(LOG_CAT_SSLPROXY_COMMON, 20, // XXX fix log
-                                                    "Invalid x_forwarded_for_mode parameter value.");
-                               throw -1;
+                       std::multimap<std::string, std::string>::iterator it  = response_map.begin();
+                       std::multimap<std::string, std::string>::iterator end = response_map.end();
+                       while (it != end) {
+                               int delimiter_pos = it->second.find(':');
+                               if (delimiter_pos == std::string::npos) {
+                                       LOGGER_PUT_LOG_ERROR(LOG_CAT_SSLPROXY_COMMON, 20, // XXX fix log
+                                           "Invalid http_response_header parameter value.");
+                                       throw -1;
+                               }
+                               std::pair<std::string, std::string> header_pair(
+                                   it->second.substr(0, delimiter_pos),
+                                   it->second.substr(delimiter_pos + 1, it->second.size() - delimiter_pos) );
+                               if ( header_pair.first != "set"
+                                 && header_pair.first != "unset"
+                                 && header_pair.first != "add"
+                                 && header_pair.first != "replace" ) {
+                                       LOGGER_PUT_LOG_ERROR(LOG_CAT_SSLPROXY_COMMON, 20, // XXX fix log
+                                           "Invalid http_response_header parameter value.");
+                                       throw -1;
+                               }
+LOGGER_PUT_LOG_ERROR(LOG_CAT_SSLPROXY_COMMON, 20, "read: mode(%s) value(%s)", header_pair.first.c_str(), header_pair.second.c_str());
+                               ::http_response_header.push_back(header_pair);
+                               ::server_packet_edit = true;
+                               it++;
                        }
-               } else {
-                       x_forwarded_for_mode = DEFAULT_X_FORWARDED_FOR_MODE;
                }
        } catch (int e) {
                /*-------- DEBUG LOG --------*/