@@ -202,7 +202,7 @@ int wafie_process_intervention(WafieEvaluationRequest *request) {
202202 fprintf (stdout , "[libwafie.wafie_process_intervention.protection.id: %d] intervention triggered \n" ,
203203 request -> protection_id );
204204 if (intervention .log != NULL ) {
205- fprintf (stdout , "%s\n" , intervention .log );
205+ fprintf (stdout , "[intervention.log] %s\n" , intervention .log );
206206 free (intervention .log );
207207 intervention .log = NULL ;
208208 }
@@ -225,7 +225,7 @@ int wafie_process_intervention(WafieEvaluationRequest *request) {
225225 return 0 ;
226226}
227227
228- // process headers
228+ // process request headers
229229int wafie_process_request_headers (WafieEvaluationRequest * request ) {
230230 if (request -> transaction == NULL ) {
231231 fprintf (stdout , "[libwafie.wafie_process_request_headers.protection.id: %d] transaction is NULL, skipping \n" ,
@@ -261,12 +261,13 @@ int wafie_process_request_headers(WafieEvaluationRequest *request) {
261261 if (intervention_status != 0 ) {
262262 goto finish_processing ;
263263 }
264- for (size_t i = 0 ; i < request -> headers_count ; i ++ ) {
265- msc_add_request_header (request -> transaction , request -> headers [i ].key , request -> headers [i ].value );
264+ for (size_t i = 0 ; i < request -> request_headers_count ; i ++ ) {
265+ msc_add_request_header (request -> transaction , request -> request_headers [i ].key ,
266+ request -> request_headers [i ].value );
266267 fprintf (stdout , "[libwafie.wafie_process_request_headers.protection.id: %d] header -> %s: %s\n" ,
267268 request -> protection_id ,
268- (const char * ) request -> headers [i ].key ,
269- (const char * ) request -> headers [i ].value );
269+ (const char * ) request -> request_headers [i ].key ,
270+ (const char * ) request -> request_headers [i ].value );
270271 }
271272 fprintf (stdout , "[libwafie.wafie_process_request_headers.protection.id: %d] processing headers\n" ,
272273 request -> protection_id );
@@ -294,7 +295,7 @@ int wafie_process_request_headers(WafieEvaluationRequest *request) {
294295 return intervention_status ;
295296}
296297
297- // process body
298+ // process request body
298299int wafie_process_request_body (WafieEvaluationRequest * request ) {
299300 if (request -> transaction == NULL ) {
300301 fprintf (stdout , "[libwafie.wafie_process_request_body.protection.id: %d] transaction is NULL, skipping \n" ,
@@ -304,28 +305,144 @@ int wafie_process_request_body(WafieEvaluationRequest *request) {
304305 struct timespec start , end ;
305306 int intervention_status = 0 ;
306307 // process request body
307- if (request -> body != NULL ) {
308+ if (request -> request_body != NULL ) {
308309 fprintf (stdout , "[libwafie.wafie_process_request_body.protection.id: %d] processing request\n" ,
309310 request -> protection_id );
310311 clock_gettime (CLOCK_MONOTONIC , & start );
311312 // append request body
312- msc_append_request_body (request -> transaction ,
313- (const unsigned char * ) request -> body ,
314- strlen (request -> body ));
313+ int const res = msc_append_request_body (request -> transaction ,
314+ (const unsigned char * ) request -> request_body ,
315+ strlen (request -> request_body ));
316+ if (res == 0 ) {
317+ fprintf (
318+ stdout ,
319+ "[libwafie.wafie_process_request_body.protection.id: %d] append request body failed return: %d\n" ,
320+ request -> protection_id , res );
321+ }
315322 // process request body
316323 msc_process_request_body (request -> transaction );
317324 // check for intervention
318325 intervention_status = wafie_process_intervention (request );
319326 clock_gettime (CLOCK_MONOTONIC , & end );
320327
321- long long elapsed_ns = (end .tv_sec - start .tv_sec ) * 1000000000LL + (end .tv_nsec - start .tv_nsec );
322- double elapsed_ms = elapsed_ns / 1000000.0 ;
328+ long long const elapsed_ns = (end .tv_sec - start .tv_sec ) * 1000000000LL + (end .tv_nsec - start .tv_nsec );
329+ double const elapsed_ms = elapsed_ns / 1000000.0 ;
323330 fprintf (stdout , "[libwafie.wafie_process_request_body.protection.id: %d] processing request took %.3f ms\n" ,
324331 request -> protection_id , elapsed_ms );
325332
326333 if (intervention_status != 0 ) {
327334 return intervention_status ;
328335 }
336+ } else {
337+ fprintf (stdout , "[libwafie.wafie_process_request_body.protection.id: %d] request body NULL, skipping \n" ,
338+ request -> protection_id );
339+ }
340+ return intervention_status ;
341+ }
342+
343+ // process response headers
344+ int wafie_process_response_headers (WafieEvaluationRequest * request ) {
345+ if (request -> transaction == NULL ) {
346+ fprintf (stdout , "[libwafie.wafie_process_response_headers.protection.id: %d] transaction is NULL, skipping \n" ,
347+ request -> protection_id );
348+ return 0 ;
349+ }
350+ if (request -> response_headers_count == 0 ) {
351+ fprintf (stdout , "[libwafie.wafie_process_response_headers.protection.id: %d] no response headers, skipping \n" ,
352+ request -> protection_id );
353+ return 0 ;
354+ }
355+ if (request -> response_code == 0 ) {
356+ fprintf (stdout , "[libwafie.wafie_process_response_headers.protection.id: %d] no response code, skipping \n" ,
357+ request -> protection_id );
358+ return 0 ;
359+ }
360+ if (request -> protocol == NULL ) {
361+ fprintf (stdout , "[libwafie.wafie_process_response_headers.protection.id: %d] no response protocol, skipping \n" ,
362+ request -> protection_id );
363+ return 0 ;
364+ }
365+ struct timespec start , end ;
366+ clock_gettime (CLOCK_MONOTONIC , & start );
367+ fprintf (stdout , "[libwafie.wafie_process_response_headers.protection.id: %d] processing request \n" ,
368+ request -> protection_id );
369+ int intervention_status = 0 ;
370+ // add response headers to transaction
371+ for (size_t i = 0 ; i < request -> response_headers_count ; i ++ ) {
372+ msc_add_response_header (request -> transaction , request -> response_headers [i ].key ,
373+ request -> response_headers [i ].value );
374+ fprintf (stdout , "[libwafie.wafie_process_response_headers.protection.id: %d] header -> %s: %s\n" ,
375+ request -> protection_id ,
376+ (const char * ) request -> response_headers [i ].key ,
377+ (const char * ) request -> response_headers [i ].value );
378+ }
379+ fprintf (stdout , "[libwafie.wafie_process_response_headers.protection.id: %d] processing headers\n" ,
380+ request -> protection_id );
381+ // process response headers phase
382+ msc_process_response_headers (request -> transaction , request -> response_code , request -> protocol );
383+ intervention_status = wafie_process_intervention (request );
384+ if (intervention_status != 0 ) {
385+ goto finish_processing ;
386+ }
387+ // process response body phase
388+ fprintf (stdout , "[libwafie.wafie_process_response_headers.protection.id: %d] processing body\n" ,
389+ request -> protection_id );
390+ msc_process_response_body (request -> transaction );
391+ intervention_status = wafie_process_intervention (request );
392+ // unconditionally finish processing once intervention detected
393+ finish_processing :
394+ clock_gettime (CLOCK_MONOTONIC , & end );
395+ long long elapsed_ns = (end .tv_sec - start .tv_sec ) * 1000000000LL + (end .tv_nsec - start .tv_nsec );
396+ double elapsed_ms = elapsed_ns / 1000000.0 ;
397+ fprintf (
398+ stdout , "[libwafie.wafie_process_response_headers.protection.id: %d] processing request took %.3f ms\n" ,
399+ request -> protection_id , elapsed_ms );
400+ fprintf (stdout , "[libwafie.wafie_process_response_headers.protection.id: %d] intervention status: %d\n" ,
401+ request -> protection_id , intervention_status );
402+ return intervention_status ;
403+ }
404+
405+ // process request body
406+ int wafie_process_response_body (WafieEvaluationRequest * request ) {
407+ if (request -> transaction == NULL ) {
408+ fprintf (stdout , "[libwafie.wafie_process_response_body.protection.id: %d] transaction is NULL, skipping \n" ,
409+ request -> protection_id );
410+ return 0 ;
411+ }
412+ struct timespec start , end ;
413+ int intervention_status = 0 ;
414+ // process request body
415+ if (request -> response_body != NULL ) {
416+ fprintf (stdout , "[libwafie.wafie_process_response_body.protection.id: %d] processing request\n" ,
417+ request -> protection_id );
418+ clock_gettime (CLOCK_MONOTONIC , & start );
419+ // append request body
420+ int const res = msc_append_response_body (request -> transaction ,
421+ (const unsigned char * ) request -> response_body ,
422+ strlen (request -> response_body ));
423+ if (res == 0 ) {
424+ fprintf (
425+ stdout ,
426+ "[libwafie.wafie_process_response_body.protection.id: %d] append response body failed return: %d\n" ,
427+ request -> protection_id , res );
428+ }
429+ // process request body
430+ msc_process_response_body (request -> transaction );
431+ // check for intervention
432+ intervention_status = wafie_process_intervention (request );
433+ clock_gettime (CLOCK_MONOTONIC , & end );
434+
435+ long long const elapsed_ns = (end .tv_sec - start .tv_sec ) * 1000000000LL + (end .tv_nsec - start .tv_nsec );
436+ double const elapsed_ms = elapsed_ns / 1000000.0 ;
437+ fprintf (stdout , "[libwafie.wafie_process_response_body.protection.id: %d] processing request took %.3f ms\n" ,
438+ request -> protection_id , elapsed_ms );
439+
440+ if (intervention_status != 0 ) {
441+ return intervention_status ;
442+ }
443+ } else {
444+ fprintf (stdout , "[libwafie.wafie_process_response_body.protection.id: %d] response body NULL, skipping \n" ,
445+ request -> protection_id );
329446 }
330447 return intervention_status ;
331448}
0 commit comments