Skip to content

Commit

Permalink
test_getnameinfo: improve, check ipv6
Browse files Browse the repository at this point in the history
  • Loading branch information
rofl0r committed Dec 6, 2015
1 parent 0e0e359 commit 4c3be5e
Showing 1 changed file with 62 additions and 18 deletions.
80 changes: 62 additions & 18 deletions tests/test_getnameinfo.c
Expand Up @@ -11,73 +11,117 @@
#define SOCKPORT(x) (satosin(x)->sin_port)
#define SOCKFAMILY(x) (satosin(x)->sin_family)

#define ASSERT(X) { if(!(X)) printf("ASSERTION FAILED: %s @%s:%d\n", # X, __FILE__, __LINE__); }
#define CLR() { hbuf[0] = 0; sbuf[0] = 0; }

int main() {
struct sockaddr a = {0}, *sa = &a;
struct sockaddr_in a = {0}, *sa = &a;
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
SOCKPORT(a) = htons(80);
memcpy( &( (struct sockaddr_in*) sa ) ->sin_addr , (char[]) {127,0,0,1}, 4);
a.sin_port = htons(80);
memcpy( &a.sin_addr , (char[]) {127,0,0,1}, 4);

int ret;

if ((ret = getnameinfo(sa, 0, hbuf, sizeof(hbuf), sbuf,
if ((ret = getnameinfo((void*)sa, 0, hbuf, sizeof(hbuf), sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);
else
printf("%s\n", gai_strerror(ret));

assert(ret == EAI_FAMILY);
ASSERT(ret == EAI_FAMILY);
CLR();

if ((ret = getnameinfo(sa, sizeof a, hbuf, sizeof(hbuf), sbuf,
if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, sizeof(hbuf), sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);
else
printf("%s\n", gai_strerror(ret));

assert(ret == EAI_FAMILY);
ASSERT(ret == EAI_FAMILY);
CLR();

SOCKFAMILY(a) = AF_INET;

if ((ret = getnameinfo(sa, sizeof a, hbuf, 1, sbuf,
if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, 1, sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);
else
printf("%s\n", gai_strerror(ret));

assert(ret == EAI_OVERFLOW);
ASSERT(ret == EAI_OVERFLOW);
CLR();

if ((ret = getnameinfo(sa, sizeof a, hbuf, 0, sbuf,
if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, 0, sbuf,
1, NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);
else
printf("%s\n", gai_strerror(ret));

assert(ret == EAI_OVERFLOW);
ASSERT(ret == EAI_OVERFLOW);
CLR();

if ((ret = getnameinfo(sa, sizeof a, hbuf, 0, sbuf,
if ((ret = getnameinfo((void*)sa, sizeof(a) - 1, hbuf, 0, sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);
else
printf("%s\n", gai_strerror(ret));

assert(ret == 0);
ASSERT(ret == EAI_FAMILY);
CLR();

if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, 0, sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);
else
printf("%s\n", gai_strerror(ret));

if ((ret = getnameinfo(sa, sizeof a, hbuf, sizeof hbuf, sbuf,
ASSERT(ret == 0 && !strcmp("80", sbuf));
CLR();

if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, sizeof hbuf, sbuf,
0, NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);
else
printf("%s\n", gai_strerror(ret));

assert(ret == 0);
ASSERT(ret == 0 && !strcmp("127.0.0.1",hbuf));
CLR();


if ((ret = getnameinfo(sa, sizeof a, hbuf, sizeof(hbuf), sbuf,
if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, sizeof(hbuf), sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);
else
printf("%s\n", gai_strerror(ret));

assert(ret == 0);
ASSERT(ret == 0 && !strcmp("127.0.0.1",hbuf) && !strcmp("80", sbuf));
CLR();

struct sockaddr_in6 b = {0}, *sb = &b;
b.sin6_port = htons(8080);
b.sin6_family = AF_INET6;

memcpy(&b.sin6_addr,"\0\0\0\0\0\0\0\0\0\0\xff\xff\xc0\xa8\1\2", 16);

if ((ret = getnameinfo((void*)sb, sizeof b, hbuf, sizeof(hbuf), sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);
else
printf("%s\n", gai_strerror(ret));

ASSERT(ret == 0 && !strcmp("192.168.1.2",hbuf) && !strcmp("8080", sbuf));
CLR();

b.sin6_scope_id = 3;
memcpy(&b.sin6_addr,"\0\0\xaa\0\0\0\0\0\0\0\0\xff\xc0\xa8\1\2", 16);

if ((ret = getnameinfo((void*)sb, sizeof b, hbuf, sizeof(hbuf), sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV | NI_NUMERICSCOPE)) == 0)
printf("host=%s, serv=%s\n", hbuf, sbuf);
else
printf("%s\n", gai_strerror(ret));

ASSERT(ret == 0);


return 0;
}

0 comments on commit 4c3be5e

Please sign in to comment.