diff --git a/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h b/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h index 0ce86303..501004d7 100644 --- a/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h +++ b/examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h @@ -16,12 +16,96 @@ #include #include +#include + +#define NUM_THREADS 100 + + +char request_header[] = "" \ + "GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1\n\r" \ + "Host: net.tutsplus.com\n\r" \ + "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5)" \ + " Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)\n\r" \ + "Accept: text/html,application/xhtml+xml,application/xml; " \ + "q=0.9,*/*;q=0.8\n\r" \ + "Accept-Language: en-us,en;q=0.5\n\r" \ + "Accept-Encoding: gzip,deflate\n\r" \ + "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n\r" \ + "Keep-Alive: 300\n\r" \ + "Connection: keep-alive\n\r" \ + "Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120\n\r" \ + "Pragma: no-cache\n\r" \ + "Cache-Control: no-cache\n\r"; + +char request_uri[] = "/test.pl?param1=test¶2=test2"; + +char request_body[] = ""; + +char response_headers[] = "" \ + "HTTP/1.1 200 OK\n\r" \ + "Content-Type: text/xml; charset=utf-8\n\r" \ + "Content-Length: length\n\r"; + +char response_body[] = "" \ + "\n\r" \ + "\n\r" \ + " \n\r" \ + " \n\r" \ + " string\n\r" \ + " \n\r" \ + " \n\r" \ + "\n\r"; + +char ip[] = "200.249.12.31"; + #include "modsecurity/rule_message.h" #ifndef EXAMPLES_READING_LOGS_VIA_RULE_MESSAGE_READING_LOGS_VIA_RULE_MESSAGE_H_ #define EXAMPLES_READING_LOGS_VIA_RULE_MESSAGE_READING_LOGS_VIA_RULE_MESSAGE_H_ +struct data_ms { + modsecurity::ModSecurity *modsec; + modsecurity::Rules *rules; +}; + + +static void *process_request(void *data) { + struct data_ms *a = (struct data_ms *)data; + modsecurity::ModSecurity *modsec = a->modsec; + modsecurity::Rules *rules = a->rules; + int z = 0; + + for (z = 0; z < 10000; z++) { + modsecurity::Transaction *modsecTransaction = \ + new modsecurity::Transaction(modsec, rules, NULL); + modsecTransaction->processConnection(ip, 12345, "127.0.0.1", 80); + modsecTransaction->processURI(request_uri, "GET", "1.1"); + + usleep(10); + modsecTransaction->addRequestHeader("Host", + "net.tutsplus.com"); + modsecTransaction->processRequestHeaders(); + modsecTransaction->processRequestBody(); + modsecTransaction->addResponseHeader("HTTP/1.1", + "200 OK"); + modsecTransaction->processResponseHeaders(200, "HTTP 1.2"); + modsecTransaction->appendResponseBody( + (const unsigned char*)response_body, + strlen((const char*)response_body)); + modsecTransaction->processResponseBody(); + modsecTransaction->processLogging(); + + delete modsecTransaction; + } + + pthread_exit(NULL); + return NULL; +} + + class ReadingLogsViaRuleMessage { public: ReadingLogsViaRuleMessage(char *request_header, @@ -41,6 +125,11 @@ class ReadingLogsViaRuleMessage { { } int process() { + pthread_t threads[NUM_THREADS]; + int i; + struct data_ms dms; + void *status; + modsecurity::ModSecurity *modsec; modsecurity::Rules *rules; modsecurity::ModSecurityIntervention it; @@ -58,27 +147,24 @@ class ReadingLogsViaRuleMessage { return -1; } - modsecurity::Transaction *modsecTransaction = \ - new modsecurity::Transaction(modsec, rules, NULL); - modsecTransaction->processConnection(m_ip, 12345, "127.0.0.1", 80); - modsecTransaction->processURI(m_request_uri, "GET", "1.1"); + dms.modsec = modsec; + dms.rules = rules; - modsecTransaction->addRequestHeader("Host", - "net.tutsplus.com"); - modsecTransaction->processRequestHeaders(); - modsecTransaction->processRequestBody(); - modsecTransaction->addResponseHeader("HTTP/1.1", - "200 OK"); - modsecTransaction->processResponseHeaders(200, "HTTP 1.2"); - modsecTransaction->appendResponseBody( - (const unsigned char*)m_response_body, - strlen((const char*)m_response_body)); - modsecTransaction->processResponseBody(); - modsecTransaction->processLogging(); + for (i = 0; i < NUM_THREADS; i++) { + pthread_create(&threads[i], NULL, process_request, (void *)&dms); + //process_request((void *)&dms); + } + + usleep(10000); + + for (i=0; i < NUM_THREADS; i++) { + pthread_join(threads[i], &status); + std::cout << "Main: completed thread id :" << i << std::endl; + } - delete modsecTransaction; delete rules; delete modsec; + pthread_exit(NULL); return 0; end: return -1; diff --git a/examples/reading_logs_via_rule_message/simple_request.cc b/examples/reading_logs_via_rule_message/simple_request.cc index 23826f77..302a3874 100644 --- a/examples/reading_logs_via_rule_message/simple_request.cc +++ b/examples/reading_logs_via_rule_message/simple_request.cc @@ -18,60 +18,26 @@ #include #include - #include "examples/reading_logs_via_rule_message/reading_logs_via_rule_message.h" -char request_header[] = "" \ - "GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1\n\r" \ - "Host: net.tutsplus.com\n\r" \ - "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5)" \ - " Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)\n\r" \ - "Accept: text/html,application/xhtml+xml,application/xml; " \ - "q=0.9,*/*;q=0.8\n\r" \ - "Accept-Language: en-us,en;q=0.5\n\r" \ - "Accept-Encoding: gzip,deflate\n\r" \ - "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n\r" \ - "Keep-Alive: 300\n\r" \ - "Connection: keep-alive\n\r" \ - "Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120\n\r" \ - "Pragma: no-cache\n\r" \ - "Cache-Control: no-cache\n\r"; - -char request_uri[] = "/test.pl?param1=test¶2=test2"; - -char request_body[] = ""; - -char response_headers[] = "" \ - "HTTP/1.1 200 OK\n\r" \ - "Content-Type: text/xml; charset=utf-8\n\r" \ - "Content-Length: length\n\r"; - -char response_body[] = "" \ - "\n\r" \ - "\n\r" \ - " \n\r" \ - " \n\r" \ - " string\n\r" \ - " \n\r" \ - " \n\r" \ - "\n\r"; - -char ip[] = "200.249.12.31"; int main(int argc, char **argv) { - (*argv)++; + *argv++; if (*argv == NULL) { - (*argv)--; + *argv--; std::cout << "Use " << *argv << " test-case-file.conf"; std::cout << std::endl << std::endl; return -1; } + std::string rules(*argv); ReadingLogsViaRuleMessage rlvrm(request_header, request_uri, request_body, response_headers, response_body, ip, rules); rlvrm.process(); + + + + pthread_exit(NULL); return 0; } diff --git a/src/collection/backend/in_memory-per_process.cc b/src/collection/backend/in_memory-per_process.cc index 42085208..844eb945 100644 --- a/src/collection/backend/in_memory-per_process.cc +++ b/src/collection/backend/in_memory-per_process.cc @@ -38,10 +38,7 @@ namespace backend { InMemoryPerProcess::InMemoryPerProcess() { this->reserve(1000); - if (pthread_mutex_init(&m_lock, NULL) != 0) - { - printf("\n mutex init failed\n"); - } + pthread_mutex_init(&m_lock, NULL); } InMemoryPerProcess::~InMemoryPerProcess() {