-int rfc1035_errno;
-const char *rfc1035_error_message;
-
/*
* rfc1035HeaderPack()
*
return 0;
}
-static void
-rfc1035SetErrno(int n)
+const char *
+rfc1035ErrorMessage(int n)
{
- switch (rfc1035_errno = n) {
+ if (n < 0)
+ n = -n;
+ switch (n) {
case 0:
- rfc1035_error_message = "No error condition";
+ return "No error condition";
break;
case 1:
- rfc1035_error_message = "Format Error: The name server was "
+ return "Format Error: The name server was "
"unable to interpret the query.";
break;
case 2:
- rfc1035_error_message = "Server Failure: The name server was "
+ return "Server Failure: The name server was "
"unable to process this query.";
break;
case 3:
- rfc1035_error_message = "Name Error: The domain name does "
+ return "Name Error: The domain name does "
"not exist.";
break;
case 4:
- rfc1035_error_message = "Not Implemented: The name server does "
+ return "Not Implemented: The name server does "
"not support the requested kind of query.";
break;
case 5:
- rfc1035_error_message = "Refused: The name server refuses to "
+ return "Refused: The name server refuses to "
"perform the specified operation.";
break;
case rfc1035_unpack_error:
- rfc1035_error_message = "The DNS reply message is corrupt or could "
+ return "The DNS reply message is corrupt or could "
"not be safely parsed.";
break;
default:
- rfc1035_error_message = "Unknown Error";
+ return "Unknown Error";
break;
}
}
msg = (rfc1035_message*)xcalloc(1, sizeof(*msg));
if (rfc1035HeaderUnpack(buf + off, sz - off, &off, msg)) {
RFC1035_UNPACK_DEBUG;
- rfc1035SetErrno(rfc1035_unpack_error);
xfree(msg);
return -rfc1035_unpack_error;
}
- rfc1035_errno = 0;
- rfc1035_error_message = NULL;
i = (unsigned int) msg->qdcount;
if (i != 1) {
/* This can not be an answer to our queries.. */
RFC1035_UNPACK_DEBUG;
- rfc1035SetErrno(rfc1035_unpack_error);
xfree(msg);
return -rfc1035_unpack_error;
}
for (j = 0; j < i; j++) {
if (rfc1035QueryUnpack(buf, sz, &off, &querys[j])) {
RFC1035_UNPACK_DEBUG;
- rfc1035SetErrno(rfc1035_unpack_error);
rfc1035MessageDestroy(&msg);
return -rfc1035_unpack_error;
}
*answer = msg;
if (msg->rcode) {
RFC1035_UNPACK_DEBUG;
- rfc1035SetErrno((int) msg->rcode);
- return -rfc1035_errno;
+ return -msg->rcode;
}
if (msg->ancount == 0)
return 0;
*/
rfc1035MessageDestroy(&msg);
*answer = NULL;
- rfc1035SetErrno(rfc1035_unpack_error);
return -rfc1035_unpack_error;
}
return nr;
&answers,
&rid);
if (n < 0) {
- printf("ERROR %d\n", rfc1035_errno);
+ printf("ERROR %d\n", -n);
} else if (rid != sid) {
printf("ERROR, ID mismatch (%#hx, %#hx)\n", sid, rid);
} else {
/* Test the MessageUnpack function itself */
res = rfc1035MessageUnpack(buf, len, &msg);
- CPPUNIT_ASSERT_EQUAL((const char*)NULL, rfc1035_error_message);
CPPUNIT_ASSERT_EQUAL(1, res);
CPPUNIT_ASSERT(msg != NULL);
rfc1035MessageDestroy(&msg);
/* Test the MessageUnpack function itself */
res = rfc1035MessageUnpack(buf, len, &msg);
- CPPUNIT_ASSERT(rfc1035_error_message != NULL);
- CPPUNIT_ASSERT(0 == memcmp("The DNS reply message is corrupt or could not be safely parsed.", rfc1035_error_message, 63));
- CPPUNIT_ASSERT(res < 0);
+ CPPUNIT_ASSERT(0 == memcmp("The DNS reply message is corrupt or could not be safely parsed.", rfc1035ErrorMessage(res), 63));
+ CPPUNIT_ASSERT(res == 0);
CPPUNIT_ASSERT(msg == NULL);
}