Changeset 3166

Masterconfig API : refactored production rule implementations to use passed-in parser data structure

Committed by:  benjk
Date:  Jun 27 2007 * 00:04 (about 1 year ago)

Affected files:

callweaver-new-apis/masterconfig/cw_master_config_parser.c (unified diff)

r3162r3166
234234 } master_config_parser;
235235
236236
237 #define getsym(s) p->lastsym = config_scanner_getsym(p->scanner, s)
238 #define getlex(s) p->lastsym_lex = config_scanner_getlex(p->scanner, s)
239 #define gethash(s) p->lastsym_hash = config_scanner_gethash(p->scanner, s)
240
241 #define lastsym(v) p->lastsym_token
242 #define lastlex(v) p->lastsym_lexeme
243 #define lasthash(v) p->lastsym_hash
244
237245 #define emit(_sect, _param, _value) \
238 if (parser->options.syntax_check_only == 0) \
246 if (p->options.syntax_check_only == 0) \
239247 #if (_sect == DIRECTORIES) \
240248 store_master_config_directory(_param, _value); \
241249 #endif \
242250 #if (_sect == FILENAMES) \
243251 store_master_config_filename(_param, _value); \
244252 #endif
245 #if (_sect == OPTIONFLAGS) \
253 #if (_sect == OPTIONS) \
246254 store_master_config_option_flag(_param, _value); \
247255 #endif
248256
257 #define fixup(_sect) \
258 if (p->options.syntax_check_only == 0) \
259 #if (_sect == DIRECTORIES) \
260 /* TO DO */ ; \
261 #endif
262 #if (_sect == FILENAMES) \
263 /* TO DO */ ; \
264 #endif
265 #if (_sect == OPTIONS) \
266 /* TO DO */ ; \
267 #endif
249268
269
250270 // ==========================================================================
251271 // P R O D U C T I O N R U L E I M P L E M E N T A T I O N S
252272 // ==========================================================================
253273
274 // production rule #1
275 #define parse_master_config_file _parse_master_config_file
276 static void _parse_master_config_file(cw_master_config_parser p);
254277
278 // production rule #2
279 #define parse_property_list(v) _parse_property_list(p)
280 static void _parse_property_list(cw_master_config_parser p);
281
282 // production rule #3
283 #define parse_directorty_plist(v) _parse_directory_plist(p)
284 static void _parse_directory_plist(cw_master_config_parser p);
285
286 // production rule #4
287 #define parse_directory_assignment(v) _parse_directory_assignment(p)
288 static void _parse_directory_assignment(cw_master_config_parser p);
289
290 // production rule #5
291 #define parse_filename_plist(v) _parse_filename_plist(p)
292 static void _parse_filename_plist(cw_master_config_parser p);
293
294 // production rule #6
295 #define parse_filename_assignment(v) _parse_filename_assignment(p)
296 static void _parse_filename_assignment(cw_master_config_parser p);
297
298 // production rule #7
299 #define parse_option_plist(v) _parse_option_plist(p)
300 static void _parse_option_plist(cw_master_config_parser p);
301
302 // production rule #8
303 #define parse_option_assignment(v) _parse_option_assignment(p)
304 static void parse_option_assignment(cw_master_config_parser p);
305
306 // production rule #9
307 #define parse_option_flag_assignment(v) _parse_option_flag_assignment(p)
308 static void _parse_option_flag_assignment(cw_master_config_parser p);
309
310 // production rule #10
311 #define parse_numeric_option_assignment(v) _parse_numeric_option_assignment(p)
312 static void _parse_numeric_option_assignment(cw_master_config_parser p);
313
314 // production rule #11
315 #define parse_string_option_assignment(v) _parse_string_option_assignment(p)
316 static void _parse_string_option_assignment(cw_master_config_parser p);
317
318 // production rule #12
319 #define parse_dialplan_plist(v) _parse_dialplan_plist(p)
320 static void _parse_dialplan_plist(cw_master_config_parser p);
321
322 // production rule #13
323 #define parse_dialplan_parameter_assignment(v) _parse_dialplan_parameter_assignment(p)
324 static void _parse_dialplan_parameter_assignment(cw_master_config_parser p);
325
326 // production rule #14
327 #define parse_dialplan_engine_assignment(v) _parse_dialplan_engine_assignment(p)
328 static void _parse_dialplan_engine_assignment(cw_master_config_parser p);
329
330 // production rule #15
331 #define parse_dialplan_filename_assignment(v) _parse_dialplan_filename_assignment(p)
332 static void _parse_dialplan_filename_assignment(cw_master_config_parser p);
333
334 // production rule #16
335 #define parse_dialplan_config_method_assignment(v) _parse_dialplan_config_method_assignment(p)
336 static void _parse_dialplan_config_method_assignment(cw_master_config_parser p);
337
338 // production rule #17
339 #define parse_dsn_assignment(v) _parse_dsn_assignment(p)
340 static void _parse_dsn_assignment(cw_master_config_parser p);
341
342 // production rule #18
343 #define parse_dialplan_case_sense_assignment(v) _parse_dialplan_case_sense_assignment(p)
344 static void _parse_dialplan_case_sense_assignment(cw_master_config_parser p);
345
346 // production rule #19
347 #define parse_logfile_plist(v) _parse_logfile_plist(p)
348 static void _parse_logfile_plist(cw_master_config_parser p);
349
350 // production rule #20
351 #define parse_logfile_assignment(v) _parse_logfile_assignment(p)
352 static void _parse_logfile_assignment(cw_master_config_parser p);
353
354 // production rule #21
355 #define parse_enable_status_assignment(v) _parse_enable_status_assignment(p)
356 static void _parse_enable_status_assignment(cw_master_config_parser p);
357
358 // production rules #22 and #23
359 #define parse_logfile_loglevel_assignment(v) _parse_logfile_loglevel_assignment(p)
360 static void _parse_logfile_loglevel_assignment(cw_master_config_parser p);
361
362 // production rule #24
363 #define parse_logfile_loglevel_list(v) parse_logfile_loglevel_list(p)
364 static void _parse_logfile_loglevel_list(cw_master_config_parser p);
365
366 // production rule #25
367 #define parse_module_plist(v) _parse_module_plist(p)
368 static void _parse_module_plist(cw_master_config_parser p);
369
370 // production rule #26
371 #define parse_module_defaults_assignment(v) _parse_module_defaults_assignment(p)
372 static void _parse_module_defaults_assignment(cw_master_config_parser p);
373
374 // production rule #27
375 #define parse_module_assignment(v) _parse_module_assignment(p)
376 static void _parse_module_assignment(cw_master_config_parser p);
377
378 // production rule #28
379 #define parse_module_load_status_assignment(v) _parse_module_load_status_assignment(p)
380 static void _parse_module_load_status_assignment(cw_master_config_parser p);
381
382 // production rule #29
383 #define parse_module_config_method_assignment(v) _parse_module_config_method_assignment(p)
384 static void _parse_module_config_method_assignment(cw_master_config_parser p);
385
386 // production rule #30
387 #define parse_numplan_plist(v) _parse_numplan_plist(p)
388 static void _parse_numplan_plist(cw_master_config_parser p);
389
390 // production rule #31
391 #define parse_numplan_assignment(v) _parse_numplan_assignment(p)
392 static void _parse_numplan_assignment(cw_master_config_parser p);
393
394 // production rule #32
395 #define parse_domain_assignment(v) _parse_domain_assignment(p)
396 static void _parse_domain_assignment(cw_master_config_parser p);
397
398
255399 // --------------------------------------------------------------------------
256 // private function: parse_master_config_file()
400 // private function: _parse_master_config_file()
257401 // --------------------------------------------------------------------------
258402 //
259403 // This function implements production rule # 1 ...
260404 //
261405 // (1) master-config-file =
262406 // { property-list } end-of-file-mark
263 //
264407
265 static Symbol parse_property_list(const Symbol current_sym); /* FORWARD */
266
267
268 static Symbol parse_master_config_file(const Symbol current_sym) {
408 static void _parse_master_config_file(cw_master_config_parser p) {
269409 Symbol sym;
270410
271 sym = current_sym;
411 // fetch top level start symbol
412 sym = getsym();
272413
273414 while (sym == IDENTIFIER) {
274415
275 sym = parse_property_list(sym);
416 parse_property_list();
417 sym = lastsym();
276418
277419 } // end while
278420
279421 if (sym == EOF_MARK) {
280422
281423 // we're done
424 fixup();
282425
283426 }
284427 else {
------
287430
288431 } // end if
289432
290 return sym;
291 } // end parse_master_config_file
433 return;
434 } // end _parse_master_config_file
292435
293436
294437 // --------------------------------------------------------------------------
295 // private function: parse_property_list()
438 // private function: _parse_property_list()
296439 // --------------------------------------------------------------------------
297440 //
298441 // This function implements production rule # 2 ...
------
300443 // (2) property-list =
301444 // directory-plist | filename-plist | option-plist |
302445 // dialplan-plist | logfile-plist | module-plist | numplan-plist
303 //
304446
305 static Symbol parse_directory_plist(const Symbol current_sym); /* FORWARD */
447 static void _parse_property_list(cw_master_config_parser p) {
448 cardinal keyword;
449
450 // start symbol has already been fetched by caller
306451
307 static Symbol parse_filename_plist(const Symbol current_sym); /* FORWARD */
308
309 static Symbol parse_option_plist(const Symbol current_sym); /* FORWARD */
310
311 static Symbol parse_dialplan_plist(const Symbol current_sym); /* FORWARD */
312
313 static Symbol parse_logfile_plist(const Symbol current_sym); /* FORWARD */
314
315 static Symbol parse_module_plist(const Symbol current_sym); /* FORWARD */
316
317 static Symbol parse_numplan_plist(const Symbol current_sym); /* FORWARD */
318
319
320 static Symbol parse_property_list(const Symbol current_sym) {
321 Symbol sym;
322 cardinal hash;
452 keyword = gethash();
323453
324 sym = current_sym;
325
326 hash = get_hash();
327
328 switch(hash) {
454 switch(keyword) {
329455 case CW_MASTER_CONFIG_KEYWORD_DIRECTORIES :
330 sym = parse_directory_plist(sym);
456 parse_directory_plist();
331457 break;
332458 case CW_MASTER_CONFIG_KEYWORD_FILENAMES :
333 sym = parse_filename_plist(sym);
459 parse_filename_plist();
334460 break;
335461 case CW_MASTER_CONFIG_KEYWORD_OPTIONS :
336 sym = parse_option_plist(sym);
462 parse_option_plist();
337463 break;
338464 case CW_MASTER_CONFIG_KEYWORD_DIALPLAN :
339 sym = parse_dialplan_plist(sym);
465 parse_dialplan_plist();
340466 break;
341467 case CW_MASTER_CONFIG_KEYWORD_LOGFILES :
342 sym = parse_logfile_plist(sym);
468 parse_logfile_plist();
343469 break;
344470 case CW_MASTER_CONFIG_KEYWORD_MODULES :
345 sym = parse_module_plist(sym);
471 parse_module_plist();
346472 break;
347473 case CW_MASTER_CONFIG_KEYWORD_NUMPLANS :
348 sym = parse_numplan_plist(sym);
474 parse_numplan_plist();
349475 break;
350476 default :
351477 // syntax error: keyword not recognised
352478 } // end switch
353479
354 return sym;
355 } // end parse_property_list
480 return;
481 } // end _parse_property_list
356482
357483
358484 // --------------------------------------------------------------------------
359 // private function: parse_directory_plist()
485 // private function: _parse_directory_plist()
360486 // --------------------------------------------------------------------------
361487 //
362488 // This function implements production rule # 3 ...
363489 //
364490 // (3) directory-plist =
365491 // "Directories" "=" "{" { directory-assignment } "}" ";"
366 //
367492
368 static Symbol parse_directory_assignment(const Symbol current_sym); /* FORWARD */
493 static void _parse_directory_plist(cw_master_config_parser p) {
494 Symbol sym;
495
496 // start symbol has already been processed by caller
369497
370
371 static Symbol parse_directory_plist(const Symbol current_sym) {
372 Symbol sym;
373
374498 sym = getsym();
375499
376500 if (sym == ASSIGN_OPERATOR) {
------
381505
382506 while (sym == IDENTIFIER) {
383507
384 sym = parse_directory_assignment(sym);
508 parse_directory_assignment();
509 sym = lastsym();
385510
386511 } // end while
387512
------
391516 if (sym == END_OF_ASSIGNMENT) {
392517 sym = getsym();
393518
394 emit();
519 // section done
520 fixup(DIRECTORIES);
395521 }
396522 else {
397523
------
417543
418544 } // end if
419545
420 return sym;
421 } // end parse_directory_plist
546 return;
547 } // end _parse_directory_plist
422548
423549
424550 // --------------------------------------------------------------------------
425 // private function: parse_directory_assignment()
551 // private function: _parse_directory_assignment()
426552 // --------------------------------------------------------------------------
427553 //
428554 // This function implements production rule # 4 ...
------
434560 // "=" pathname-string ";"
435561 //
436562
437 static Symbol parse_directory_assignment(const Symbol current_sym) {
563 static void _parse_directory_assignment(cw_master_config_parser p) {
438564 Symbol sym;
439 cardinal hash;
565 cardinal keyword;
440566 char *pathname;
441567
442 sym = current_sym;
568 // start symbol has already been fetched by caller, but not processed
569
570 keyword = gethash();
443571
444 hash = get_hash();
445
446 if ((hash == CW_MASTER_CONFIG_KEYWORD_BINDIR) ||
447 (hash == CW_MASTER_CONFIG_KEYWORD_CFGDIR) ||
448 (hash == CW_MASTER_CONFIG_KEYWORD_DBDIR) ||
449 (hash == CW_MASTER_CONFIG_KEYWORD_IMGDIR) ||
450 (hash == CW_MASTER_CONFIG_KEYWORD_KEYDIR) ||
451 (hash == CW_MASTER_CONFIG_KEYWORD_LOGDIR) ||
452 (hash == CW_MASTER_CONFIG_KEYWORD_MODDIR) ||
453 (hash == CW_MASTER_CONFIG_KEYWORD_MDEPDIR) ||
454 (hash == CW_MASTER_CONFIG_KEYWORD_NUMDIR) ||
455 (hash == CW_MASTER_CONFIG_KEYWORD_OGIDIR) ||
456 (hash == CW_MASTER_CONFIG_KEYWORD_RUNDIR) ||
457 (hash == CW_MASTER_CONFIG_KEYWORD_SOUNDSDIR) ||
458 (hash == CW_MASTER_CONFIG_KEYWORD_SPOOLDIR) ||
459 (hash == CW_MASTER_CONFIG_KEYWORD_TMPDIR) ||
460 (hash == CW_MASTER_CONFIG_KEYWORD_VARLIBDIR)) {
572 if ((keyword == CW_MASTER_CONFIG_KEYWORD_BINDIR) ||
573 (keyword == CW_MASTER_CONFIG_KEYWORD_CFGDIR) ||
574 (keyword == CW_MASTER_CONFIG_KEYWORD_DBDIR) ||
575 (keyword == CW_MASTER_CONFIG_KEYWORD_IMGDIR) ||
576 (keyword == CW_MASTER_CONFIG_KEYWORD_KEYDIR) ||
577 (keyword == CW_MASTER_CONFIG_KEYWORD_LOGDIR) ||
578 (keyword == CW_MASTER_CONFIG_KEYWORD_MODDIR) ||
579 (keyword == CW_MASTER_CONFIG_KEYWORD_MDEPDIR) ||
580 (keyword == CW_MASTER_CONFIG_KEYWORD_NUMDIR) ||
581 (keyword == CW_MASTER_CONFIG_KEYWORD_OGIDIR) ||
582 (keyword == CW_MASTER_CONFIG_KEYWORD_RUNDIR) ||
583 (keyword == CW_MASTER_CONFIG_KEYWORD_SOUNDSDIR) ||
584 (keyword == CW_MASTER_CONFIG_KEYWORD_SPOOLDIR) ||
585 (keyword == CW_MASTER_CONFIG_KEYWORD_TMPDIR) ||
586 (keyword == CW_MASTER_CONFIG_KEYWORD_VARLIBDIR)) {
461587 sym = getsym();
462588
463589 if (sym == ASSIGN_OPERATOR) {
------
473599 if (sym == END_OF_ASSIGNMENT) {
474600 sym = getsym();
475601
476 emit(DIRECTORIES, hash, pathname);
602 emit(DIRECTORIES, keyword, pathname);
477603 }
478604 else {
479605
------
505631
506632 } // end if
507633
508 return sym;
509 } // end parse_directory_assignment
634 return;
635 } // end _parse_directory_assignment
510636
511637
512638 // --------------------------------------------------------------------------
513 // private function: parse_filename_plist()
639 // private function: _parse_filename_plist()
514640 // --------------------------------------------------------------------------
515641 //
516642 // This function implements production rule # 5 ...
517643 //
518644 // (5) filename-plist =
519645 // "Filenames" "=" "{" { filename-assignment } "}" ";"
520 //
521646
522 static Symbol parse_filename_assignment(const Symbol current_sym); /* FORWARD */
647 static void _parse_filename_plist(cw_master_config_parser p) {
648 Symbol sym;
649
650 // start symbol has already been processed by caller
523651
524
525 static Symbol parse_filename_plist(const Symbol current_sym) {
526 Symbol sym;
527
528652 sym = getsym();
529653
530654 if (sym == ASSIGN_OPERATOR) {
------
535659
536660 while (sym == IDENTIFIER) {
537661
538 sym = parse_filename_assignment(sym);
662 parse_filename_assignment();
663 sym = lastsym();
539664
540665 } // end while
541666
------
545670 if (sym == END_OF_ASSIGNMENT) {
546671 sym = getsym();
547672
548 emit();
673 // section done
674 fixup(FILENAMES);
549675 }
550676 else {
551677
------
571697
572698 } // end if
573699
574 return sym;
575 } // end parse_filename_plist
700 return;
701 } // end _parse_filename_plist
576702
577703
578704 // --------------------------------------------------------------------------
579 // private function: parse_filename_assignment()
705 // private function: _parse_filename_assignment()
580706 // --------------------------------------------------------------------------
581707 //
582708 // This function implements production rule # 6 ...
------
584710 // (6) filename-assignment =
585711 // ( "Database" | "Executable" | "PIDFile" | "Socket" )
586712 // "=" filename-string ";"
587 //
588713
589 static Symbol parse_filename_assignment(const Symbol current_sym) {
714 static void _parse_filename_assignment(cw_master_config_parser p) {
590715 Symbol sym;
591 cardinal hash;
716 cardinal keyword;
592717 char *filename;
593718
594 sym = current_sym;
719 // start symbol has already been fetched by caller, but not processed
595720
596 hash = get_hash();
721 keyword = get_hash();
597722
598 if ((hash == CW_MASTER_CONFIG_KEYWORD_DATABASE) ||
599 (hash == CW_MASTER_CONFIG_KEYWORD_EXECUTABLE) ||
600 (hash == CW_MASTER_CONFIG_KEYWORD_PIDFILE) ||
601 (hash == CW_MASTER_CONFIG_KEYWORD_SOCKET)) {
723 if ((keyword == CW_MASTER_CONFIG_KEYWORD_DATABASE) ||
724 (keyword == CW_MASTER_CONFIG_KEYWORD_EXECUTABLE) ||
725 (keyword == CW_MASTER_CONFIG_KEYWORD_PIDFILE) ||
726 (keyword == CW_MASTER_CONFIG_KEYWORD_SOCKET)) {
602727 sym = getsym();
603728
604729 if (sym == ASSIGN_OPERATOR) {
------
646771
647772 } // end if
648773
649 return sym;
650 } // end parse_filename_assignment
774 return;
775 } // end _parse_filename_assignment
651776
652777
653778 // --------------------------------------------------------------------------
654 // private function: parse_option_plist()
779 // private function: _parse_option_plist()
655780 // --------------------------------------------------------------------------
656781 //
657782 // This function implements production rule # 7 ...
658783 //
659784 // (7) option-plist =
660785 // "Options" "=" "{" { option-assignment } "}" ";"
661 //
662786
663 static Symbol parse_option_assignment(const Symbol current_sym); /* FORWARD */
787 static void _parse_option_plist(cw_master_config_parser p) {
788 Symbol sym;
664789
790 // start symbol has already been processed by caller
665791
666 static Symbol parse_option_plist(const Symbol current_sym) {
667 Symbol sym;
668
669792 sym = getsym();
670793
671794 if (sym == ASSIGN_OPERATOR) {
------
676799
677800 while (sym == IDENTIFIER) {
678801
679 sym = parse_option_assignment(sym);
802 parse_option_assignment();
803 sym = lastsym();
680804
681805 } // end while
682806
------
686810 if (sym == END_OF_ASSIGNMENT) {
687811 sym = getsym();
688812
689 emit();
813 // section done
814 fixup(OPTIONS);
690815 }
691816 else {
692817
------
712837
713838 } // end if
714839
715 return sym;
716 } // end parse_option_plist
840 return;
841 } // end _parse_option_plist
717842
718843
719844 // --------------------------------------------------------------------------
720 // private function: parse_option_assignment()
845 // private function: _parse_option_assignment()
721846 // --------------------------------------------------------------------------
722847 //
723848 // This function implements production rule # 8 ...
------
726851 // ( option-flag-assignment | numeric-option-assignment |
727852 // string-option-assignment )
728853
729 static Symbol parse_option_flag_assignment(const Symbol current_sym); /* FORWARD */
730
731 static Symbol parse_numeric_option_assignment(const Symbol current_sym); /* FORWARD */
732
733 static Symbol parse_string_option_assignment(const Symbol current_sym); /* FORWARD */
734
735
736 static Symbol parse_option_assignment(const Symbol current_sym) {
737 Symbol sym;
738 cardinal hash;
854 static void _parse_option_assignment(cw_master_config_parser p) {
855 cardinal keyword;
739856
740 sym = current_sym;
857 // start symbol has already been fetched by caller, but not processed
741858
742 hash = get_hash();
859 keyword = gethash();
743860
744 if ((hash == CW_MASTER_CONFIG_KEYWORD_CONSOLEVERBOSITY) ||
745 (hash == CW_MASTER_CONFIG_KEYWORD_SYSTEMLOADLIMIT)) {
861 if ((keyword == CW_MASTER_CONFIG_KEYWORD_APPENDHOSTTOLOGFILES) ||
862 (keyword == CW_MASTER_CONFIG_KEYWORD_AUTOLOADMODULES) ||
863 (keyword == CW_MASTER_CONFIG_KEYWORD_AUTOROTATEQUEUELOGS) ||
864 (keyword == CW_MASTER_CONFIG_KEYWORD_DUMPCOREONCRASH) ||
865 (keyword == CW_MASTER_CONFIG_KEYWORD_EXTENDEDDEBUGMODE) ||
866 (keyword == CW_MASTER_CONFIG_KEYWORD_INITCRYPTOKEYS) ||
867 (keyword == CW_MASTER_CONFIG_KEYWORD_PSEUDOREALTIMEMODE) ||
868 (keyword == CW_MASTER_CONFIG_KEYWORD_RECSOUNDSASTEMPFILES) ||
869 (keyword == CW_MASTER_CONFIG_KEYWORD_TIMESTAMPEDLOGGING)) {
746870
747 sym = parse_numeric_option_assignment(sym, hash);
871 parse_option_flag_assignment();
872 }
873 else if ((keyword == CW_MASTER_CONFIG_KEYWORD_CONSOLEVERBOSITY) ||
874 (keyword == CW_MASTER_CONFIG_KEYWORD_SYSTEMLOADLIMIT)) {
748875
876 parse_numeric_option_assignment();
877
749878 }
750 else if ((hash == CW_MASTER_CONFIG_KEYWORD_RUNUSER) ||
751 (hash == CW_MASTER_CONFIG_KEYWORD_RUNGROUP) ||
752 (hash == CW_MASTER_CONFIG_KEYWORD_TIMESTAMPFORMAT)) {
879 else if ((keyword == CW_MASTER_CONFIG_KEYWORD_RUNUSER) ||
880 (keyword == CW_MASTER_CONFIG_KEYWORD_RUNGROUP) ||
881 (keyword == CW_MASTER_CONFIG_KEYWORD_TIMESTAMPFORMAT)) {
753882
754 sym = parse_string_option_assignment(sym, hash);
883 parse_string_option_assignment();
755884
756885 }
757886 else {
758887
759 sym = parse_option_flag_assignment(sym, hash);
760
888 // syntax error: keyword not recognised
889
761890 } // end if
762891
763 return sym;
764 } // end parse_option_assignment
892 return;
893 } // end _parse_option_assignment
765894
766895
767896 // --------------------------------------------------------------------------
768 // private function: parse_option_flag_assignment()
897 // private function: _parse_option_flag_assignment()
769898 // --------------------------------------------------------------------------
770899 //
771900 // This function implements production rule # 9 ...
------
776905 // "InitCryptoKeysOnLaunch" | "PseudoRealtimeMode" |
777906 // "RecSoundsAsTempFiles" | "TimestampedLogging" )
778907 // "=" boolean ";"
779 //
780908
781 static Symbol parse_option_flag_assignment(const Symbol current_sym, const cardinal hash) {
909 static void _parse_option_flag_assignment(cw_master_config_parser p) {
782910 Symbol sym;
911 cardinal keyword;
783912 bool flag;
784913
785 sym = current_sym;
786
787 if ((hash == CW_MASTER_CONFIG_KEYWORD_APPENDHOSTTOLOGFILES) ||
788 (hash == CW_MASTER_CONFIG_KEYWORD_AUTOLOADMODULES) ||
789 (hash == CW_MASTER_CONFIG_KEYWORD_AUTOROTATEQUEUELOGS) ||
790 (hash == CW_MASTER_CONFIG_KEYWORD_DUMPCOREONCRASH) ||
791 (hash == CW_MASTER_CONFIG_KEYWORD_EXTENDEDDEBUGMODE) ||
792 (hash == CW_MASTER_CONFIG_KEYWORD_INITCRYPTOKEYS) ||
793 (hash == CW_MASTER_CONFIG_KEYWORD_PSEUDOREALTIMEMODE) ||
794 (hash == CW_MASTER_CONFIG_KEYWORD_RECSOUNDSASTEMPFILES) ||
795 (hash == CW_MASTER_CONFIG_KEYWORD_TIMESTAMPEDLOGGING)) {
914 // start symbol has already been processed by caller
915
916 keyword = gethash();
917
918 sym = getsym();
919
920 if (sym == ASSIGN_OPERATOR) {
796921 sym = getsym();
797
798 if (sym == ASSIGN_OPERATOR) {
799 sym = getsym();
800922
801 if (sym == BOOLEAN) {
923 if (sym == BOOLEAN) {
802924
803 flag = (get_hash() == CW_CONFIG_KEYWORD_TRUE);
925 flag = (gethash() == CW_CONFIG_KEYWORD_TRUE);
804926
805 if (sym == END_OF_ASSIGNMENT) {
806 sym = getsym();
807
808 emit(OPTIONS, hash, flag);
809 }
810 else {
811
812 // syntax error: end-of-assignment expected
813
814 } // end if
927 if (sym == END_OF_ASSIGNMENT) {
928 sym = getsym();
929
930 emit(OPTIONS, keyword, flag);
815931 }
816932 else {
817
818 // syntax error: boolean expected
819
933
934 // syntax error: end-of-assignment expected
935
820936 } // end if
821937 }
822938 else {
823
824 // syntax error: assignment-operator expected
825
939
940 // syntax error: boolean expected
941
826942 } // end if
827943 }
828944 else {
829
830 // syntax error: keyword not recognised
831
945
946 // syntax error: assignment-operator expected
947
832948 } // end if
833949
834 return sym;
835 } // end parse_option_flag_assignment
950 return;
951 } // end _parse_option_flag_assignment
836952
837953
838954 // --------------------------------------------------------------------------
839 // private function: parse_numeric_option_assignment()
955 // private function: _parse_numeric_option_assignment()
840956 // --------------------------------------------------------------------------
841957 //
842958 // This function implements production rule # 10 ...
843959 //
844960 // (10) numeric-option-assignment =
845961 // ( "ConsoleVerbosityLevel" | "SystemLoadLimit" ) "=" number ";"
846 //
847962
848 static Symbol parse_numeric_option_assignment(const Symbol current_sym, const cardinal hash) {
963 static void _parse_numeric_option_assignment(cw_master_config_parser p) {
849964 Symbol sym;
965 cardinal keyword;
850966 int int_value;
851967 double float_value;
852
968
969 // start symbol has already been processed by caller
970
971 keyword = gethash();
972
853973 sym = getsym();
854974
855975 if (sym == ASSIGN_OPERATOR) {
------
859979 sym = getsym();
860980
861981 if /* integer value assignment branch */
862 (hash == CW_MASTER_CONFIG_KEYWORD_CONSOLEVERBOSITY) {
982 (keyword == CW_MASTER_CONFIG_KEYWORD_CONSOLEVERBOSITY) {
863983 int_value = get_number(getlex());
864984
865985 if (sym == END_OF_ASSIGNMENT) {
866986 sym = getsym();
867987
868 emit(OPTIONS, hash, int_value);
988 emit(OPTIONS, keyword, int_value);
869989 }
870990 else {
871991
------
874994 } // end if
875995 }
876996 else /* float value assignment branch
877 hash == CW_MASTER_CONFIG_KEYWORD_SYSTEMLOADLIMIT */ {
997 keyword == CW_MASTER_CONFIG_KEYWORD_SYSTEMLOADLIMIT */ {
878998 float_value = get_floating_point_number(getlex());
879999
8801000 if (sym == END_OF_ASSIGNMENT) {
8811001 sym = getsym();
8821002
883 emit(OPTIONS, hash, float_value);
1003 emit(OPTIONS, keyword, float_value);
8841004 }
8851005 else {
8861006
------
9011021
9021022 } // end if
9031023
904 return sym;
905 } // end parse_numeric_option_assignment
1024 return;
1025 } // end _parse_numeric_option_assignment
9061026
9071027
9081028 // --------------------------------------------------------------------------
909 // private function: parse_string_option_assignment()
1029 // private function: _parse_string_option_assignment()
9101030 // --------------------------------------------------------------------------
9111031 //
9121032 // This function implements production rule # 11 ...
------
9141034 // (11) string-option-assignment =
9151035 // ( "RunAsUser" | "RunAsGroup" | "TimestampFormatString" )
9161036 // "=" string ";"
917 //
9181037
919 static Symbol parse_string_option_assignment(const Symbol current_sym, const cardinal hash) {
1038 static void _parse_string_option_assignment(cw_master_config_parser p) {
9201039 Symbol sym;
921 char *str;
1040 cardinal keyword;
1041 char *str_value;
9221042
1043 // start symbol has already been processed by caller
1044
1045 keyword = gethash();
1046
9231047 sym = getsym();
9241048
9251049 if (sym == ASSIGN_OPERATOR) {
------
9271051
9281052 if (sym == STRING) {
9291053
930 str = getlex();
1054 str_value = getlex();
9311055
9321056 sym = getsym();
9331057
9341058 if (sym == END_OF_ASSIGNMENT) {
9351059 sym = getsym();
9361060
937 emit(OPTIONS, hash, str);
1061 emit(OPTIONS, keyword, str_value);
9381062 }
9391063 else {
9401064
------
9541078
9551079 } // end if
9561080
957 return sym;
958 } // end parse_string_option_assignment
1081 return;
1082 } // end _parse_string_option_assignment
9591083
9601084
9611085 // --------------------------------------------------------------------------
962 // private function: parse_dialplan_plist()
1086 // private function: _parse_dialplan_plist()
9631087 // --------------------------------------------------------------------------
9641088 //
9651089 // This function implements production rule # 12 ...
9661090 //
9671091 // (12) dialplan-plist =
9681092 // "Dialplan" "=" "{" { dialplan-parameter-assignment } "}" ";"
969 //
9701093
971 static Symbol parse_dialplan_parameter_assignment(const Symbol current_sym); /* FORWARD */
972
973
974 static Symbol parse_dialplan_plist(const Symbol current_sym) {
1094 static void _parse_dialplan_plist(cw_master_config_parser p) {
9751095 Symbol sym;
976
1096
1097 // start symbol has already been processed by caller
1098
9771099 sym = getsym();
9781100
9791101 if (sym == ASSIGN_OPERATOR) {
------
9841106
9851107 while (sym == IDENTIFIER) {
9861108
987 sym = parse_dialplan_parameter_assignment(sym);
1109 parse_dialplan_parameter_assignment();
1110 sym = lastsym();
9881111
9891112 } // end while
9901113
------
9941117 if (sym == END_OF_ASSIGNMENT) {
9951118 sym = getsym();
9961119
997 emit();
1120 // section done
1121 fixup(DIALPLAN);
9981122 }
9991123 else {
10001124
------
10201144
10211145 } // end if
10221146
1023 return sym;
1024 } // end parse_dialplan_plist
1147 return;
1148 } // end _parse_dialplan_plist
10251149
10261150
10271151 // --------------------------------------------------------------------------
1028 // private function: parse_dialplan_parameter_assignment()
1152 // private function: _parse_dialplan_parameter_assignment()
10291153 // --------------------------------------------------------------------------
10301154 //
10311155 // This function implements production rules # 13 ...
------
10341158 // ( dialplan-engine-assignment | dialplan-filename-assignment |
10351159 // dialplan-cfg-method-assignment [ dsn-assignment ] |
10361160 // case-sense-assignment )
1037 //
10381161
1039 static Symbol parse_dialplan_engine_assignment(const Symbol current_sym); /* FORWARD */
1040
1041 static Symbol parse_dialplan_filename_assignment(const Symbol current_sym); /* FORWARD */
1042
1043 static Symbol parse_dialplan_config_method_assignment(const Symbol current_sym); /* FORWARD */
1044
1045 static Symbol parse_dialplan_case_sense_assignment(const Symbol current_sym); /* FORWARD */
1046
1047 static Symbol parse_dsn_assignment(const Symbol current_sym); /* FORWARD */
1048
1049
1050 static Symbol parse_dialplan_parameter_assignment(const Symbol current_sym) {
1162 static void _parse_dialplan_parameter_assignment(cw_master_config_parser p) {
10511163 Symbol sym;
1052 cardinal hash;
1053
1054 hash = get_hash();
1164 cardinal keyword;
10551165
1056 if (hash == CW_MASTER_CONFIG_KEYWORD_ENGINE) {
1166 // start symbol has already been fetched by caller, but not processed
1167
1168 keyword = gethash();
1169
1170 if (keyword == CW_MASTER_CONFIG_KEYWORD_ENGINE) {
10571171
1058 sym = parse_dialplan_engine_assignment(sym);
1172 parse_dialplan_engine_assignment();
10591173
10601174 }
1061 else if (hash == CW_MASTER_CONFIG_KEYWORD_FILENAME) {
1175 else if (keyword == CW_MASTER_CONFIG_KEYWORD_FILENAME) {
10621176
1063 sym = parse_dialplan_filename_assignment(sym);
1177 parse_dialplan_filename_assignment();
10641178
10651179 }
1066 else if (hash == CW_MASTER_CONFIG_KEYWORD_CONFIGURATIONMETHOD) {
1180 else if (keyword == CW_MASTER_CONFIG_KEYWORD_CONFIGURATIONMETHOD) {
10671181
1068 sym = parse_dialplan_config_method_assignment(sym);
1182 parse_dialplan_config_method_assignment();
1183 sym = lastsym();
10691184
1070 if (sym == CW_MASTER_CONFIG_KEYWORD_DSN) {
1185 if (sym == IDENTIFIER) && (gethash() == CW_MASTER_CONFIG_KEYWORD_DSN) {
10711186
1072 sym = parse_dsn_assignment(sym);
1187 parse_dsn_assignment();
1188 sym = lastsym();
1189
10731190 } // end if
10741191 }
1192 else if ((keyword == CW_MASTER_CONFIG_KEYWORD_CASESENSITIVEAPPS) ||
1193 (keyword == CW_MASTER_CONFIG_KEYWORD_CASESENSITIVEVARS)) {
1194
1195 parse_dialplan_case_sense_assignment();
1196 }
10751197 else {
10761198
1077 sym = parse_dialplan_case_sense_assignment(sym);
1199 // syntax error: keyword not recognised
10781200
10791201 } // end if
10801202
1081 return sym;
1082 } // end parse_dialplan_parameter_assignment
1203 return;
1204 } // end _parse_dialplan_parameter_assignment
10831205
10841206
10851207 // --------------------------------------------------------------------------
1086 // private function: parse_dialplan_engine_assignment()
1208 // private function: _parse_dialplan_engine_assignment()
10871209 // --------------------------------------------------------------------------
10881210 //
10891211 // This function implements production rule # 14 ...
10901212 //
10911213 // (14) dialplan-engine-assignment =
10921214 // "Engine" "=" dialplan-engine-name ";"
1093 //
10941215
1095 static Symbol parse_dialplan_engine_assignment(const Symbol current_sym) {
1216 static Symbol _parse_dialplan_engine_assignment(cw_master_config_parser p) {
10961217 Symbol sym;
1097 cardinal hash;
1218 cardinal engine;
10981219
1220 // start symbol has already been processed by caller
1221
10991222 sym = getsym();
11001223
11011224 if (sym == ASSIGN_OPERATOR) {
------
11031226
11041227 if (sym == STRING) {
11051228
1106 hash = get_hash();
1229 engine = gethash();
11071230
1108 if ((hash == CW_MASTER_CONFIG_KEYWORD_DPENGINEASTV1) ||
1109 (hash == CW_MASTER_CONFIG_KEYWORD_DPENGINEASTV1LONG)) {
1231 if ((engine == CW_MASTER_CONFIG_KEYWORD_DPENGINEASTV1) ||
1232 (engine == CW_MASTER_CONFIG_KEYWORD_DPENGINEASTV1LONG)) {
11101233 sym = getsym();
11111234
11121235 // this is the only engine we have right now
------
11141237 if (sym == END_OF_ASSIGNMENT) {
11151238 sym = getsym();
11161239
1117 emit(DIALPLAN, CW_MASTER_CONFIG_KEYWORD_ENGINE, hash);
1240 emit(DIALPLAN, CW_MASTER_CONFIG_KEYWORD_ENGINE, engine);
11181241 }
11191242 else {
11201243
------
11401263
11411264 } // end if
11421265
1143 return sym;
1144 } // end parse_dialplan_engine_assignment
1266 return;
1267 } // end _parse_dialplan_engine_assignment
11451268
11461269
11471270 // --------------------------------------------------------------------------
1148 // private function: parse_dialplan_filename_assignment()
1271 // private function: _parse_dialplan_filename_assignment()
11491272 // --------------------------------------------------------------------------
11501273 //
11511274 // This function implements production rule # 15 ...
11521275 //
11531276 // (15) dialplan-filename-assignment =
11541277 // "Filename" "=" filename-string ";"
1155 //
11561278
1157 static Symbol parse_dialplan_filename_assignment(const Symbol current_sym) {
1279 static void _parse_dialplan_filename_assignment(cw_master_config_parser p) {
11581280 Symbol sym;
11591281 char *filename;
11601282
1283 // start symbol has already been processed by caller
1284
11611285 sym = getsym();
11621286
11631287 if (sym == ASSIGN_OPERATOR) {
------
11991323
12001324 } // end if
12011325
1202 return sym;
1203 } // end parse_dialplan_filename_assignment
1326 return;
1327 } // end _parse_dialplan_filename_assignment
12041328
12051329
12061330 // --------------------------------------------------------------------------
1207 // private function: parse_dialplan_config_method_assignment()
1331 // private function: _parse_dialplan_config_method_assignment()
12081332 // --------------------------------------------------------------------------
12091333 //
12101334 // This function implements production rule # 16 ...
12111335 //
12121336 // (16) dialplan-cfg-format-assignment =
1213 // "MethodOfConfiguration" "=" ( "ini" | "plist" | "odbc" | "odbx") ";"
1214 //
1337 // "ConfigurationMethod" "=" ( "ini" | "plist" | "odbc" | "odbx") ";"
12151338
1216 static Symbol parse_dialplan_config_method_assignment(const Symbol current_sym) {
1339 static void _parse_dialplan_config_method_assignment(cw_master_config_parser p) {
12171340 Symbol sym;
1218 cardinal hash;
1341 cardinal method;
12191342
1343 // start symbol has already been processed by caller
1344
12201345 sym = getsym();
12211346
12221347 if (sym == ASSIGN_OPERATOR) {
------
12241349
12251350 if (sym == STRING) {
12261351
1227 hash = get_hash();
1352 method = gethash();
12281353
1229 if ((hash == CW_MASTER_CONFIG_KEYWORD_INI) ||
1230 (hash == CW_MASTER_CONFIG_KEYWORD_PLIST) ||
1231 (hash == CW_MASTER_CONFIG_KEYWORD_ODBC) ||
1232 (hash == CW_MASTER_CONFIG_KEYWORD_ODBX)) {
1354 if ((method == CW_MASTER_CONFIG_KEYWORD_INI) ||
1355 (method == CW_MASTER_CONFIG_KEYWORD_PLIST) ||
1356 (method == CW_MASTER_CONFIG_KEYWORD_ODBC) ||
1357 (method == CW_MASTER_CONFIG_KEYWORD_ODBX)) {
12331358 sym = getsym();
12341359
12351360 if (sym == END_OF_ASSIGNMENT) {
12361361 sym = getsym();
12371362
1238 emit(DIALPLAN, CW_MASTER_CONFIG_KEYWORD_CONFIGURATIONMETHOD, hash);
1363 emit(DIALPLAN, CW_MASTER_CONFIG_KEYWORD_CONFIGURATIONMETHOD, method);
12391364 }
12401365 else {
12411366
------
12621387
12631388 } // end if
12641389
1265 return sym;
1266 } // end parse_dialplan_config_method_assignment
1390 return;
1391 } // end _parse_dialplan_config_method_assignment
12671392
12681393
12691394 // --------------------------------------------------------------------------
1270 // private function: parse_dsn_assignment()
1395 // private function: _parse_dsn_assignment()
12711396 // --------------------------------------------------------------------------
12721397 //
12731398 // This function implements production rule # 17 ...
12741399 //
12751400 // (17) dsn-assignment =