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