LCOV - code coverage report
Current view: top level - corosio/detail - endpoint_convert.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 20 20
Test Date: 2026-02-20 22:31:35 Functions: 100.0 % 4 4

           TLA  Line data    Source code
       1                 : //
       2                 : // Copyright (c) 2026 Vinnie Falco (vinnie.falco@gmail.com)
       3                 : //
       4                 : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       5                 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       6                 : //
       7                 : // Official repository: https://github.com/cppalliance/corosio
       8                 : //
       9                 : 
      10                 : #ifndef BOOST_COROSIO_DETAIL_ENDPOINT_CONVERT_HPP
      11                 : #define BOOST_COROSIO_DETAIL_ENDPOINT_CONVERT_HPP
      12                 : 
      13                 : #include <boost/corosio/endpoint.hpp>
      14                 : #include <boost/corosio/detail/platform.hpp>
      15                 : 
      16                 : #include <cstring>
      17                 : 
      18                 : #if BOOST_COROSIO_POSIX
      19                 : #include <sys/socket.h>
      20                 : #include <netinet/in.h>
      21                 : #include <arpa/inet.h>
      22                 : #else
      23                 : #ifndef WIN32_LEAN_AND_MEAN
      24                 : #define WIN32_LEAN_AND_MEAN
      25                 : #endif
      26                 : #ifndef NOMINMAX
      27                 : #define NOMINMAX
      28                 : #endif
      29                 : #include <WinSock2.h>
      30                 : #include <Ws2tcpip.h>
      31                 : #endif
      32                 : 
      33                 : namespace boost::corosio::detail {
      34                 : 
      35                 : /** Convert IPv4 endpoint to sockaddr_in.
      36                 : 
      37                 :     @param ep The endpoint to convert. Must be IPv4 (is_v4() == true).
      38                 :     @return A sockaddr_in structure with fields in network byte order.
      39                 : */
      40                 : inline sockaddr_in
      41 HIT        8626 : to_sockaddr_in(endpoint const& ep) noexcept
      42                 : {
      43            8626 :     sockaddr_in sa{};
      44            8626 :     sa.sin_family = AF_INET;
      45            8626 :     sa.sin_port   = htons(ep.port());
      46            8626 :     auto bytes    = ep.v4_address().to_bytes();
      47            8626 :     std::memcpy(&sa.sin_addr, bytes.data(), 4);
      48            8626 :     return sa;
      49                 : }
      50                 : 
      51                 : /** Convert IPv6 endpoint to sockaddr_in6.
      52                 : 
      53                 :     @param ep The endpoint to convert. Must be IPv6 (is_v6() == true).
      54                 :     @return A sockaddr_in6 structure with fields in network byte order.
      55                 : */
      56                 : inline sockaddr_in6
      57               2 : to_sockaddr_in6(endpoint const& ep) noexcept
      58                 : {
      59               2 :     sockaddr_in6 sa{};
      60               2 :     sa.sin6_family = AF_INET6;
      61               2 :     sa.sin6_port   = htons(ep.port());
      62               2 :     auto bytes     = ep.v6_address().to_bytes();
      63               2 :     std::memcpy(&sa.sin6_addr, bytes.data(), 16);
      64               2 :     return sa;
      65                 : }
      66                 : 
      67                 : /** Create endpoint from sockaddr_in.
      68                 : 
      69                 :     @param sa The sockaddr_in structure with fields in network byte order.
      70                 :     @return An endpoint with address and port extracted from sa.
      71                 : */
      72                 : inline endpoint
      73           20655 : from_sockaddr_in(sockaddr_in const& sa) noexcept
      74                 : {
      75                 :     ipv4_address::bytes_type bytes;
      76           20655 :     std::memcpy(bytes.data(), &sa.sin_addr, 4);
      77           20655 :     return endpoint(ipv4_address(bytes), ntohs(sa.sin_port));
      78                 : }
      79                 : 
      80                 : /** Create endpoint from sockaddr_in6.
      81                 : 
      82                 :     @param sa The sockaddr_in6 structure with fields in network byte order.
      83                 :     @return An endpoint with address and port extracted from sa.
      84                 : */
      85                 : inline endpoint
      86               2 : from_sockaddr_in6(sockaddr_in6 const& sa) noexcept
      87                 : {
      88                 :     ipv6_address::bytes_type bytes;
      89               2 :     std::memcpy(bytes.data(), &sa.sin6_addr, 16);
      90               2 :     return endpoint(ipv6_address(bytes), ntohs(sa.sin6_port));
      91                 : }
      92                 : 
      93                 : } // namespace boost::corosio::detail
      94                 : 
      95                 : #endif
        

Generated by: LCOV version 2.3