diff --git a/parser/aws/AWS_Interface.hpp b/parser/aws/AWS_Interface.hpp index 78b528e..99f8736 100644 --- a/parser/aws/AWS_Interface.hpp +++ b/parser/aws/AWS_Interface.hpp @@ -4,6 +4,7 @@ #include "ParserInterface.hpp" #include +#include namespace NCBI { diff --git a/parser/gcp/GCP_Interface.hpp b/parser/gcp/GCP_Interface.hpp index 6c9ec6f..30bdc28 100644 --- a/parser/gcp/GCP_Interface.hpp +++ b/parser/gcp/GCP_Interface.hpp @@ -4,6 +4,7 @@ #include "ParserInterface.hpp" #include +#include namespace NCBI { diff --git a/parser/op/OP_Interface.hpp b/parser/op/OP_Interface.hpp index 742e7bc..cd5ebb1 100644 --- a/parser/op/OP_Interface.hpp +++ b/parser/op/OP_Interface.hpp @@ -4,6 +4,7 @@ #include "ParserInterface.hpp" #include +#include namespace NCBI { diff --git a/parser/op/op_parser.y b/parser/op/op_parser.y index d376ae6..29fe08d 100644 --- a/parser/op/op_parser.y +++ b/parser/op/op_parser.y @@ -67,8 +67,7 @@ log_onprem referer SPACE { op_start_UserAgent( scanner ); } agent { op_pop_state( scanner ); } SPACE forwarded SPACE - port SPACE - req_len + tail { // in case the productions did not find vers/path, set them here to make them at least empty in the ouput SET_VALUE( OPReceiver::vers, EmptyTSTR ); @@ -76,6 +75,33 @@ log_onprem } ; +tail + : tail_elem + | tail SPACE tail_elem + ; + +tail_elem + : port + | req_len + | STR + | I64 + | quoted_freeform + ; + +quoted_freeform + : QUOTE freeform QUOTE; + +freeform + : freeform_elem + | freeform freeform_elem + ; + +freeform_elem + : QSTR + | I64 + | SPACE + ; + log_onprem_err : ip error ; diff --git a/parser/op/op_test_parse.cpp b/parser/op/op_test_parse.cpp index 78d319d..f94bd0b 100644 --- a/parser/op/op_test_parse.cpp +++ b/parser/op/op_test_parse.cpp @@ -399,6 +399,12 @@ TEST_F( OPTestFixture, parse_path_with_url_encoded_slash_in_extension ) ASSERT_EQ( "", extract_value( res, "extension" ) ); } +TEST_F( OPTestFixture, parse_error ) +{ + std::string res = try_to_parse_good( "34.140.130.14 - - [07/May/2025:23:48:24 -0400] \"ftp.ncbi.nih.gov\" \"GET /1000genomes/ftp/phase3/data/HG02025/sequence_read/SRR821984_2.filt.fastq.gz HTTP/1.1\" 200 111014168 0 \"-\" \"Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0\" \"-\" -pct 134311 X \"NCBI-SID: -\" port=443 885 80688 application/x-gzip" ); + ASSERT_EQ( "443", extract_value( res, "port" ) ); +} + extern "C" { int main ( int argc, const char * argv [], const char * envp [] )