Add send_handshake_query helper function

Convert send_downenctest to use it.
Remove unused data/len args from send_downenctest.
This commit is contained in:
Erik Ekman 2020-07-24 20:18:07 +02:00
parent a8a20f570e
commit d74939d323
1 changed files with 31 additions and 16 deletions

View File

@ -1255,6 +1255,28 @@ send_version(int fd, uint32_t version)
send_packet(fd, 'v', data, sizeof(data)); send_packet(fd, 'v', data, sizeof(data));
} }
/* Add lower 15 bits of rand seed as base32,
* followed by a dot and the tunnel domain and send */
static void
send_handshake_query(int fd, char *prefix)
{
char buf[300];
char cmc_dot[5];
cmc_dot[0] = b32_5to8((rand_seed >> 10) & 0x1f);
cmc_dot[1] = b32_5to8((rand_seed >> 5) & 0x1f);
cmc_dot[2] = b32_5to8((rand_seed) & 0x1f);
cmc_dot[3] = '.';
cmc_dot[4] = 0;
rand_seed++;
buf[0] = 0;
strncat(buf, prefix, 60); /* 63 - space for 3 CMC bytes */
strcat(buf, cmc_dot);
strncat(buf, topdomain, sizeof(buf) - strlen(buf));
send_query(fd, buf);
}
static void static void
send_ip_request(int fd, int userid) send_ip_request(int fd, int userid)
{ {
@ -1297,21 +1319,14 @@ send_upenctest(int fd, const char *s)
} }
static void static void
send_downenctest(int fd, char downenc, int variant, char *s, int slen) send_downenctest(int fd, char downenc, int variant)
/* Note: content/handling of s is not defined yet. */
{ {
char buf[512] = "y_____."; char prefix[4] = "y__";
prefix[1] = tolower(downenc);
prefix[2] = b32_5to8(variant);
buf[1] = tolower(downenc); /* Use send_query directly if we ever send more data here. */
buf[2] = b32_5to8(variant); send_handshake_query(fd, prefix);
buf[3] = b32_5to8((rand_seed >> 10) & 0x1f);
buf[4] = b32_5to8((rand_seed >> 5) & 0x1f);
buf[5] = b32_5to8((rand_seed) & 0x1f);
rand_seed++;
strncat(buf, topdomain, 512 - strlen(buf));
send_query(fd, buf);
} }
static void static void
@ -1746,7 +1761,7 @@ handshake_downenctest(int dns_fd, char trycodec)
for (i = 0; running && i < 3; i++) { for (i = 0; running && i < 3; i++) {
send_downenctest(dns_fd, trycodec, 1, NULL, 0); send_downenctest(dns_fd, trycodec, 1);
read = handshake_waitdns(dns_fd, in, sizeof(in), 'y', 'Y', i+1); read = handshake_waitdns(dns_fd, in, sizeof(in), 'y', 'Y', i+1);
@ -1846,7 +1861,7 @@ handshake_qtypetest(int dns_fd, int timeout)
byte values can be returned, which is needed for NULL/PRIVATE byte values can be returned, which is needed for NULL/PRIVATE
to work. */ to work. */
send_downenctest(dns_fd, trycodec, 1, NULL, 0); send_downenctest(dns_fd, trycodec, 1);
read = handshake_waitdns(dns_fd, in, sizeof(in), 'y', 'Y', timeout); read = handshake_waitdns(dns_fd, in, sizeof(in), 'y', 'Y', timeout);
@ -1972,7 +1987,7 @@ handshake_edns0_check(int dns_fd)
for (i = 0; running && i < 3; i++) { for (i = 0; running && i < 3; i++) {
send_downenctest(dns_fd, trycodec, 1, NULL, 0); send_downenctest(dns_fd, trycodec, 1);
read = handshake_waitdns(dns_fd, in, sizeof(in), 'y', 'Y', i+1); read = handshake_waitdns(dns_fd, in, sizeof(in), 'y', 'Y', i+1);