Mercurial > hg > freeDiameter
diff libfdproto/dictionary.c @ 1036:aecdc2fbf222
Add fd_msg_dump_full function that dumps a message in human-readable format.
(not hooked in yet)
For this, add an argument to dump_avp_val if it should print a
header before each value or not.
author | Thomas Klausner <tk@giga.or.at> |
---|---|
date | Tue, 16 Apr 2013 18:53:51 +0200 |
parents | 4a2ac93e92ff |
children | 75592614af57 |
line wrap: on
line diff
--- a/libfdproto/dictionary.c Tue Apr 16 18:51:25 2013 +0200 +++ b/libfdproto/dictionary.c Tue Apr 16 18:53:51 2013 +0200 @@ -1179,7 +1179,7 @@ if (enumval->enum_value.os.len < LEN_MAX) n = enumval->enum_value.os.len; for (i=0; i < n; i++) - fd_log_debug("0x%02hhX/'%c' ", enumval->enum_value.os.data[i], ASCII(enumval->enum_value.os.data[i])); + fd_log_debug("0x%02.2X/'%c' ", enumval->enum_value.os.data[i], ASCII(enumval->enum_value.os.data[i])); if (n == LEN_MAX) fd_log_debug("..."); } @@ -1342,13 +1342,15 @@ static int dump_val_os(union avp_value * value, char **outstr, size_t *offset, size_t *outlen) { int i; + CHECK_FCT( dump_add_str(outstr, offset, outlen, "<") ); for (i = 0; i < value->os.len; i++) { - if (i == 24) { /* Dump only up to 24 bytes of the buffer */ + if (i == 1024) { /* Dump only up to 1024 bytes of the buffer */ CHECK_FCT( dump_add_str(outstr, offset, outlen, "[...] (len=%zd)", value->os.len) ); break; } - CHECK_FCT( dump_add_str(outstr, offset, outlen, "%02.2X ", value->os.data[i]) ); + CHECK_FCT( dump_add_str(outstr, offset, outlen, "%s%02.2X", (i==0 ? "" : " "), value->os.data[i]) ); } + CHECK_FCT( dump_add_str(outstr, offset, outlen, ">") ); return 0; } @@ -1423,7 +1425,7 @@ #define INOBJHDR "%*s " #define INOBJHDRVAL indent<0 ? 1 : indent, indent<0 ? "-" : "|" -/* Formater for the AVP value dump line */ +/* Formatter for the AVP value dump line */ static int dump_avp_val(union avp_value *avp_value, int (*def_dump_val_cb)(union avp_value *, char **, size_t *, size_t *), char * (*dump_val_cb)(union avp_value *), @@ -1433,21 +1435,24 @@ int indent, char **outstr, size_t *offset, - size_t *outlen) + size_t *outlen, + int header) { - /* Header for all AVP values dumps: */ - CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "value ", INOBJHDRVAL) ); + if (header) { + /* Header for all AVP values dumps: */ + CHECK_FCT( dump_add_str(outstr, offset, outlen, INOBJHDR "value ", INOBJHDRVAL) ); - /* If the type is provided, write it */ - if (type_name) { - CHECK_FCT( dump_add_str(outstr, offset, outlen, "t: '%s' ", type_name) ); - } + /* If the type is provided, write it */ + if (type_name) { + CHECK_FCT( dump_add_str(outstr, offset, outlen, "t: '%s' ", type_name) ); + } - /* Always give the base datatype anyway */ - CHECK_FCT( dump_add_str(outstr, offset, outlen, "(%s) ", type_base_name[datatype]) ); - - /* Now, the value */ - CHECK_FCT( dump_add_str(outstr, offset, outlen, "v: ") ); + /* Always give the base datatype anyway */ + CHECK_FCT( dump_add_str(outstr, offset, outlen, "(%s) ", type_base_name[datatype]) ); + + /* Now, the value */ + CHECK_FCT( dump_add_str(outstr, offset, outlen, "v: ") ); + } if (const_name) { CHECK_FCT( dump_add_str(outstr, offset, outlen, "'%s' (", const_name) ); } @@ -1468,7 +1473,7 @@ } /* Dump the value of an AVP of known type into the returned str */ -int fd_dict_dump_avp_value(union avp_value *avp_value, struct dict_object * model, int indent, char **outstr, size_t *offset, size_t *outlen) +int fd_dict_dump_avp_value(union avp_value *avp_value, struct dict_object * model, int indent, char **outstr, size_t *offset, size_t *outlen, int header) { char * (*dump_val_cb)(union avp_value *avp_value) = NULL; struct dict_object * type = NULL; @@ -1502,7 +1507,7 @@ } /* And finally, dump the value */ - 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) ); + 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, header) ); return 0; }