{#if !stats}

Asking the server...

{:else}

Connection

Online for
{duration(stats.onlinesecs != null ? stats.onlinesecs + since : undefined)}
{#if stats.idlesecs != null}
Idle for
{duration(stats.idlesecs + since)}
{/if}
Ping (TCP)
{stats.tcp_packets ? ping(stats.tcp_ping_avg, stats.tcp_ping_var) : 'n/a (this client sends no pings)'}
Ping (UDP)
{stats.udp_packets ? ping(stats.udp_ping_avg, stats.udp_ping_var) : 'n/a'}
Pings received
{stats.tcp_packets ?? 0} over TCP, {stats.udp_packets ?? 0} over UDP
{#if stats.bandwidth != null}
Bandwidth
{formatBytes(stats.bandwidth)}/s
{/if} {#if isSelf && ownAddress}
Address
{ownAddress}
{#if stats.address?.length && address(stats.address) !== ownAddress}
Seen by the server
{address(stats.address)} (the web proxy)
{/if} {:else if stats.address?.length}
Address
{address(stats.address)}
{/if}
{#if stats.version}

Client

Version
{version || 'unknown'}
{#if stats.version.os}
System
{stats.version.os} {stats.version.os_version ?? ''}
{/if}
Opus
{stats.opus ? 'supported' : 'no (legacy codecs only)'}
{/if} {#if stats.from_client || stats.from_server}

Voice packets

GoodLateLostResyncLoss
From client{stats.from_client?.good ?? 0}{stats.from_client?.late ?? 0}{stats.from_client?.lost ?? 0}{stats.from_client?.resync ?? 0}{loss(stats.from_client)}
To client{stats.from_server?.good ?? 0}{stats.from_server?.late ?? 0}{stats.from_server?.lost ?? 0}{stats.from_server?.resync ?? 0}{loss(stats.from_server)}

Counted on the encrypted UDP channel; clients sending voice over TCP show zeros.

{/if} {#if stats.certificates?.length}

Certificate

Subject
{certs[0]?.subject.replace(/\n/g, ', ') ?? '...'}
Verified
{stats.strong_certificate ? 'yes, signed by a trusted authority' : 'no, self-signed'}
{#if certs.length} {/if} {:else if user?.hash}

Certificate

SHA-1
{user.hash}

Only admins and the user themselves can see the full certificate.

{/if} {#if !stats.version}

Client details, address and certificate are only shown to admins and to the user themselves.

{/if} {/if} {#snippet footer()} {/snippet}