Add TeaSpeak-to-Chanora SRS mapping and divergence points. Backfill YaTQA variable parameters, anti-flood actions, and notify events with structured placeholders. Add error code cross-reference between YaTQA and ReSpeak sources.
1004 lines
46 KiB
Markdown
1004 lines
46 KiB
Markdown
# YaTQA Offline Reference — TeamSpeak 3 Protocol Documentation
|
||
|
||
**Source:** https://yat.qa/ressourcen/ (German pages)
|
||
**Author:** Janni "Яedeemer" K.
|
||
**Fetched:** 2026-06-11
|
||
**Purpose:** Offline reference for Chanora development — protocol details, error codes, undocumented features
|
||
|
||
> **Note:** The German pages contain significantly more detail than the English pages. This document captures ALL German-only content.
|
||
|
||
---
|
||
|
||
## Table of Contents
|
||
|
||
1. [Definitions and Algorithms](#1-definitions-and-algorithms)
|
||
2. [Server Query Comments](#2-server-query-comments)
|
||
3. [Server Query Notify](#3-server-query-notify)
|
||
4. [Variable Parameters](#4-variable-parameters)
|
||
5. [Voice Client Anti-Flood](#5-voice-client-anti-flood)
|
||
6. [Security Level (Hashcash)](#6-security-level-hashcash)
|
||
7. [Snapshots](#7-snapshots)
|
||
8. [Other Protocols](#8-other-protocols)
|
||
9. [Server Error Codes](#9-server-error-codes)
|
||
10. [Permission IDs](#10-permission-ids)
|
||
11. [Client Versions](#11-client-versions)
|
||
12. [Badges](#12-badges)
|
||
|
||
---
|
||
|
||
## 1. Definitions and Algorithms
|
||
|
||
### 1.1 Codecs
|
||
|
||
**Codec bitrates (b_Raw in bytes/s):**
|
||
|
||
| Codec \ Quality | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|
||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
||
| Speex Narrowband (8kHz) | 300 | 500 | 750 | 1000 | 1400 | 1900 | 2300 | 3100 | | | |
|
||
| Speex Wideband (16kHz) | 500 | 750 | 1000 | 1250 | 1600 | 2100 | 2600 | 3000 | 3500 | 4300 | 5300 |
|
||
| Speex Ultra-wideband (32kHz) | 550 | 950 | 1200 | 1450 | 1850 | 2350 | 2800 | 3200 | 3700 | 4500 | 5500 |
|
||
| CELT Mono (48kHz) | | | | | 4000 | 5000 | 6000 | 8000 | 12000 | | |
|
||
| Opus Voice | 550 | 1050 | 1550 | 2050 | 2600 | 3100 | 3600 | 4100 | 4650 | 5150 | 5650 |
|
||
| Opus Music | 900 | 1800 | 2700 | 3600 | 4500 | 5400 | 6300 | 7200 | 8100 | 9000 | 9900 |
|
||
|
||
**Key formulas:**
|
||
- `b_Official = floor(b_Raw + 45 byte / t)`
|
||
- `d = b_Raw * t + 45 byte ≤ d_Max`
|
||
- `d_Max ≈ 527 ± 1 byte` (MTU)
|
||
- `t_Max(Opus) = 20 ms`
|
||
- `t_Max(Speex/CELT) = floor((527±1 - 45) / (b_Raw * 50)) * 20 ms`
|
||
|
||
**MTU explanation:** 528 bytes (TS-MTU) + 40 bytes (IPv6 header) + 8 bytes (UDP header) = 576 bytes (old modem/ISDN MTU).
|
||
|
||
**Opus is VBR** — bitrate varies ±250 bytes/s at quality 6. Max deviation needed to reach d_Max is ~144% (never happens in practice).
|
||
|
||
### 1.2 Permission System
|
||
|
||
**Permission tiers (evaluated top to bottom, lowest wins):**
|
||
|
||
| Tier | Level | Description |
|
||
|---|---|---|
|
||
| 0 | Server Groups | Highest value wins (unless Negate flag) |
|
||
| 1 | Client (Server level) | Client-specific server permissions |
|
||
| 2 | Channel | Skipped if Skip flag set |
|
||
| 3 | Channel Group | Skipped if Skip flag set |
|
||
| 4 | Client (Channel level) | Client-specific channel permissions |
|
||
|
||
**Skip flag:** Skips channel and channel group permissions. Determined by:
|
||
1. If client permission set → use its skip flag
|
||
2. If no client permission → use effective server group's skip flag
|
||
3. If groups with Negate flag → only Negate groups count
|
||
4. If multiple groups remain → lowest ID wins
|
||
|
||
**Negate flag:** If ANY server group has Negate flag set, only groups WITH Negate flag count. Lowest ID among Negate groups wins. Even if non-Negate groups have lower IDs.
|
||
|
||
**Grant permission:** Tells how much `i_client_permission_modify_power` needed to change a permission. Grant permission name = replace first letter of original permission with `i_needed_permission_modify_power`.
|
||
|
||
**b_client_skip_channelgroup_permissions:** If set in first two tiers, ALL channel group AND channel permissions are ignored.
|
||
|
||
### 1.3 Query Connection
|
||
|
||
**Timeout behavior by version:**
|
||
|
||
| Versions | Timeout | Paragraph | Space+Enter | Command+Enter |
|
||
|---|---|---|---|---|
|
||
| – 3.2.0 | 10 min | yes | yes | yes |
|
||
| 3.3.0-beta1 – beta2 | 5 min | no | no | no |
|
||
| 3.3.0-beta3 – 3.3.1-steadyclock | 5 min | no | no* | yes |
|
||
| 3.3.1 – | 5 min | no | yes | yes |
|
||
|
||
*Sending just a command keeps client on server forever (exploitable).
|
||
|
||
**Character encoding:** TeamSpeak claims UTF-8 but actually uses UCS-2 (BMP only). Mobile apps use CESU-8. Server 3.2.0 adds partial SIP support (emoji ranges).
|
||
|
||
**Line terminator:** `0x0A 0x0D` (Windows format, reversed).
|
||
**Max line length:** 9203 bytes (excluding line terminator). Not limited for 12 permission add/remove commands and `serversnapshotdeploy`.
|
||
|
||
### 1.4 Icons
|
||
|
||
- Max dimensions: 16×16
|
||
- Filename = CRC32 of icon data (same algorithm as PNG/ZIP)
|
||
- Cannot be animated
|
||
|
||
**Data types for icon IDs vary by context:**
|
||
|
||
| Context | Parameter | Read | Write |
|
||
|---|---|---|---|
|
||
| *permlist, *addpermsid | permsid=i_icon_id value= | signed | signed |
|
||
| clientlist -icon, clientinfo | client_icon_id= | signed | via clientaddperm only |
|
||
| serverinfo, serveredit | virtualserver_icon_id= | signed | unsigned |
|
||
| channellist -icon, channelinfo | channel_icon_id | signed | unsigned |
|
||
|
||
### 1.5 Avatars
|
||
|
||
- Max dimensions: 300×300
|
||
- Avatar flag = MD5 hash (not a boolean)
|
||
- Stored in channel ID 0
|
||
- Filename derived from Global ID (not from avatar flag)
|
||
- Algorithm: Base64-decode the Global ID → 20 bytes → display with `[a-p]` instead of `[0-9a-f]`
|
||
|
||
**Example calculation:**
|
||
- UID: `yGRWD2BOWPC6xSROXoi7U8NAljI=`
|
||
- Base64 decode → 20 bytes → hex: `C86456...` → filename: `migefg...`
|
||
|
||
### 1.6 Snapshots
|
||
|
||
- File starts with SHA1 hash of remaining UTF-8 data (excluding trailing newline)
|
||
- Internally runs normal Query commands when deploying
|
||
- If `serveradmin` is added to a server group, snapshot may fail on newer servers
|
||
|
||
### 1.7 Client Cache
|
||
|
||
- Subfolder names = Base64-encoded Server UID (double-encoded to avoid `/` in filenames)
|
||
- Avatars in `cache/clients/`, Icons in `cache/icons/`
|
||
- Private chat partners in `chats/clients/` (also Base64-encoded UIDs)
|
||
|
||
### 1.8 BBCode
|
||
|
||
- Max stack size: 20
|
||
- 10 tags can be active simultaneously
|
||
- Self-closing tag `[hr]` doesn't count toward stack but can't be used at 20
|
||
|
||
**Inline elements:** `[b]`, `[i]`, `[u]`, `[color=X]`, `[url=URL]Text[/url]`, `[url]URL[/url]`
|
||
|
||
**Block elements** (channel descriptions only): `[hr]`, `[size=X]`, `[img]URL[/img]`, `[left]`, `[center]`, `[right]`, `[list][*]Text[/list]`
|
||
|
||
**Internal links:**
|
||
- `client://{ClientID}/{ClientUID}~{Name}`
|
||
- `channelid://{ChannelID}` (0 = server)
|
||
- `ts3file://{Serveraddress}?port={Port}&serverUID={UID}&channel={ChannelID}&path={Path}&filename={Filename}&isDir={0|1}&size={Bytes}&fileDateTime={UnixTimestamp}`
|
||
- `ts3image://{Filename}?channel={ChannelID}&path={Path}`
|
||
|
||
**External links:**
|
||
- `ts3server://{Serveraddress}?port={Port}&nickname={Nickname}&password={Password}&channel={ChannelName}&cid={ChannelID}&channelpassword={ChannelPassword}&token={Token}&addbookmark={BookmarkName}`
|
||
|
||
**Colors:** W3C color names + `#123456` + `#123` + `transparent`
|
||
|
||
**Font sizes (since client 3.0.3):** Measured in points (pt). Legacy HTML sizes `[size=+X]` don't work — `+` prefix resets to default.
|
||
|
||
---
|
||
|
||
## 2. Server Query Comments
|
||
|
||
### 2.1 General
|
||
|
||
- `login` failure logs you out if already logged in
|
||
- `use` with non-existent server returns "server not running" error
|
||
- `use` does NOT auto-start stopped servers — must use `-virtual` flag
|
||
- `return_code` parameter available on every command
|
||
|
||
### 2.2 Key Command Issues
|
||
|
||
**serveredit:** `virtualserver_ask_for_privilegekey` setting gives error 1538 (invalid parameter).
|
||
|
||
**serversnapshotdeploy:**
|
||
- With `use` → overwrites selected server; without → creates new server
|
||
- Returns `sid` and `virtualserver_port` when creating new server
|
||
- Port not preserved from snapshot when creating new
|
||
- `-mapping` flag must come before snapshot data
|
||
|
||
**servernotifyregister:**
|
||
- Undocumented parameter `event=tokenused`
|
||
- Invalid `event` values require another parameter, then fail with parameter error
|
||
- `id=0` stands for all channels (gives duplicate events)
|
||
|
||
**sendtextmessage:** `targetmode=2` (channel) and `targetmode=3` (server) don't require `target` parameter.
|
||
|
||
**clientlist:** Undocumented `-badges` switch exists.
|
||
|
||
**clientedit:** Only `client_description` and `client_is_talker` can be modified.
|
||
|
||
**clientdblist:** `duration` is entry count (max 200), not a time duration. `-1` = maximum.
|
||
|
||
**clientdbfind:**
|
||
- Uses SQL `LIKE` matching: `%` = wildcard, `_` = single char
|
||
- Backslashes must be doubled
|
||
- Undocumented `-details` switch returns: unique_identifier, nickname, lastconnected, totalconnections, lastip
|
||
- Limited to 50 results
|
||
|
||
**clientdbedit:** Only `client_description` can be changed.
|
||
|
||
**clientgetnamefromuid:** Also returns `cldbid` — better than `clientgetdbidfromuid`.
|
||
|
||
**clientkick:** Clients to kick must come LAST in parameter list. QueryManual example is wrong.
|
||
|
||
**clientpoke:** Cannot poke multiple clients simultaneously (despite QueryManual claiming otherwise).
|
||
|
||
**privilegekeyadd:** `tokencustomset` is a self-parameterized string (spaces between params). Individual idents/values must be escaped before the entire string is escaped. QueryManual example is wrong.
|
||
|
||
### 2.3 Undocumented Commands
|
||
|
||
**plugincmd:** Parameters: `name`, `data`, `targetmode` (0-3), `target`. Only works on virtual servers. No longer allowed from Query clients.
|
||
|
||
**dummy_connectionlost:** Same as `logout` but doesn't fail if not logged in. If on a server, kicks you (connection lost). You remain invisible on instance.
|
||
|
||
**verifyserverpassword / verifychannelpassword:** Both return "not on a server" if not connected, or "command doesn't exist" if connected. Both non-functional.
|
||
|
||
**channelcreateprivate:** Returns error 2 (not implemented).
|
||
|
||
**cmd_custom_unknown_command:** Returns error 256 (command not found) — intentional.
|
||
|
||
---
|
||
|
||
## 3. Server Query Notify
|
||
|
||
### 3.1 Subscription Behavior
|
||
|
||
- Subscriptions disappear on logout, re-login, or server switch
|
||
- Must subscribe individually (no array parameter)
|
||
- Can only have ONE channel subscription at a time
|
||
- `id=0` = all channels (gives duplicate events)
|
||
- Existing subscriptions persist even if permissions revoked
|
||
|
||
### 3.2 Events
|
||
|
||
#### notifycliententerview (server + channel)
|
||
Fields: cfid, ctid, reasonid, clid, client_unique_identifier, client_nickname, client_input_muted, client_output_muted, client_outputonly_muted, client_input_hardware, client_output_hardware, client_meta_data, client_is_recording, client_database_id, client_channel_group_id, client_servergroups, client_away, client_away_message, client_type, client_flag_avatar, client_talk_power, client_talk_request, client_talk_request_msg, client_description, client_is_talker, client_is_priority_speaker, client_unread_messages, client_nickname_phonetic, client_needed_serverquery_view_power, client_icon_id, client_is_channel_commander, client_country, client_channel_group_inherited_channel_id, client_badges
|
||
|
||
#### notifyclientleftview (server + channel)
|
||
Fields: cfid, ctid, reasonid, invokerid, invokername, invokeruid, reasonmsg, bantime, clid
|
||
|
||
#### notifyserveredited (server)
|
||
Always reasonid=10. Reports new values for: name, codec_encryption_mode, default_server_group, default_channel_group, hostbanner_*, priority_speaker_dimm_modificator, hostbutton_*, name_phonetic, icon_id, hostbanner_mode, channel_temp_delete_delay_default
|
||
|
||
#### notifychannelchanged, notifychannelmoved, notifychanneledited, notifychannelcreated, notifychanneldeleted (channel)
|
||
|
||
**notifychannelcreated:**
|
||
Fields: [to be completed] — likely includes: cid, cpid, channel_name, channel_topic, channel_codec, channel_codec_quality, channel_flag_permanent, channel_flag_semi_permanent, channel_flag_default, channel_flag_password, channel_maxclients, channel_maxfamilyclients, channel_order, channel_icon_id, channel_needed_talk_power
|
||
|
||
**notifychanneledited:**
|
||
Fields: [to be completed] — likely includes: cid, reasonid, invokerid, invokername, invokeruid, plus changed channel properties
|
||
|
||
**notifychannelmoved:**
|
||
Fields: [to be completed] — likely includes: cid, cpid, order, reasonid (10)
|
||
|
||
**notifychannelchanged:**
|
||
Fields: [to be completed] — [field details to be completed]
|
||
|
||
**notifychanneldeleted:**
|
||
Fields: [to be completed] — likely includes: cid, cpid, reasonid (10), invokerid, invokername, invokeruid
|
||
|
||
#### notifychanneldescriptionchanged (channel)
|
||
Fields: [to be completed — undocumented in original YaTQA source]
|
||
|
||
#### notifychannelpasswordchanged (channel)
|
||
Fields: [to be completed — undocumented in original YaTQA source]
|
||
|
||
#### notifyclientmoved (channel)
|
||
Fields: ctid, reasonid (0=self, 1=moved), invokerid, invokername, invokeruid, clid
|
||
|
||
#### notifytextmessage (textserver, textchannel, textprivate)
|
||
Fields: targetmode (1=private, 2=channel, 3=server), msg, target (only for private), invokerid, invokername, invokeruid
|
||
|
||
#### notifytokenused (tokenused — undocumented)
|
||
Fields: clid, cldbid, cluid, token, tokencustomset, token1 (group), token2 (0 for server token)
|
||
|
||
### 3.3 Reason IDs
|
||
|
||
| ID | Meaning |
|
||
|---|---|
|
||
| 0 | Self channel change or server join |
|
||
| 1 | User or channel moved |
|
||
| 3 | Timeout |
|
||
| 4 | Channel kick |
|
||
| 5 | Server kick |
|
||
| 6 | Ban |
|
||
| 8 | Voluntary server leave |
|
||
| 10 | Server or channel edited |
|
||
| 11 | Server shutdown |
|
||
|
||
---
|
||
|
||
## 4. Variable Parameters
|
||
|
||
### 4.1 Client Variables
|
||
|
||
**Key variables and their availability:**
|
||
|
||
| Variable | clientlist | clientinfo | notify | clientupdate | clientedit | clientdblist | clientdbinfo |
|
||
|---|---|---|---|---|---|---|---|
|
||
| cid | ✓ | ✓ | ✓(ctid) | | | | |
|
||
| clid | ✓ | ✓ | N/A | | | | |
|
||
| client_unique_identifier | ✓(uid) | ✓ | ✓ | ✗ | | ✓ | ✓ |
|
||
| client_nickname | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||
| client_input_muted | ✓(voice) | ✓ | ✓ | ✓(limited) | ✗ | | |
|
||
| client_output_muted | ✓(voice) | ✓ | ✓ | ✓(limited) | ✗ | | |
|
||
| client_database_id | ✓ | ✓ | ✓ | ✗ | | ✓(cldbid) | ✓ |
|
||
| client_servergroups | ✓(groups) | ✓ | ✓ | ✗ | | | |
|
||
| client_away | ✓(away) | ✓ | ✓ | ✓ | ✗ | | |
|
||
| client_type | ✓ | ✓ | ✓ | ✗ | | | |
|
||
| client_flag_avatar | ✓ | ✓ | ✓(modified) | ✗ | ✗ | ✓(limited) | |
|
||
| client_description | ✓ | ✓ | ✓ | ✓ | ✓ | ✓(limited) | ✓(limited) |
|
||
| client_icon_id | ✓(icon) | ✓ | ✓ | ✗ | ✗ | ✓ | ✓ |
|
||
| client_channel_group_id | ✓(groups) | ✓ | ✓ | ✗ | ✗ | | |
|
||
| client_channel_group_inherited_channel_id | ✓(groups) | ✓ | ✓ | | | | |
|
||
| client_base64HashClientUID | ✓ | ✓(limited) | | | | | |
|
||
|
||
**Notes:**
|
||
- `clientupdate` with `client_input_hardware=0` has 0 flood points (tab switch)
|
||
- `client_flag_avatar` is MD5 hash, not a boolean
|
||
- `client_badges` format: `overwolf=0:badges=GUID1=GUID2=...`
|
||
|
||
**Additional client variables (to be completed from yat.qa/ressourcen/variablen-parameter/):**
|
||
|
||
| Variable | clientlist | clientinfo | notify | clientupdate | clientedit | clientdblist | clientdbinfo |
|
||
|---|---|---|---|---|---|---|---|
|
||
| client_input_hardware | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] | | |
|
||
| client_output_hardware | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] | | |
|
||
| client_outputonly_muted | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] | | |
|
||
| client_meta_data | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] | | |
|
||
| client_is_recording | [to be completed] | [to be completed] | [to be completed] | ✗ | ✗ | | |
|
||
| client_version | [to be completed] | [to be completed] | | | | ✓(details) | ✓ |
|
||
| client_platform | [to be completed] | [to be completed] | | | | ✓(details) | ✓ |
|
||
| client_talk_power | [to be completed] | [to be completed] | [to be completed] | | | | |
|
||
| client_talk_request | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
|
||
| client_talk_request_msg | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
|
||
| client_is_talker | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✓ | | |
|
||
| client_is_priority_speaker | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
|
||
| client_is_channel_commander | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
|
||
| client_unread_messages | [to be completed] | [to be completed] | [to be completed] | ✗ | ✗ | | |
|
||
| client_nickname_phonetic | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
|
||
| client_needed_serverquery_view_power | [to be completed] | [to be completed] | [to be completed] | | | | |
|
||
| client_country | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
|
||
| client_away_message | [to be completed] | [to be completed] | [to be completed] | [to be completed] | ✗ | | |
|
||
| client_totalconnections | | | | | | ✓(details) | ✓ |
|
||
| client_lastconnected | | | | | | ✓(details) | ✓ |
|
||
| client_lastip | | | | | | ✗ | ✗ |
|
||
| client_created | | | | | | ✓(details) | ✓ |
|
||
| client_month_bytes_uploaded | [to be completed] | [to be completed] | | | | | |
|
||
| client_month_bytes_downloaded | [to be completed] | [to be completed] | | | | | |
|
||
| client_total_online_time | | [to be completed] | | | | | |
|
||
|
||
### 4.2 Channel Variables
|
||
|
||
**Key variables:**
|
||
|
||
| Variable | channellist | channelinfo | notify(created/edited/moved) | channeledit | channelcreate |
|
||
|---|---|---|---|---|---|
|
||
| cid | ✓ | ✓ | ✓ | N/A | |
|
||
| pid (parent) | ✓ | ✓ | ✓(cpid) | ✓(cpid) | ✓(cpid) |
|
||
| channel_name | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||
| channel_codec | ✓(voice) | ✓ | ✓ | ✓ | ✓ |
|
||
| channel_codec_quality | ✓(voice) | ✓ | ✓ | ✓ | ✓ |
|
||
| channel_maxclients | ✓(limits) | ✓ | ✓ | ✓ | ✓ |
|
||
| channel_order | ✓ | ✓ | ✓ | ✓(order) | ✓(order) |
|
||
| channel_flag_password | ✓(flags) | ✓ | ✓ | ✓ | ✗ |
|
||
| channel_icon_id | ✓(icon) | ✓ | ✓ | ✓(limited) | ✗ |
|
||
| channel_needed_talk_power | ✓(voice) | ✓ | ✓ | ✓ | ✓ |
|
||
| channel_flag_private | ✓ | ✗ | | | |
|
||
| seconds_empty | ✓(secondsempty) | ✓ | ✗ | | |
|
||
| total_clients | ✓ | ✗ | ✗ | | |
|
||
|
||
**Additional channel variables (to be completed from yat.qa/ressourcen/variablen-parameter/):**
|
||
|
||
| Variable | channellist | channelinfo | notify(created/edited/moved) | channeledit | channelcreate |
|
||
|---|---|---|---|---|---|
|
||
| channel_topic | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
|
||
| channel_description | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
|
||
| channel_flag_permanent | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
|
||
| channel_flag_semi_permanent | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
|
||
| channel_flag_default | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
|
||
| channel_maxfamilyclients | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
|
||
| channel_codec_is_unencrypted | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
|
||
| channel_security_salt | [to be completed] | [to be completed] | [to be completed] | | |
|
||
| channel_delete_delay | [to be completed] | [to be completed] | [to be completed] | [to be completed] | [to be completed] |
|
||
| channel_flag_maxclients_unlimited | [to be completed] | [to be completed] | [to be completed] | | |
|
||
| channel_flag_maxfamilyclients_unlimited | [to be completed] | [to be completed] | [to be completed] | | |
|
||
| channel_flag_maxfamilyclients_inherited | [to be completed] | [to be completed] | [to be completed] | | |
|
||
| channel_filepath | [to be completed] | [to be completed] | | | |
|
||
| channel_forced_silence | [to be completed] | [to be completed] | [to be completed] | [to be completed] | |
|
||
| channel_name_phonetic | [to be completed] | [to be completed] | | | |
|
||
|
||
**Notes:**
|
||
- `channel_flag_temporary` doesn't exist at all
|
||
- `channel_icon_id` changes via `channeledit` are semi-permanent (lost on restart)
|
||
- `channel_password` returns Base64(SHA1(Base64(SHA1(plaintext)) + virtualserver_keypair)) for non-Query clients
|
||
|
||
### 4.3 Server Variables
|
||
|
||
**All variables available in serverinfo. Key differences:**
|
||
|
||
| Variable | serverlist | serverinfo | serverrequestconnectioninfo | serveredit | notifyserveredited |
|
||
|---|---|---|---|---|---|
|
||
| virtualserver_name | ✓ | ✓ | | ✓ | ✓ |
|
||
| virtualserver_maxclients | ✓(limited) | ✓ | | ✓ | |
|
||
| virtualserver_port | ✓ | ✓ | | ✓ | |
|
||
| virtualserver_autostart | ✓ | ✓ | | ✓ | |
|
||
| virtualserver_icon_id | ✓ | ✓ | | ✓ | ✓ |
|
||
| virtualserver_total_packetloss_total | ✓ | ✓ | ✓(limited) | | |
|
||
| virtualserver_total_ping | ✓ | ✓ | ✓(limited) | | |
|
||
|
||
**Additional server variables (to be completed from yat.qa/ressourcen/variablen-parameter/):**
|
||
|
||
| Variable | serverlist | serverinfo | serverrequestconnectioninfo | serveredit | notifyserveredited |
|
||
|---|---|---|---|---|---|
|
||
| virtualserver_welcomemessage | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_password | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_codec_encryption_mode | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_hostmessage | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_hostmessage_mode | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_hostbanner_url | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_hostbanner_gfx_url | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_hostbanner_gfx_interval | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_hostbanner_mode | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_hostbutton_tooltip | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_hostbutton_url | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_hostbutton_gfx_url | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_complain_autoban_count | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_complain_autoban_time | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_complain_remove_time | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_priority_speaker_dimm_modificator | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_antiflood_points_tick_reduce | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_antiflood_points_needed_command_block | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_antiflood_points_needed_ip_block | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_needed_identity_security_level | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_channel_temp_delete_delay_default | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_name_phonetic | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_reserved_slots | | [to be completed] | | [to be completed] | |
|
||
| virtualserver_total_bytes_uploaded | | [to be completed] | | | |
|
||
| virtualserver_total_bytes_downloaded | | [to be completed] | | | |
|
||
| virtualserver_total_packetloss_speech | | | [to be completed] | | |
|
||
| virtualserver_total_packetloss_keepalive | | | [to be completed] | | |
|
||
| virtualserver_total_packetloss_control | | | [to be completed] | | |
|
||
| virtualserver clientsonline | ✓(limited) | [to be completed] | | | |
|
||
| virtualserver_queryclientsonline | ✓(limited) | [to be completed] | | | |
|
||
| virtualserver_channelsonline | ✓(limited) | [to be completed] | | | |
|
||
| virtualserver_uptime | | [to be completed] | | | |
|
||
| virtualserver_status | ✓ | [to be completed] | | | |
|
||
| virtualserver_unique_identifier | | [to be completed] | | | |
|
||
| virtualserver_default_server_group | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_default_channel_group | | [to be completed] | | [to be completed] | [to be completed] |
|
||
| virtualserver_default_channel_admin_group | | [to be completed] | | [to be completed] | |
|
||
|
||
---
|
||
|
||
## 5. Voice Client Anti-Flood
|
||
|
||
### 5.1 General Rules
|
||
|
||
- Client starts with 0 points
|
||
- Every 0.5 seconds ("tick"): `virtualserver_antiflood_points_tick_reduce` points deducted (min 1)
|
||
- If `b_client_ignore_antiflood` → no points accumulated (but existing points still drain)
|
||
- Connection = 80 points (respects `b_client_ignore_antiflood`)
|
||
- `b_client_ignore_bans` bypasses IP block (but not anti-flood)
|
||
- Threshold: `virtualserver_antiflood_points_needed_command_block` blocks at EQUALITY
|
||
|
||
### 5.2 Flood Points Per Action
|
||
|
||
**Action categories and point ranges:**
|
||
|
||
| Category | Point Range | Actions |
|
||
|---|---|---|
|
||
| Zero-cost | 0 | clientdisconnect, clientgetvariables, clientinit, clientinitiv, setwhisperlist, ftgetfilelist, ftinitupload, ftinitdownload, clientmute/clientunmute (conditional), internal client operations |
|
||
| Low-cost | 5 | Most permission operations, most group operations, most file operations (except ftinitupload/ftinitdownload), permissionlist (if cached) |
|
||
| Medium-cost | 10-15 | clientmove (10), textmessagesend (15), channel subscribe (15-20), set badges on connect (15) |
|
||
| High-cost | 25 | banadd, banclient, complainadd, complaindelall, complainlist, channelcreate, channeldelete, channelmove, channeledit, clientkick, clientpoke, clientedit, servergroupaddclient, servergroupdelclient, setclientchannelgroup |
|
||
| Very high-cost | 50 | clientdbdelete, clientdbedit, clientdbfind, logview |
|
||
| Extreme | 158 | channelsubscribe |
|
||
|
||
**Detailed action point table (to be completed from yat.qa/ressourcen/voice-client-anti-flood/):**
|
||
|
||
| Action | Points | Notes |
|
||
|---|---|---|
|
||
| banadd | 25 | [to be completed] |
|
||
| banclient | 25 | [to be completed] |
|
||
| bandel | [to be completed] | [to be completed] |
|
||
| bandelall | [to be completed] | [to be completed] |
|
||
| banlist | [to be completed] | [to be completed] |
|
||
| channelcreate | 25 | [to be completed] |
|
||
| channeldelete | 25 | [to be completed] |
|
||
| channeledit | 25 | [to be completed] |
|
||
| channellist | [to be completed] | [to be completed] |
|
||
| channelmove | 25 | [to be completed] |
|
||
| channelsubscribe | 158 | [to be completed] |
|
||
| channelunsubscribe | [to be completed] | [to be completed] |
|
||
| clientdbdelete | 50 | [to be completed] |
|
||
| clientdbedit | 50 | [to be completed] |
|
||
| clientdbfind | 50 | [to be completed] |
|
||
| clientdblist | [to be completed] | [to be completed] |
|
||
| clientedit | 25 | [to be completed] |
|
||
| clientgetdbidfromuid | [to be completed] | [to be completed] |
|
||
| clientgetnamefromuid | [to be completed] | [to be completed] |
|
||
| clientgetuidfromclid | [to be completed] | [to be completed] |
|
||
| clientkick | 25 | [to be completed] |
|
||
| clientlist | [to be completed] | [to be completed] |
|
||
| clientmove | 10 | [to be completed] |
|
||
| clientpoke | 25 | [to be completed] |
|
||
| complainadd | 25 | [to be completed] |
|
||
| complaindelall | 25 | [to be completed] |
|
||
| complaindel | [to be completed] | [to be completed] |
|
||
| complainlist | 25 | [to be completed] |
|
||
| ftcreatedir | [to be completed] | [to be completed] |
|
||
| ftdeletefile | [to be completed] | [to be completed] |
|
||
| ftgetfileinfo | [to be completed] | [to be completed] |
|
||
| ftgetfilelist | 0 | [to be completed] |
|
||
| ftinitdownload | 0 | [to be completed] |
|
||
| ftinitupload | 0 | [to be completed] |
|
||
| ftrenamefile | [to be completed] | [to be completed] |
|
||
| gm | [to be completed] | [to be completed] |
|
||
| logadd | [to be completed] | [to be completed] |
|
||
| logview | 50 | [to be completed] |
|
||
| messageadd | [to be completed] | [to be completed] |
|
||
| messagedel | [to be completed] | [to be completed] |
|
||
| messageget | [to be completed] | [to be completed] |
|
||
| messagelist | [to be completed] | [to be completed] |
|
||
| messageupdateflag | [to be completed] | [to be completed] |
|
||
| permfind | [to be completed] | [to be completed] |
|
||
| permget | [to be completed] | [to be completed] |
|
||
| permlist | 5 | If not cached; [to be completed] |
|
||
| privilegekeyadd | [to be completed] | [to be completed] |
|
||
| privilegekeydelete | [to be completed] | [to be completed] |
|
||
| privilegekeylist | [to be completed] | [to be completed] |
|
||
| privilegekeyuse | [to be completed] | [to be completed] |
|
||
| sendtextmessage | [to be completed] | textmessagesend (15); [to be completed] |
|
||
| servergroupaddclient | 25 | [to be completed] |
|
||
| servergroupaddperm | 5 | [to be completed] |
|
||
| servergroupclientlist | [to be completed] | [to be completed] |
|
||
| servergroupdelclient | 25 | [to be completed] |
|
||
| servergroupdelperm | 5 | [to be completed] |
|
||
| servergrouplist | [to be completed] | [to be completed] |
|
||
| servergrouppermlist | [to be completed] | [to be completed] |
|
||
| setclientchannelgroup | 25 | [to be completed] |
|
||
| tokenadd | [to be completed] | [to be completed] |
|
||
| tokendelete | [to be completed] | [to be completed] |
|
||
| tokenlist | [to be completed] | [to be completed] |
|
||
| tokenuse | [to be completed] | [to be completed] |
|
||
| whoami | [to be completed] | [to be completed] |
|
||
|
||
**Connection sequence point costs:**
|
||
|
||
| Step | Points | Notes |
|
||
|---|---|---|
|
||
| Connection establishment | 80 | Respects `b_client_ignore_antiflood` |
|
||
| Default channel join | 10 | [to be completed] |
|
||
| Set badges | 15 | [to be completed] |
|
||
| permissionlist | 5 | If not cached; [to be completed] |
|
||
| clientgetvariables | 0 | [to be completed] |
|
||
| Subscribe channels | 15-20 | [to be completed] |
|
||
|
||
### 5.3 Connection Flow
|
||
|
||
1. `clientinitiv`
|
||
2. `clientinit`
|
||
3. Set default channel (10 points)
|
||
4. Set badges (15 points)
|
||
5. `permissionlist` (5 points, if not cached)
|
||
6. `clientgetvariables` (0 points)
|
||
7. Subscribe channels (15-20 points)
|
||
|
||
---
|
||
|
||
## 6. Security Level (Hashcash)
|
||
|
||
### 6.1 How It Works
|
||
|
||
- Hashcash variant using SHA1
|
||
- Input: Public Key + unsigned 64-bit number (as string)
|
||
- Security level = number of leading zeros in 160-bit binary SHA1 hash
|
||
- Byte order: Big Endian, Bit order: Little Endian
|
||
|
||
### 6.2 Growth Rate
|
||
|
||
- Average 2^k hashes needed to reach level k from level 0
|
||
- Doubles for each additional level
|
||
|
||
**Time estimates (2009, modern CPUs ~4x faster):**
|
||
- Level 0-23: seconds
|
||
- Level 23-29: minutes
|
||
- Level 29-34: hours
|
||
- Level 35-39: days
|
||
- Level 40-43: months
|
||
- Level 44+: years
|
||
|
||
### 6.3 Optimization
|
||
|
||
- TeamSpeak uses single-threaded SHA1 (~1 MH/s on i5)
|
||
- Hashdog tool: multi-threaded, ~5 MH/s per core (~20-30x faster than TS)
|
||
- GPU (Hashcat): ~8.5 GH/s = 850,000% faster than TeamSpeak
|
||
- Level 33 on GTX 1080: ~1 second
|
||
|
||
---
|
||
|
||
## 7. Snapshots
|
||
|
||
### 7.1 What's Included
|
||
|
||
- Virtual server settings (except port) including keypair
|
||
- Channels
|
||
- Client database
|
||
- Permissions for local groups (both types), clients (both types), and channels
|
||
- Group assignments
|
||
|
||
### 7.2 What's NOT Included
|
||
|
||
- Server port (auto-assigned on deploy)
|
||
- Files
|
||
- Bans
|
||
- Complaints
|
||
- Offline messages (but unread count preserved)
|
||
|
||
### 7.3 Format
|
||
|
||
```
|
||
hash=Base64(SHA1(remaining_data))|snapshot_data
|
||
```
|
||
|
||
**Sections:**
|
||
1. `virtualserver_*` settings
|
||
2. `end_virtualserver|begin_channels` → channel list (tree order)
|
||
3. `end_channels|begin_clients` → client database (creation order)
|
||
4. `end_clients|begin_permissions|server_groups` → server group permissions
|
||
5. `end_groups|iid=0` → server group memberships (by cldbid, then sgid)
|
||
6. `end_relations|channel_groups` → channel group permissions
|
||
7. `end_groups|` → channel group memberships
|
||
8. `end_relations|client_flat` → client permissions (server level)
|
||
9. `end_flat|channel_flat` → channel permissions
|
||
10. `end_flat|channel_client_flat` → client-channel permissions
|
||
11. `end_flat|end_permissions`
|
||
|
||
---
|
||
|
||
## 8. Other Protocols
|
||
|
||
### 8.1 Protobuf Format
|
||
|
||
**Two key data types:**
|
||
|
||
**BigNum (Varint):**
|
||
```
|
||
if x < 128: write byte x
|
||
else: write (x mod 128 OR 128), recurse with x >> 7
|
||
```
|
||
|
||
**Binary data with length prefix:** BigNum length + raw data
|
||
|
||
**File format:** Pairs of (BigNum identifier, data) until EOF.
|
||
- Identifier AND 7 = data type (0=BigNum, 1=64-bit, 2=binary, 5=32-bit)
|
||
- Identifier SHR 3 = field number
|
||
|
||
### 8.2 Update Protocol
|
||
|
||
- Current: Downloads `ts3-client-2` from `versions.teamspeak.com` (Protobuf format)
|
||
- Contains: server version (3.0.10, outdated), stable/beta/alpha client versions
|
||
- Updater images: gzip compressed (despite `.compress` extension)
|
||
|
||
### 8.3 File Transfer
|
||
|
||
- Send key received from `ftinitupload`/`ftinitdownload` to server IP:port
|
||
- No escaping, nothing before/after
|
||
- Upload: send key then data
|
||
- Download: receive data from server
|
||
|
||
### 8.4 TSDNS
|
||
|
||
- Input → lowercase → UTF-8/CESU-8 → append `0x0A 0x0D 0x0D 0x0D 0x0A` → TCP to port 41144
|
||
- Returns IP or `404`
|
||
- `$PORT` = keep user's port
|
||
|
||
### 8.5 DNS Resolution Order
|
||
|
||
1. **SRV TS3:** `_ts3._udp.INPUT` — port overrides user input
|
||
2. **SRV TSDNS:** `_tsdns._tcp.DOMAIN`
|
||
3. **TSDNS:** Port 41144
|
||
4. **DNS:** AAAA, A records (CNAME implicit)
|
||
|
||
**First complete resolution wins. No fallback on connection failure.**
|
||
|
||
### 8.6 Blacklist (v1)
|
||
|
||
- UDP to `blacklist.teamspeak.com:17385`
|
||
- Send: `ip4:RESOLVED_IP`
|
||
- Response: `x,13371337133` where x = 0 (blacklisted), 1 (OK), 2 (greylisted)
|
||
- No response → connect anyway
|
||
|
||
### 8.7 Blacklist2 (v2, since 3.1.6)
|
||
|
||
- HTTPS POST to `blacklist2.teamspeak.com/check`
|
||
- Content-Type: `application/x-ts3blacklist`
|
||
- Protobuf-encoded `BlacklistInfoRequest` with: ip_address, domain_name, virtual_server_id, public_license_id, port, timestamp, valid_token_present, slots_ok
|
||
- Response: 8 bytes Protobuf with status_ip, status_domain, status_virtual_server_id, status_public_license_id (1=INVALID, 2=BLACKLISTED, 3=GREYLISTED, 4=NOT_LISTED)
|
||
|
||
**IPv6 canonicalization bug (3.1.6-3.1.7):** Missing blocks filled with `3030` instead of `0`. Fixed in 3.1.8-beta1.
|
||
|
||
### 8.8 Weblist (Server)
|
||
|
||
- UDP to `weblist.teamspeak.com:2010`
|
||
- Packet format: 1 byte version (always 1), 2 bytes sequence number, 1 byte type (1=key request, 2=data), payload
|
||
- Update cycle: request key → send data (key + port + slots + clients + flags + name)
|
||
- Server updates every 10 minutes, retries at 1.3s and 2s intervals
|
||
|
||
### 8.9 Badges
|
||
|
||
- Stored as GUIDs on server
|
||
- Binary list from `badges-content.teamspeak.com/list` (Protobuf format)
|
||
- Cached in `cache/badges`
|
||
- Refreshed every 24 hours
|
||
|
||
**Protobuf structure:**
|
||
1. BigNum: revision number
|
||
2. BigNum: Unix timestamp
|
||
3. For each badge: GUID, name, URL base, description, timestamp, unknown field (1-3)
|
||
|
||
---
|
||
|
||
## 9. Server Error Codes
|
||
|
||
**Complete error code list (from English page):**
|
||
|
||
| Hex | Dec | Message |
|
||
|---|---|---|
|
||
| 0x0000 | 0 | ok |
|
||
| 0x0001 | 1 | undefined error |
|
||
| 0x0002 | 2 | not implemented |
|
||
| 0x0100 | 256 | command not found |
|
||
| 0x0101 | 257 | unable to bind network port |
|
||
| 0x0200 | 512 | invalid clientID |
|
||
| 0x0201 | 513 | nickname is already in use |
|
||
| 0x0202 | 514 | invalid error code |
|
||
| 0x0203 | 515 | max clients protocol limit reached |
|
||
| 0x0204 | 516 | invalid client type |
|
||
| 0x0205 | 517 | already subscribed |
|
||
| 0x0206 | 518 | not logged in |
|
||
| 0x0207 | 519 | could not validate client identity |
|
||
| 0x0208 | 520 | invalid loginname or password |
|
||
| 0x0209 | 521 | too many clones already connected |
|
||
| 0x020a | 522 | client version outdated |
|
||
| 0x020b | 523 | client is online |
|
||
| 0x020c | 524 | client is flooding |
|
||
| 0x020d | 525 | client is modified |
|
||
| 0x020e | 526 | can not verify client at this moment |
|
||
| 0x020f | 527 | client is not permitted to log in |
|
||
| 0x0210 | 528 | client is not subscribed to the channel |
|
||
| 0x0300 | 768 | invalid channelID |
|
||
| 0x0301 | 769 | max channels protocol limit reached |
|
||
| 0x0302 | 770 | already member of channel |
|
||
| 0x0303 | 771 | channel name is already in use |
|
||
| 0x0304 | 772 | channel not empty |
|
||
| 0x0305 | 773 | can not delete default channel |
|
||
| 0x0306 | 774 | default channel requires permanent |
|
||
| 0x0307 | 775 | invalid channel flags |
|
||
| 0x0308 | 776 | permanent channel can not be child of non permanent channel |
|
||
| 0x0309 | 777 | channel maxclient reached |
|
||
| 0x030a | 778 | channel maxfamily reached |
|
||
| 0x030b | 779 | invalid channel order |
|
||
| 0x030c | 780 | channel does not support filetransfers |
|
||
| 0x030d | 781 | invalid channel password |
|
||
| 0x030e | 782 | channel is private channel |
|
||
| 0x030f | 783 | invalid security hash supplied by client |
|
||
| 0x0400 | 1024 | invalid serverID |
|
||
| 0x0401 | 1025 | server is running |
|
||
| 0x0402 | 1026 | server is shutting down |
|
||
| 0x0403 | 1027 | server maxclient reached |
|
||
| 0x0404 | 1028 | invalid server password |
|
||
| 0x0405 | 1029 | deployment active |
|
||
| 0x0406 | 1030 | unable to stop own server in your connection class |
|
||
| 0x0407 | 1031 | server is virtual |
|
||
| 0x0408 | 1032 | server wrong machineID |
|
||
| 0x0409 | 1033 | server is not running |
|
||
| 0x040a | 1034 | server is booting up |
|
||
| 0x040b | 1035 | server got an invalid status for this operation |
|
||
| 0x040c | 1036 | server modal quit |
|
||
| 0x040d | 1037 | server version is too old for command |
|
||
| 0x040e | 1038 | [to be completed] |
|
||
| 0x040f | 1039 | [to be completed] |
|
||
| 0x0410 | 1040 | server blacklisted |
|
||
| 0x0500 | 1280 | database error |
|
||
| 0x0501 | 1281 | database empty result set |
|
||
| 0x0502 | 1282 | database duplicate entry |
|
||
| 0x0503 | 1283 | database no modifications |
|
||
| 0x0504 | 1284 | database invalid constraint |
|
||
| 0x0505 | 1285 | database reinvoke command |
|
||
| 0x0600 | 1536 | invalid quote |
|
||
| 0x0601 | 1537 | invalid parameter count |
|
||
| 0x0602 | 1538 | invalid parameter |
|
||
| 0x0603 | 1539 | parameter not found |
|
||
| 0x0604 | 1540 | convert error |
|
||
| 0x0605 | 1541 | invalid parameter size |
|
||
| 0x0606 | 1542 | missing required parameter |
|
||
| 0x0607 | 1543 | invalid checksum |
|
||
| 0x0700 | 1792 | virtual server got a critical error |
|
||
| 0x0701 | 1793 | connection lost |
|
||
| 0x0702 | 1794 | not connected |
|
||
| 0x0703 | 1795 | no cached connection info |
|
||
| 0x0704 | 1796 | currently not possible |
|
||
| 0x0705 | 1797 | failed connection initialization |
|
||
| 0x0706 | 1798 | could not resolve hostname |
|
||
| 0x0707 | 1799 | invalid server connection handler ID |
|
||
| 0x0708 | 1800 | could not initialize Input Manager |
|
||
| 0x0709 | 1801 | client library not initialized |
|
||
| 0x070a | 1802 | server library not initialized |
|
||
| 0x070b | 1803 | too many whisper targets |
|
||
| 0x070c | 1804 | no whisper targets found |
|
||
| 0x0800 | 2048 | invalid file name |
|
||
| 0x0801 | 2049 | invalid file permissions |
|
||
| 0x0802 | 2050 | file already exists |
|
||
| 0x0803 | 2051 | file not found |
|
||
| 0x0804 | 2052 | file input/output error |
|
||
| 0x0805 | 2053 | invalid file transfer ID |
|
||
| 0x0806 | 2054 | invalid file path |
|
||
| 0x0807 | 2055 | no files available |
|
||
| 0x0808 | 2056 | overwrite excludes resume |
|
||
| 0x0809 | 2057 | invalid file size |
|
||
| 0x080a | 2058 | file already in use |
|
||
| 0x080b | 2059 | could not open file transfer connection |
|
||
| 0x080c | 2060 | no space left on device |
|
||
| 0x080d | 2061 | file exceeds file system's maximum file size |
|
||
| 0x080e | 2062 | file transfer connection timeout |
|
||
| 0x080f | 2063 | lost file transfer connection |
|
||
| 0x0810 | 2064 | file exceeds supplied file size |
|
||
| 0x0811 | 2065 | file transfer complete |
|
||
| 0x0812 | 2066 | file transfer canceled |
|
||
| 0x0813 | 2067 | file transfer interrupted |
|
||
| 0x0814 | 2068 | file transfer server quota exceeded |
|
||
| 0x0815 | 2069 | file transfer client quota exceeded |
|
||
| 0x0816 | 2070 | file transfer reset |
|
||
| 0x0817 | 2071 | file transfer limit reached |
|
||
| 0x0900 | 2304 | preprocessor disabled |
|
||
| 0x0901 | 2305 | internal preprocessor |
|
||
| 0x0902 | 2306 | internal encoder |
|
||
| 0x0903 | 2307 | internal playback |
|
||
| 0x0904 | 2308 | no capture device available |
|
||
| 0x0905 | 2309 | no playback device available |
|
||
| 0x0906 | 2310 | could not open capture device |
|
||
| 0x0907 | 2311 | could not open playback device |
|
||
| 0x0908 | 2312 | ServerConnectionHandler has a device registered |
|
||
| 0x0909 | 2313 | invalid capture device |
|
||
| 0x090a | 2314 | invalid playback device |
|
||
| 0x090b | 2315 | invalid wave file |
|
||
| 0x090c | 2316 | wave file type not supported |
|
||
| 0x090d | 2317 | could not open wave file |
|
||
| 0x090e | 2318 | internal capture |
|
||
| 0x090f | 2319 | device still in use |
|
||
| 0x0910 | 2320 | device already registered |
|
||
| 0x0911 | 2321 | device not registered/known |
|
||
| 0x0912 | 2322 | unsupported frequency |
|
||
| 0x0913 | 2323 | invalid channel count |
|
||
| 0x0a00 | 2560 | invalid group ID |
|
||
| 0x0a01 | 2561 | duplicate entry |
|
||
| 0x0a02 | 2562 | invalid permission ID |
|
||
| 0x0a03 | 2563 | empty result set |
|
||
| 0x0a04 | 2564 | access to default group is forbidden |
|
||
| 0x0a05 | 2565 | invalid size |
|
||
| 0x0a06 | 2566 | invalid value |
|
||
| 0x0a07 | 2567 | group is not empty |
|
||
| 0x0a08 | 2568 | insufficient client permissions |
|
||
| 0x0a09 | 2569 | insufficient group modify power |
|
||
| 0x0a0a | 2570 | insufficient permission modify power |
|
||
| 0x0a0b | 2571 | template group is currently used |
|
||
| 0x0a0c | 2572 | permission error |
|
||
| 0x0b00 | 2816 | virtualserver limit reached |
|
||
| 0x0b01 | 2817 | max slot limit reached |
|
||
| 0x0b02 | 2818 | license file not found |
|
||
| 0x0b03 | 2819 | license date not ok |
|
||
| 0x0b04 | 2820 | unable to connect to accounting server |
|
||
| 0x0b05 | 2821 | unknown accounting error |
|
||
| 0x0b06 | 2822 | accounting server error |
|
||
| 0x0b07 | 2823 | instance limit reached |
|
||
| 0x0b08 | 2824 | instance check error |
|
||
| 0x0b09 | 2825 | license file invalid |
|
||
| 0x0b0a | 2826 | virtualserver is running elsewhere |
|
||
| 0x0b0b | 2827 | virtualserver running in same instance already |
|
||
| 0x0b0c | 2828 | virtualserver already started |
|
||
| 0x0b0d | 2829 | virtualserver not started |
|
||
| 0x0b0e | 2830 | [to be completed] |
|
||
| 0x0c00 | 3072 | invalid message id |
|
||
| 0x0d00 | 3328 | invalid ban id |
|
||
| 0x0d01 | 3329 | connection failed, you are banned |
|
||
| 0x0d02 | 3330 | rename failed, new name is banned |
|
||
| 0x0d03 | 3331 | flood ban |
|
||
| 0x0e00 | 3584 | unable to initialize tts |
|
||
| 0x0f00 | 3840 | invalid privilege key |
|
||
| 0x1000 | 4096 | VoIP pjsua error |
|
||
| 0x1001 | 4097 | [to be completed] |
|
||
| 0x1002 | 4098 | [to be completed] |
|
||
| 0x1003 | 4099 | [to be completed] |
|
||
| 0x1004 | 4100 | [to be completed] |
|
||
| 0x1005 | 4101 | [to be completed] |
|
||
| 0x1006 | 4102 | [to be completed] |
|
||
| 0x1007 | 4103 | [to be completed] |
|
||
| 0x1100 | 4352 | provisioning invalid password |
|
||
| 0x1101 | 4353 | provisioning invalid request |
|
||
| 0x1102 | 4354 | no (more) slots available |
|
||
| 0x1103 | 4355 | pool missing |
|
||
| 0x1104 | 4356 | pool unknown |
|
||
| 0x1105 | 4357 | unknown ip location |
|
||
| 0x1106 | 4358 | internal error (tries exceeded) |
|
||
| 0x1107 | 4359 | too many slots requested |
|
||
| 0x1108 | 4360 | too many reserved |
|
||
| 0x1109 | 4361 | could not connect to provisioning server |
|
||
| 0x1110 | 4368 | authentication server not connected |
|
||
| 0x1111 | 4369 | authentication data too large |
|
||
| 0x1112 | 4370 | already initialized |
|
||
| 0x1113 | 4371 | not initialized |
|
||
| 0x1114 | 4372 | already connecting |
|
||
| 0x1115 | 4373 | already connected |
|
||
| 0x1116 | 4374 | not connected |
|
||
| 0x1117 | 4375 | io_error |
|
||
| 0x1118 | 4376 | invalid timeout |
|
||
| 0x1119 | 4377 | ts3server not found |
|
||
| 0x111A | 4378 | unknown permissionID |
|
||
|
||
---
|
||
|
||
## 10. Permission IDs
|
||
|
||
**Source:** https://yat.qa/resources/permission-ids/ (English)
|
||
|
||
> See ReSpeak/tsdeclarations/Permissions.csv for the complete machine-readable list.
|
||
|
||
---
|
||
|
||
## 11. Client Versions
|
||
|
||
**Source:** https://yat.qa/resources/client-versions/ (English)
|
||
|
||
> See ReSpeak/tsdeclarations/Versions.csv for the complete machine-readable list with version hashes.
|
||
|
||
---
|
||
|
||
## 12. Badges
|
||
|
||
**Source:** https://yat.qa/ressourcen/abzeichen-badges/ (German)
|
||
|
||
> See ReSpeak/tsdeclarations/Badges.csv for the complete machine-readable list.
|
||
|
||
---
|
||
|
||
*Fetched and compiled on 2026-06-11*
|
||
|
||
---
|
||
|
||
## 13. Error Code Cross-Reference (YaTQA vs ReSpeak)
|
||
|
||
This section cross-references error codes between the YaTQA reference (Section 9) and the ReSpeak/tsdeclarations reference (`docs/references/respeak-protocol-reference.md` Section 2).
|
||
|
||
### Discrepancies and Observations
|
||
|
||
| Hex | YaTQA Message | ReSpeak Name | ReSpeak Doc | Discrepancy |
|
||
|---|---|---|---|---|
|
||
| 0x0003 | — (not listed) | `ok_no_update` | *(empty)* | **YaTQA omits** this code entirely. ReSpeak includes it. |
|
||
| 0x0004 | — (not listed) | `dont_notify` | *(empty)* | **YaTQA omits** this code. ReSpeak includes it. |
|
||
| 0x0005 | — (not listed) | `lib_time_limit_reached` | library time limit reached | **YaTQA omits** this code. ReSpeak includes it. |
|
||
| 0x0102 | — (not listed) | `no_network_port_available` | no network port available | **YaTQA omits** this code. ReSpeak includes it. |
|
||
| 0x040e | [to be completed] | *(not listed)* | — | **ReSpeak omits** codes 0x040e–0x040f. YaTQA has placeholders. |
|
||
| 0x040f | [to be completed] | *(not listed)* | — | **ReSpeak omits**. YaTQA has placeholders. |
|
||
| 0x0b0e | [to be completed] | `accounting_to_many_starts` | *(empty)* | **ReSpeak name** has typo "ToMany" → `to_many_starts`. YaTQA has placeholder. |
|
||
| 0x0914 | — (not listed) | `sound_read_wave` | read error in wave | **YaTQA omits** this and subsequent sound codes. |
|
||
| 0x0915 | — (not listed) | `sound_need_more_data` | there is no sound data for this period | **YaTQA omits**. |
|
||
| 0x0916 | — (not listed) | `sound_device_busy` | sound device was busy | **YaTQA omits**. |
|
||
| 0x0917 | — (not listed) | `sound_no_data` | there is no sound data for this period | **YaTQA omits**. |
|
||
| 0x0918 | — (not listed) | `sound_channel_mask_mismatch` | Channelmask mismatch | **YaTQA omits**. Last YaTQA sound code is 0x0913. |
|
||
| 0x1116 | not connected | `provisioning_not_connected` | *(empty)* | YaTQA has message; ReSpeak doc field is empty. |
|
||
| 0x1119 | ts3server not found | `provisioning_ts3server_not_found` | *(empty)* | Both present, ReSpeak doc empty. |
|
||
| 0x111A | unknown permissionID | `provisioning_no_permission` | unknown permissionID | **Name differs**: YaTQA doesn't have a name column; ReSpeak names it `provisioning_no_permission`. |
|
||
|
||
### Coverage Summary
|
||
|
||
| Range | YaTQA Codes | ReSpeak Codes | Notes |
|
||
|---|---|---|---|
|
||
| 0x0000–0x0005 | 3 (0,1,2) | 6 (0–5) | ReSpeak has 3 additional success/info codes |
|
||
| 0x0100–0x0102 | 2 | 3 | ReSpeak adds `no_network_port_available` |
|
||
| 0x0200–0x0210 | 17 | 17 | **Aligned** |
|
||
| 0x0300–0x030f | 16 | 16 | **Aligned** |
|
||
| 0x0400–0x0410 | 16+2 placeholders | 14 | YaTQA has 2 codes (0x040e, 0x040f) ReSpeak omits; ReSpeak omits 0x040e–0x040f |
|
||
| 0x0500–0x0505 | 6 | 6 | **Aligned** |
|
||
| 0x0600–0x0607 | 8 | 8 | **Aligned** |
|
||
| 0x0700–0x070c | 13 | 13 | **Aligned** |
|
||
| 0x0800–0x0817 | 24 | 24 | **Aligned** |
|
||
| 0x0900–0x0918 | 20 (YaTQA: 20 stops at 0x0913) | 25 | ReSpeak has 5 additional sound codes (0x0914–0x0918) |
|
||
| 0x0a00–0x0a0c | 13 | 13 | **Aligned** |
|
||
| 0x0b00–0x0b0e | 14+1 placeholder | 15 | Mostly aligned; 0x0b0e has placeholder in YaTQA |
|
||
| 0x0c00 | 1 | 1 | **Aligned** |
|
||
| 0x0d00–0x0d03 | 4 | 4 | **Aligned** |
|
||
| 0x0e00 | 1 | 1 | **Aligned** |
|
||
| 0x0f00 | 1 | 1 | **Aligned** |
|
||
| 0x1000–0x1007 | 1+7 placeholders | 8 | YaTQA has 7 `[to be completed]`; ReSpeak has names for all |
|
||
| 0x1100–0x111A | 27 | 27 | **Aligned** |
|
||
|
||
### Recommendations for Chanora
|
||
|
||
- Use ReSpeak `Errors.csv` as the **primary** error code source (machine-readable, complete)
|
||
- Use YaTQA descriptions as **supplementary** documentation (German-source detail)
|
||
- Handle codes 0x0003–0x0005 as success/info variants, not errors
|
||
- Map unknown/placeholder codes (0x040e, 0x040f, 0x0b0e, 0x1001–0x1007) to a generic "unknown server error" category in Chanora's protocol error normalization (SRS-048)
|