static void get_pdu_fields(gpointer k, gpointer v, gpointer p) { int hfid = *((int*) k); gchar* name = (gchar*) v; tmp_pdu_data* data = (tmp_pdu_data*) p; GPtrArray* fis; field_info* fi; guint i,j; mate_range* curr_range; guint start; guint end; AVP* avp; gchar* s; fis = proto_get_finfo_ptr_array(data->tree, hfid); if (fis) { for (i = 0; i < fis->len; i++) { fi = (field_info*) g_ptr_array_index(fis,i); start = fi->start; end = fi->start + fi->length; dbg_print(dbg_pdu,5,dbg_facility,"get_pdu_fields: found field %i-%i",start,end); for (j = 0; j < data->ranges->len; j++) { curr_range = (mate_range*) g_ptr_array_index(data->ranges,j); if (curr_range->end >= end && curr_range->start <= start) { avp = new_avp_from_finfo(name, fi); if (*dbg_pdu > 4) { s = avp_to_str(avp); dbg_print(dbg_pdu,0,dbg_facility,"get_pdu_fields: got %s",s); g_free(s); } if (! insert_avp(data->pdu->avpl,avp) ) { delete_avp(avp); } } } } } }
extern gchar* avpl_to_dotstr(AVPL* avpl) { AVPN* c; GString* s = g_string_new(""); gchar* avp_s; gchar* r; for(c=avpl->null.next; c->avp; c = c->next) { avp_s = avp_to_str(c->avp); g_string_append_printf(s," .%s;",avp_s); g_free(avp_s); } r = g_string_free(s,FALSE); /* g_strchug(r); ? */ return r; }