00001
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef CPELANG_H_
00039 #define CPELANG_H_
00040
00041 #include <stdlib.h>
00042
00043 #include "cpeuri.h"
00044 #include "oscap.h"
00045
00049 typedef enum {
00050 CPE_LANG_OPER_INVALID = 0x00,
00051 CPE_LANG_OPER_AND = 0x01,
00052 CPE_LANG_OPER_OR = 0x02,
00053 CPE_LANG_OPER_MATCH = 0x04,
00054
00055 CPE_LANG_OPER_MASK = 0xFF,
00056 CPE_LANG_OPER_NOT = 0x100,
00057
00058 CPE_LANG_OPER_NAND = CPE_LANG_OPER_AND | CPE_LANG_OPER_NOT,
00059 CPE_LANG_OPER_NOR = CPE_LANG_OPER_OR | CPE_LANG_OPER_NOT,
00060 } cpe_lang_oper_t;
00061
00066 struct cpe_testexpr;
00067
00072 struct cpe_lang_model;
00073
00078 struct cpe_platform;
00079
00090 struct cpe_platform_iterator;
00092 struct cpe_platform *cpe_platform_iterator_next(struct cpe_platform_iterator *it);
00094 bool cpe_platform_iterator_has_more(struct cpe_platform_iterator *it);
00096 void cpe_platform_iterator_free(struct cpe_platform_iterator *it);
00097
00102 struct cpe_testexpr_iterator;
00104 struct cpe_testexpr *cpe_testexpr_iterator_next(struct cpe_testexpr_iterator *it);
00106 bool cpe_testexpr_iterator_has_more(struct cpe_testexpr_iterator *it);
00108 void cpe_testexpr_iterator_free(struct cpe_testexpr_iterator *it);
00109
00123 cpe_lang_oper_t cpe_testexpr_get_oper(const struct cpe_testexpr *item);
00124
00130 struct cpe_testexpr_iterator *cpe_testexpr_get_meta_expr(const struct cpe_testexpr *item);
00131
00137 const struct cpe_name *cpe_testexpr_get_meta_cpe(const struct cpe_testexpr *item);
00138
00144 const struct cpe_testexpr *cpe_testexpr_get_next(const struct cpe_testexpr *expr);
00145
00150 const char *cpe_lang_model_get_ns_prefix(const struct cpe_lang_model *item);
00151
00156 struct cpe_platform_iterator *cpe_lang_model_get_platforms(const struct cpe_lang_model *item);
00157
00158
00159
00160
00161
00162 struct cpe_platform *cpe_lang_model_get_item(const struct cpe_lang_model *item, const char *key);
00163
00168 struct xml_metadata_iterator *cpe_lang_model_get_xmlns(const struct cpe_lang_model *item);
00169
00174 const char *cpe_platform_get_id(const struct cpe_platform *item);
00179 const char *cpe_platform_get_remark(const struct cpe_platform *item);
00184 struct oscap_title_iterator *cpe_platform_get_titles(const struct cpe_platform *item);
00189 const struct cpe_testexpr *cpe_platform_get_expr(const struct cpe_platform *item);
00190
00195
00196
00209 bool cpe_lang_model_add_platform(struct cpe_lang_model *lang, struct cpe_platform *platform);
00214 bool cpe_lang_model_add_xml(struct cpe_lang_model *lang, struct xml_metadata *xml);
00219 bool cpe_platform_add_title(struct cpe_platform *platform, struct oscap_title *title);
00220
00225
00226
00233 bool cpe_testexpr_add_subexpression(struct cpe_testexpr *expr, struct cpe_testexpr *sub);
00234
00243
00244 void cpe_platform_iterator_remove(struct cpe_platform_iterator *it, struct cpe_lang_model *parent);
00245
00259 struct cpe_lang_model *cpe_lang_model_new(void);
00260
00265 struct cpe_testexpr *cpe_testexpr_new(void);
00266
00271 struct cpe_platform *cpe_platform_new(void);
00272
00286 bool cpe_lang_model_set_ns_prefix(struct cpe_lang_model *model, const char *new_prefix);
00291 bool cpe_platform_set_id(struct cpe_platform *platform, const char *new_id);
00296 bool cpe_platform_set_remark(struct cpe_platform *platform, const char *new_remark);
00303 bool cpe_platform_set_expr(struct cpe_platform *platform, struct cpe_testexpr *expr);
00310 bool cpe_testexpr_set_oper(struct cpe_testexpr *expr, cpe_lang_oper_t oper);
00311
00319 bool cpe_testexpr_set_name(struct cpe_testexpr *expr, struct cpe_name *name);
00320
00334 void cpe_testexpr_free(struct cpe_testexpr *expr);
00335
00340 void cpe_lang_model_free(struct cpe_lang_model *platformspec);
00341
00346 void cpe_platform_free(struct cpe_platform *platform);
00347
00360 const char * cpe_lang_model_supported(void);
00361
00368 bool cpe_platform_match_cpe(struct cpe_name **cpe, size_t n, const struct cpe_platform *platform);
00369
00374 struct cpe_lang_model *cpe_lang_model_import(const struct oscap_import_source *source);
00375
00382 void cpe_lang_model_export(const struct cpe_lang_model *spec, struct oscap_export_target *target);
00383
00387
00390 #endif