| 517 | } |
| 518 | |
| 519 | bool CService::GetSockAddr(struct sockaddr* paddr, socklen_t *addrlen) const |
| 520 | { |
| 521 | if (IsIPv4()) { |
| 522 | if (*addrlen < (socklen_t)sizeof(struct sockaddr_in)) |
| 523 | return false; |
| 524 | *addrlen = sizeof(struct sockaddr_in); |
| 525 | struct sockaddr_in *paddrin = (struct sockaddr_in*)paddr; |
| 526 | memset(paddrin, 0, *addrlen); |
| 527 | if (!GetInAddr(&paddrin->sin_addr)) |
| 528 | return false; |
| 529 | paddrin->sin_family = AF_INET; |
| 530 | paddrin->sin_port = htons(port); |
| 531 | return true; |
| 532 | } |
| 533 | if (IsIPv6()) { |
| 534 | if (*addrlen < (socklen_t)sizeof(struct sockaddr_in6)) |
| 535 | return false; |
| 536 | *addrlen = sizeof(struct sockaddr_in6); |
| 537 | struct sockaddr_in6 *paddrin6 = (struct sockaddr_in6*)paddr; |
| 538 | memset(paddrin6, 0, *addrlen); |
| 539 | if (!GetIn6Addr(&paddrin6->sin6_addr)) |
| 540 | return false; |
| 541 | paddrin6->sin6_scope_id = scopeId; |
| 542 | paddrin6->sin6_family = AF_INET6; |
| 543 | paddrin6->sin6_port = htons(port); |
| 544 | return true; |
| 545 | } |
| 546 | return false; |
| 547 | } |
| 548 | |
| 549 | std::vector<unsigned char> CService::GetKey() const |
| 550 | { |
no outgoing calls
no test coverage detected