Transforms and Pdus are working already, Gops start to work.

svn path=/trunk/; revision=14376
This commit is contained in:
Luis Ontanon 2005-05-16 17:16:52 +00:00
parent e3d0bbc874
commit bf1117c4c9
6 changed files with 33 additions and 150 deletions

View File

@ -308,7 +308,7 @@ struct _mate_gop {
guint32 id;
mate_cfg_gop* cfg;
guint8* gop_key;
gchar* gop_key;
AVPL* avpl; /* the attributes of the pdu/gop/gog */
guint last_n;

View File

@ -49,8 +49,6 @@ G_MODULE_EXPORT const gchar version[] = VERSION;
G_MODULE_EXPORT void plugin_register(void) {
g_message("---");
if (! initialized ) {
proto_register_mate();
initialized = 1;

View File

@ -50,7 +50,7 @@ typedef struct _gogkey {
static mate_runtime_data* rd = NULL;
static mate_config* mc = NULL;
static int zero = 0;
static int zero = 5;
static int* dbg = &zero;
static int* dbg_pdu = &zero;
@ -155,6 +155,7 @@ extern void initialize_mate_runtime(void) {
rd->frames = g_hash_table_new(g_direct_hash,g_direct_equal);
mc->dbg_gop_lvl = 5;
dbg_pdu = &(mc->dbg_pdu_lvl);
dbg_gop = &(mc->dbg_gop_lvl);
dbg_gog = &(mc->dbg_gog_lvl);
@ -171,8 +172,8 @@ static mate_gop* new_gop(mate_cfg_gop* cfg, mate_pdu* pdu, gchar* key) {
gop->id = ++(cfg->last_id);
gop->cfg = cfg;
dbg_print (dbg_gop,1,dbg_facility,"new_gop: %s: ``%s:%d''",gop->cfg->name,gop->id,key);
dbg_print(dbg_gop, 1, dbg_facility, "new_gop: %s: ``%s:%d''", key, gop->cfg->name, gop->id);
gop->gop_key = key;
gop->avpl = new_avpl(cfg->name);
gop->last_n = 0;
@ -180,26 +181,28 @@ static mate_gop* new_gop(mate_cfg_gop* cfg, mate_pdu* pdu, gchar* key) {
gop->gog = NULL;
gop->next = NULL;
gop->expiration = 0.0;
gop->idle_expiration = 0.0;
gop->expiration = cfg->expiration > 0.0 ? cfg->expiration + rd->now : (float) -1.0 ;
gop->idle_expiration = cfg->idle_timeout > 0.0 ? cfg->idle_timeout + rd->now : (float) -1.0 ;
gop->time_to_die = cfg->lifetime > 0.0 ? cfg->lifetime + rd->now : (float) -1.0 ;
gop->time_to_timeout = 0.0;
gop->last_time = gop->start_time = rd->now;
gop->release_time = 0.0;
gop->num_of_pdus = 1;
gop->num_of_pdus = 0;
gop->num_of_after_release_pdus = 0;
gop->pdus = pdu;
gop->last_pdu = pdu;
gop->released = FALSE;
pdu->gop = gop;
pdu->next = NULL;
pdu->is_start = TRUE;
pdu->time_in_gop = 0.0;
g_hash_table_insert(cfg->gop_index,gop->gop_key,gop);
return gop;
}
@ -484,7 +487,7 @@ static void analize_pdu(mate_pdu* pdu) {
if ((gopkey_match = new_avpl_exact_match("gop_key_match",pdu->avpl,cfg->key, TRUE))) {
gop_key = avpl_to_str(gopkey_match);
g_hash_table_lookup_extended(cfg->gop_index,(gconstpointer)gop_key,(gpointer*)&orig_gop_key,(gpointer*)&gop);
if ( gop ) {
@ -494,6 +497,7 @@ static void analize_pdu(mate_pdu* pdu) {
if ( ! gop->released &&
( ( gop->cfg->lifetime > 0.0 && gop->time_to_die >= rd->now) ||
( gop->cfg->idle_timeout > 0.0 && gop->time_to_timeout >= rd->now) ) ) {
dbg_print (dbg_gop,4,dbg_facility,"analize_pdu: expiring released gop");
gop->released = TRUE;
if (gop->gog && gop->cfg->start) gop->gog->num_of_released_gops++;
@ -576,18 +580,27 @@ static void analize_pdu(mate_pdu* pdu) {
return;
}
} else {
dbg_print (dbg_gop,6,dbg_facility,"analize_pdu: an unassigned pdu");
} else {
candidate_start = cfg->start;
pdu->gop = NULL;
pdu->next = NULL;
if (( is_start = new_avpl_exact_match("",pdu->avpl, candidate_start, FALSE) )) {
delete_avpl(is_start,FALSE);
gop = new_gop(cfg,pdu,gop_key);
} else {
g_free(gop_key);
return;
}
g_free(gop_key);
delete_avpl(gopkey_match,TRUE);
return;
pdu->gop = gop;
}
}
if (gop->last_pdu) gop->last_pdu->next = pdu;
gop->last_pdu = pdu;
pdu->next = NULL;
pdu->time_in_gop = rd->now - gop->start_time;
gop->num_of_pdus++;
gop->time_to_timeout = cfg->idle_timeout > 0.0 ? cfg->idle_timeout + rd->now : (float) -1.0 ;

View File

@ -216,135 +216,6 @@ extern gchar* add_ranges(gchar* range,GPtrArray* range_ptr_arr) {
return NULL;
}
#if 0
#define true_false_str(v) ((v) ? "TRUE" : "FALSE")
static void print_gog_config(gpointer k _U_, gpointer v, gpointer p _U_) {
mate_cfg_gop* cfg = (mate_cfg_gop*) v;
guint8* avplstr = NULL;
void* cookie = NULL;
AVPL* avpl;
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",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",cfg->name,avplstr);
g_free(avplstr);
}
print_xxx_transforms(cfg);
}
static void print_gop_config(gpointer k _U_ , gpointer v, gpointer p _U_) {
mate_cfg_gop* cfg = (mate_cfg_gop*) v;
guint8* avplstr = NULL;
guint8* show_pdu_tree;
GString* gopdef;
gopdef = g_string_new("Action=GopDef; ");
show_pdu_tree = cfg->show_pdu_tree ? "TRUE" : "FALSE";
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_string_sprintfa(gopdef," %s",avplstr);
g_free(avplstr);
}
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",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",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",cfg->name,avplstr);
g_free(avplstr);
}
print_xxx_transforms(cfg);
g_string_free(gopdef,TRUE);
}
static void print_gogs_by_gopname(gpointer k, gpointer v, gpointer p _U_) {
void* cookie = NULL;
guint8* str = NULL;
AVPL* avpl;
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",(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;", (guint8*)k,((mate_cfg_gop*)v)->name);
}
static void print_config(void) {
guint i;
/* FIXME: print the settings */
dbg_print(dbg_cfg,0,dbg_facility,"###########################"
" CURRENT CONFIGURATION " "###########################");
g_hash_table_foreach(matecfg->transfs,print_transforms,NULL);
for (i=0; i<matecfg->pducfglist->len; i++) {
print_pdu_config((mate_cfg_pdu*) g_ptr_array_index(matecfg->pducfglist,i));
}
g_hash_table_foreach(matecfg->gopcfgs,print_gop_config,NULL);
g_hash_table_foreach(matecfg->gogcfgs,print_gog_config,NULL);
dbg_print(dbg_cfg,0,dbg_facility,"###########################"
" END OF CURRENT CONFIGURATION " "###########################");
if (*dbg_cfg > 1) {
dbg_print(dbg_cfg,0,dbg_facility,"******* Config Hashes");
dbg_print(dbg_cfg,0,dbg_facility,"*** Gops by PduName");
g_hash_table_foreach(matecfg->gops_by_pduname,print_gops_by_pduname,NULL);
dbg_print(dbg_cfg,0,dbg_facility,"*** GogKeys by GopName");
g_hash_table_foreach(matecfg->gogs_by_gopname,print_gogs_by_gopname,NULL);
}
}
#endif
static void new_attr_hfri(gchar* item_name, GHashTable* hfids, gchar* name) {
int* p_id = g_malloc(sizeof(int));
@ -548,6 +419,7 @@ static void analyze_gop_config(gpointer k _U_, gpointer v, gpointer p _U_) {
ett = &cfg->ett_children;
g_array_append_val(matecfg->ett,ett);
g_hash_table_insert(matecfg->gops_by_pduname,cfg->name,cfg);
}
@ -1022,7 +894,7 @@ extern mate_config* mate_make_config(gchar* filename, int mate_hfid) {
g_hash_table_foreach(matecfg->gopcfgs,(GHFunc)print_gop_config,config_text);
g_hash_table_foreach(matecfg->gogcfgs,(GHFunc)print_gog_config,config_text);
g_message("Current configuration\n%s\nDone;\n",config_text->str);
g_message("Current configuration:\n%s\nDone;\n",config_text->str);
/* } */
analyze_config();

View File

@ -40,7 +40,7 @@
* fmt, ...: what to print
*/
void dbg_print(const gint* which, gint how, FILE* where, gchar* fmt, ... ) {
void dbg_print(const gint* which, gint how, FILE* where, const gchar* fmt, ... ) {
static gchar debug_buffer[DEBUG_BUFFER_SIZE];
va_list list;
@ -63,7 +63,7 @@ void dbg_print(const gint* which, gint how, FILE* where, gchar* fmt, ... ) {
/***************************************************************************
* single copy strings
***************************************************************************
* In order to save memory and since strings repeat more often than don't,
* Strings repeat more often than don't. In order to save memory
* we'll keep only one copy of each as key to a hash with a count of
* subscribers as value.
***************************************************************************/

View File

@ -38,7 +38,7 @@
/******* dbg_print *********/
#define DEBUG_BUFFER_SIZE 4096
extern void dbg_print(const gint* which, gint how, FILE* where, gchar* fmt, ... );
extern void dbg_print(const gint* which, gint how, FILE* where, const gchar* fmt, ... );
/******* single copy strings *********/