[0001] [0002] [0003] [0004] [0005] [0006] [0007] [0008] [0009] [0010] [0011] [0012] [0013] [0014] [0015] [0016] [0017] [0018] [0019] [0020] [0021] [0022] [0023] [0024] [0025] [0026] [0027] [0028] [0029] [0030] [0031] [0032] [0033] [0034] [0035] [0036] [0037] [0038] [0039] [0040] [0041] [0042] [0043] [0044] [0045] [0046] [0047] [0048] [0049] [0050] [0051] [0052] [0053] [0054] [0055] [0056] [0057] [0058] [0059] [0060] [0061] [0062] [0063] [0064] [0065] [0066] [0067] [0068] [0069] [0070] [0071] [0072] [0073] [0074] [0075] [0076] [0077] [0078] [0079] [0080] [0081] [0082] [0083] [0084] [0085] [0086] [0087] [0088] [0089] [0090] [0091] [0092] [0093] [0094] [0095] [0096] [0097] [0098] [0099] [0100] [0101] [0102] [0103] [0104] [0105] [0106] [0107] [0108] [0109] [0110] [0111] [0112] [0113] [0114] [0115] [0116] [0117] [0118] [0119] [0120] [0121] [0122] [0123] [0124] [0125] [0126] [0127] [0128] [0129] [0130] [0131] [0132] [0133] [0134] [0135] [0136] [0137] [0138] [0139] [0140] [0141] [0142] [0143] [0144] [0145] [0146] [0147] [0148] [0149] [0150] [0151] [0152] [0153] [0154] [0155] [0156] [0157] [0158] [0159] [0160] [0161] [0162] [0163] [0164] [0165] [0166] [0167] [0168] [0169] [0170] [0171] [0172] [0173] [0174] [0175] [0176] [0177] [0178] [0179] [0180] [0181] [0182] [0183] [0184] [0185] [0186] [0187] [0188] [0189] [0190] [0191] [0192] [0193] [0194] [0195] [0196] [0197] [0198] [0199] [0200] [0201] [0202] [0203] [0204] [0205] [0206] [0207] [0208] [0209] [0210] [0211] [0212] [0213] [0214] [0215] [0216] [0217] [0218] [0219] [0220] [0221] [0222] [0223] [0224] [0225] [0226] [0227] [0228] [0229] [0230] [0231] [0232] [0233] [0234] [0235] [0236] [0237] [0238] [0239] [0240] [0241] [0242] [0243] [0244] [0245] [0246]
/*****************************************************************************/ /* MetaCon.h */ /*****************************************************************************/ #ifndef METACON_H_LOADED #define METACON_H_LOADED 1 #include "wasd.h" /* essentially depth of if-elif-endif nesting */ #define METACON_MAX_FLOW_CONTROL 8 #define METACON_TOKEN_DEFAULT 0 #define METACON_TOKEN_PRE 1 #define METACON_TOKEN_POST 2 #define METACON_TOKEN_TEXT 3 #define METACON_TOKEN_IF 4 #define METACON_TOKEN_ELIF 5 #define METACON_TOKEN_ELSE 6 #define METACON_TOKEN_UNIF 7 #define METACON_TOKEN_IFIF 8 #define METACON_TOKEN_ENDIF 9 #define METACON_TOKEN_SERVICE 10 #define METACON_TOKEN_INCLUDE 11 #define METACON_TOKEN_DIRECTORY 12 #define METACON_TOKEN_CONFIG 13 #define METACON_TOKEN_DICT 14 #define METACON_TOKEN_COMMENT 15 #define METACON_TOKEN_VERSION 16 #define METACON_TOKEN_TEST 17 #define METACON_TYPE_FILE 1 #define METACON_TYPE_CONFIG 2 #define METACON_FLOW_DEFAULT 0 #define METACON_FLOW_IF 1 #define METACON_FLOW_ELIF 2 #define METACON_FLOW_ELSE 3 #define METACON_FLOW_UNIF 4 #define METACON_FLOW_IFIF 5 #define METACON_FLOW_ENDIF 6 #define METACON_STATE_DEFAULT 0 #define METACON_STATE_BEFORE 1 #define METACON_STATE_NOW 2 #define METACON_STATE_AFTER 3 #define METACON_REPORT_INFORM 1 #define METACON_REPORT_WARNING 2 #define METACON_REPORT_ERROR 3 #define METACON_CONFIG_DIR_LENGTH 127 #define METACON_X509_REQUIRED 1 #define METACON_X509_ABORT 2 /*******************/ /* data structures */ /*******************/ /* Store these structures naturally-aligned on AXP. Uses a bit more storage but makes access as efficient as possible. */ #pragma member_alignment __save #pragma member_alignment typedef struct MetaConReportStruct METACON_REPORT; struct MetaConReportStruct { int /* number of significant errors */ ErrorCount, /* number of informational reports */ InformCount, /* items in report */ ItemCount, /* length of text in report */ TextLength, /* number of warning reports */ WarningCount; int64 /* revision date/time for source file */ FileTime64, /* date/time file loaded */ LoadTime64; char /* file name stored locally */ FileName [ODS_MAX_FILE_NAME_LENGTH+1]; char /* pointer to dynamically allocated memory */ *TextPtr; }; #define METACON_REGEX_PREG_MAX 3 typedef struct MetaConLineStruct METACON_LINE; struct MetaConLineStruct { BOOL ConfigProblem, LookupAgentUsed, MetaAgentUsed, NetAcceptAgentUsed, WatchFilter, WatchInactive, WatchThisOne; int BufferLength, BufferSize, FlowControlLevel, /* only used for formatting reports! */ Length, MetaFileLevel, /* only used for formatting reports! */ MetaFileType, Number, Size, Token, VersionNumber; void *LineDataPtr; char *BufferPtr, *InlineTextPtr, *TextPtr; uchar VersionCompare [2]; /* storage for compiled regular expression */ regex_t RegexPreg[METACON_REGEX_PREG_MAX]; regex_t *RegexPregPtr; int RegexPregCount; BOOL RegexCompiled; /* per-rule round-robin count storage */ unsigned long RoundRobinCount; /* request using the parse functions */ REQUEST_STRUCT *RequestPtr; /* storage pointed to by above */ char Storage[]; }; typedef struct MetaConStruct META_CONFIG; struct MetaConStruct { BOOL /* an [IncludeFile] directive was encountered */ IncludeFile, /* a if(lookup_agent:) was encountered */ LookupAgentUsed, /* a if(meta_agent:) was encountered */ MetaAgentUsed, /* a if(accept_agent:) was encountered */ NetAcceptAgentUsed; int /* number of "lines" in structure */ LineCount, /* total number of logical names translated */ LnmCount, /* current logical name index */ LnmIndex, /* state/flow index during parsing */ ParseIndex, /* used by MetaconReport() to override line/number data */ ReportLineNumber, /* number of bytes allocated to this structure */ ThisSize; int /* control during parsing */ ParseFlow [METACON_MAX_FLOW_CONTROL], /* control during parsing */ ParseState [METACON_MAX_FLOW_CONTROL]; char /* used by MetaconReport() to override line/number data */ *ReportLinePtr; /* pointers to the various varieties of meta config data */ void *AuthMetaPtr, *ConfigMetaPtr, *MappingMetaPtr, *MsgMetaPtr, *ServiceMetaPtr; ODS_STRUCT /* only used during loading to point to the current file */ *CurrentOdsPtr; METACON_REPORT /* holds report text related to the load */ LoadReport; METACON_LINE /* not actually text (to start with) */ *ContentPtr, /* the current "line" being parsed */ *ParsePtr, /* the next "line" to be parsed */ *ParseNextPtr; METACON_LINE /* not actually lines of text remember */ Lines[]; }; #pragma member_alignment __restore /***********************/ /* function prototypes */ /***********************/ char* MetaConAgentBegin (REQUEST_STRUCT*); void MetaConAgentEnd (REQUEST_STRUCT*); char* MetaConBuffer (METACON_LINE*, char**, int); BOOL MetaconClientConcurrent (METACON_LINE*, char**, int); BOOL MetaConCommonRequestHeader (char*); BOOL MetaConConditionalList (METACON_LINE*, char**, int, char*); void* MetaConDatum (REQUEST_STRUCT*, char*, int); void MetaConDictionary (REQUEST_STRUCT*, char*); char* MetaConEvaluate (METACON_LINE*); BOOL MetaConEvaluateClusterMember (METACON_LINE*, char**, int); BOOL MetaConEvaluateInstance (METACON_LINE*, char**, int); BOOL MetaConEvaluateTime (METACON_LINE*, char**, int); BOOL MetaConEvaluateTrnLnm (METACON_LINE*, char**, int); BOOL MetaConEvaluateRoundRobin (METACON_LINE*, char**, int); MetaConFree (META_CONFIG**, CALL_BACK); MetaConInstanceList (); int MetaConLoad (META_CONFIG**, char*, CALL_BACK, BOOL, BOOL); MetaConNoteThis (char*); char* MetaConParse (REQUEST_STRUCT*, META_CONFIG*, METACON_LINE**, int); METACON_LINE* MetaConParseRaw (META_CONFIG*); int MetaConReport (META_CONFIG*, int, char*, ...); MetaConParseReset (META_CONFIG*, BOOL); BOOL MetaConSetBoolean (META_CONFIG*, char*); MetaConSetStringList (META_CONFIG*, char*, char**, int*); int MetaConSetInteger (META_CONFIG*, char*); char* MetaConShowSeconds (REQUEST_STRUCT*, int); int MetaConSetSeconds (META_CONFIG*, char*, int); int MetaConStartupReport (META_CONFIG*, char*); char* MetaConSubstitute (REQUEST_STRUCT*, char*); MetaConUnload (META_CONFIG**, CALL_BACK); #endif /* METACON_H_LOADED */ /*****************************************************************************/