49 const char *buf =
"\x76\xb1\x81\x80\x00\x01\x00\x01\x00\x02\x00\x02\x03\x77\x77\x77\x07\x67\x61\x6d\x65\x64\x65\x76\x03\x6e\x65\x74\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\xef\x00\x04\xd8\xb9\x60\xea\xc0\x10\x00\x02\x00\x01\x00\x00\x00\xef\x00\x0f\x03\x6e\x73\x32\x05\x7a\x77\x61\x76\x65\x03\x63\x6f\x6d\x00\xc0\x10\x00\x02\x00\x01\x00\x00\x00\xef\x00\x06\x03\x6e\x73\x31\xc0\x41\xc0\x3d\x00\x01\x00\x01\x00\x00\x29\x6b\x00\x04\xd8\xea\xee\x4a\xc0\x58\x00\x01\x00\x01\x00\x00\x29\x6b\x00\x04\xd8\xea\xee\x4b";
58 CPPUNIT_ASSERT(res == 0);
59 CPPUNIT_ASSERT_EQUAL((
short unsigned int)0x76b1, msg->
id);
60 CPPUNIT_ASSERT(msg->
qr == 1);
62 CPPUNIT_ASSERT_EQUAL((
unsigned int)0, msg->
opcode);
63 CPPUNIT_ASSERT_EQUAL((
unsigned int)0, msg->
aa);
64 CPPUNIT_ASSERT_EQUAL((
unsigned int)0, msg->
tc);
65 CPPUNIT_ASSERT_EQUAL((
unsigned int)1, msg->
rd);
66 CPPUNIT_ASSERT_EQUAL((
unsigned int)1, msg->
ra);
67 CPPUNIT_ASSERT_EQUAL((
unsigned int)0, msg->
rcode);
69 CPPUNIT_ASSERT_EQUAL((
unsigned short)1, msg->
qdcount);
70 CPPUNIT_ASSERT_EQUAL((
unsigned short)1, msg->
ancount);
71 CPPUNIT_ASSERT_EQUAL((
unsigned short)2, msg->
nscount);
72 CPPUNIT_ASSERT_EQUAL((
unsigned short)2, msg->
arcount);
82 const char *buf =
"\x76\xb1\x81\x80\x00\x01\x00\x01\x00\x02\x00\x02\x03\x77\x77\x77\x07\x67\x61\x6d\x65\x64\x65\x76\x03\x6e\x65\x74\x00\x00\x01\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x00\xef\x00\x04\xd8\xb9\x60\xea\xc0\x10\x00\x02\x00\x01\x00\x00\x00\xef\x00\x0f\x03\x6e\x73\x32\x05\x7a\x77\x61\x76\x65\x03\x63\x6f\x6d\x00\xc0\x10\x00\x02\x00\x01\x00\x00\x00\xef\x00\x06\x03\x6e\x73\x31\xc0\x41\xc0\x3d\x00\x01\x00\x01\x00\x00\x29\x6b\x00\x04\xd8\xea\xee\x4a\xc0\x58\x00\x01\x00\x01\x00\x00\x29\x6b\x00\x04\xd8\xea\xee\x4b";
90 CPPUNIT_ASSERT_EQUAL(1, res);
91 CPPUNIT_ASSERT(msg !=
nullptr);
94 CPPUNIT_ASSERT(msg ==
nullptr);
100 const char *buf =
"\xec\x7b\x81\x80\x00\x01\x00\x01\x00\x00\x00\x00\x05\x62\x75\x72\x73\x74\x02\x74\x65\x06\x74\x61\x63\x6f\x64\x61\x03\x6e\x65\x74\x00\x00\x1c\x00\x01\xc0\x0c\x00\x05\x00\x01\x00\x00\x19\xe5\x00\x0a\x02\x74\x65\x04\x67\x73\x6c\x62\xc0\x15";
104 unsigned int off = 0;
109 CPPUNIT_ASSERT(0 == res);
110 CPPUNIT_ASSERT(0xec7b == msg->
id);
111 CPPUNIT_ASSERT(1 == msg->
qr);
113 CPPUNIT_ASSERT(0 == msg->
opcode);
114 CPPUNIT_ASSERT(0 == msg->
aa);
115 CPPUNIT_ASSERT(0 == msg->
tc);
116 CPPUNIT_ASSERT(1 == msg->
rd);
117 CPPUNIT_ASSERT(1 == msg->
ra);
118 CPPUNIT_ASSERT(0 == msg->
rcode);
120 CPPUNIT_ASSERT(1 == msg->
qdcount);
121 CPPUNIT_ASSERT(1 == msg->
ancount);
122 CPPUNIT_ASSERT(0 == msg->
nscount);
123 CPPUNIT_ASSERT(0 == msg->
arcount);
124 CPPUNIT_ASSERT(12 ==
off);
125 printf(
"\n Header : OK");
135 CPPUNIT_ASSERT_EQUAL(1, res);
136 CPPUNIT_ASSERT(msg !=
nullptr);
143 const char *buf =
"\xab\xcd\x81\x80\x00\x01\x00\x05\x00\x04\x00\x04";
147 unsigned int off = 0;
152 CPPUNIT_ASSERT(0 == res);
160 CPPUNIT_ASSERT(0 == memcmp(
"The DNS reply message is corrupt or could not be safely parsed.",
rfc1035ErrorMessage(res), 63));
161 CPPUNIT_ASSERT(res < 0);
162 CPPUNIT_ASSERT(msg ==
nullptr);
implements test program's main() function while enabling customization
int run(int argc, char *argv[])
CPPUNIT_TEST_SUITE(TestRfc1035)
CPPUNIT_TEST(testHeaderUnpack)
CPPUNIT_TEST(testBugPacketHeadersOnly)
void testBugPacketHeadersOnly()
CPPUNIT_TEST(testBugPacketEndingOnCompressionPtr)
void testBugPacketEndingOnCompressionPtr()
CPPUNIT_TEST(testParseAPacket)
int rfc1035HeaderUnpack(const char *buf, size_t sz, unsigned int *off, rfc1035_message *h)
int rfc1035MessageUnpack(const char *buf, size_t sz, rfc1035_message **answer)
const char * rfc1035ErrorMessage(int n)
void rfc1035MessageDestroy(rfc1035_message **msg)
struct _rfc1035_message rfc1035_message
CPPUNIT_TEST_SUITE_REGISTRATION(TestRfc1035)