Table of Contents

Class HelloResponse

Namespace
VpnHood.Core.Tunneling.Messaging
Assembly
VpnHood.Core.Tunneling.dll

Represents the server's answer to a HelloRequest: the session, and what the client needs to run it.

public class HelloResponse : SessionResponse
Inheritance
HelloResponse
Inherited Members

Properties

AccessInfo

Gets or sets the access's terms and state, or null.

public AccessInfo? AccessInfo { get; set; }

Property Value

AccessInfo

AdRequirement

Gets or sets the ad the session requires. The default is none.

public AdRequirement AdRequirement { get; set; }

Property Value

AdRequirement

ChannelIdleTimeout

Gets how long a connection the client keeps for reuse may stay idle before it closes. The default is 60 seconds.

public TimeSpan ChannelIdleTimeout { get; init; }

Property Value

TimeSpan

Remarks

The server sends a little less than its own, so the client is less likely to reuse a connection the server is closing.

DnsServers

Gets or sets the DNS servers the server offers, or null for none.

[JsonConverter(typeof(ArrayConverter<IPAddress, IPAddressConverter>))]
public IPAddress[]? DnsServers { get; set; }

Property Value

IPAddress[]

GaMeasurementId

Gets the GA4 measurement ID the client reports the session to, where its person allows it, or null.

public string? GaMeasurementId { get; init; }

Property Value

string

IncludeIpRanges

Gets or sets the only destinations the server routes, or null for all of them.

public IpRange[]? IncludeIpRanges { get; set; }

Property Value

IpRange[]

IsIpV6Supported

Gets or sets a value indicating whether the server carries IPv6.

public bool IsIpV6Supported { get; set; }

Property Value

bool

IsQuicPacketSupported

Gets or sets a value indicating whether the server carries the users' QUIC; a client drops what it does not, so it never crosses the link. The default is true, as an older server sends none.

public bool IsQuicPacketSupported { get; set; }

Property Value

bool

IsTcpForwardingSupported

Gets or sets a value indicating whether the session forwards TCP connections (TcpForwardingChannelRequest). The default is true.

public bool IsTcpForwardingSupported { get; set; }

Property Value

bool

IsTcpPacketIpV4Supported

Gets or sets a value indicating whether the session takes IPv4 TCP as packets; where it does not, the client forwards IPv4 TCP connections instead.

public bool IsTcpPacketIpV4Supported { get; set; }

Property Value

bool

IsTcpPacketIpV6Supported

Gets or sets a value indicating whether the session takes IPv6 TCP as packets; where it does not, the client forwards IPv6 TCP connections instead.

public bool IsTcpPacketIpV6Supported { get; set; }

Property Value

bool

IsTcpPacketSupported

Gets or sets a value indicating whether the session takes TCP as packets, for older clients and from older servers, where it means both IP versions.

[Obsolete("Deprecated on 2026-10-08: use IsTcpPacketIpV4Supported and IsTcpPacketIpV6Supported. Still sent for older clients and read from older servers, for which it meant both IP versions.")]
public bool IsTcpPacketSupported { get; set; }

Property Value

bool

IsTcpProxySupported

Gets or sets IsTcpForwardingSupported under its older name, which older clients read and older servers send.

[Obsolete("Use IsTcpForwardingSupported.")]
public bool IsTcpProxySupported { get; set; }

Property Value

bool

Remarks

It is true when missing, so a client without it would try what the server refuses.

IsUdpPacketSupported

Gets or sets a value indicating whether the server carries the users' UDP; a client drops what it does not, so it never crosses the link. The default is true, as an older server sends none.

public bool IsUdpPacketSupported { get; set; }

Property Value

bool

MaxPacketChannelCount

Gets or sets the most packet channels the session may have at once, or 0 where the server sets no limit.

public int MaxPacketChannelCount { get; set; }

Property Value

int

Mtu

Gets or sets the server's MTU for a client before TunnelMtu, which takes the smaller of it and its own, less MtuOverhead, as its adapter's. The default is MtuServer.

public int Mtu { get; set; }

Property Value

int

ProtocolVersion

Gets or sets the protocol version the session runs on.

public int ProtocolVersion { get; set; }

Property Value

int

QuicPort

Gets or sets the server's QUIC port, on the address the client came to, or null where it offers none, as to a client on the older HTTP protocol or through a reverse proxy.

public int? QuicPort { get; set; }

Property Value

int?

RequestTimeout

Gets how long the client waits for an answer to a request. The default is 60 seconds.

public TimeSpan RequestTimeout { get; init; }

Property Value

TimeSpan

Remarks

The server sends a little more than its own wait, so its error answers reach the client.

ServerLocation

Gets or sets the server's location, or null.

public string? ServerLocation { get; set; }

Property Value

string

ServerSecret

Gets or sets the server farm's secret, for a client below HTTP protocol 15, as older clients had it from here, or null, which is not written.

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public byte[]? ServerSecret { get; set; }

Property Value

byte[]

ServerTags

Gets or sets the server's tags. The default is none.

public string[] ServerTags { get; set; }

Property Value

string[]

ServerVersion

Gets or sets the server's version, as major.minor.build.

public string ServerVersion { get; set; }

Property Value

string

SessionId

Gets or sets the session's ID.

public ulong SessionId { get; set; }

Property Value

ulong

SessionKey

Gets or sets the session's key, which the client's requests in the session carry. The default is empty.

public byte[] SessionKey { get; set; }

Property Value

byte[]

StartPadding

Gets or sets a value indicating whether the client pads the start of its streams that forward TCP connections, the WebSocket ones masked as the standard has it; an older server sends none, read as false.

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)]
public bool StartPadding { get; set; }

Property Value

bool

SuppressedTo

Gets or sets whose session this one took the place of, if any.

public SessionSuppressType SuppressedTo { get; set; }

Property Value

SessionSuppressType

TunnelMtu

Gets or sets the largest packet the session's tunnel carries both ways, as the packet is, or null from an older server.

public int? TunnelMtu { get; set; }

Property Value

int?

UdpPort

Gets or sets the server's port for the session's UDP channel, on the address the client came to, or null where it offers none, as to a client below the UDP channel's protocol or through a reverse proxy.

public int? UdpPort { get; set; }

Property Value

int?

VirtualIpNetworkV4

Gets the client's virtual IPv4 address in the session, with the virtual network's prefix length, or null.

[JsonConverter(typeof(IpNetworkConverter))]
public IpNetwork? VirtualIpNetworkV4 { get; init; }

Property Value

IpNetwork

VirtualIpNetworkV6

Gets the client's virtual IPv6 address in the session, with the virtual network's prefix length, or null.

[JsonConverter(typeof(IpNetworkConverter))]
public IpNetwork? VirtualIpNetworkV6 { get; init; }

Property Value

IpNetwork

VpnAdapterIncludeIpRanges

Gets or sets the destinations the server asks the clients' VPN adapters to capture, or null for all of them; the client weighs them with its own settings, and its DNS plan may add to them.

public IpRange[]? VpnAdapterIncludeIpRanges { get; set; }

Property Value

IpRange[]