16
16
#include < string>
17
17
#include < memory>
18
18
19
+ #include < unistd.h>
20
+
21
+ #define NUM_THREADS 100
22
+
23
+
24
+ char request_header[] = " " \
25
+ " GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1\n\r " \
26
+ " Host: net.tutsplus.com\n\r " \
27
+ " User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5)" \
28
+ " Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)\n\r " \
29
+ " Accept: text/html,application/xhtml+xml,application/xml; " \
30
+ " q=0.9,*/*;q=0.8\n\r " \
31
+ " Accept-Language: en-us,en;q=0.5\n\r " \
32
+ " Accept-Encoding: gzip,deflate\n\r " \
33
+ " Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\n\r " \
34
+ " Keep-Alive: 300\n\r " \
35
+ " Connection: keep-alive\n\r " \
36
+ " Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120\n\r " \
37
+ " Pragma: no-cache\n\r " \
38
+ " Cache-Control: no-cache\n\r " ;
39
+
40
+ char request_uri[] = " /test.pl?param1=test¶2=test2" ;
41
+
42
+ char request_body[] = " " ;
43
+
44
+ char response_headers[] = " " \
45
+ " HTTP/1.1 200 OK\n\r " \
46
+ " Content-Type: text/xml; charset=utf-8\n\r " \
47
+ " Content-Length: length\n\r " ;
48
+
49
+ char response_body[] = " " \
50
+ " <?xml version=\" 1.0\" encoding=\" utf-8\" ?>\n\r " \
51
+ " <soap:Envelope xmlns:xsi=\" http://www.w3.org/2001/XMLSchema-instance\" " \
52
+ " xmlns:xsd=\" http://www.w3.org/2001/XMLSchema\" " \
53
+ " xmlns:soap=\" http://schemas.xmlsoap.org/soap/envelope/\" >\n\r " \
54
+ " <soap:Body>\n\r " \
55
+ " <EnlightenResponse xmlns=\" http://clearforest.com/\" >\n\r " \
56
+ " <EnlightenResult>string</EnlightenResult>\n\r " \
57
+ " </EnlightenResponse>\n\r " \
58
+ " </soap:Body>\n\r " \
59
+ " </soap:Envelope>\n\r " ;
60
+
61
+ char ip[] = " 200.249.12.31" ;
62
+
19
63
#include " modsecurity/rule_message.h"
20
64
21
65
#ifndef EXAMPLES_READING_LOGS_VIA_RULE_MESSAGE_READING_LOGS_VIA_RULE_MESSAGE_H_
22
66
#define EXAMPLES_READING_LOGS_VIA_RULE_MESSAGE_READING_LOGS_VIA_RULE_MESSAGE_H_
23
67
24
68
69
+ struct data_ms {
70
+ modsecurity::ModSecurity *modsec;
71
+ modsecurity::Rules *rules;
72
+ };
73
+
74
+
75
+ static void *process_request (void *data) {
76
+ struct data_ms *a = (struct data_ms *)data;
77
+ modsecurity::ModSecurity *modsec = a->modsec ;
78
+ modsecurity::Rules *rules = a->rules ;
79
+ int z = 0 ;
80
+
81
+ for (z = 0 ; z < 10000 ; z++) {
82
+ modsecurity::Transaction *modsecTransaction = \
83
+ new modsecurity::Transaction (modsec, rules, NULL );
84
+ modsecTransaction->processConnection (ip, 12345 , " 127.0.0.1" , 80 );
85
+ modsecTransaction->processURI (request_uri, " GET" , " 1.1" );
86
+
87
+ usleep (10 );
88
+ modsecTransaction->addRequestHeader (" Host" ,
89
+ " net.tutsplus.com" );
90
+ modsecTransaction->processRequestHeaders ();
91
+ modsecTransaction->processRequestBody ();
92
+ modsecTransaction->addResponseHeader (" HTTP/1.1" ,
93
+ " 200 OK" );
94
+ modsecTransaction->processResponseHeaders (200 , " HTTP 1.2" );
95
+ modsecTransaction->appendResponseBody (
96
+ (const unsigned char *)response_body,
97
+ strlen ((const char *)response_body));
98
+ modsecTransaction->processResponseBody ();
99
+ modsecTransaction->processLogging ();
100
+
101
+ delete modsecTransaction;
102
+ }
103
+
104
+ pthread_exit (NULL );
105
+ return NULL ;
106
+ }
107
+
108
+
25
109
class ReadingLogsViaRuleMessage {
26
110
public:
27
111
ReadingLogsViaRuleMessage (char *request_header,
@@ -41,6 +125,11 @@ class ReadingLogsViaRuleMessage {
41
125
{ }
42
126
43
127
int process () {
128
+ pthread_t threads[NUM_THREADS];
129
+ int i;
130
+ struct data_ms dms;
131
+ void *status;
132
+
44
133
modsecurity::ModSecurity *modsec;
45
134
modsecurity::Rules *rules;
46
135
modsecurity::ModSecurityIntervention it;
@@ -58,27 +147,24 @@ class ReadingLogsViaRuleMessage {
58
147
return -1 ;
59
148
}
60
149
61
- modsecurity::Transaction *modsecTransaction = \
62
- new modsecurity::Transaction (modsec, rules, NULL );
63
- modsecTransaction->processConnection (m_ip, 12345 , " 127.0.0.1" , 80 );
64
- modsecTransaction->processURI (m_request_uri, " GET" , " 1.1" );
150
+ dms.modsec = modsec;
151
+ dms.rules = rules;
65
152
66
- modsecTransaction->addRequestHeader (" Host" ,
67
- " net.tutsplus.com" );
68
- modsecTransaction->processRequestHeaders ();
69
- modsecTransaction->processRequestBody ();
70
- modsecTransaction->addResponseHeader (" HTTP/1.1" ,
71
- " 200 OK" );
72
- modsecTransaction->processResponseHeaders (200 , " HTTP 1.2" );
73
- modsecTransaction->appendResponseBody (
74
- (const unsigned char *)m_response_body,
75
- strlen ((const char *)m_response_body));
76
- modsecTransaction->processResponseBody ();
77
- modsecTransaction->processLogging ();
153
+ for (i = 0 ; i < NUM_THREADS; i++) {
154
+ pthread_create (&threads[i], NULL , process_request, (void *)&dms);
155
+ // process_request((void *)&dms);
156
+ }
157
+
158
+ usleep (10000 );
159
+
160
+ for (i=0 ; i < NUM_THREADS; i++) {
161
+ pthread_join (threads[i], &status);
162
+ std::cout << " Main: completed thread id :" << i << std::endl;
163
+ }
78
164
79
- delete modsecTransaction;
80
165
delete rules;
81
166
delete modsec;
167
+ pthread_exit (NULL );
82
168
return 0 ;
83
169
end:
84
170
return -1 ;
0 commit comments