/*-------------------------------------------------------------*/
/***************************************************************
* An array permits to show a packet. Generally, one line *
* corresponds to 32bits/4bytes, as seen in RFCs *
***************************************************************/
/*
For example :
._______________________________________________________________.
|0|1|1|0|0|1|1|0|0|1|1|0|0|1|1|0|0|1|1|0|0|1|1|0|0|1|1|0|0|1|1|0|
|_3_|_3_|_3_|_3_|_3_|_3_|_3_|_3_|_3_|_3_|_3_|_3_|_3_|_3_|_3_|_3_|
|0xF=15_|__0xF__|__15___|0xF=15_|__0xF__|__15___|0xF=15_|__0xF__|
|_0x80=128='c'__|_0x80=128='c'__|_0x80=128='c'__|_0x80=128='c'__|
| data: 0123456789012345678901234567890123456789012345678901234 |
| 0123456789012345678901234567890123456789012345678901234 |
|_______________________________________________________________|
Ethernet________________________________________________________.
| 00:00:01:02:03:04->00:00:05:06:97:08 type:0x0800 |
|_______________________________________________________________|
IP______________________________________________________________.
|version| ihl | tos | totlen |
|___4___|___5___|____0x00=0_____|___________0x0054=84___________|
| id |r|D|M| offsetfrag |
|___________0x0008=8____________|0|0|0|________0x0000=0_________|
| ttl | protocol | checksum |
|___0xFF=255____|____0x01=1_____|____________0x2551_____________|
| source |
|_________________________192.168.1.1___________________________|
| destination |
|_________________________192.168.1.2___________________________|
ICMP4_echo reply________________________________________________.
| type | code | checksum |
|____0x00=0_____|____0x00=0_____|_________0xC6A9=50857__________|
*/
/*-------------------------------------------------------------*/
/* "._________________." or "Title_____________." */
netwib_err netwib_show_array_head(netwib_conststring title,
netwib_buf *pbuf);
/* "|_________________|" */
netwib_err netwib_show_array_tail(netwib_buf *pbuf);
/*-------------------------------------------------------------*/
/* "|" */
netwib_err netwib_show_array_line_begin(netwib_buf *pbuf);
/* "\n" */
netwib_err netwib_show_array_line_end(netwib_buf *pbuf);
/*-------------------------------------------------------------*/
/* centered text surrounded by spaces and ending with "|" */
netwib_err netwib_show_array_text(netwib_uint32 size,
netwib_conststring txt,
netwib_buf *pbuf);
/* num32 is special : line_begin and line_end are internally called */
#define netwib_show_array_text32(text,pbuf) netwib_show_array_text(32,text,pbuf)
#define netwib_show_array_text16(text,pbuf) netwib_show_array_text(16,text,pbuf)
#define netwib_show_array_text8(text,pbuf) netwib_show_array_text(8,text,pbuf)
#define netwib_show_array_text4(text,pbuf) netwib_show_array_text(4,text,pbuf)
#define netwib_show_array_text1(text,pbuf) netwib_show_array_text(1,text,pbuf)
/*-------------------------------------------------------------*/
/* centered number surrounded by "_" and ending with "|" */
typedef enum {
NETWIB_SHOW_ARRAY_NUMTYPE_BIN = 1,
NETWIB_SHOW_ARRAY_NUMTYPE_DEC,
NETWIB_SHOW_ARRAY_NUMTYPE_HEXA,
NETWIB_SHOW_ARRAY_NUMTYPE_CHAR,
NETWIB_SHOW_ARRAY_NUMTYPE_DECCHAR,
NETWIB_SHOW_ARRAY_NUMTYPE_HEXADEC,
NETWIB_SHOW_ARRAY_NUMTYPE_HEXACHAR,
NETWIB_SHOW_ARRAY_NUMTYPE_HEXADECCHAR
} netwib_show_array_numtype;
netwib_err netwib_show_array_num(netwib_uint32 size,
netwib_uint32 ui,
netwib_show_array_numtype type,
netwib_buf *pbuf);
/* num32 is special : line_begin and line_end are internally called */
#define netwib_show_array_num32(ui,type,pbuf) netwib_show_array_num(32,ui,type,pbuf)
#define netwib_show_array_num16(ui,type,pbuf) netwib_show_array_num(16,ui,type,pbuf)
#define netwib_show_array_num8(ui,type,pbuf) netwib_show_array_num(8,ui,type,pbuf)
#define netwib_show_array_num4(ui,type,pbuf) netwib_show_array_num(4,ui,type,pbuf)
#define netwib_show_array_num1(ui,pbuf) netwib_show_array_num(1,ui,NETWIB_SHOW_ARRAY_NUMTYPE_DEC,pbuf)
/*-------------------------------------------------------------*/
typedef enum {
NETWIB_SHOW_ARRAY_ALIGN_LEFT,
NETWIB_SHOW_ARRAY_ALIGN_CENTER,
NETWIB_SHOW_ARRAY_ALIGN_RIGHT
} netwib_show_array_align;
/* if size==32, line_begin and line_end are internally called */
netwib_err netwib_show_array_fmt(netwib_uint32 size,
netwib_show_array_align align,
netwib_char fillchar, /* ie ' ' or '_' */
netwib_buf *pbuf,
netwib_conststring fmt,
...);
/* size==32, align==NETWIB_SHOW_ARRAY_ALIGN_LEFT and fillchar==' ' */
netwib_err netwib_show_array_fmt32(netwib_buf *pbuf,
netwib_conststring fmt,
...);
/*-------------------------------------------------------------*/
/*
data wrapped to fit in the array. For example :
|title: 0123456789012345678901234567890123456789012 |
| 3456789012345678901234567801234567890123456 |
|_______567890123456789012345678____________________|
*/
netwib_err netwib_show_array_data(netwib_conststring title,
netwib_constbuf *pdata,
netwib_encodetype encodetype,
netwib_char fillchar, /* ie ' ' or '_' */
netwib_buf *pbuf);