Sunshine latest
Self-hosted game stream host for Moonlight.
network.cpp File Reference

Definitions for networking related functions. More...

#include <algorithm>
#include <sstream>
#include "config.h"
#include "logging.h"
#include "network.h"
#include "utility.h"
Include dependency graph for network.cpp:

Functions

std::string net::addr_to_normalized_string (boost::asio::ip::address address)
 Get the given address in normalized string form.
 
std::string net::addr_to_url_escaped_string (boost::asio::ip::address address)
 Get the given address in a normalized form for the host portion of a URL.
 
af_e net::af_from_enum_string (const std::string_view &view)
 Get the address family enum value from a string.
 
std::string_view net::af_to_any_address_string (af_e af)
 Get the wildcard binding address for a given address family.
 
int net::encryption_mode_for_address (boost::asio::ip::address address)
 Get the encryption mode for the given remote endpoint address.
 
void net::free_host (ENetHost *host)
 
net_e net::from_address (const std::string_view &view)
 
net_e net::from_enum_string (const std::string_view &view)
 
host_t net::host_create (af_e af, ENetAddress &addr, std::uint16_t port)
 
std::uint16_t net::map_port (int port)
 Map a specified port based on the base port.
 
std::string net::mdns_instance_name (const std::string_view &hostname)
 Returns a string for use as the instance name for mDNS.
 
boost::asio::ip::address net::normalize_address (boost::asio::ip::address address)
 Convert an address to a normalized form.
 
std::string_view net::to_enum_string (net_e net)
 

Variables

std::vector< ip::network_v4 > net::lan_ips_v4
 
std::vector< ip::network_v6 > net::lan_ips_v6
 
std::vector< ip::network_v4 > net::pc_ips_v4
 
std::vector< ip::network_v6 > net::pc_ips_v6
 

Detailed Description

Definitions for networking related functions.

Function Documentation

◆ addr_to_normalized_string()

std::string net::addr_to_normalized_string ( boost::asio::ip::address address)

Get the given address in normalized string form.

Normalization converts IPv4-mapped IPv6 addresses into IPv4 addresses.

Parameters
addressThe address to normalize.
Returns
Normalized address in string form.

◆ addr_to_url_escaped_string()

std::string net::addr_to_url_escaped_string ( boost::asio::ip::address address)

Get the given address in a normalized form for the host portion of a URL.

Normalization converts IPv4-mapped IPv6 addresses into IPv4 addresses.

Parameters
addressThe address to normalize and escape.
Returns
Normalized address in URL-escaped string.

◆ af_from_enum_string()

af_e net::af_from_enum_string ( const std::string_view & view)

Get the address family enum value from a string.

Parameters
viewThe config option value.
Returns
The address family enum value.

◆ af_to_any_address_string()

std::string_view net::af_to_any_address_string ( af_e af)

Get the wildcard binding address for a given address family.

Parameters
afAddress family.
Returns
Normalized address.

◆ encryption_mode_for_address()

int net::encryption_mode_for_address ( boost::asio::ip::address address)

Get the encryption mode for the given remote endpoint address.

Parameters
addressThe address used to look up the desired encryption mode.
Returns
The WAN or LAN encryption mode, based on the provided address.

◆ map_port()

std::uint16_t net::map_port ( int port)

Map a specified port based on the base port.

Parameters
portThe port to map as a difference from the base port.
Returns
The mapped port number.

Examples

std::uint16_t mapped_port = net::map_port(1);
Todo
Ensure port is not already in use by another application.

◆ mdns_instance_name()

std::string net::mdns_instance_name ( const std::string_view & hostname)

Returns a string for use as the instance name for mDNS.

Parameters
hostnameThe hostname to use for instance name generation.
Returns
Hostname-based instance name or "Sunshine" if hostname is invalid.

◆ normalize_address()

boost::asio::ip::address net::normalize_address ( boost::asio::ip::address address)

Convert an address to a normalized form.

Normalization converts IPv4-mapped IPv6 addresses into IPv4 addresses.

Parameters
addressThe address to normalize.
Returns
Normalized address.

Variable Documentation

◆ lan_ips_v4

std::vector<ip::network_v4> net::lan_ips_v4
Initial value:
{
ip::make_network_v4("192.168.0.0/16"sv),
ip::make_network_v4("172.16.0.0/12"sv),
ip::make_network_v4("10.0.0.0/8"sv),
ip::make_network_v4("100.64.0.0/10"sv),
ip::make_network_v4("169.254.0.0/16"sv),
}

◆ lan_ips_v6

std::vector<ip::network_v6> net::lan_ips_v6
Initial value:
{
ip::make_network_v6("fc00::/7"sv),
ip::make_network_v6("fe80::/64"sv),
}

◆ pc_ips_v4

std::vector<ip::network_v4> net::pc_ips_v4
Initial value:
{
ip::make_network_v4("127.0.0.0/8"sv),
}

◆ pc_ips_v6

std::vector<ip::network_v6> net::pc_ips_v6
Initial value:
{
ip::make_network_v6("::1/128"sv),
}