Made ASN.1 memory dump also display printable characters.

git-svn-id: https://origsvn.digium.com/svn/libpri/branches/1.4@848 2fbb986a-6c06-0410-b554-c9c1f0a7f128
remotes/origin/1.4
Richard Mudgett 16 years ago
parent 2176bd7fa3
commit 47830a68aa

@ -33,6 +33,7 @@
#include <stdio.h> #include <stdio.h>
#include <ctype.h>
#include "compat.h" #include "compat.h"
#include "libpri.h" #include "libpri.h"
@ -41,6 +42,26 @@
/* ------------------------------------------------------------------- */ /* ------------------------------------------------------------------- */
/*!
* \internal
* \brief Dump the memory contents indicated in printable characters. (Helper function.)
*
* \param ctrl D channel controller for any diagnostic messages.
* \param start Dump memory starting position.
* \param end Dump memory ending position. (Not included in dump.)
*
* \return Nothing
*/
static void asn1_dump_mem_helper(struct pri *ctrl, const unsigned char *start,
const unsigned char *end)
{
pri_message(ctrl, " - \"");
for (; start < end; ++start) {
pri_message(ctrl, "%c", (isprint(*start)) ? *start : '~');
}
pri_message(ctrl, "\"\n");
}
/*! /*!
* \internal * \internal
* \brief Dump the memory contents indicated. * \brief Dump the memory contents indicated.
@ -55,10 +76,12 @@
static void asn1_dump_mem(struct pri *ctrl, unsigned indent, const unsigned char *pos, static void asn1_dump_mem(struct pri *ctrl, unsigned indent, const unsigned char *pos,
unsigned length) unsigned length)
{ {
const unsigned char *seg_start;
const unsigned char *end; const unsigned char *end;
unsigned delimiter; unsigned delimiter;
unsigned count; unsigned count;
seg_start = pos;
end = pos + length; end = pos + length;
if (pos < end) { if (pos < end) {
delimiter = '<'; delimiter = '<';
@ -71,12 +94,14 @@ static void asn1_dump_mem(struct pri *ctrl, unsigned indent, const unsigned char
if (end <= pos) { if (end <= pos) {
break; break;
} }
pri_message(ctrl, "\n"); asn1_dump_mem_helper(ctrl, seg_start, pos);
seg_start = pos;
} }
} else { } else {
pri_message(ctrl, "%*s<", indent, ""); pri_message(ctrl, "%*s<", indent, "");
} }
pri_message(ctrl, ">\n"); pri_message(ctrl, ">");
asn1_dump_mem_helper(ctrl, seg_start, end);
} }
/*! /*!

Loading…
Cancel
Save