Sunshine0.0.5917
Sunshine 0.0.5917
Self-hosted game stream host for Moonlight.
Loading...
Searching...
No Matches
Go to the documentation of this file.
1
5#pragma once
6
7// lib includes
8#include <miniupnpc/miniupnpc.h>
9
10// local includes
11#include "platform/common.h"
12
16namespace upnp {
17 constexpr auto INET6_ADDRESS_STRLEN = 46;
18 constexpr auto IPv4 = 0;
19 constexpr auto IPv6 = 1;
20 constexpr auto PORT_MAPPING_LIFETIME = 3600s;
21 constexpr auto REFRESH_INTERVAL = 120s;
22
27
28 KITTY_USING_MOVE_T(urls_t, UPNPUrls, , {
29 FreeUPNPUrls(&el);
30 });
31
39 enum class igd_status_e : int {
40 none = 0,
42#if (MINIUPNPC_API_VERSION >= 18)
43 private_ip = 2,
44#endif
47 };
48
58 [[nodiscard]] bool is_valid_igd(igd_status_e status);
59
73 igd_status_e UPNP_GetValidIGDStatus(device_t &device, urls_t *urls, IGDdatas *data, std::array<char, INET6_ADDRESS_STRLEN> &lan_addr);
74
80 [[nodiscard]] std::unique_ptr<platf::deinit_t> start();
81} // namespace upnp
Move-only RAII wrapper generated by KITTY_USING_MOVE_T. Alias for element type.
Definition upnp.h:30
Declarations for common platform specific utilities.
UPnP port mapping.
Definition upnp.cpp:27
igd_status_e
Result codes returned by the installed MiniUPnPc library.
Definition upnp.h:39
@ connected
A connected IGD was found.
Definition upnp.h:41
@ disconnected
A disconnected IGD was found.
Definition upnp.h:45
@ unknown_device
The device was not recognized as an IGD.
Definition upnp.h:46
constexpr auto INET6_ADDRESS_STRLEN
Protocol or platform constant for inet6 address strlen.
Definition upnp.h:17
constexpr auto REFRESH_INTERVAL
Protocol or platform constant for refresh interval.
Definition upnp.h:21
bool is_valid_igd(igd_status_e status)
Check whether a UPNP_GetValidIGD() status code identifies a usable IGD.
Definition upnp.cpp:76
constexpr auto PORT_MAPPING_LIFETIME
GameStream port offset for port mapping lifetime.
Definition upnp.h:20
std::unique_ptr< platf::deinit_t > start()
Start UPnP port mapping and return its shutdown guard.
Definition upnp.cpp:405
util::safe_ptr< UPNPDev, freeUPNPDevlist > device_t
Owning pointer to miniupnpc device discovery results.
Definition upnp.h:26
constexpr auto IPv4
I pv4.
Definition upnp.h:18
constexpr auto IPv6
I pv6.
Definition upnp.h:19
igd_status_e UPNP_GetValidIGDStatus(device_t &device, urls_t *urls, IGDdatas *data, std::array< char, INET6_ADDRESS_STRLEN > &lan_addr)
Get the valid IGD status.
Definition upnp.cpp:67
uniq_ptr< T, Destroy< T *, void, function > > safe_ptr
Unique pointer using a compile-time C-style destroy function.
Definition utility.h:1590
#define KITTY_USING_MOVE_T(move_t, t, init_val, z)
Define a move-only RAII wrapper with caller-provided initial value and destructor body.
Definition utility.h:51