test: add test case for cname
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
#include "util.h"
|
||||
#include <arpa/inet.h>
|
||||
#include <fcntl.h>
|
||||
#include <fstream>
|
||||
#include <netinet/in.h>
|
||||
#include <poll.h>
|
||||
#include <signal.h>
|
||||
@@ -30,7 +31,6 @@
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
|
||||
namespace smartdns
|
||||
{
|
||||
@@ -87,13 +87,15 @@ void MockServer::Run()
|
||||
struct sockaddr_storage from;
|
||||
socklen_t addrlen = sizeof(from);
|
||||
unsigned char in_buff[4096];
|
||||
int query_id = 0;
|
||||
int len = recvfrom(fd_, in_buff, sizeof(in_buff), 0, (struct sockaddr *)&from, &addrlen);
|
||||
if (len < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
char packet_buff[4096];
|
||||
unsigned char out_buff[4096];
|
||||
unsigned char response_data_buff[4096];
|
||||
unsigned char response_packet_buff[4096];
|
||||
memset(packet_buff, 0, sizeof(packet_buff));
|
||||
struct dns_packet *packet = (struct dns_packet *)packet_buff;
|
||||
struct ServerRequestContext request;
|
||||
@@ -102,6 +104,7 @@ void MockServer::Run()
|
||||
int ret = dns_decode(packet, sizeof(packet_buff), in_buff, len);
|
||||
if (ret == 0) {
|
||||
request.packet = packet;
|
||||
query_id = packet->head.id;
|
||||
if (packet->head.qr == DNS_QR_QUERY) {
|
||||
struct dns_rrs *rrs = NULL;
|
||||
int rr_count = 0;
|
||||
@@ -126,27 +129,26 @@ void MockServer::Run()
|
||||
request.fromlen = addrlen;
|
||||
request.request_data = in_buff;
|
||||
request.request_data_len = len;
|
||||
request.response_data = out_buff;
|
||||
request.response_packet = (struct dns_packet *)response_packet_buff;
|
||||
request.response_data = response_data_buff;
|
||||
request.response_data_len = 0;
|
||||
request.response_data_max_len = sizeof(out_buff);
|
||||
request.response_data_max_len = sizeof(response_data_buff);
|
||||
|
||||
struct dns_head head;
|
||||
memset(&head, 0, sizeof(head));
|
||||
head.id = query_id;
|
||||
head.qr = DNS_QR_ANSWER;
|
||||
head.opcode = DNS_OP_QUERY;
|
||||
head.aa = 0;
|
||||
head.rd = 0;
|
||||
head.ra = 1;
|
||||
head.rcode = DNS_RC_SERVFAIL;
|
||||
dns_packet_init(request.response_packet, sizeof(response_packet_buff), &head);
|
||||
|
||||
auto callback_ret = callback_(&request);
|
||||
if (callback_ret == false) {
|
||||
unsigned char out_packet_buff[4096];
|
||||
struct dns_packet *out_packet = (struct dns_packet *)out_packet_buff;
|
||||
struct dns_head head;
|
||||
memset(&head, 0, sizeof(head));
|
||||
head.id = packet->head.id;
|
||||
head.qr = DNS_QR_ANSWER;
|
||||
head.opcode = DNS_OP_QUERY;
|
||||
head.aa = 0;
|
||||
head.rd = 1;
|
||||
head.ra = 0;
|
||||
head.rcode = DNS_RC_SERVFAIL;
|
||||
|
||||
dns_packet_init(out_packet, sizeof(out_packet_buff), &head);
|
||||
if (callback_ret == false || request.response_data_len == 0) {
|
||||
request.response_data_len =
|
||||
dns_encode(request.response_data, request.response_data_max_len, out_packet);
|
||||
dns_encode(request.response_data, request.response_data_max_len, request.response_packet);
|
||||
}
|
||||
|
||||
sendto(fd_, request.response_data, request.response_data_len, MSG_NOSIGNAL, (struct sockaddr *)&from,
|
||||
@@ -255,7 +257,8 @@ bool Server::Start(const std::string &conf, enum CONF_TYPE type)
|
||||
if (fd < 0) {
|
||||
return false;
|
||||
}
|
||||
Defer {
|
||||
Defer
|
||||
{
|
||||
close(fd);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user