Changeset 2743 for pjproject/trunk/pjlib/src/pjlib-test/sock.c
- Timestamp:
- Jun 4, 2009 3:11:25 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjlib/src/pjlib-test/sock.c
r2394 r2743 168 168 /* pj_gethostaddr() */ 169 169 170 171 return 0; 172 } 173 174 static int parse_test(void) 175 { 176 #define IPv4 1 177 #define IPv6 2 178 179 struct test_t { 180 const char *input; 181 int result_af; 182 const char *result_ip; 183 pj_uint16_t result_port; 184 }; 185 struct test_t valid_tests[] = 186 { 187 /* IPv4 */ 188 { "10.0.0.1:80", IPv4, "10.0.0.1", 80}, 189 { "10.0.0.1", IPv4, "10.0.0.1", 0}, 190 { "10.0.0.1:", IPv4, "10.0.0.1", 0}, 191 { "10.0.0.1:0", IPv4, "10.0.0.1", 0}, 192 { ":80", IPv4, "0.0.0.0", 80}, 193 { ":", IPv4, "0.0.0.0", 0}, 194 { "localhost", IPv4, "127.0.0.1", 0}, 195 { "localhost:", IPv4, "127.0.0.1", 0}, 196 { "localhost:80", IPv4, "127.0.0.1", 80}, 197 198 #if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6 199 { "fe::01:80", IPv6, "fe::01:80", 0}, 200 { "[fe::01]:80", IPv6, "fe::01", 80}, 201 { "fe::01", IPv6, "fe::01", 0}, 202 { "[fe::01]", IPv6, "fe::01", 0}, 203 { "fe::01:", IPv6, "fe::01", 0}, 204 { "[fe::01]:", IPv6, "fe::01", 0}, 205 { "::", IPv6, "::0", 0}, 206 { "[::]", IPv6, "::", 0}, 207 { ":::", IPv6, "::", 0}, 208 { "[::]:", IPv6, "::", 0}, 209 { ":::80", IPv6, "::", 80}, 210 { "[::]:80", IPv6, "::", 80}, 211 #endif 212 }; 213 struct test_t invalid_tests[] = 214 { 215 /* IPv4 */ 216 { "10.0.0.1:abcd", IPv4}, /* port not numeric */ 217 { "10.0.0.1:-1", IPv4}, /* port contains illegal character */ 218 { "10.0.0.1:123456", IPv4}, /* port too big */ 219 { "1.2.3.4.5:80", IPv4}, /* invalid IP */ 220 221 #if defined(PJ_HAS_IPV6) && PJ_HAS_IPV6 222 { "[fe::01]:abcd", IPv6}, /* port not numeric */ 223 { "[fe::01]:-1", IPv6}, /* port contains illegal character */ 224 { "[fe::01]:123456", IPv6}, /* port too big */ 225 { "fe::01:02::03:04:80", IPv6}, /* invalid IP */ 226 { "[fe::01:02::03:04]:80", IPv6}, /* invalid IP */ 227 { "[fe:01", IPv6}, /* Unterminated bracket */ 228 #endif 229 }; 230 231 unsigned i; 232 233 PJ_LOG(3,("test", "...IP address parsing")); 234 235 for (i=0; i<PJ_ARRAY_SIZE(valid_tests); ++i) { 236 pj_status_t status; 237 pj_str_t input; 238 pj_sockaddr addr, result; 239 240 switch (valid_tests[i].result_af) { 241 case IPv4: 242 valid_tests[i].result_af = PJ_AF_INET; 243 break; 244 case IPv6: 245 valid_tests[i].result_af = PJ_AF_INET6; 246 break; 247 default: 248 pj_assert(!"Invalid AF!"); 249 continue; 250 } 251 252 /* Try parsing with PJ_AF_UNSPEC */ 253 status = pj_sockaddr_parse(PJ_AF_UNSPEC, 0, 254 pj_cstr(&input, valid_tests[i].input), 255 &addr); 256 if (status != PJ_SUCCESS) { 257 PJ_LOG(1,("test", ".... failed when parsing %s", 258 valid_tests[i].input)); 259 return -10; 260 } 261 262 /* Build the correct result */ 263 status = pj_sockaddr_init(valid_tests[i].result_af, 264 &result, 265 pj_cstr(&input, valid_tests[i].result_ip), 266 valid_tests[i].result_port); 267 if (status != PJ_SUCCESS) { 268 PJ_LOG(1,("test", ".... error building IP address %s", 269 valid_tests[i].input)); 270 return -30; 271 } 272 273 /* Compare the result */ 274 if (pj_sockaddr_cmp(&addr, &result) != 0) { 275 PJ_LOG(1,("test", ".... parsed result mismatched for %s", 276 valid_tests[i].input)); 277 return -40; 278 } 279 280 /* Parse again with the specified af */ 281 status = pj_sockaddr_parse(valid_tests[i].result_af, 0, 282 pj_cstr(&input, valid_tests[i].input), 283 &addr); 284 if (status != PJ_SUCCESS) { 285 PJ_LOG(1,("test", ".... failed when parsing %s", 286 valid_tests[i].input)); 287 return -50; 288 } 289 290 /* Compare the result again */ 291 if (pj_sockaddr_cmp(&addr, &result) != 0) { 292 PJ_LOG(1,("test", ".... parsed result mismatched for %s", 293 valid_tests[i].input)); 294 return -60; 295 } 296 } 297 298 for (i=0; i<PJ_ARRAY_SIZE(invalid_tests); ++i) { 299 pj_status_t status; 300 pj_str_t input; 301 pj_sockaddr addr; 302 303 switch (invalid_tests[i].result_af) { 304 case IPv4: 305 invalid_tests[i].result_af = PJ_AF_INET; 306 break; 307 case IPv6: 308 invalid_tests[i].result_af = PJ_AF_INET6; 309 break; 310 default: 311 pj_assert(!"Invalid AF!"); 312 continue; 313 } 314 315 /* Try parsing with PJ_AF_UNSPEC */ 316 status = pj_sockaddr_parse(PJ_AF_UNSPEC, 0, 317 pj_cstr(&input, invalid_tests[i].input), 318 &addr); 319 if (status == PJ_SUCCESS) { 320 PJ_LOG(1,("test", ".... expecting failure when parsing %s", 321 invalid_tests[i].input)); 322 return -100; 323 } 324 } 170 325 171 326 return 0; … … 577 732 return rc; 578 733 734 rc = parse_test(); 735 if (rc != 0) 736 return rc; 737 579 738 rc = gethostbyname_test(); 580 739 if (rc != 0)
Note: See TracChangeset
for help on using the changeset viewer.