/* aestetics: I like keywords separated from user attributes */
static AVPL* all_keywords = NULL;
+/* configuration error */
+GString* config_error;
+
+static void report_error(guint8* fmt, ...) {
+ static guint8 error_buffer[DEBUG_BUFFER_SIZE];
+
+ va_list list;
+
+ va_start( list, fmt );
+ g_vsnprintf(error_buffer,DEBUG_BUFFER_SIZE,fmt,list);
+ va_end( list );
+
+ g_string_append(config_error,error_buffer);
+ g_string_append_c(config_error,'\n');
+
+}
+
/* use as: setting = extract_named_xxx(avpl,keyword,default_value); */
static int extract_named_int(AVPL* avpl, guint8* keyword, int value) {
AVP* avp = NULL;
new->type = MATE_UNK_TYPE;
new->transforms = g_ptr_array_new();
new->extra = new_avpl(name);
- new->hfid_proto = -1;
+ new->last_id = 0;
+ new->hfid = -1;
+ new->my_hfids = g_hash_table_new(g_str_hash,g_str_equal);
+ new->items = g_hash_table_new(g_direct_hash,g_direct_equal);
+ new->ett = -1;
+ new->ett_attr = -1;
+ new->ett_times = -1;
+ new->ett_children = -1;
+
new->discard_pdu_attributes = matecfg->discard_pdu_attributes;
new->last_to_be_created = matecfg->last_to_be_created;
- new->drop_pdu = matecfg->drop_pdu;
- new->drop_gop = matecfg->drop_gop;
- new->expiration = matecfg->gog_expiration;
- new->show_pdu_tree = matecfg->show_pdu_tree;
- new->show_times = matecfg->show_times;
- new->last_id = 0;
+ new->hfid_proto = -1;
new->hfid_ranges = NULL;
new->hfids_attr = NULL;
+ new->drop_pdu = matecfg->drop_pdu;
+ new->criterium_match_mode = AVPL_NO_MATCH;
new->criterium = NULL;
- new->start = NULL;
- new->stop = NULL;
- new->key = NULL;
- new->keys = NULL;
- new->gop_as_subtree = FALSE;
-
- new->hfid = -1;
new->hfid_pdu_rel_time = -1;
new->hfid_pdu_time_in_gop = -1;
- new->my_hfids = g_hash_table_new(g_str_hash,g_str_equal);
- new->items = g_hash_table_new(g_direct_hash,g_direct_equal);
- new->hfid_gop_pdu = -1;
+ new->expiration = -1.0;
new->hfid_start_time = -1;
new->hfid_stop_time = -1;
new->hfid_last_time = -1;
+
+ new->start = NULL;
+ new->stop = NULL;
+ new->key = NULL;
+ new->show_pdu_tree = matecfg->show_pdu_tree;
+ new->show_times = matecfg->show_times;
+ new->drop_gop = matecfg->drop_gop;
+ new->idle_timeout = -1.0;
+ new->lifetime = -1.0;
+ new->hfid_gop_pdu = -1;
new->hfid_gop_num_pdus = -1;
- new->hfid_gog_num_of_gops = -1;
- new->hfid_gog_gop = -1;
-
- new->ett = -1;
- new->ett_attr = -1;
- new->ett_times = -1;
- new->ett_children = -1;
-
new->gop_index = NULL;
new->gog_index = NULL;
+
+ new->gop_as_subtree = FALSE;
+ new->keys = NULL;
+ new->hfid_gog_num_of_gops = -1;
+ new->hfid_gog_gop = -1;
return new;
}
static mate_cfg_gop* new_gopcfg(guint8* name) {
mate_cfg_gop* new = new_mate_cfg_item(name);
+
new->type = MATE_GOP_TYPE;
-
+ new->expiration = matecfg->gop_expiration;
+ new->idle_timeout = matecfg->gop_idle_timeout;
+ new->lifetime = matecfg->gop_lifetime;
+ new->show_pdu_tree = matecfg->show_pdu_tree;
+ new->show_times = matecfg->show_times;
+ new->drop_gop = matecfg->drop_gop;
+
g_hash_table_insert(matecfg->gopcfgs,(gpointer) new->name, (gpointer) new);
new->gop_index = g_hash_table_new(g_str_hash,g_str_equal);
new->keys = new_loal(name);
new->expiration = matecfg->gog_expiration;
-
+
g_hash_table_insert(matecfg->gogcfgs,new->name,new);
return new;
if (action) {
if ( ! action(avpl) ) {
- g_warning("MATE: Error on: %s",avpl->name);
+ report_error("MATE: Error on: %s",avpl->name);
return FALSE;
}
} else {
- g_warning("MATE: action '%s' unknown in: %s",name,avpl->name);
+ report_error("MATE: action '%s' unknown in: %s",name,avpl->name);
return FALSE;
}
}
return TRUE;
} else {
- g_warning("MATE: error reading config file: %s",loal->name);
+ report_error("MATE: error reading config file: %s",loal->name);
return FALSE;
}
}
if (( as = g_hash_table_lookup(where,ip) )) {
g_free(ip);
if (! g_str_equal(as,how)) {
- g_warning("MATE Error: add field to Pdu: attempt to add %s(%i) as %s"
+ report_error("MATE Error: add field to Pdu: attempt to add %s(%i) as %s"
" failed: field already added as '%s'",what,hfi->id,how,as);
return FALSE;
}
}
if (! exists) {
- g_warning("MATE Error: cannot find field %s",what);
+ report_error("MATE Error: cannot find field %s",what);
}
return exists;
AVP* attr_avp;
if (! name ) {
- g_warning("MATE: PduDef: No Name in: %s",avpl->name);
+ report_error("MATE: PduDef: No Name in: %s",avpl->name);
return FALSE;
}
if (! cfg) {
cfg = new_pducfg(name);
} else {
- g_warning("MATE: PduDef: No such PDU: '%s' in: %s",cfg->name,avpl->name);
+ report_error("MATE: PduDef: No such PDU: '%s' in: %s",cfg->name,avpl->name);
return FALSE;
}
if (hfi) {
cfg->hfid_proto = hfi->id;
} else {
- g_warning("MATE: PduDef: no such proto: '%s' in: %s",proto,avpl->name);
+ report_error("MATE: PduDef: no such proto: '%s' in: %s",proto,avpl->name);
return FALSE;
}
g_ptr_array_add(cfg->hfid_ranges,(gpointer)hfidp);
g_string_sprintfa(matecfg->mate_attrs_filter, "||%s",transports[i]);
} else {
- g_warning("MATE: PduDef: no such proto: '%s' for Transport in: %s",proto,avpl->name);
+ report_error("MATE: PduDef: no such proto: '%s' for Transport in: %s",proto,avpl->name);
g_strfreev(transports);
return FALSE;
}
g_strfreev(transports);
}
} else {
- g_warning("MATE: PduDef: no Transport for '%s' in: %s",cfg->name,avpl->name);
+ report_error("MATE: PduDef: no Transport for '%s' in: %s",cfg->name,avpl->name);
return FALSE;
}
while (( attr_avp = extract_first_avp(avpl) )) {
if ( ! add_hfid(attr_avp->v,attr_avp->n,cfg->hfids_attr) ) {
- g_warning("MATE: PduDef: failed to set PDU attribute '%s' in: %s",attr_avp->n,avpl->name);
+ report_error("MATE: PduDef: failed to set PDU attribute '%s' in: %s",attr_avp->n,avpl->name);
return FALSE;
}
g_string_sprintfa(matecfg->mate_attrs_filter, "||%s",attr_avp->v);
mate_cfg_pdu* cfg = lookup_using_index_avp(avpl,KEYWORD_FOR,matecfg->pducfgs,&name);
if (! name ) {
- g_warning("MATE: PduExtra: No For in: %s",avpl->name);
+ report_error("MATE: PduExtra: No For in: %s",avpl->name);
return FALSE;
}
if (! cfg) {
- g_warning("MATE: PduExtra: no such Pdu '%s' in: %s",name,avpl->name);
+ report_error("MATE: PduExtra: no such Pdu '%s' in: %s",name,avpl->name);
return FALSE;
}
while (( attr_avp = extract_first_avp(avpl) )) {
if ( ! add_hfid(attr_avp->v,attr_avp->n,cfg->hfids_attr) ) {
- g_warning("MATE: PduExtra: failed to set attr '%s' in: %s",attr_avp->n,avpl->name);
+ report_error("MATE: PduExtra: failed to set attr '%s' in: %s",attr_avp->n,avpl->name);
delete_avp(attr_avp);
return FALSE;
}
guint8* mode = extract_named_str(avpl, KEYWORD_MODE, NULL);
if (! name ) {
- g_warning("MATE: PduCriteria: No For in: %s",avpl->name);
+ report_error("MATE: PduCriteria: No For in: %s",avpl->name);
return FALSE;
}
if (!cfg) {
- g_warning("MATE: PduCriteria: Pdu '%s' does not exist in: %s",name,avpl->name);
+ report_error("MATE: PduCriteria: Pdu '%s' does not exist in: %s",name,avpl->name);
return FALSE;
}
} else if ( g_strcasecmp(mode,KEYWORD_REJECT) == 0 ) {
mode = matecfg->reject;
} else {
- g_warning("MATE: PduCriteria: no such criteria mode: '%s' in %s",mode,avpl->name);
+ report_error("MATE: PduCriteria: no such criteria mode: '%s' in %s",mode,avpl->name);
return FALSE;
}
} else {
} else if ( g_strcasecmp(match,KEYWORD_STRICT) == 0 ) {
match_mode = AVPL_STRICT;
} else {
- g_warning("MATE: PduCriteria: Config error: no such match mode '%s' in: %s",match,avpl->name);
+ report_error("MATE: PduCriteria: Config error: no such match mode '%s' in: %s",match,avpl->name);
return FALSE;
}
}
if (cfg->criterium) {
/* FEATURE: more criteria */
- g_warning("MATE: PduCriteria: PduCriteria alredy exists for '%s' in: %s",name,avpl->name);
+ report_error("MATE: PduCriteria: PduCriteria alredy exists for '%s' in: %s",name,avpl->name);
return FALSE;
}
guint8* lib = extract_named_str(avpl,KEYWORD_LIB,NULL);
if ( ! filename && ! lib ) {
- g_warning("MATE: Include: no Filename or Lib given in: %s",avpl->name);
+ report_error("MATE: Include: no Filename or Lib given in: %s",avpl->name);
return FALSE;
}
if ( filename && lib ) {
- g_warning("MATE: Include: use either Filename or Lib, not both. in: %s",avpl->name);
+ report_error("MATE: Include: use either Filename or Lib, not both. in: %s",avpl->name);
return FALSE;
}
/* FIXME: stop recursion */
if ( ! mate_load_config(filename) ) {
- g_warning("MATE: Include: Error Loading '%s' in: %s",filename,avpl->name);
+ report_error("MATE: Include: Error Loading '%s' in: %s",filename,avpl->name);
if (lib) g_free(filename);
return FALSE;
}
matecfg->gog_expiration = extract_named_float(avpl, KEYWORD_GOGEXPIRE,matecfg->gog_expiration);
+ matecfg->gop_expiration = extract_named_float(avpl, KEYWORD_GOPEXPIRATION,matecfg->gop_expiration);
+ matecfg->gop_idle_timeout = extract_named_float(avpl, KEYWORD_GOPIDLETIMEOUT,matecfg->gop_idle_timeout);
+ matecfg->gop_lifetime = extract_named_float(avpl, KEYWORD_GOPLIFETIME,matecfg->gop_lifetime);
matecfg->discard_pdu_attributes = extract_named_bool(avpl, KEYWORD_DISCARDPDU,matecfg->discard_pdu_attributes);
matecfg->drop_pdu = extract_named_bool(avpl, KEYWORD_DROPPDU,matecfg->drop_pdu);
matecfg->drop_gop = extract_named_bool(avpl, KEYWORD_DROPGOP,matecfg->drop_gop);
} else if ( g_strcasecmp(match,KEYWORD_STRICT) == 0 ) {
match_mode = AVPL_STRICT;
} else {
- g_warning("MATE: Transform: no such match mode: '%s' in: %s",match,avpl->name);
+ report_error("MATE: Transform: no such match mode: '%s' in: %s",match,avpl->name);
return FALSE;
}
} else {
} else if ( g_strcasecmp(mode,KEYWORD_REPLACE) == 0 ) {
replace_mode = AVPL_REPLACE;
} else {
- g_warning("MATE: Transform: no such replace mode: '%s' in: %s",mode,avpl->name);
+ report_error("MATE: Transform: no such replace mode: '%s' in: %s",mode,avpl->name);
return FALSE;
}
}
if (! name) {
- g_warning("MATE: Transform: no Name in: %s",avpl->name);
+ report_error("MATE: Transform: no Name in: %s",avpl->name);
return FALSE;
}
mate_cfg_pdu* cfg = lookup_using_index_avp(avpl,KEYWORD_FOR,hash,&cfg_name);;
if (! name ) {
- g_warning("MATE: %s: no Name in: %s",keyword,avpl->name);
+ report_error("MATE: %s: no Name in: %s",keyword,avpl->name);
return FALSE;
}
if (! cfg_name ) {
- g_warning("MATE: %s: no For in: %s",keyword,avpl->name);
+ report_error("MATE: %s: no For in: %s",keyword,avpl->name);
return FALSE;
}
if (! cfg ) {
- g_warning("MATE: %s: '%s' doesn't exist in: %s",keyword,cfg_name,avpl->name);
+ report_error("MATE: %s: '%s' doesn't exist in: %s",keyword,cfg_name,avpl->name);
return FALSE;
}
if (!transf) {
- g_warning("MATE: %s: Transform '%s' doesn't exist in: %s",keyword,name,avpl->name);
+ report_error("MATE: %s: Transform '%s' doesn't exist in: %s",keyword,name,avpl->name);
return FALSE;
}
guint8* on = extract_named_str(avpl,KEYWORD_ON,NULL);
if (! name ) {
- g_warning("MATE: GopDef: no Name in: %s",avpl->name);
+ report_error("MATE: GopDef: no Name in: %s",avpl->name);
return FALSE;
}
if (!cfg) {
cfg = new_gopcfg(name);
} else {
- g_warning("MATE: GopDef: Gop '%s' exists already in: %s",name,avpl->name);
+ report_error("MATE: GopDef: Gop '%s' exists already in: %s",name,avpl->name);
return FALSE;
}
if (! on ) {
- g_warning("MATE: GopDef: no On in: %s",avpl->name);
+ report_error("MATE: GopDef: no On in: %s",avpl->name);
return FALSE;
}
+
+ if (g_hash_table_lookup(matecfg->pducfgs,on) == NULL ) {
+ report_error("MATE: GopDef: Pdu '%s' does not exist in: %s",on,avpl->name);
+ return FALSE;
+ }
if (g_hash_table_lookup(matecfg->gops_by_pduname,on) ) {
- g_warning("MATE: GopDef: Gop for Pdu '%s' exists already in: %s",on,avpl->name);
+ report_error("MATE: GopDef: Gop for Pdu '%s' exists already in: %s",on,avpl->name);
return FALSE;
} else {
g_hash_table_insert(matecfg->gops_by_pduname,on,cfg);
cfg->drop_gop = extract_named_bool(avpl, KEYWORD_DROPGOP,matecfg->drop_gop);
cfg->show_pdu_tree = extract_named_str(avpl, KEYWORD_SHOWPDUTREE, matecfg->show_pdu_tree);
cfg->show_times = extract_named_bool(avpl, KEYWORD_SHOWGOPTIMES,matecfg->show_times);
-
+ cfg->expiration = extract_named_float(avpl, KEYWORD_GOPEXPIRATION,matecfg->gop_expiration);
+ cfg->idle_timeout = extract_named_float(avpl, KEYWORD_GOPIDLETIMEOUT,matecfg->gop_idle_timeout);
+ cfg->lifetime = extract_named_float(avpl, KEYWORD_GOPLIFETIME,matecfg->gop_lifetime);
+
cfg->key = avpl;
return TRUE;
mate_cfg_gop* cfg = lookup_using_index_avp(avpl, KEYWORD_FOR,matecfg->gopcfgs,&name);;
if (! name ) {
- g_warning("MATE: GopStart: no For in: %s",avpl->name);
+ report_error("MATE: GopStart: no For in: %s",avpl->name);
return FALSE;
}
if (!cfg) {
- g_warning("MATE: GopStart: Gop '%s' doesn't exist in: %s",name,avpl->name);
+ report_error("MATE: GopStart: Gop '%s' doesn't exist in: %s",name,avpl->name);
return FALSE;
}
if (cfg->start) {
/* FEATURE: more start conditions */
- g_warning("MATE: GopStart: GopStart for '%s' exists already in: %s",name,avpl->name);
+ report_error("MATE: GopStart: GopStart for '%s' exists already in: %s",name,avpl->name);
return FALSE;
}
mate_cfg_gop* cfg = lookup_using_index_avp(avpl, KEYWORD_FOR,matecfg->gopcfgs,&name);;
if (! name ) {
- g_warning("MATE: GopStop: no For in: %s",avpl->name);
+ report_error("MATE: GopStop: no For in: %s",avpl->name);
return FALSE;
}
if (!cfg) {
- g_warning("MATE: GopStop: Gop '%s' doesn't exist in: %s",name,avpl->name);
+ report_error("MATE: GopStop: Gop '%s' doesn't exist in: %s",name,avpl->name);
return FALSE;
}
if (cfg->stop) {
- g_warning("MATE: GopStop: GopStop alredy exists for '%s' in: %s",name,avpl->name);
+ report_error("MATE: GopStop: GopStop alredy exists for '%s' in: %s",name,avpl->name);
return FALSE;
}
mate_cfg_gop* cfg = lookup_using_index_avp(avpl, KEYWORD_FOR,matecfg->gopcfgs,&name);;
if (! name ) {
- g_warning("MATE: GopExtra: no For in: %s",avpl->name);
+ report_error("MATE: GopExtra: no For in: %s",avpl->name);
return FALSE;
}
if (!cfg) {
- g_warning("MATE: GopExtra: Gop '%s' does not exist in: %s",name,avpl->name);
+ report_error("MATE: GopExtra: Gop '%s' does not exist in: %s",name,avpl->name);
return FALSE;
}
cfg->drop_gop = extract_named_bool(avpl, KEYWORD_DROPGOP,cfg->drop_gop);
cfg->show_pdu_tree = extract_named_str(avpl, KEYWORD_SHOWPDUTREE, cfg->show_pdu_tree);
cfg->show_times = extract_named_bool(avpl, KEYWORD_SHOWGOPTIMES,cfg->show_times);
-
+ cfg->expiration = extract_named_float(avpl, KEYWORD_GOPEXPIRATION,cfg->expiration);
+ cfg->idle_timeout = extract_named_float(avpl, KEYWORD_GOPIDLETIMEOUT,cfg->idle_timeout);
+ cfg->lifetime = extract_named_float(avpl, KEYWORD_GOPLIFETIME,cfg->lifetime);
+
merge_avpl(cfg->extra,avpl,TRUE);
return TRUE;
mate_cfg_gog* cfg = NULL;
if (! name ) {
- g_warning("MATE: GogDef: no Name in: %s",avpl->name);
+ report_error("MATE: GogDef: no Name in: %s",avpl->name);
return FALSE;
}
if ( g_hash_table_lookup(matecfg->gogcfgs,name) ) {
- g_warning("MATE: GogDef: Gog '%s' exists already in: %s",name,avpl->name);
+ report_error("MATE: GogDef: Gog '%s' exists already in: %s",name,avpl->name);
return FALSE;
}
if ( ! name || ! cfg ) {
if ( ! name )
- g_warning("MATE: GogKey: no Name in %s",avpl->name);
+ report_error("MATE: GogKey: no For in %s",avpl->name);
else
- g_warning("MATE: GogKey: no such Gop '%s' in %s",name,avpl->name);
+ report_error("MATE: GogKey: no such Gop '%s' in %s",name,avpl->name);
return FALSE;
}
if (! on ) {
- g_warning("MATE: GogKey: no On in %s",avpl->name);
+ report_error("MATE: GogKey: no On in %s",avpl->name);
return FALSE;
}
if ( ! name || ! cfg ) {
if ( ! name )
- g_warning("MATE: GogExtra: no Name in %s",avpl->name);
+ report_error("MATE: GogExtra: no Name in %s",avpl->name);
else
- g_warning("MATE: GogExtra: no such Gop '%s' in %s",name,avpl->name);
+ report_error("MATE: GogExtra: no such Gop '%s' in %s",name,avpl->name);
return FALSE;
}
return TRUE;
}
+#define true_false_str(v) ((v) ? "TRUE" : "FALSE")
static void print_xxx_transforms(mate_cfg_item* cfg) {
guint8* tr_name;
for (i=0; i < cfg->transforms->len; i++) {
tr_name = ((AVPL_Transf*) g_ptr_array_index(cfg->transforms,i))->name;
- dbg_print (dbg_cfg,0,dbg_facility,"Action=%s; For=%s; Name=%s;\n",cfg_name,cfg->name,tr_name);
+ dbg_print (dbg_cfg,0,dbg_facility,"Action=%s; For=%s; Name=%s;",cfg_name,cfg->name,tr_name);
}
}
void* cookie = NULL;
AVPL* avpl;
- dbg_print (dbg_cfg,0,dbg_facility,"Action=GogDef; Name=%s; Expiration=%f;\n",cfg->name,cfg->expiration);
+ dbg_print (dbg_cfg,0,dbg_facility,"Action=GogDef; Name=%s; Expiration=%f;",cfg->name,cfg->expiration);
if (cfg->keys) {
while (( avpl = get_next_avpl(cfg->keys,&cookie) )) {
avplstr = avpl_to_str(avpl);
- dbg_print (dbg_cfg,0,dbg_facility,"Action=GogKey; For=%s; On=%s; %s\n",cfg->name,avpl->name,avplstr);
+ dbg_print (dbg_cfg,0,dbg_facility,"Action=GogKey; For=%s; On=%s; %s",cfg->name,avpl->name,avplstr);
g_free(avplstr);
}
}
if (cfg->extra) {
avplstr = avpl_to_str(cfg->extra);
- dbg_print (dbg_cfg,0,dbg_facility,"Action=GogExtra; For=%s; %s\n",cfg->name,avplstr);
+ dbg_print (dbg_cfg,0,dbg_facility,"Action=GogExtra; For=%s; %s",cfg->name,avplstr);
g_free(avplstr);
}
gopdef = g_string_new("Action=GopDef; ");
show_pdu_tree = cfg->show_pdu_tree ? "TRUE" : "FALSE";
- g_string_sprintfa(gopdef,"Name=%s; ShowPduTree=%s;",cfg->name,show_pdu_tree);
+ g_string_sprintfa(gopdef,"Name=%s; ShowPduTree=%s; ShowGopTimes=%s; "
+ "GopExpiration=%f; GopIdleTimeout=%f GopLifetime=%f;",
+ cfg->name,show_pdu_tree,true_false_str(cfg->show_times),
+ cfg->expiration,cfg->idle_timeout,cfg->lifetime);
if (cfg->key) {
avplstr = avpl_to_str(cfg->key);
g_free(avplstr);
}
- dbg_print (dbg_cfg,0,dbg_facility,"%s\n",gopdef->str);
+ dbg_print (dbg_cfg,0,dbg_facility,"%s",gopdef->str);
if (cfg->start) {
avplstr = avpl_to_str(cfg->start);
- dbg_print (dbg_cfg,0,dbg_facility,"Action=GopStart; For=%s; %s\n",cfg->name,avplstr);
+ dbg_print (dbg_cfg,0,dbg_facility,"Action=GopStart; For=%s; %s",cfg->name,avplstr);
g_free(avplstr);
}
if (cfg->stop) {
avplstr = avpl_to_str(cfg->stop);
- dbg_print (dbg_cfg,0,dbg_facility,"Action=GopStop; For=%s; %s\n",cfg->name,avplstr);
+ dbg_print (dbg_cfg,0,dbg_facility,"Action=GopStop; For=%s; %s",cfg->name,avplstr);
g_free(avplstr);
}
if (cfg->extra) {
avplstr = avpl_to_str(cfg->extra);
- dbg_print (dbg_cfg,0,dbg_facility,"Action=GopExtra; For=%s; %s\n",cfg->name,avplstr);
+ dbg_print (dbg_cfg,0,dbg_facility,"Action=GopExtra; For=%s; %s",cfg->name,avplstr);
g_free(avplstr);
}
break;
}
- dbg_print (dbg,0,dbg_facility,"\tAction=Transform; Name=%s; Match=%s; Mode=%s; %s %s\n",(guint8*) k,match,mode,match_s,replace_s);
+ dbg_print (dbg,0,dbg_facility,"\tAction=Transform; Name=%s; Match=%s; Mode=%s; %s %s",(guint8*) k,match,mode,match_s,replace_s);
g_free(match_s);
g_free(replace_s);
while(( avpl = get_next_avpl((LoAL*)v,&cookie) )) {
str = avpl_to_str(avpl);
- dbg_print(dbg_cfg,0,dbg_facility,"Gop=%s; Gog=%s; --> %s\n",(guint8*)k,avpl->name,str);
+ dbg_print(dbg_cfg,0,dbg_facility,"Gop=%s; Gog=%s; --> %s",(guint8*)k,avpl->name,str);
g_free(str);
}
static void print_gops_by_pduname(gpointer k, gpointer v, gpointer p _U_) {
dbg_print(dbg_cfg,0,dbg_facility,
- "PduName=%s; GopName=%s;\n", (guint8*)k,((mate_cfg_gop*)v)->name);
+ "PduName=%s; GopName=%s;", (guint8*)k,((mate_cfg_gop*)v)->name);
}
-static void print_config() {
+static void print_config(void) {
guint i;
/* FIXME: print the settings */
static void new_attr_hfri(mate_cfg_item* cfg, guint8* name) {
int* p_id = g_malloc(sizeof(int));
- hf_register_info hfri = {
- p_id,
- {
- g_strdup_printf("%s",name),
- g_strdup_printf("mate.%s.%s",cfg->name,name),
- FT_STRING,BASE_NONE,NULL,0,
- g_strdup_printf("%s attribute of %s",name,cfg->name),HFILL
- }};
+ hf_register_info hfri;
+
+ memset(&hfri, 0, sizeof hfri);
+ hfri.p_id = p_id;
+ hfri.hfinfo.name = g_strdup_printf("%s",name);
+ hfri.hfinfo.abbrev = g_strdup_printf("mate.%s.%s",cfg->name,name);
+ hfri.hfinfo.type = FT_STRING;
+ hfri.hfinfo.display = BASE_NONE;
+ hfri.hfinfo.strings = NULL;
+ hfri.hfinfo.bitmask = 0;
+ hfri.hfinfo.blurb = g_strdup_printf("%s attribute of %s",name,cfg->name);
*p_id = -1;
g_hash_table_insert(cfg->my_hfids,name,p_id);
}
}
- cookie = NULL;
- while(( avp = get_next_avp(cfg->start,&cookie) )) {
- if (! g_hash_table_lookup(cfg->my_hfids,avp->n)) {
- new_attr_hfri(cfg,avp->n);
+ if(cfg->start) {
+ cookie = NULL;
+ while(( avp = get_next_avp(cfg->start,&cookie) )) {
+ if (! g_hash_table_lookup(cfg->my_hfids,avp->n)) {
+ new_attr_hfri(cfg,avp->n);
+ }
}
}
-
+
if (cfg->stop) {
cookie = NULL;
while(( avp = get_next_avp(cfg->stop,&cookie) )) {
}
-static void analyze_config() {
+static void analyze_config(void) {
guint i;
for (i=0; i<matecfg->pducfglist->len; i++) {
}
-static void init_actions() {
+static void init_actions(void) {
AVP* avp;
all_keywords = new_avpl("all_keywords");
return matecfg;
}
-extern mate_config* mate_make_config(guint8* filename) {
+extern mate_config* mate_make_config(guint8* filename, int mate_hfid) {
gint* ett;
avp_init();
matecfg->hfrs = g_array_new(FALSE,TRUE,sizeof(hf_register_info));
matecfg->ett = g_array_new(FALSE,TRUE,sizeof(gint*));
matecfg->ett_root = -1;
-
+ matecfg->hfid_mate = mate_hfid;
+
ett = &matecfg->ett_root;
g_array_append_val(matecfg->ett,ett);
matecfg->show_pdu_tree = matecfg->frame_tree;
+ config_error = g_string_new("");
+
if ( mate_load_config(filename) ) {
analyze_config();
dbg_print (dbg_cfg,3,dbg_facility,"mate_make_config: OK");
if (dbg_cfg_lvl > 0) print_config();
} else {
+ report_failure("%s",config_error->str);
+ g_string_free(config_error,TRUE);
if (matecfg) destroy_mate_config(matecfg,FALSE);
matecfg = NULL;
return NULL;