WIP
[radsecproxy.git] / lib / debug.c
1 #include <freeradius/libradius.h>
2 #include "libradsec-impl.h"
3 #include "debug.h"
4
5 /* From freeradius-server/src/lib/radius.c */
6 static void print_hex(RADIUS_PACKET *packet)
7 {
8         int i;
9
10         if (!packet->data) return;
11
12         printf("  Code:\t\t%u\n", packet->data[0]);
13         printf("  Id:\t\t%u\n", packet->data[1]);
14         printf("  Length:\t%u\n", ((packet->data[2] << 8) |
15                                    (packet->data[3])));
16         printf("  Vector:\t");
17         for (i = 4; i < 20; i++) {
18                 printf("%02x", packet->data[i]);
19         }
20         printf("\n");
21
22         if (packet->data_len > 20) {
23                 int total;
24                 const uint8_t *ptr;
25                 printf("  Data:");
26
27                 total = packet->data_len - 20;
28                 ptr = packet->data + 20;
29
30                 while (total > 0) {
31                         int attrlen;
32
33                         printf("\t\t");
34                         if (total < 2) { /* too short */
35                                 printf("%02x\n", *ptr);
36                                 break;
37                         }
38
39                         if (ptr[1] > total) { /* too long */
40                                 for (i = 0; i < total; i++) {
41                                         printf("%02x ", ptr[i]);
42                                 }
43                                 break;
44                         }
45
46                         printf("%02x  %02x  ", ptr[0], ptr[1]);
47                         attrlen = ptr[1] - 2;
48                         ptr += 2;
49                         total -= 2;
50
51                         for (i = 0; i < attrlen; i++) {
52                                 if ((i > 0) && ((i & 0x0f) == 0x00))
53                                         printf("\t\t\t");
54                                 printf("%02x ", ptr[i]);
55                                 if ((i & 0x0f) == 0x0f) printf("\n");
56                         }
57
58                         if ((attrlen & 0x0f) != 0x00) printf("\n");
59
60                         ptr += attrlen;
61                         total -= attrlen;
62                 }
63         }
64         fflush(stdout);
65 }
66
67 void
68 rs_dump_packet (const struct rs_packet *pkt)
69 {
70   print_hex (pkt->rpkt);
71 }