1 2 /*-------------------------------------------------------------*/ 3 typedef enum { 4 NETWIB_ENCODETYPE_DATA = 1, /* exact data */ 5 NETWIB_ENCODETYPE_HEXA0, /* hexadecimal */ 6 NETWIB_ENCODETYPE_HEXA1, /* hexadecimal */ 7 NETWIB_ENCODETYPE_HEXA2, /* hexadecimal */ 8 NETWIB_ENCODETYPE_HEXA4, /* hexadecimal */ 9 NETWIB_ENCODETYPE_MIXED0, /* mixed */ 10 NETWIB_ENCODETYPE_MIXED1, /* mixed */ 11 NETWIB_ENCODETYPE_TEXT, /* printable text */ 12 NETWIB_ENCODETYPE_BASE64, /* base64 */ 13 NETWIB_ENCODETYPE_QUOTED, /* quoted */ 14 NETWIB_ENCODETYPE_NOTHING = 100, /* print nothing */ 15 NETWIB_ENCODETYPE_SYNTH, /* print a synthetic form */ 16 /* wrap to 80 columns (or less) */ 17 NETWIB_ENCODETYPE_DATA_WRAP = 300, /* data */ 18 NETWIB_ENCODETYPE_HEXA0_WRAP, /* hexa (32 bytes per line) */ 19 NETWIB_ENCODETYPE_HEXA1_WRAP, /* hexa (16 bytes per line) */ 20 NETWIB_ENCODETYPE_HEXA2_WRAP, /* hexa (32 bytes per line) */ 21 NETWIB_ENCODETYPE_HEXA4_WRAP, /* hexa (32 bytes per line) */ 22 NETWIB_ENCODETYPE_MIXED0_WRAP, /* mixed (16 bytes per line) */ 23 NETWIB_ENCODETYPE_MIXED1_WRAP, /* mixed (16 bytes per line) */ 24 NETWIB_ENCODETYPE_TEXT_WRAP, /* printable text */ 25 NETWIB_ENCODETYPE_BASE64_WRAP, /* base64 */ 26 NETWIB_ENCODETYPE_ARRAY1 = 400, /* array (4 bytes per line) */ 27 NETWIB_ENCODETYPE_ARRAY4, /* array (4 bytes per line) */ 28 NETWIB_ENCODETYPE_ARRAY8, /* array (4 bytes per line) */ 29 NETWIB_ENCODETYPE_ARRAY16, /* array (4 bytes per line) */ 30 NETWIB_ENCODETYPE_ARRAY32, /* array (4 bytes per line) */ 31 NETWIB_ENCODETYPE_DUMP, /* dump (16 bytes per line) */ 32 NETWIB_ENCODETYPE_MIXED0H_WRAP, /* mixed (8 bytes per line) */ 33 NETWIB_ENCODETYPE_MIXED1H_WRAP, /* mixed (8 bytes per line) */ 34 NETWIB_ENCODETYPE_LOWERCASE, /* lower case */ 35 NETWIB_ENCODETYPE_UPPERCASE, /* upper case */ 36 /* aliases */ 37 NETWIB_ENCODETYPE_HEXA = NETWIB_ENCODETYPE_HEXA1, 38 NETWIB_ENCODETYPE_MIXED = NETWIB_ENCODETYPE_MIXED1, 39 NETWIB_ENCODETYPE_HEXA_WRAP = NETWIB_ENCODETYPE_HEXA1_WRAP, 40 NETWIB_ENCODETYPE_MIXED_WRAP = NETWIB_ENCODETYPE_MIXED1_WRAP, 41 NETWIB_ENCODETYPE_ARRAY = NETWIB_ENCODETYPE_ARRAY8, 42 NETWIB_ENCODETYPE_MIXEDH_WRAP = NETWIB_ENCODETYPE_MIXED1H_WRAP, 43 /* for transition */ 44 NETWIB_ENCODETYPE_TRANSITION_INIT = 500, 45 NETWIB_ENCODETYPE_TRANSITION_END 46 } netwib_encodetype; 47 48 /*-------------------------------------------------------------*/ 49 /* Examples : 50 NETWIB_ENCODETYPE_HEXA0 : 01020304050607080910... 51 NETWIB_ENCODETYPE_HEXA1 : 01 02 03 04 05 06 07 08 09 10 ... 52 NETWIB_ENCODETYPE_HEXA2 : 0102 0304 0506 0708 0910 ... 53 NETWIB_ENCODETYPE_HEXA4 : 01020304 05060708 0910... 54 NETWIB_ENCODETYPE_MIXED0 : 'abc' 112233445566 55 NETWIB_ENCODETYPE_MIXED1 : 'abc' 11 22 33 44 55 66 56 NETWIB_ENCODETYPE_HEXA0_WRAP : 57 0102030405060708091011121314151617181920212223242526272829303132 58 NETWIB_ENCODETYPE_HEXA1_WRAP : 59 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 60 NETWIB_ENCODETYPE_HEXA2_WRAP : 61 0102 0304 0506 0708 0910 1112 1314 1516 1718 1920 2122 2324 2526 2728 2930 3132 62 NETWIB_ENCODETYPE_HEXA4_WRAP : 63 01020304 05060708 09101112 13141516 17181920 21222324 25262728 29303132 64 NETWIB_ENCODETYPE_MIXED0_WRAP : 65 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 66 'a' 026102 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 67 NETWIB_ENCODETYPE_MIXED1_WRAP : 68 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 69 'a' 02 61 02 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 'a' 02 70 NETWIB_ENCODETYPE_ARRAY1 : 71 |1|0|0|0|0|1|1|0|0|1|0|0|0|1|1|0|1|1|0|0|0|1|1|0|0|0|1|0|0|1|1|0| 72 NETWIB_ENCODETYPE_ARRAY4 : 73 |__0x1__|__0x6__|_______________|_______________|_______________| 74 NETWIB_ENCODETYPE_ARRAY8 : 75 |____0x80=128___|____0x11=17____|____0x80=128___|____0x11=17____| 76 NETWIB_ENCODETYPE_ARRAY16 : 77 |_________0x6162=24930__________|_________0x6364=25444__________| 78 NETWIB_ENCODETYPE_ARRAY32 : 79 |_____________________0x61626364=1633837924_____________________| 80 NETWIB_ENCODETYPE_DUMP : 81 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 # abcdefghijklmnop 82 NETWIB_ENCODETYPE_MIXED0H_WRAP : 83 'a' 62 'c' 64 'e' 66 'f' 68 # 61 62 63 64 65 66 67 68 84 'a' 626364 'e' 66 'f' 68 # 61 62 63 64 65 66 67 68 85 NETWIB_ENCODETYPE_MIXED1H_WRAP : 86 'a' 62 'c' 64 'e' 66 'f' 68 # 61 62 63 64 65 66 67 68 87 'a' 62 63 64 'e' 66 'f' 68 # 61 62 63 64 65 66 67 68 88 NETWIB_ENCODETYPE_QUOTED : 89 "abc d \\ \t \n \r \" \x00 z" 90 */ 91 92 /*-------------------------------------------------------------*/ 93 /* Name : netwib_buf_encode 94 Description : 95 Append a encoded buffer. 96 Input parameter(s) : 97 *pbuftoencode : buffer to encode 98 encodetype : decoding type 99 Input/output parameter(s) : 100 *pbuf : netwib_buf updated 101 Output parameter(s) : 102 Normal return values : 103 NETWIB_ERR_OK : ok 104 This function supports NETWIB_BUF_FLAGS_SENSITIVE. 105 */ 106 netwib_err netwib_buf_encode(netwib_constbuf *pbuftoencode, 107 netwib_encodetype encodetype, 108 netwib_buf *pbuf); 109 /* only the main ones are defined */ 110 #define netwib_buf_encode_data(pbuftoencode,pbuf) netwib_buf_encode(pbuftoencode,NETWIB_ENCODETYPE_DATA,pbuf) 111 #define netwib_buf_encode_hexa(pbuftoencode,pbuf) netwib_buf_encode(pbuftoencode,NETWIB_ENCODETYPE_HEXA,pbuf) 112 #define netwib_buf_encode_mixed(pbuftoencode,pbuf) netwib_buf_encode(pbuftoencode,NETWIB_ENCODETYPE_MIXED,pbuf) 113 #define netwib_buf_encode_text(pbuftoencode,pbuf) netwib_buf_encode(pbuftoencode,NETWIB_ENCODETYPE_TEXT,pbuf) 114 #define netwib_buf_encode_base64(pbuftoencode,pbuf) netwib_buf_encode(pbuftoencode,NETWIB_ENCODETYPE_BASE64,pbuf) 115 #define netwib_buf_encode_quoted(pbuftoencode,pbuf) netwib_buf_encode(pbuftoencode,NETWIB_ENCODETYPE_QUOTED,pbuf) 116 #define netwib_buf_encode_dump(pbuftoencode,pbuf) netwib_buf_encode(pbuftoencode,NETWIB_ENCODETYPE_DUMP,pbuf) 117 #define netwib_buf_encode_lowercase(pbuftoencode,pbuf) netwib_buf_encode(pbuftoencode,NETWIB_ENCODETYPE_LOWERCASE,pbuf) 118 #define netwib_buf_encode_uppercase(pbuftoencode,pbuf) netwib_buf_encode(pbuftoencode,NETWIB_ENCODETYPE_UPPERCASE,pbuf) 119 120 /*-------------------------------------------------------------*/ 121 typedef struct { 122 netwib_encodetype last; 123 netwib_bool containnl; 124 } netwib_encodetype_context; 125 /* Name : netwib_buf_encode_transition 126 Description : 127 Append a transition between two data. 128 First call has to be done with NETWIB_ENCODETYPE_TRANSITION_INIT. 129 Input parameter(s) : 130 encodetype : next encoding type 131 Input/output parameter(s) : 132 *pctx : context 133 *pbuf : netwib_buf updated 134 Output parameter(s) : 135 Normal return values : 136 NETWIB_ERR_OK : ok 137 */ 138 netwib_err netwib_buf_encode_transition(netwib_encodetype_context *pctx, 139 netwib_encodetype encodetype, 140 netwib_buf *pbuf); 141 #define netwib_buf_encode_transition_init(pctx) netwib_buf_encode_transition(pctx,NETWIB_ENCODETYPE_TRANSITION_INIT,NULL) 142 #define netwib_buf_encode_transition_end(pctx,pbuf) netwib_buf_encode_transition(pctx,NETWIB_ENCODETYPE_TRANSITION_END,pbuf) 143