mirror of
https://github.com/Hamlib/Hamlib.git
synced 2024-09-21 02:17:21 +00:00
Add testnet.c for testing IPV4/IPV6 address/port combinations
This commit is contained in:
parent
ed3a26296d
commit
5ebb95bb43
154
tests/testnet.c
Normal file
154
tests/testnet.c
Normal file
@ -0,0 +1,154 @@
|
||||
/* Test network address variations in hamlib */
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h> /* Standard input/output definitions */
|
||||
#include <string.h> /* String function definitions */
|
||||
#include <unistd.h> /* UNIX standard function definitions */
|
||||
#include <fcntl.h> /* File control definitions */
|
||||
#include <errno.h> /* Error number definitions */
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <signal.h>
|
||||
|
||||
#define HAVE_NETINET_IN_H
|
||||
#define HAVE_NETDB_H
|
||||
#define HAVE_ARPA_INET_H
|
||||
|
||||
#ifdef HAVE_NETINET_IN_H
|
||||
# include <netinet/in.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_NETDB_H
|
||||
# include <netdb.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ARPA_INET_H
|
||||
# include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
int rig_network_addr(char *hoststr, char *portstr)
|
||||
{
|
||||
|
||||
struct in6_addr serveraddr;
|
||||
struct addrinfo hints, *res;
|
||||
int status;
|
||||
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = PF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
hints.ai_flags = AI_CANONNAME;
|
||||
|
||||
|
||||
status = getaddrinfo(hoststr, portstr, &hints, &res);
|
||||
|
||||
if (status == 0 && res->ai_family == AF_INET6)
|
||||
{
|
||||
printf("Using IPV6 for %s:%s\n", hoststr, portstr);
|
||||
}
|
||||
else if (status == 0)
|
||||
{
|
||||
printf("Using IPV4 for %s:%s\n", hoststr, portstr);
|
||||
}
|
||||
|
||||
if (status != 0)
|
||||
{
|
||||
printf("%s: cannot get host \"%s\": %s\n",
|
||||
__func__,
|
||||
hoststr,
|
||||
gai_strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
|
||||
status = inet_pton(AF_INET, hoststr, &serveraddr);
|
||||
|
||||
if (status != 1) /* not valid IPv4 address, maybe IPV6? */
|
||||
{
|
||||
status = inet_pton(AF_INET6, hoststr, &serveraddr);
|
||||
|
||||
if (status != 1) /* nope */
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int test_host(char *hoststr, char host[256], char port[6])
|
||||
{
|
||||
int status;
|
||||
char host2[256], port2[6];
|
||||
status = parse_hoststr(hoststr, host2, port2);
|
||||
|
||||
printf("---------------------\n");
|
||||
|
||||
if (status == 0)
|
||||
{
|
||||
if (strcmp(host, host2) || strcmp(port, port2))
|
||||
{
|
||||
printf("%s: Mismatch, expected host=%s, port=%s, got host=%s, port=%s\n",
|
||||
__func__,
|
||||
host, port, host2, port2);
|
||||
return -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
rig_network_addr(host, port);
|
||||
}
|
||||
|
||||
printf("%s: %s, host=%s, port=%s\n", __func__, hoststr, host, port);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("%s: ERROR!! %s, host=%s, port=%s\n", __func__, hoststr, host, port);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
// IPV4
|
||||
test_host("127.0.0.1", "127.0.0.1", "");
|
||||
test_host("127.0.0.1:4532", "127.0.0.1", "4532");
|
||||
test_host("192.168.1.1", "192.168.1.1", "");
|
||||
test_host("192.168.1.1:4532", "192.168.1.1", "4532");
|
||||
test_host("mdblack-VirtualBox", "mdblack-VirtualBox", "");
|
||||
test_host("mdblack-VirtualBox:4532", "mdblack-VirtualBox", "4532");
|
||||
test_host("localhost", "localhost", "");
|
||||
test_host("localhost:4532", "localhost", "4532");
|
||||
// IPV6 with brackets
|
||||
test_host("[fe80::e034:55ef:ce2a:dc83]", "fe80::e034:55ef:ce2a:dc83", "");
|
||||
test_host("[fe80::e034:55ef:ce2a:dc83]:4532", "fe80::e034:55ef:ce2a:dc83",
|
||||
"4532");
|
||||
|
||||
test_host("fe80::e034:55ef:ce2a:dc83", "fe80::e034:55ef:ce2a:dc83", "");
|
||||
test_host("fe80::e034:55ef:ce2a:dc83:4532", "fe80::e034:55ef:ce2a:dc83",
|
||||
"4532");
|
||||
test_host("fe80:e034:55ef:ce2a:dc83:1234:5678:9abc",
|
||||
"fe80:e034:55ef:ce2a:dc83:1234:5678:9abc", "");
|
||||
test_host("fe80:e034:55ef:ce2a:dc83:1234:5678:9abc:4532",
|
||||
"fe80:e034:55ef:ce2a:dc83:1234:5678:9abc",
|
||||
"4532");
|
||||
test_host("::1", "::1", "");
|
||||
test_host("::1:4532", "::1", "4532");
|
||||
|
||||
#if 1 // server side addresses with IPV6
|
||||
test_host("fe80::e034:55ef:ce2a:dc83%eth0", "fe80::e034:55ef:ce2a:dc83%eth0",
|
||||
"");
|
||||
test_host("[fe80::e034:55ef:ce2a:dc83%1]", "fe80::e034:55ef:ce2a:dc83%1", "");
|
||||
test_host("[fe80::e034:55ef:ce2a:dc83%1]:4532", "fe80::e034:55ef:ce2a:dc83%1",
|
||||
"4532");
|
||||
test_host("fe80::e034:55ef:ce2a:dc83%eth0:4532",
|
||||
"fe80::e034:55ef:ce2a:dc83%eth0", "4532");
|
||||
test_host("fe80::e034:55ef:ce2a:dc83%1", "fe80::e034:55ef:ce2a:dc83%1", "");
|
||||
test_host("fe80::e034:55ef:ce2a:dc83%1:4532", "fe80::e034:55ef:ce2a:dc83%1",
|
||||
"4532");
|
||||
test_host("[fe80::e034:55ef:ce2a:dc83%eth0]",
|
||||
"fe80::e034:55ef:ce2a:dc83%eth0", "");
|
||||
test_host("[fe80::e034:55ef:ce2a:dc83%eth0]:4532",
|
||||
"fe80::e034:55ef:ce2a:dc83%eth0", "4532");
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user