72 static apg_uint uiGetMsgs(INPUT* spInput);
73 static apg_uint uiGetStats(INPUT* spInput, OUTPUT* spOuput,
apg_uint uiLevel);
74 static apg_uint uiGetTimes(INPUT* spInput, OUTPUT* spOutput,
apg_uint uiParserLevel);
75 static void* vpGetParser(
void* vpMemCtx,
apg_uint uiLevel);
76 static void vDisplayResults(
apg_uint uiParserCount, OUTPUT* spOutput);
79 char* cpMgsText =
"TortureTests.txt";
85 void* vpaParserCtx[uiParserCount];
86 TIME_INFO saTimeInfo[uiParserCount];
87 STATS_INFO saStatsInfo[uiParserCount];
89 fprintf(spOut,
"*** main: SIP testing: begin\n");
96 sInput.vpVecMsgs =
vpVecCtor(sInput.vpMemCtx,
sizeof(MSG), 100);
100 sInput.uiParserCount = uiParserCount;
101 sInput.uiTimeRepetitions = 1000;
102 sInput.vppParsers = &vpaParserCtx[0];
103 sInput.cpMsgsTextFile = cpMgsText;
106 sOutput.spStatsResults = &saStatsInfo[0];
107 sOutput.spTimeResults = &saTimeInfo[0];
110 uiTest = uiGetMsgs(&sInput);
114 for(i = 0; i < sInput.uiParserCount; i++){
115 sInput.vppParsers[i] = vpGetParser(sInput.vpMemCtx, i);
122 for(i = 0; i < sInput.uiParserCount; i++){
123 uiTest = uiGetStats(&sInput, &sOutput, i);
128 sOutput.spStatsResults = NULL;
132 fprintf(spOut,
"\n*** Time tests running - this may take a few moments ...\n");
133 for(i = 0; i < sInput.uiParserCount; i++){
134 uiTest = uiGetTimes(&sInput, &sOutput, i);
139 vDisplayResults(uiParserCount, &sOutput);
142 fprintf(spOut,
"\n");
143 fprintf(spOut,
"*** main: SIP testing: end: EXIT_SUCCESS\n");
147 static apg_uint uiGetStats(INPUT* spInput, OUTPUT* spOutput,
apg_uint uiParserLevel){
150 FILE* spOut = stdout;
151 void* vpParser = spInput->vppParsers[uiParserLevel];
152 apg_uint uiStatsBufferSize = 100000;
153 char caStatsBuffer[uiStatsBufferSize];
155 STATS_INFO* spStatsInfo = &spOutput->spStatsResults[uiParserLevel];
159 fprintf(spOut,
"*** PARSER STATISTICS: statistics not available\n");
164 fprintf(spOut,
"\n");
165 fprintf(spOut,
"*** PARSER STATISTICS: parser level: %u\n", (
apg_uint)uiParserLevel);
166 for(i = 0; i < spInput->uiMsgCount; i++){
168 spInput->spMsgs[i].acpMsg, spInput->spMsgs[i].uiLength, NULL);
169 if(!uiTest){fprintf(spOut,
"\n - SIP MESSAGE = %u: PARSER FAILED: parser level: %u\n",
175 fprintf(spOut,
"*** PARSER STATISTICS: message count: %u\n", (
apg_uint)spInput->uiMsgCount);
177 fprintf(spOut,
"*** PARSER STATISTICS: buffer size: needed: %u: have: %u\n",
179 if(uiTest <= uiStatsBufferSize){
181 fprintf(spOut,
"*** PARSER STATISTICS:\n");
184 spStatsInfo->uiaNodeStats[0] = spStats->
sRnm.
uiTotal;
185 spStatsInfo->uiaNodeStats[1] = spStats->
sUdt.
uiTotal;
186 spStatsInfo->uiaNodeStats[2] = spStats->
sRep.
uiTotal;
187 spStatsInfo->uiaNodeStats[3] = spStats->
sAlt.
uiTotal;
188 spStatsInfo->uiaNodeStats[4] = spStats->
sCat.
uiTotal;
189 spStatsInfo->uiaNodeStats[5] = spStats->
sAnd.
uiTotal;
190 spStatsInfo->uiaNodeStats[6] = spStats->
sNot.
uiTotal;
191 spStatsInfo->uiaNodeStats[7] = spStats->
sTrg.
uiTotal;
192 spStatsInfo->uiaNodeStats[8] = spStats->
sTbs.
uiTotal;
193 spStatsInfo->uiaNodeStats[9] = spStats->
sTls.
uiTotal;
196 fprintf(spOut,
"*** PARSER STATISTICS: insufficient buffer size: needed: %u: have: %u\n",
213 static apg_uint uiGetTimes(INPUT* spInput, OUTPUT* spOutput,
apg_uint uiParserLevel){
219 double dDuration = 0.0;
220 FILE* spOut = stdout;
223 if(spInput->uiTimeRepetitions > uiRepsMax){
224 fprintf(spOut,
"*** uiGetTimes: uiReps = %u: reduced to uiRepsMax = %u\n",
226 spInput->uiTimeRepetitions = uiRepsMax;
232 for(j = 0; j < spInput->uiTimeRepetitions; j++){
233 for(i = 0; i < spInput->uiMsgCount; i++){
235 RULE_SIPGRAMMAR_SIP_MESSAGE, spInput->spMsgs[i].acpMsg, spInput->spMsgs[i].uiLength, NULL);
237 fprintf(spOut,
"\n - SIP MESSAGE = %u: PARSER FAILED\n", (
apg_uint)i);
241 uiMsgChars += spInput->spMsgs[i].uiLength;
249 spOutput->spTimeResults[uiParserLevel].dTime = dDuration;
250 spOutput->spTimeResults[uiParserLevel].uiMsgs = uiMsgs;
251 spOutput->spTimeResults[uiParserLevel].uiMsgChars = uiMsgChars;
252 fprintf(spOut,
"\n");
253 fprintf(spOut,
"*** uiGetTimes: time(msec): %1.4G\n", dDuration);
254 fprintf(spOut,
" uiGetTimes: messages: %u:\n", (
apg_uint)uiMsgs);
255 fprintf(spOut,
" uiGetTimes: message characters: %u:\n", (
apg_uint)uiMsgChars);
256 fprintf(spOut,
" uiGetTimes: time(msec)/msg: %1.4G\n", dDuration/(
double)uiMsgs);
257 fprintf(spOut,
" uiGetTimes: time(msec)/char: %1.4G\n", dDuration/(
double)uiMsgChars);
261 static void* vpGetParser(
void* vpMemCtx,
apg_uint uiLevel){
263 void* vpParser = NULL;
269 memset((
void*)saGrammar1UdtLib, 0,
sizeof(
APG_CALLBACK) * UDT_COUNT_GRAMMAR1);
270 memset((
void*)saGrammar2UdtLib, 0,
sizeof(
APG_CALLBACK) * UDT_COUNT_GRAMMAR2);
271 memset((
void*)saGrammar3UdtLib, 0,
sizeof(
APG_CALLBACK) * UDT_COUNT_GRAMMAR3);
272 memset((
void*)saGrammar4UdtLib, 0,
sizeof(
APG_CALLBACK) * UDT_COUNT_GRAMMAR4);
273 memset((
void*)saGrammar5UdtLib, 0,
sizeof(
APG_CALLBACK) * UDT_COUNT_GRAMMAR5);
278 if(vpParser){vpRet = vpParser;}
282 if(vpParser){vpRet = vpParser;}
283 saGrammar1UdtLib[UDT_GRAMMAR1_U_TOKEN] = (
APG_CALLBACK)uiSIP_u_token;
284 saGrammar1UdtLib[UDT_GRAMMAR1_U_UNRESERVED] = (
APG_CALLBACK)uiSIP_u_unreserved;
285 saGrammar1UdtLib[UDT_GRAMMAR1_E_DOMAINLABEL] = (
APG_CALLBACK)uiSIP_e_domainlabel;
286 saGrammar1UdtLib[UDT_GRAMMAR1_U_TOPLABEL] = (
APG_CALLBACK)uiSIP_u_toplabel;
287 saGrammar1UdtLib[UDT_GRAMMAR1_U_SCHEME] = (
APG_CALLBACK)uiSIP_u_scheme;
288 saGrammar1UdtLib[UDT_GRAMMAR1_U_CALLID] = (
APG_CALLBACK)uiSIP_u_callid;
289 saGrammar1UdtLib[UDT_GRAMMAR1_U_RFC1035DOMAIN] = (
APG_CALLBACK)uiSIP_u_rfc1035domain;
294 if(vpParser){vpRet = vpParser;}
296 saGrammar2UdtLib[UDT_GRAMMAR2_U_TOKEN] = (
APG_CALLBACK)uiSIP_u_token;
297 saGrammar2UdtLib[UDT_GRAMMAR2_U_UNRESERVED] = (
APG_CALLBACK)uiSIP_u_unreserved;
298 saGrammar2UdtLib[UDT_GRAMMAR2_U_ONE_OR_MORE_UNRESERVED] = (
APG_CALLBACK)uiSIP_u_one_or_more_unreserved;
299 saGrammar2UdtLib[UDT_GRAMMAR2_E_DOMAINLABEL] = (
APG_CALLBACK)uiSIP_e_domainlabel;
300 saGrammar2UdtLib[UDT_GRAMMAR2_U_TOPLABEL] = (
APG_CALLBACK)uiSIP_u_toplabel;
301 saGrammar2UdtLib[UDT_GRAMMAR2_U_SCHEME] = (
APG_CALLBACK)uiSIP_u_scheme;
302 saGrammar2UdtLib[UDT_GRAMMAR2_U_CALLID] = (
APG_CALLBACK)uiSIP_u_callid;
303 saGrammar2UdtLib[UDT_GRAMMAR2_U_RFC1035DOMAIN] = (
APG_CALLBACK)uiSIP_u_rfc1035domain;
305 saGrammar2UdtLib[UDT_GRAMMAR2_U_HCOLON] = (
APG_CALLBACK)uiSIP_u_HColon;
306 saGrammar2UdtLib[UDT_GRAMMAR2_U_COMMA] = (
APG_CALLBACK)uiSIP_u_Comma;
307 saGrammar2UdtLib[UDT_GRAMMAR2_U_SEMI] = (
APG_CALLBACK)uiSIP_u_Semi;
308 saGrammar2UdtLib[UDT_GRAMMAR2_U_SLASH] = (
APG_CALLBACK)uiSIP_u_Slash;
309 saGrammar2UdtLib[UDT_GRAMMAR2_U_EQUAL] = (
APG_CALLBACK)uiSIP_u_Equal;
310 saGrammar2UdtLib[UDT_GRAMMAR2_U_LAQUOT] = (
APG_CALLBACK)uiSIP_u_LAQuot;
311 saGrammar2UdtLib[UDT_GRAMMAR2_U_RAQUOT] = (
APG_CALLBACK)uiSIP_u_RAQuot;
312 saGrammar2UdtLib[UDT_GRAMMAR2_U_LDQUOT] = (
APG_CALLBACK)uiSIP_u_LDQuot;
313 saGrammar2UdtLib[UDT_GRAMMAR2_U_RDQUOT] = (
APG_CALLBACK)uiSIP_u_RDQuot;
314 saGrammar2UdtLib[UDT_GRAMMAR2_U_LHEX] = (
APG_CALLBACK)uiSIP_u_LHEX;
315 saGrammar2UdtLib[UDT_GRAMMAR2_U_STAR] = (
APG_CALLBACK)uiSIP_u_Star;
316 saGrammar2UdtLib[UDT_GRAMMAR2_U_COLON] = (
APG_CALLBACK)uiSIP_u_Colon;
317 saGrammar2UdtLib[UDT_GRAMMAR2_U_LPAREN] = (
APG_CALLBACK)uiSIP_u_LParen;
318 saGrammar2UdtLib[UDT_GRAMMAR2_U_RPAREN] = (
APG_CALLBACK)uiSIP_u_RParen;
319 saGrammar2UdtLib[UDT_GRAMMAR2_E_SWS] = (
APG_CALLBACK)uiSIP_e_SWS;
320 saGrammar2UdtLib[UDT_GRAMMAR2_U_LWS] = (
APG_CALLBACK)uiSIP_u_LWS;
321 saGrammar2UdtLib[UDT_GRAMMAR2_U_NC_VALUE] = (
APG_CALLBACK)uiSIP_u_nc_value;
322 saGrammar2UdtLib[UDT_GRAMMAR2_U_REQUEST_DIGEST] = (
APG_CALLBACK)uiSIP_u_request_digest;
327 if(vpParser){vpRet = vpParser;}
329 saGrammar3UdtLib[UDT_GRAMMAR3_U_TOKEN] = (
APG_CALLBACK)uiSIP_u_token;
330 saGrammar3UdtLib[UDT_GRAMMAR3_U_UNRESERVED] = (
APG_CALLBACK)uiSIP_u_unreserved;
331 saGrammar3UdtLib[UDT_GRAMMAR3_U_ONE_OR_MORE_UNRESERVED] = (
APG_CALLBACK)uiSIP_u_one_or_more_unreserved;
332 saGrammar3UdtLib[UDT_GRAMMAR3_E_DOMAINLABEL] = (
APG_CALLBACK)uiSIP_e_domainlabel;
333 saGrammar3UdtLib[UDT_GRAMMAR3_U_TOPLABEL] = (
APG_CALLBACK)uiSIP_u_toplabel;
334 saGrammar3UdtLib[UDT_GRAMMAR3_U_SCHEME] = (
APG_CALLBACK)uiSIP_u_scheme;
335 saGrammar3UdtLib[UDT_GRAMMAR3_U_CALLID] = (
APG_CALLBACK)uiSIP_u_callid;
336 saGrammar3UdtLib[UDT_GRAMMAR3_U_RFC1035DOMAIN] = (
APG_CALLBACK)uiSIP_u_rfc1035domain;
338 saGrammar3UdtLib[UDT_GRAMMAR3_U_HCOLON] = (
APG_CALLBACK)uiSIP_u_HColon;
339 saGrammar3UdtLib[UDT_GRAMMAR3_U_COMMA] = (
APG_CALLBACK)uiSIP_u_Comma;
340 saGrammar3UdtLib[UDT_GRAMMAR3_U_SEMI] = (
APG_CALLBACK)uiSIP_u_Semi;
341 saGrammar3UdtLib[UDT_GRAMMAR3_U_SLASH] = (
APG_CALLBACK)uiSIP_u_Slash;
342 saGrammar3UdtLib[UDT_GRAMMAR3_U_EQUAL] = (
APG_CALLBACK)uiSIP_u_Equal;
343 saGrammar3UdtLib[UDT_GRAMMAR3_U_LAQUOT] = (
APG_CALLBACK)uiSIP_u_LAQuot;
344 saGrammar3UdtLib[UDT_GRAMMAR3_U_RAQUOT] = (
APG_CALLBACK)uiSIP_u_RAQuot;
345 saGrammar3UdtLib[UDT_GRAMMAR3_U_LDQUOT] = (
APG_CALLBACK)uiSIP_u_LDQuot;
346 saGrammar3UdtLib[UDT_GRAMMAR3_U_RDQUOT] = (
APG_CALLBACK)uiSIP_u_RDQuot;
347 saGrammar3UdtLib[UDT_GRAMMAR3_U_LHEX] = (
APG_CALLBACK)uiSIP_u_LHEX;
348 saGrammar3UdtLib[UDT_GRAMMAR3_U_STAR] = (
APG_CALLBACK)uiSIP_u_Star;
349 saGrammar3UdtLib[UDT_GRAMMAR3_U_COLON] = (
APG_CALLBACK)uiSIP_u_Colon;
350 saGrammar3UdtLib[UDT_GRAMMAR3_U_LPAREN] = (
APG_CALLBACK)uiSIP_u_LParen;
351 saGrammar3UdtLib[UDT_GRAMMAR3_U_RPAREN] = (
APG_CALLBACK)uiSIP_u_RParen;
352 saGrammar3UdtLib[UDT_GRAMMAR3_E_SWS] = (
APG_CALLBACK)uiSIP_e_SWS;
353 saGrammar3UdtLib[UDT_GRAMMAR3_U_LWS] = (
APG_CALLBACK)uiSIP_u_LWS;
354 saGrammar3UdtLib[UDT_GRAMMAR3_U_NC_VALUE] = (
APG_CALLBACK)uiSIP_u_nc_value;
355 saGrammar3UdtLib[UDT_GRAMMAR3_U_REQUEST_DIGEST] = (
APG_CALLBACK)uiSIP_u_request_digest;
357 saGrammar3UdtLib[UDT_GRAMMAR3_E_MESSAGE_BODY] = (
APG_CALLBACK)uiSIP_e_MessageBody;
358 saGrammar3UdtLib[UDT_GRAMMAR3_U_ESCAPED] = (
APG_CALLBACK)uiSIP_u_escaped;
359 saGrammar3UdtLib[UDT_GRAMMAR3_U_PNANE] = (
APG_CALLBACK)uiSIP_u_pname;
360 saGrammar3UdtLib[UDT_GRAMMAR3_U_PVALUE] = (
APG_CALLBACK)uiSIP_u_pvalue;
361 saGrammar3UdtLib[UDT_GRAMMAR3_E_TEXT_UTF8_TRIM] = (
APG_CALLBACK)uiSIP_e_text_utf8trim;
362 saGrammar3UdtLib[UDT_GRAMMAR3_U_EXTENSION_HEADER] = (
APG_CALLBACK)uiSIP_u_extension_header;
363 saGrammar3UdtLib[UDT_GRAMMAR3_U_ONEORMOREDIGIT] = (
APG_CALLBACK)uiSIP_u_OneOrMoreDigit;
364 saGrammar3UdtLib[UDT_GRAMMAR3_E_DIGIT] = (
APG_CALLBACK)uiSIP_e_digit;
365 saGrammar3UdtLib[UDT_GRAMMAR3_U_CRLF] = (
APG_CALLBACK)uiSIP_u_CRLF;
370 if(vpParser){vpRet = vpParser;}
372 saGrammar4UdtLib[UDT_GRAMMAR4_U_TOKEN] = (
APG_CALLBACK)uiSIP_u_token;
373 saGrammar4UdtLib[UDT_GRAMMAR4_U_UNRESERVED] = (
APG_CALLBACK)uiSIP_u_unreserved;
374 saGrammar4UdtLib[UDT_GRAMMAR4_U_ONE_OR_MORE_UNRESERVED] = (
APG_CALLBACK)uiSIP_u_one_or_more_unreserved;
375 saGrammar4UdtLib[UDT_GRAMMAR4_E_DOMAINLABEL] = (
APG_CALLBACK)uiSIP_e_domainlabel;
376 saGrammar4UdtLib[UDT_GRAMMAR4_U_TOPLABEL] = (
APG_CALLBACK)uiSIP_u_toplabel;
377 saGrammar4UdtLib[UDT_GRAMMAR4_U_SCHEME] = (
APG_CALLBACK)uiSIP_u_scheme;
378 saGrammar4UdtLib[UDT_GRAMMAR4_U_CALLID] = (
APG_CALLBACK)uiSIP_u_callid;
379 saGrammar4UdtLib[UDT_GRAMMAR4_U_RFC1035DOMAIN] = (
APG_CALLBACK)uiSIP_u_rfc1035domain;
381 saGrammar4UdtLib[UDT_GRAMMAR4_U_HCOLON] = (
APG_CALLBACK)uiSIP_u_HColon;
382 saGrammar4UdtLib[UDT_GRAMMAR4_U_COMMA] = (
APG_CALLBACK)uiSIP_u_Comma;
383 saGrammar4UdtLib[UDT_GRAMMAR4_U_SEMI] = (
APG_CALLBACK)uiSIP_u_Semi;
384 saGrammar4UdtLib[UDT_GRAMMAR4_U_SLASH] = (
APG_CALLBACK)uiSIP_u_Slash;
385 saGrammar4UdtLib[UDT_GRAMMAR4_U_EQUAL] = (
APG_CALLBACK)uiSIP_u_Equal;
386 saGrammar4UdtLib[UDT_GRAMMAR4_U_LAQUOT] = (
APG_CALLBACK)uiSIP_u_LAQuot;
387 saGrammar4UdtLib[UDT_GRAMMAR4_U_RAQUOT] = (
APG_CALLBACK)uiSIP_u_RAQuot;
388 saGrammar4UdtLib[UDT_GRAMMAR4_U_LDQUOT] = (
APG_CALLBACK)uiSIP_u_LDQuot;
389 saGrammar4UdtLib[UDT_GRAMMAR4_U_RDQUOT] = (
APG_CALLBACK)uiSIP_u_RDQuot;
390 saGrammar4UdtLib[UDT_GRAMMAR4_U_LHEX] = (
APG_CALLBACK)uiSIP_u_LHEX;
391 saGrammar4UdtLib[UDT_GRAMMAR4_U_STAR] = (
APG_CALLBACK)uiSIP_u_Star;
392 saGrammar4UdtLib[UDT_GRAMMAR4_U_COLON] = (
APG_CALLBACK)uiSIP_u_Colon;
393 saGrammar4UdtLib[UDT_GRAMMAR4_U_LPAREN] = (
APG_CALLBACK)uiSIP_u_LParen;
394 saGrammar4UdtLib[UDT_GRAMMAR4_U_RPAREN] = (
APG_CALLBACK)uiSIP_u_RParen;
396 saGrammar4UdtLib[UDT_GRAMMAR4_U_LWS] = (
APG_CALLBACK)uiSIP_u_LWS;
397 saGrammar4UdtLib[UDT_GRAMMAR4_U_NC_VALUE] = (
APG_CALLBACK)uiSIP_u_nc_value;
398 saGrammar4UdtLib[UDT_GRAMMAR4_U_REQUEST_DIGEST] = (
APG_CALLBACK)uiSIP_u_request_digest;
400 saGrammar4UdtLib[UDT_GRAMMAR4_E_MESSAGE_BODY] = (
APG_CALLBACK)uiSIP_e_MessageBody;
401 saGrammar4UdtLib[UDT_GRAMMAR4_U_ESCAPED] = (
APG_CALLBACK)uiSIP_u_escaped;
402 saGrammar4UdtLib[UDT_GRAMMAR4_U_PNANE] = (
APG_CALLBACK)uiSIP_u_pname;
403 saGrammar4UdtLib[UDT_GRAMMAR4_U_PVALUE] = (
APG_CALLBACK)uiSIP_u_pvalue;
404 saGrammar4UdtLib[UDT_GRAMMAR4_E_TEXT_UTF8_TRIM] = (
APG_CALLBACK)uiSIP_e_text_utf8trim;
405 saGrammar4UdtLib[UDT_GRAMMAR4_U_EXTENSION_HEADER] = (
APG_CALLBACK)uiSIP_u_extension_header;
406 saGrammar4UdtLib[UDT_GRAMMAR4_U_ONEORMOREDIGIT] = (
APG_CALLBACK)uiSIP_u_OneOrMoreDigit;
407 saGrammar4UdtLib[UDT_GRAMMAR4_E_DIGIT] = (
APG_CALLBACK)uiSIP_e_digit;
408 saGrammar4UdtLib[UDT_GRAMMAR4_U_CRLF] = (
APG_CALLBACK)uiSIP_u_CRLF;
410 saGrammar4UdtLib[UDT_GRAMMAR4_U_USER] = (
APG_CALLBACK)uiSIP_u_user;
411 saGrammar4UdtLib[UDT_GRAMMAR4_U_IPV4ADDRESS] = (
APG_CALLBACK)uiSIP_u_IPv4address;
412 saGrammar4UdtLib[UDT_GRAMMAR4_U_QUOTED_STRING] = (
APG_CALLBACK)uiSIP_u_quoted_string;
417 if(vpParser){vpRet = vpParser;}
419 saGrammar5UdtLib[UDT_GRAMMAR5_U_TOKEN] = (
APG_CALLBACK)uiSIP_u_token;
420 saGrammar5UdtLib[UDT_GRAMMAR5_U_UNRESERVED] = (
APG_CALLBACK)uiSIP_u_unreserved;
421 saGrammar5UdtLib[UDT_GRAMMAR5_U_ONE_OR_MORE_UNRESERVED] = (
APG_CALLBACK)uiSIP_u_one_or_more_unreserved;
422 saGrammar5UdtLib[UDT_GRAMMAR5_E_DOMAINLABEL] = (
APG_CALLBACK)uiSIP_e_domainlabel;
423 saGrammar5UdtLib[UDT_GRAMMAR5_U_TOPLABEL] = (
APG_CALLBACK)uiSIP_u_toplabel;
424 saGrammar5UdtLib[UDT_GRAMMAR5_U_SCHEME] = (
APG_CALLBACK)uiSIP_u_scheme;
425 saGrammar5UdtLib[UDT_GRAMMAR5_U_CALLID] = (
APG_CALLBACK)uiSIP_u_callid;
426 saGrammar5UdtLib[UDT_GRAMMAR5_U_RFC1035DOMAIN] = (
APG_CALLBACK)uiSIP_u_rfc1035domain;
429 saGrammar5UdtLib[UDT_GRAMMAR5_U_COMMA] = (
APG_CALLBACK)uiSIP_u_Comma;
430 saGrammar5UdtLib[UDT_GRAMMAR5_U_SEMI] = (
APG_CALLBACK)uiSIP_u_Semi;
431 saGrammar5UdtLib[UDT_GRAMMAR5_U_SLASH] = (
APG_CALLBACK)uiSIP_u_Slash;
432 saGrammar5UdtLib[UDT_GRAMMAR5_U_EQUAL] = (
APG_CALLBACK)uiSIP_u_Equal;
433 saGrammar5UdtLib[UDT_GRAMMAR5_U_LAQUOT] = (
APG_CALLBACK)uiSIP_u_LAQuot;
434 saGrammar5UdtLib[UDT_GRAMMAR5_U_RAQUOT] = (
APG_CALLBACK)uiSIP_u_RAQuot;
435 saGrammar5UdtLib[UDT_GRAMMAR5_U_LDQUOT] = (
APG_CALLBACK)uiSIP_u_LDQuot;
436 saGrammar5UdtLib[UDT_GRAMMAR5_U_RDQUOT] = (
APG_CALLBACK)uiSIP_u_RDQuot;
437 saGrammar5UdtLib[UDT_GRAMMAR5_U_LHEX] = (
APG_CALLBACK)uiSIP_u_LHEX;
438 saGrammar5UdtLib[UDT_GRAMMAR5_U_STAR] = (
APG_CALLBACK)uiSIP_u_Star;
439 saGrammar5UdtLib[UDT_GRAMMAR5_U_COLON] = (
APG_CALLBACK)uiSIP_u_Colon;
440 saGrammar5UdtLib[UDT_GRAMMAR5_U_LPAREN] = (
APG_CALLBACK)uiSIP_u_LParen;
441 saGrammar5UdtLib[UDT_GRAMMAR5_U_RPAREN] = (
APG_CALLBACK)uiSIP_u_RParen;
443 saGrammar5UdtLib[UDT_GRAMMAR5_U_LWS] = (
APG_CALLBACK)uiSIP_u_LWS;
444 saGrammar5UdtLib[UDT_GRAMMAR5_U_NC_VALUE] = (
APG_CALLBACK)uiSIP_u_nc_value;
445 saGrammar5UdtLib[UDT_GRAMMAR5_U_REQUEST_DIGEST] = (
APG_CALLBACK)uiSIP_u_request_digest;
447 saGrammar5UdtLib[UDT_GRAMMAR5_E_MESSAGE_BODY] = (
APG_CALLBACK)uiSIP_e_MessageBody;
448 saGrammar5UdtLib[UDT_GRAMMAR5_U_ESCAPED] = (
APG_CALLBACK)uiSIP_u_escaped;
449 saGrammar5UdtLib[UDT_GRAMMAR5_U_PNANE] = (
APG_CALLBACK)uiSIP_u_pname;
450 saGrammar5UdtLib[UDT_GRAMMAR5_U_PVALUE] = (
APG_CALLBACK)uiSIP_u_pvalue;
451 saGrammar5UdtLib[UDT_GRAMMAR5_E_TEXT_UTF8_TRIM] = (
APG_CALLBACK)uiSIP_e_text_utf8trim;
452 saGrammar5UdtLib[UDT_GRAMMAR5_U_EXTENSION_HEADER] = (
APG_CALLBACK)uiSIP_u_extension_header;
453 saGrammar5UdtLib[UDT_GRAMMAR5_U_ONEORMOREDIGIT] = (
APG_CALLBACK)uiSIP_u_OneOrMoreDigit;
454 saGrammar5UdtLib[UDT_GRAMMAR5_E_DIGIT] = (
APG_CALLBACK)uiSIP_e_digit;
455 saGrammar5UdtLib[UDT_GRAMMAR5_U_CRLF] = (
APG_CALLBACK)uiSIP_u_CRLF;
457 saGrammar5UdtLib[UDT_GRAMMAR5_U_USER] = (
APG_CALLBACK)uiSIP_u_user;
458 saGrammar5UdtLib[UDT_GRAMMAR5_U_IPV4ADDRESS] = (
APG_CALLBACK)uiSIP_u_IPv4address;
459 saGrammar5UdtLib[UDT_GRAMMAR5_U_QUOTED_STRING] = (
APG_CALLBACK)uiSIP_u_quoted_string;
461 saGrammar5UdtLib[UDT_GRAMMAR5_E_MESSAGE_HEADER] = (
APG_CALLBACK)uiSIP_e_message_header;
472 static apg_uint uiGetMsgs(INPUT* spInput){
482 uiMsgLength =
uiVecSize(spInput->vpVecMsgChars);
486 spInput->uiMsgCount = uiMessages(acpMsgSrc, uiMsgLength, spInput->vpVecMsgs);
488 spInput->spMsgs = (MSG*)
vpVecFront(spInput->vpVecMsgs);
494 static void vDisplayResults(
apg_uint uiParserCount, OUTPUT* spOutput){
495 apg_uint i, uiNodeType, uiCount, uiBaseCount, uiPreviousCount;
496 double dTime, dBaseTime, dPreviousTime, dBaseFactor, dPreviousFactor;
501 if(spOutput->spStatsResults){
504 printf(
"*** NODE COUNT COMPARISONS:\n");
505 for(uiNodeType = 0; uiNodeType <= 10; uiNodeType++){
507 case 0: cpNodeName =
"RNM";
break;
508 case 1: cpNodeName =
"UDT";
break;
509 case 2: cpNodeName =
"REP";
break;
510 case 3: cpNodeName =
"ALT";
break;
511 case 4: cpNodeName =
"CAT";
break;
512 case 5: cpNodeName =
"AND";
break;
513 case 6: cpNodeName =
"NOT";
break;
514 case 7: cpNodeName =
"TRG";
break;
515 case 8: cpNodeName =
"TBS";
break;
516 case 9: cpNodeName =
"TLS";
break;
517 case 10: cpNodeName =
"TOTAL";
break;
519 printf(
"%10s %10s %10s %10s\n", cpNodeName,
"total",
"base",
"previous");
520 printf(
"%10s %10s %10s %10s\n",
"test#",
"count",
"factor",
"factor");
522 for(i = 0; i < uiParserCount; i++){
523 uiCount = spOutput->spStatsResults[i].uiaNodeStats[uiNodeType];
524 if(uiCount == 0){printf(
"%10u %10u %10s %10s\n", i, uiCount,
"--",
"--");
continue;}
526 uiBaseCount = spOutput->spStatsResults[i].uiaNodeStats[uiNodeType];
527 printf(
"%10u %10u %10s %10s\n", i, uiCount,
"--",
"--");
529 dBaseFactor = (uiCount == 0) ? 0.0 : ((
double)uiBaseCount/(double)uiCount);
530 dPreviousFactor = (uiCount == 0) ? 0.0 : ((
double)uiPreviousCount/(double)uiCount);
531 printf(
"%10u %10u %1.4G %1.4G\n", i, uiCount, dBaseFactor, dPreviousFactor);
533 uiPreviousCount = uiCount;
541 printf(
"*** TIME COMPARISONS:\n");
542 printf(
"%10s %10s %10s %10s\n",
"",
"total",
"base",
"previous");
543 printf(
"%10s %10s %10s %10s\n",
"test#",
"time(msec)",
"factor",
"factor");
545 for(i = 0; i < uiParserCount; i++){
546 dTime = spOutput->spTimeResults[i].dTime;
548 dBaseTime = spOutput->spTimeResults[i].dTime;
549 printf(
"%10u %1.4G %10s %10s \n", i, dTime,
"--",
"--");
551 dBaseFactor = (dTime == 0) ? 0.0 : dBaseTime/dTime;
552 dPreviousFactor = (dTime == 0) ? 0.0 : dPreviousTime/dTime;
553 printf(
"%10u %1.4G %1.4G %1.4G \n", i, dTime, dBaseFactor, dPreviousFactor);
555 dPreviousTime = dTime;