Navigation


Changeset 804:c5b7d4a2cc77 in freeDiameter for libfdproto/dictionary.c


Ignore:
Timestamp:
Aug 22, 2012, 7:22:46 AM (12 years ago)
Author:
Sebastien Decugis <sdecugis@nict.go.jp>
Branch:
default
Phase:
public
Message:

Log message dumps in one call to the dump function to avoid fragmentation in the log files, as per Zack comment

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libfdproto/dictionary.c

    r788 r804  
    13051305
    13061306/* Default dump functions */
    1307 static void dump_val_os(union avp_value * value, FILE * fstr)
     1307static int dump_val_os(union avp_value * value, char **outstr, size_t *offset, size_t *outlen)
    13081308{
    13091309        int i;
    13101310        for (i = 0; i < value->os.len; i++) {
    13111311                if (i == 24) { /* Dump only up to 24 bytes of the buffer */
    1312                         fd_log_debug_fstr(fstr, "[...] (len=%zd)", value->os.len);
     1312                        CHECK_FCT( dump_add_str(outstr, offset, outlen, "[...] (len=%zd)", value->os.len) );
    13131313                        break;
    13141314                }
    1315                 fd_log_debug_fstr(fstr, "%02.2X ", value->os.data[i]);
    1316         }
    1317 }
    1318 
    1319 static void dump_val_i32(union avp_value * value, FILE * fstr)
    1320 {
    1321         fd_log_debug_fstr(fstr, "%i (0x%x)", value->i32, value->i32);
    1322 }
    1323 
    1324 static void dump_val_i64(union avp_value * value, FILE * fstr)
    1325 {
    1326         fd_log_debug_fstr(fstr, "%lli (0x%llx)", value->i64, value->i64);
    1327 }
    1328 
    1329 static void dump_val_u32(union avp_value * value, FILE * fstr)
    1330 {
    1331         fd_log_debug_fstr(fstr, "%u (0x%x)", value->u32, value->u32);
    1332 }
    1333 
    1334 static void dump_val_u64(union avp_value * value, FILE * fstr)
    1335 {
    1336         fd_log_debug_fstr(fstr, "%llu (0x%llx)", value->u64, value->u64);
    1337 }
    1338 
    1339 static void dump_val_f32(union avp_value * value, FILE * fstr)
    1340 {
    1341         fd_log_debug_fstr(fstr, "%f", value->f32);
    1342 }
    1343 
    1344 static void dump_val_f64(union avp_value * value, FILE * fstr)
    1345 {
    1346         fd_log_debug_fstr(fstr, "%g", value->f64);
     1315                CHECK_FCT( dump_add_str(outstr, offset, outlen, "%02.2X ", value->os.data[i]) );
     1316        }
     1317        return 0;
     1318}
     1319
     1320static int dump_val_i32(union avp_value * value, char **outstr, size_t *offset, size_t *outlen)
     1321{
     1322        CHECK_FCT( dump_add_str(outstr, offset, outlen, "%i (0x%x)", value->i32, value->i32) );
     1323        return 0;
     1324}
     1325
     1326static int dump_val_i64(union avp_value * value, char **outstr, size_t *offset, size_t *outlen)
     1327{
     1328        CHECK_FCT( dump_add_str(outstr, offset, outlen, "%lli (0x%llx)", value->i64, value->i64) );
     1329        return 0;
     1330}
     1331
     1332static int dump_val_u32(union avp_value * value, char **outstr, size_t *offset, size_t *outlen)
     1333{
     1334        CHECK_FCT( dump_add_str(outstr, offset, outlen, "%u (0x%x)", value->u32, value->u32) );
     1335        return 0;
     1336}
     1337
     1338static int dump_val_u64(union avp_value * value, char **outstr, size_t *offset, size_t *outlen)
     1339{
     1340        CHECK_FCT( dump_add_str(outstr, offset, outlen, "%llu (0x%llx)", value->u64, value->u64) );
     1341        return 0;
     1342}
     1343
     1344static int dump_val_f32(union avp_value * value, char **outstr, size_t *offset, size_t *outlen)
     1345{
     1346        CHECK_FCT( dump_add_str(outstr, offset, outlen, "%f", value->f32) );
     1347        return 0;
     1348}
     1349
     1350static int dump_val_f64(union avp_value * value, char **outstr, size_t *offset, size_t *outlen)
     1351{
     1352        CHECK_FCT( dump_add_str(outstr, offset, outlen, "%g", value->f64) );
     1353        return 0;
    13471354}
    13481355
    13491356/* Get the dump function for basic dict_avp_basetype */
    1350 static void (*get_default_dump_val_cb(enum dict_avp_basetype datatype))(union avp_value *, FILE *)
     1357static int (*get_default_dump_val_cb(enum dict_avp_basetype datatype))(union avp_value *, char **, size_t *, size_t *)
    13511358{
    13521359        switch (datatype) {
     
    13831390
    13841391/* Formater for the AVP value dump line */
    1385 static void dump_avp_val(union avp_value *avp_value, void (*dump_val_cb)(union avp_value *, FILE *), enum dict_avp_basetype datatype, char * type_name, char * const_name, int indent, FILE * fstr)
     1392static int dump_avp_val(union avp_value *avp_value,
     1393                        int (*def_dump_val_cb)(union avp_value *, char **, size_t *, size_t *),
     1394                        char * (*dump_val_cb)(union avp_value *),
     1395                        enum dict_avp_basetype datatype,
     1396                        char * type_name,
     1397                        char * const_name,
     1398                        int indent,
     1399                        char **outstr,
     1400                        size_t *offset,
     1401                        size_t *outlen)
    13861402{
    13871403        /* Header for all AVP values dumps: */
    1388         fd_log_debug_fstr(fstr, INOBJHDR "value ", INOBJHDRVAL);
     1404        CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "value ", INOBJHDRVAL) );
    13891405       
    13901406        /* If the type is provided, write it */
    1391         if (type_name)
    1392                 fd_log_debug_fstr(fstr, "t: '%s' ", type_name);
     1407        if (type_name) {
     1408                CHECK_FCT( dump_add_str(outstr, offset, outlen, "t: '%s' ", type_name) );
     1409        }
    13931410       
    13941411        /* Always give the base datatype anyway */
    1395         fd_log_debug_fstr(fstr, "(%s) ", type_base_name[datatype]);
     1412        CHECK_FCT( dump_add_str(outstr, offset, outlen, "(%s) ", type_base_name[datatype]) );
    13961413       
    13971414        /* Now, the value */
    1398         fd_log_debug_fstr(fstr, "v: ");
    1399         if (const_name)
    1400                 fd_log_debug_fstr(fstr, "'%s' (", const_name);
    1401         (*dump_val_cb)(avp_value, fstr);
    1402         if (const_name)
    1403                 fd_log_debug_fstr(fstr, ")");
     1415        CHECK_FCT( dump_add_str(outstr, offset, outlen, "v: ") );
     1416        if (const_name) {
     1417                CHECK_FCT( dump_add_str(outstr, offset, outlen, "'%s' (", const_name) );
     1418        }
     1419        if (dump_val_cb) {
     1420                char * str;
     1421                CHECK_MALLOC_DO( str = (*dump_val_cb)(avp_value), dump_add_str(outstr, offset, outlen, "(dump failed)") );
     1422                CHECK_FCT( dump_add_str(outstr, offset, outlen, "%s", str) );
     1423                free(str);
     1424        } else {
     1425                CHECK_FCT( (*def_dump_val_cb)(avp_value, outstr, offset, outlen) );
     1426        }
     1427        if (const_name) {
     1428                CHECK_FCT( dump_add_str(outstr, offset, outlen, ")") );
     1429        }
    14041430       
    14051431        /* Done! */
    1406         fd_log_debug_fstr(fstr, "\n");
    1407 }
    1408 
    1409 /* Dump the value of an AVP of known type */
    1410 void fd_dict_dump_avp_value(union avp_value *avp_value, struct dict_object * model, int indent, FILE * fstr)
    1411 {
    1412         void (*dump_val_cb)(union avp_value *avp_value, FILE * fstr);
     1432        CHECK_FCT( dump_add_str(outstr, offset, outlen, "\n") );
     1433        return 0;
     1434}
     1435
     1436/* Dump the value of an AVP of known type into the returned str */
     1437int fd_dict_dump_avp_value(union avp_value *avp_value, struct dict_object * model, int indent, char **outstr, size_t *offset, size_t *outlen)
     1438{
     1439        char * (*dump_val_cb)(union avp_value *avp_value) = NULL;
    14131440        struct dict_object * type = NULL;
    14141441        char * type_name = NULL;
     
    14161443       
    14171444        /* Check the parameters are correct */
    1418         CHECK_PARAMS_DO( avp_value && verify_object(model) && (model->type == DICT_AVP), return );
    1419        
    1420         /* Default: display the value with the formatter for the AVP datatype */
    1421         CHECK_PARAMS_DO( dump_val_cb = get_default_dump_val_cb(model->data.avp.avp_basetype), return );
     1445        CHECK_PARAMS( avp_value && verify_object(model) && (model->type == DICT_AVP) );
    14221446       
    14231447        /* Get the type definition of this AVP */
     
    14451469       
    14461470        /* And finally, dump the value */
    1447         dump_avp_val(avp_value, dump_val_cb, model->data.avp.avp_basetype, type_name, const_name, indent, fstr);
     1471        CHECK_FCT( dump_avp_val(avp_value, get_default_dump_val_cb(model->data.avp.avp_basetype), dump_val_cb, model->data.avp.avp_basetype, type_name, const_name, indent, outstr, offset, outlen) );
     1472        return 0;
    14481473}
    14491474
Note: See TracChangeset for help on using the changeset viewer.