LCOV - code coverage report
Current view: top level - src/detail - endpoint_convert.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 20 20
Test Date: 2026-02-04 19:19:32 Functions: 100.0 % 4 4

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2026 Vinnie Falco (vinnie dot falco at gmail dot 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 <netinet/in.h>
      20              : #include <arpa/inet.h>
      21              : #else
      22              : #ifndef WIN32_LEAN_AND_MEAN
      23              : #define WIN32_LEAN_AND_MEAN
      24              : #endif
      25              : #ifndef NOMINMAX
      26              : #define NOMINMAX
      27              : #endif
      28              : #include <WinSock2.h>
      29              : #include <Ws2tcpip.h>
      30              : #endif
      31              : 
      32              : namespace boost::corosio::detail {
      33              : 
      34              : /** Convert IPv4 endpoint to sockaddr_in.
      35              : 
      36              :     @param ep The endpoint to convert. Must be IPv4 (is_v4() == true).
      37              :     @return A sockaddr_in structure with fields in network byte order.
      38              : */
      39              : inline
      40              : sockaddr_in
      41         4838 : to_sockaddr_in(endpoint const& ep) noexcept
      42              : {
      43         4838 :     sockaddr_in sa{};
      44         4838 :     sa.sin_family = AF_INET;
      45         4838 :     sa.sin_port = htons(ep.port());
      46         4838 :     auto bytes = ep.v4_address().to_bytes();
      47         4838 :     std::memcpy(&sa.sin_addr, bytes.data(), 4);
      48         4838 :     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
      57              : sockaddr_in6
      58            2 : to_sockaddr_in6(endpoint const& ep) noexcept
      59              : {
      60            2 :     sockaddr_in6 sa{};
      61            2 :     sa.sin6_family = AF_INET6;
      62            2 :     sa.sin6_port = htons(ep.port());
      63            2 :     auto bytes = ep.v6_address().to_bytes();
      64            2 :     std::memcpy(&sa.sin6_addr, bytes.data(), 16);
      65            2 :     return sa;
      66              : }
      67              : 
      68              : /** Create endpoint from sockaddr_in.
      69              : 
      70              :     @param sa The sockaddr_in structure with fields in network byte order.
      71              :     @return An endpoint with address and port extracted from sa.
      72              : */
      73              : inline
      74              : endpoint
      75        14254 : from_sockaddr_in(sockaddr_in const& sa) noexcept
      76              : {
      77              :     ipv4_address::bytes_type bytes;
      78        14254 :     std::memcpy(bytes.data(), &sa.sin_addr, 4);
      79        14254 :     return endpoint(ipv4_address(bytes), ntohs(sa.sin_port));
      80              : }
      81              : 
      82              : /** Create endpoint from sockaddr_in6.
      83              : 
      84              :     @param sa The sockaddr_in6 structure with fields in network byte order.
      85              :     @return An endpoint with address and port extracted from sa.
      86              : */
      87              : inline
      88              : endpoint
      89            2 : from_sockaddr_in6(sockaddr_in6 const& sa) noexcept
      90              : {
      91              :     ipv6_address::bytes_type bytes;
      92            2 :     std::memcpy(bytes.data(), &sa.sin6_addr, 16);
      93            2 :     return endpoint(ipv6_address(bytes), ntohs(sa.sin6_port));
      94              : }
      95              : 
      96              : } // namespace boost::corosio::detail
      97              : 
      98              : #endif
        

Generated by: LCOV version 2.3