comparison src/core/ngx_inet.c @ 6593:b3b7e33083ac

Introduced ngx_inet_get_port() and ngx_inet_set_port() functions.
author Roman Arutyunyan <arut@nginx.com>
date Mon, 20 Jun 2016 11:50:39 +0300
parents 5d8f16859ced
children 0a820872dd4c
comparison
equal deleted inserted replaced
6592:2c7b488a61fb 6593:b3b7e33083ac
527 527
528 ngx_int_t 528 ngx_int_t
529 ngx_parse_addr_port(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text, 529 ngx_parse_addr_port(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text,
530 size_t len) 530 size_t len)
531 { 531 {
532 u_char *p, *last; 532 u_char *p, *last;
533 size_t plen; 533 size_t plen;
534 ngx_int_t rc, port; 534 ngx_int_t rc, port;
535 struct sockaddr_in *sin;
536 #if (NGX_HAVE_INET6)
537 struct sockaddr_in6 *sin6;
538 #endif
539 535
540 rc = ngx_parse_addr(pool, addr, text, len); 536 rc = ngx_parse_addr(pool, addr, text, len);
541 537
542 if (rc != NGX_DECLINED) { 538 if (rc != NGX_DECLINED) {
543 return rc; 539 return rc;
583 579
584 if (rc != NGX_OK) { 580 if (rc != NGX_OK) {
585 return rc; 581 return rc;
586 } 582 }
587 583
588 switch (addr->sockaddr->sa_family) { 584 ngx_inet_set_port(addr->sockaddr, port);
589
590 #if (NGX_HAVE_INET6)
591 case AF_INET6:
592 sin6 = (struct sockaddr_in6 *) addr->sockaddr;
593 sin6->sin6_port = htons((in_port_t) port);
594 break;
595 #endif
596
597 default: /* AF_INET */
598 sin = (struct sockaddr_in *) addr->sockaddr;
599 sin->sin_port = htons((in_port_t) port);
600 break;
601 }
602 585
603 return NGX_OK; 586 return NGX_OK;
604 } 587 }
605 588
606 589
1354 break; 1337 break;
1355 } 1338 }
1356 1339
1357 return NGX_OK; 1340 return NGX_OK;
1358 } 1341 }
1342
1343
1344 in_port_t
1345 ngx_inet_get_port(struct sockaddr *sa)
1346 {
1347 struct sockaddr_in *sin;
1348 #if (NGX_HAVE_INET6)
1349 struct sockaddr_in6 *sin6;
1350 #endif
1351
1352 switch (sa->sa_family) {
1353
1354 #if (NGX_HAVE_INET6)
1355 case AF_INET6:
1356 sin6 = (struct sockaddr_in6 *) sa;
1357 return ntohs(sin6->sin6_port);
1358 #endif
1359
1360 #if (NGX_HAVE_UNIX_DOMAIN)
1361 case AF_UNIX:
1362 return 0;
1363 #endif
1364
1365 default: /* AF_INET */
1366 sin = (struct sockaddr_in *) sa;
1367 return ntohs(sin->sin_port);
1368 }
1369 }
1370
1371
1372 void
1373 ngx_inet_set_port(struct sockaddr *sa, in_port_t port)
1374 {
1375 struct sockaddr_in *sin;
1376 #if (NGX_HAVE_INET6)
1377 struct sockaddr_in6 *sin6;
1378 #endif
1379
1380 switch (sa->sa_family) {
1381
1382 #if (NGX_HAVE_INET6)
1383 case AF_INET6:
1384 sin6 = (struct sockaddr_in6 *) sa;
1385 sin6->sin6_port = htons(port);
1386 break;
1387 #endif
1388
1389 #if (NGX_HAVE_UNIX_DOMAIN)
1390 case AF_UNIX:
1391 break;
1392 #endif
1393
1394 default: /* AF_INET */
1395 sin = (struct sockaddr_in *) sa;
1396 sin->sin_port = htons(port);
1397 break;
1398 }
1399 }