WIP
authorLinus Nordberg <linus@nordu.net>
Mon, 27 Sep 2010 21:35:08 +0000 (23:35 +0200)
committerLinus Nordberg <linus@nordu.net>
Mon, 27 Sep 2010 21:35:08 +0000 (23:35 +0200)
lib/debug.c [new file with mode: 0644]

diff --git a/lib/debug.c b/lib/debug.c
new file mode 100644 (file)
index 0000000..2d4e242
--- /dev/null
@@ -0,0 +1,71 @@
+#include <freeradius/libradius.h>
+#include "libradsec-impl.h"
+#include "debug.h"
+
+/* From freeradius-server/src/lib/radius.c */
+static void print_hex(RADIUS_PACKET *packet)
+{
+       int i;
+
+       if (!packet->data) return;
+
+       printf("  Code:\t\t%u\n", packet->data[0]);
+       printf("  Id:\t\t%u\n", packet->data[1]);
+       printf("  Length:\t%u\n", ((packet->data[2] << 8) |
+                                  (packet->data[3])));
+       printf("  Vector:\t");
+       for (i = 4; i < 20; i++) {
+               printf("%02x", packet->data[i]);
+       }
+       printf("\n");
+
+       if (packet->data_len > 20) {
+               int total;
+               const uint8_t *ptr;
+               printf("  Data:");
+
+               total = packet->data_len - 20;
+               ptr = packet->data + 20;
+
+               while (total > 0) {
+                       int attrlen;
+
+                       printf("\t\t");
+                       if (total < 2) { /* too short */
+                               printf("%02x\n", *ptr);
+                               break;
+                       }
+
+                       if (ptr[1] > total) { /* too long */
+                               for (i = 0; i < total; i++) {
+                                       printf("%02x ", ptr[i]);
+                               }
+                               break;
+                       }
+
+                       printf("%02x  %02x  ", ptr[0], ptr[1]);
+                       attrlen = ptr[1] - 2;
+                       ptr += 2;
+                       total -= 2;
+
+                       for (i = 0; i < attrlen; i++) {
+                               if ((i > 0) && ((i & 0x0f) == 0x00))
+                                       printf("\t\t\t");
+                               printf("%02x ", ptr[i]);
+                               if ((i & 0x0f) == 0x0f) printf("\n");
+                       }
+
+                       if ((attrlen & 0x0f) != 0x00) printf("\n");
+
+                       ptr += attrlen;
+                       total -= attrlen;
+               }
+       }
+       fflush(stdout);
+}
+
+void
+rs_dump_packet (const struct rs_packet *pkt)
+{
+  print_hex (pkt->rpkt);
+}