fix missing bracket in solaris codepath (#589)
[rofl0r-proxychains-ng.git] / tests / test_getnameinfo.c
blob33489979415a0e8d1930fe939aee4f39a3fb0309
1 #include <netdb.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <assert.h>
5 #include <sys/socket.h>
6 #include <netinet/in.h>
8 #define satosin(x) ((struct sockaddr_in *) &(x))
9 #define SOCKADDR(x) (satosin(x)->sin_addr.s_addr)
10 #define SOCKADDR_2(x) (satosin(x)->sin_addr)
11 #define SOCKPORT(x) (satosin(x)->sin_port)
12 #define SOCKFAMILY(x) (satosin(x)->sin_family)
14 #define ASSERT(X) { if(!(X)) printf("ASSERTION FAILED: %s @%s:%d\n", # X, __FILE__, __LINE__); }
15 #define CLR() { hbuf[0] = 0; sbuf[0] = 0; }
17 int main() {
18 struct sockaddr_in a = {0}, *sa = &a;
19 char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
20 a.sin_port = htons(80);
21 memcpy( &a.sin_addr , (char[]) {127,0,0,1}, 4);
23 int ret;
25 if ((ret = getnameinfo((void*)sa, 0, hbuf, sizeof(hbuf), sbuf,
26 sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
27 printf("host=%s, serv=%s\n", hbuf, sbuf);
28 else
29 printf("%s\n", gai_strerror(ret));
31 ASSERT(ret == EAI_FAMILY);
32 CLR();
34 if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, sizeof(hbuf), sbuf,
35 sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
36 printf("host=%s, serv=%s\n", hbuf, sbuf);
37 else
38 printf("%s\n", gai_strerror(ret));
40 ASSERT(ret == EAI_FAMILY);
41 CLR();
43 SOCKFAMILY(a) = AF_INET;
45 if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, 1, sbuf,
46 sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
47 printf("host=%s, serv=%s\n", hbuf, sbuf);
48 else
49 printf("%s\n", gai_strerror(ret));
51 ASSERT(ret == EAI_OVERFLOW);
52 CLR();
54 if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, 0, sbuf,
55 1, NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
56 printf("host=%s, serv=%s\n", hbuf, sbuf);
57 else
58 printf("%s\n", gai_strerror(ret));
60 ASSERT(ret == EAI_OVERFLOW);
61 CLR();
63 if ((ret = getnameinfo((void*)sa, sizeof(a) - 1, hbuf, 0, sbuf,
64 sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
65 printf("host=%s, serv=%s\n", hbuf, sbuf);
66 else
67 printf("%s\n", gai_strerror(ret));
69 ASSERT(ret == EAI_FAMILY);
70 CLR();
72 if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, 0, sbuf,
73 sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
74 printf("host=%s, serv=%s\n", hbuf, sbuf);
75 else
76 printf("%s\n", gai_strerror(ret));
78 ASSERT(ret == 0 && !strcmp("80", sbuf));
79 CLR();
81 if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, sizeof hbuf, sbuf,
82 0, NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
83 printf("host=%s, serv=%s\n", hbuf, sbuf);
84 else
85 printf("%s\n", gai_strerror(ret));
87 ASSERT(ret == 0 && !strcmp("127.0.0.1",hbuf));
88 CLR();
91 if ((ret = getnameinfo((void*)sa, sizeof a, hbuf, sizeof(hbuf), sbuf,
92 sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
93 printf("host=%s, serv=%s\n", hbuf, sbuf);
94 else
95 printf("%s\n", gai_strerror(ret));
97 ASSERT(ret == 0 && !strcmp("127.0.0.1",hbuf) && !strcmp("80", sbuf));
98 CLR();
100 struct sockaddr_in6 b = {0}, *sb = &b;
101 b.sin6_port = htons(8080);
102 b.sin6_family = AF_INET6;
104 memcpy(&b.sin6_addr,"\0\0\0\0\0\0\0\0\0\0\xff\xff\xc0\xa8\1\2", 16);
106 if ((ret = getnameinfo((void*)sb, sizeof b, hbuf, sizeof(hbuf), sbuf,
107 sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV)) == 0)
108 printf("host=%s, serv=%s\n", hbuf, sbuf);
109 else
110 printf("%s\n", gai_strerror(ret));
112 ASSERT(ret == 0 && !strcmp("192.168.1.2",hbuf) && !strcmp("8080", sbuf));
113 CLR();
115 b.sin6_scope_id = 3;
116 memcpy(&b.sin6_addr,"\0\0\xaa\0\0\0\0\0\0\0\0\xff\xc0\xa8\1\2", 16);
118 if ((ret = getnameinfo((void*)sb, sizeof b, hbuf, sizeof(hbuf), sbuf,
119 sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV | NI_NUMERICSCOPE)) == 0)
120 printf("host=%s, serv=%s\n", hbuf, sbuf);
121 else
122 printf("%s\n", gai_strerror(ret));
124 ASSERT(ret == 0);
126 b.sin6_port = 0;
127 b.sin6_scope_id = 0;
128 memcpy(&b.sin6_addr,"\0\0\0\0" "\0\0\0\0" "\0\0\0\0" "\0\0\0\1", 16);
130 if ((ret = getnameinfo((void*)sb, sizeof b, hbuf, sizeof(hbuf), NULL,
131 0, NI_NUMERICHOST)) == 0)
132 printf("host=%s\n", hbuf);
133 else
134 printf("%s\n", gai_strerror(ret));
136 ASSERT(ret == 0);
138 return 0;