static void test(void) { unsigned i; for (i = 0; i < sizeof TestCase / sizeof TestCase[0]; i++) { char p0fbuf[256]; parse_frame pf = { PROT_IPv4, T->iplen, T->ip, NULL }; parse_frame pf2 = { PROT_TCP, T->tcplen, T->tcp, NULL }; /* print */ printf("#%2u:\n", i); /* parse ip and tcp in order */ ipv4_parse(T->ip, T->iplen, &pf, NULL); tcp_parse(T->tcp, T->tcplen, &pf2, NULL); /* generate fingerprint */ p0f2str(p0fbuf, sizeof p0fbuf, (tcp*)T->tcp, T->tcplen, (ipv4*)T->ip, T->iplen, 0); if (0 == strcmp(p0fbuf, T->expected_p0f)) { printf("OK\n"); } else { printf("%s p0f: %s\nexpected: %s)\n", "!!", p0fbuf, T->expected_p0f); printf(" IP len=%u ", T->iplen); dump_chars(T->ip, T->iplen, stdout); fputc('\n', stdout); printf(" TCP len=%u ", T->tcplen); dump_chars(T->tcp, T->tcplen, stdout); fputc('\n', stdout); ipv4_dump(&pf, 0, stdout); tcp_dump(&pf2, 0, stdout); } T++; } }
void value_dump(const value_t * value, fieldtype_t type) { switch (type) { #ifdef USE_IPV4 case TYPE_IPV4: ipv4_dump(&value->ipv4); break; #endif #ifdef USE_IPV6 case TYPE_IPV6: ipv6_dump(&value->ipv6); break; #endif #ifdef USE_BITS case TYPE_BITS: fprintf(stderr, "value_dump: type not supported (%d) (%s), use value_dump_hex instead\n", type, field_type_to_string(type)); break; #endif case TYPE_UINT8: printf("%hhu", value->int8); break; case TYPE_UINT16: printf("%hu", value->int16); break; case TYPE_UINT32: printf("%u", value->int32); break; case TYPE_UINT64: printf("%llu", (unsigned long long) value->int64); break; case TYPE_DOUBLE: printf("%lf", value->dbl); break; case TYPE_UINTMAX: printf("%ju", value->intmax); break; case TYPE_STRING: printf("%s", value->string); break; case TYPE_GENERATOR: generator_dump(value->generator); break; case TYPE_UINT128: default: fprintf(stderr, "value_dump: type not supported (%d) (%s)\n", type, field_type_to_string(type)); break; } }