OSDN Git Service

Merge branch 'packet_edit' into autotools-fix(releng)
[ultramonkey-l7/sslproxy.git] / src / sslproxymain.cpp
index e561b87..56ad3bd 100644 (file)
@@ -74,6 +74,10 @@ long session_cache_mode;
 long session_cache_size;
 long session_cache_timeout;
 std::string conn_log_flag;
+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).
@@ -1190,6 +1194,84 @@ static int getParameters(std::string config_filename)
                                            "Use default value.");
                        conn_log_flag = DEFAULT_CONN_LOG_FLAG;
                }
+
+               // 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, 101,
+                                   "function : static int getParameters("
+                                   "std::string config_filename) : "
+                                   "get http_request_header OK.");
+                       }
+                       /*------ DEBUG LOG END ------*/
+                       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, 50,
+                                           "Invalid http_request_header parameter value.(no delimiter)");
+                                       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, 51,
+                                           "Invalid http_request_header parameter value.(invalid type)");
+                                       throw -1;
+                               }
+                               ::http_request_header.push_back(header_pair);
+                               ::client_packet_edit = true;
+                               it++;
+                       }
+               }
+
+               // 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, 102,
+                                   "function : static int getParameters("
+                                   "std::string config_filename) : "
+                                   "get http_response_header OK.");
+                       }
+                       /*------ DEBUG LOG END ------*/
+                       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, 52,
+                                           "Invalid http_response_header parameter value.(no delimiter)");
+                                       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, 53,
+                                           "Invalid http_response_header parameter value.(invalid type)");
+                                       throw -1;
+                               }
+                               ::http_response_header.push_back(header_pair);
+                               ::server_packet_edit = true;
+                               it++;
+                       }
+               }
        } catch (int e) {
                /*-------- DEBUG LOG --------*/
                if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_SSLPROXY_COMMON)) {
@@ -1504,7 +1586,7 @@ static void usage(void)
        /*------ DEBUG LOG END ------*/
 
        std::cerr << "Usage   : " << "sslproxy <target_id> <config_filename>" << std::endl;
-       std::cerr << "Example : " << "sslproxy target_1 /etc/l7vs/sslproxy/sslproxy.target_1.cf" << std::endl;
+       std::cerr << "Example : " << "sslproxy target_1 /etc/l7vs/sslproxy/sslproxy.target.cf" << std::endl;
 
        /*-------- DEBUG LOG --------*/
        if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_SSLPROXY_COMMON)) {