ns_client_next(client, result);
}
+#ifdef NS_CLIENT_MOCKREPLY
+static isc_result_t
+client_mockreply(ns_client_t *client, uint16_t id) {
+ isc_result_t result;
+ unsigned char *data;
+ isc_buffer_t buffer;
+ isc_buffer_t tcpbuffer;
+ isc_region_t r;
+ unsigned char sendbuf[SEND_BUFFER_SIZE];
+ result = client_allocsendbuf(client, &buffer, &tcpbuffer, 0,
+ sendbuf, &data);
+ if (result != ISC_R_SUCCESS) {
+ goto done;
+ }
+
+ isc_buffer_putuint16(&buffer, id);
+ isc_buffer_putuint8(&buffer, 0x81);
+ isc_buffer_putuint8(&buffer, 0x80);
+ isc_buffer_putuint16(&buffer, 0);
+ isc_buffer_putuint16(&buffer, 0);
+ isc_buffer_putuint16(&buffer, 0);
+ isc_buffer_putuint16(&buffer, 0);
+ if (client->sendcb != NULL) {
+ client->sendcb(&buffer);
+ } else if (TCP_CLIENT(client)) {
+ isc_buffer_usedregion(&buffer, &r);
+ isc_buffer_putuint16(&tcpbuffer, (uint16_t) r.length);
+ isc_buffer_add(&tcpbuffer, r.length);
+ result = client_sendpkg(client, &tcpbuffer);
+ } else {
+ result = client_sendpkg(client, &buffer);
+ }
+ if (result == ISC_R_SUCCESS) {
+ return (ISC_R_SUCCESS);
+ }
+done:
+ if (client->tcpbuf != NULL) {
+ isc_mem_put(client->mctx, client->tcpbuf, TCP_BUFFER_SIZE);
+ client->tcpbuf = NULL;
+ }
+ ns_client_next(client, result);
+ return (ISC_R_SUCCESS);
+}
+#endif
+
static void
client_send(ns_client_t *client) {
isc_result_t result;
return;
}
+#ifdef NS_CLIENT_MOCKREPLY
+ result = dns_message_peekheader(buffer, &id, &flags);
+ if (result != ISC_R_SUCCESS) {
+ /*
+ * There isn't enough header to determine whether
+ * this was a request or a response. Drop it.
+ */
+ ns_client_next(client, result);
+ return;
+ }
+ /*
+ * client_mockreply always return success, but we want to
+ * make the return conditional to fool compilers that the
+ * code below is reachable.
+ */
+ if (client_mockreply(client, id) == ISC_R_SUCCESS) {
+ return;
+ }
+#endif
+
isc_netaddr_fromsockaddr(&netaddr, &client->peeraddr);
#if NS_CLIENT_DROPPORT