This commit is contained in:
sansen
2026-07-23 21:03:35 +08:00
parent 53f286e407
commit d961c9ec2d
1094 changed files with 180 additions and 151809 deletions
Binary file not shown.
File diff suppressed because it is too large Load Diff
-261
View File
@@ -1,261 +0,0 @@
=============================================================
TeamSpeak - Software Development Kit Changelog
Copyright TeamSpeak Systems GmbH
http://www.teamspeak.com
=============================================================
+ Added feature or noticable improvement
- Bug fix or something removed
* Changed or Information
! Important - Take note!
=============================================================
=== SDK Release 3.5.2 17 Jun 2026
* Improved connection stability under packet loss
- Client(Windows): fixed an occasional crash on shutdown
- Client(Windows): fixed rare crash on device format change
=== SDK Release 3.5.1 03 Jun 2026
* Maintenance release with minor internal improvements
=== SDK Release 3.5.0 27 May 2026
! Server: CVE-2026-4390
Use-After-Free via Inconsistent Connection State Management Leading to Denial-of-Service:
A vulnerability in connection state handling could allow authenticated remote attackers
to trigger denial-of-service conditions, potentially resulting in service instability
or server restarts.
! Server: CVE-2026-4392
Assertion Failure Triggered by Crafted Input Leading to Denial-of-Service:
A vulnerability in input validation could allow unauthenticated remote attackers to
trigger denial-of-service conditions, including service instability or server restarts.
! Server: ts3server_initServerLib signature changed
! Client: struct ClientUIFunctions layout changed
Please always update the headers alongside the binaries
* iOS Soundbackend is now built into the client library, no separate framework required
=== SDK Release 3.4.0 20 Mar 2024
+ Apple: The server library is now available for arm64 and distributed as an xcframework
* Apple: xcframework packages have been updated to include modulemaps. This enables the
use of @import TS3Client/TS3Server statements for automatic header file inclusion,
simplifying Swift integration
- Fixed a crash occurring on arm Macs after initializing the client library
+ Modification in client and server libraries to ensure interoperability between
accounting versions 1 and 2 (known as key and key2 respectively).
This supports a smoother transitions to newer SDKs.
=== SDK Release 3.3.1 02 Feb 2023
* Adjustments for Mac App Store compliance
* Frameworks Folder is now a tar.gz inside the zip due to issues with other platforms
(Path length on windows, Symlinks)
* Linux: The binaries of this release are built against glibc 2.31
* Apple: In addition to the xcframework, dylibs are provided for macOS
=== SDK Release 3.3.0 02 Nov 2022
! On any target except iOS the client library contains a default sound backend
-> From your deployment please remove:
coreaudio_soundbackend.dylib on MacOS
windows_audio_session_[platform].dll on Windows
libpulseaudio[platform].so on Linux
opensles.so on Android
as those are now built-in.
Please note:
On Android it's still recommended to use the Java (Kotlin) SB.
Non-default external sound backends can still be deployed if desired, like:
Alsa on Linux, DirectSound on Windows
* Updated System requirement: iOS 11
- Removed armv7 on iOS
* Restored Mac and iOS compatibility with latest Apple App Store requirements
! Added native support for Apple Silicon
+ Apple: Client library is now distributed as xcframework
+ iOS: Sound backend is now distributed as xcframework
* Fixed an issue with licenses
* To kickstart testing, prebuilt samples are included for select platforms
=== SDK Release 3.2.0 05 Nov 2021
! getCaptureDeviceList and getPlaybackDeviceList have slightly changed
on windows. Please have a look at the documentation if you use those
functions
+ Added Win32 server
+ Added 32bit examples
- Fixed issues with zero playback or capture devices
- Fixed issue with Airpods on MacOS
- Fixed client bug hard limiting client count
- Various internal updates
=== SDK Release 3.1.1.0 14 Jan 2021
+ For iOS, there's now a xcframework provided
- Fixed linking of samples
- Fixed an issue with Android soundbackend
- Fixed a rare issue where connect would take a break at
ConnectStatus::Establishing
- Android Timber dependency removed
=== SDK Release 3.1.0.0 31 Aug 2020
! Minimum Versions increased:
Windows to Windows 7
Android to Lollipop (5.0, API Level 21)
iOS to 11.0
! Mac OS and FreeBSD Server have been removed, it is adviced to use docker to
run it on these platforms
! Linux x86 server has been removed, it is recommended to use the arm64 version
! AGC is now on playback
! iOS and MacOS client libraries are now delivered as frameworks for improved
convenience
! If you already have an sdk license issued before 2018, you need to contact
sales at bizdev@teamspeak.com to upgrade your license in order for it to work reliably on this SDK
+ Added Armv7, Armv8 client and server on Linux
+ New audio dsp algorithms for Automatic Gain Control, Comfort Noise, Denoiser
and Echo Cancellation
+ Added Echo Reduction Ducker and Typing Suppression algorithms
+ Client SDK: onEditCapturedVoiceDataPreprocessEvent
+ Client SDK: TEST_MODE_TALK_STATUS_CHANGES_ONLY to LocalTestMode enumeration
+ Client SDK: getWhisperReceiveWhitelist, isWhisperReceiveWhitelisted,
setWhisperReceiveWhitelist
+ Client SDK: setKeyPressedDuringChunk, getGlobalConfigValueAsInt,
setGlobalConfigValue
+ ChannelProperties: CHANNEL_UNIQUE_IDENTIFIER
* Client SDK: requestClientMove, requestClientKickFromChannel,
requestClientKickFromServer now take an array of client IDs
* Client SDK: requestServerVariables now accepts a return code
=== SDK Release 3.0.4.4 30 May 2018
+ Added Android and iOS soundbackends
System requirements: iOS 10 or later, Android 4.1 or later
+ Android got two soundbackends to choose from:
1) OpenSL ES C++ based (see examples/client_android), which is delivered as a native shared library.
2) AudioRecord Java based (see examples/client_android_javasound), which is delivered as Kotlin source code.
+ Added samples to demonstrate mobile soundbackends
* Updated Android JNI wrapper, new function ts3client_android_initJni to initialize the TeamSpeak
native library in one step
=== SDK Release 3.0.4 27 Feb 2016
+ Added IPv6 support
+ Added ts3client_startConnectionWithChannelID to clientlib to allow specifying the default channel
as ID
+ Added get/set channel/client variables as uint64 to serverlib
+ Added 64 bit platform support for android
+ Added a new server API call "ts3server_createVirtualServer2" that will create one virtual server
with all the required channels configured in one call. See the documentation for more details,
and our new server_creation_params example
+ Added new logtarget LogType_SYSLOG. Does not work on Windows. Logs to system syslog facility.
+ Added TEST_MODE_VOICE_LOCAL_AND_REMOTE status for ts3client_setLocalTestMode. In this mode, the
client hears both its own input, and the sound of remote clients.
* public_errors.h now defines the error codes as enums, instead of const unsigned int, to make it
easier to include this file in c projects
* Reimplemented file transfer code
* ts3client_getTransferFilePath and ts3client_getTransferFileRemotePath do now not return a
trailing '/' character
! Starting this release we have a new directory structure. For all platforms the shared libraries
(dll/so/dylib) are in bin directry, and static libraries (.lib/.a) are in lib directory
! Starting this release we have dropped the platform suffix for the ts3client and ts3server
libraries. For example ts3client_win32.dll and ts3client_win64.dll are now both called
ts3client.dll and are located in different directories
! 3.0.4 will be the last sdk supporting windows xp
- Lots of other internal improvements that came from TeamSpeak 3.1 client and 3.0.13 server
=== SDK Release 3.0.3.2 29 Jun 2015
- Fixed issue with offline licenses
- Fixed utf8 conversion issues with invalid utf8 strings
- Fixed windows audio session backend error reporting issues
=== SDK Release 3.0.3.1 24 Apr 2015
! Fixed critical bug causing SDK license not being accepted
- Fixed missing build number on FreeBSD server
=== SDK Release 3.0.3 30 Mar 2015
! Callbacks in the client are now asynchronous
+ Added Opus voice codec
+ Added SecuritySalt/SecurityHash mechanism. Note this makes 3.0.3 and 3.0.2
clients/servers incompatible.
+ Server can disable selected client commands
+ Added callbacks for lots of server function to enable custom permissions
+ Added custom password checks.
+ Added new CHANNEL_DELETE_DELAY param for server side channel creation
+ Added filetransfer support
+ Mobile SDKs (Android, iOS) are now included in the TeamSpeak SDK package
+ Android: Added x86 support
+ iOS: Added armv7s and arm64 to device and x86_64 to simulator
+ iOS: Changed std lib from libstdc++ to libc++
* Updated example projects to Visual Studio 2013
=== SDK Release 3.0.2 15 May 2012
+ Added function calls for communication with a provisioning server, which is
only available in special scenarios on request
- onUpdateClientEvent callback now passes an invoker block for the cases where
a client was updated by somebody else than himself
- numerous bug fixes and performance improvements
=== SDK Release 3.0.1 14 Sep 2011
+ Update Client Example to include recording of playback data to *.wav file.
- Fix bug that led to the channelSpeakerArray in audio callbacks to contain
the wrong value
- Fix bug that could lead to client crashes in channels with a
latency_factor of 2 or higher
=== SDK Release 3.0.0 05 Aug 2011
! New sound system added. The fmod libraries needed previously are no longer
required to be deployed. Instead the client side now requires a
"soundbackends" folder with a few platform dependent sound backends.
! The ts3client_initClientLib function now requires an additional parameter: A
path where to find the "soundbackends" folder.
! The 3.0.0 SDK server requires 3.0.0 SDK clients, and vice versa. You should
not mix older (-betaX) builds with 3.0.0 or higher builds.
* Most sound related function calls have changed, since the "modeID" now a
string instead of an integer
* Voice data packet encryption is now configurable to save CPU on huge servers,
see the "VIRTUALSERVER_CODEC_ENCRYPTION_MODE" setting to set it.
* Reduced CPU usage on the server side, especially for large servers
* requestChannel(Un)subscribe now takes an array of {client,channel}IDs instead
of only one ID.
+ Added callbacks that allow you to view and change sound data as it passes
through the playback and capture chain. This allows great flexibility:
Recording Audio at various stages, applying sound effects or filters are just
some of the new possibilities.
+ Echo cancellation added
+ Added "CustomDevice" functions that allow you to implement capture and
playback your own way, you will need to feed in audio (capture) and retrieve
audio (playback) regularly. See new custom device example for details.
+ Added ability to playback wave files
- numerous bug fixes and performance improvements
=== SDK Release 3.0.0-beta6 02 Jul 2010
- Fix bug in sdk server that had disabled the talk status callbacks
- Fix bug that lead to some normal channel based chatting not reaching all
clients in the channel
=== SDK Release 3.0.0-beta5 10 Jun 2010
! The beta5 sdk server requires beta5 sdk clients, and the beta5 sdk client
requires a beta5 sdk server. You should not mix older sdk builds with beta5
builds.
- Greatly improved the whispering code. It is now possible to whisper to
clients that do not have you in view. Also note that you need to explicitly
allow any incoming whispers, use the new allowWhispersFrom function (possibly
from within the onIgnoredWhisperEvent callback)
- onTalkStatusChangeEvent now has a isReceivedWhisper parameter telling you if
this is a whisper message or regular non whisper communication.
- Channel Codec now has an additional parameter, the codec latency factor. The
default is 1, which results in the same behavior as pre beta5. Higher values
lead to less voice packets sent per second meaning higher delay but less
bandwidth usage.
- server side onTextMessageEvent callback split into two callbacks, one for
messages to the server, one for messages to a channel
- numerous bug fixes and performance improvements
!skipped beta4
=== SDK Release 3.0.0-beta3 27 Jan 2010
! The beta3 sdk server requires beta3 sdk clients, you cannot connect to a new
beta3 sdk server with an older sdk client.
! Switched channelIDs, logIDs, serverIDs, serverConnectionHandlerIDs, banIDs,
offlineMessageIDs from anyID to uint64
* changed parameters of onTextMessageEvent
+ added new onServerProtocolEvent callback that triggers uppon connect telling
you which protocol version the server is running
- numerous bug fixes and performance improvements
=== SDK Release 3.0.0-beta2 20 Dec 2009
* CLIENT_OUTPUT_MUTED will now mute both speakers and microphone, if really
want to mute the headphones only, use the new CLIENT_OUTPUTONLY_MUTED flag
=== SDK Release 3.0.0-beta1 19 Dec 2009
* Initial beta release
@@ -1,23 +0,0 @@
#ifndef TEAMLOG_LOGTYPES_H
#define TEAMLOG_LOGTYPES_H
enum LogTypes {
LogType_NONE = 0x0000, ///< Logging is disabled
LogType_FILE = 0x0001, ///< Log to regular log file
LogType_CONSOLE = 0x0002, ///< Log to standard output / error
LogType_USERLOGGING = 0x0004, ///< User defined logging. Will call the \ref ServerLibFunctions.onUserLoggingMessageEvent callback for every message to be logged
LogType_NO_NETLOGGING = 0x0008, ///< Not used
LogType_DATABASE = 0x0010, ///< Log to database (deprecated, server only, no effect in SDK)
LogType_SYSLOG = 0x0020, ///< Log to syslog (only available on Linux)
};
enum LogLevel {
LogLevel_CRITICAL = 0, ///< these messages stop the program
LogLevel_ERROR, ///< everything that is really bad, but not so bad we need to shut down
LogLevel_WARNING, ///< everything that *might* be bad
LogLevel_DEBUG, ///< output that might help find a problem
LogLevel_INFO, ///< informational output, like "starting database version x.y.z"
LogLevel_DEVEL ///< developer only output (will not be displayed in release mode)
};
#endif //TEAMLOG_LOGTYPES_H
@@ -1,58 +0,0 @@
#ifndef CLIENTLIB_SDK_H
#define CLIENTLIB_SDK_H
// system
#include <stdlib.h>
// own
#include "teamspeak/public_definitions.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Sets the client to which to transmit voice. Stops standard channel voice transmission.
*
* The client will still receive voice from their current channel, however their voice will not be transmitted to their
* current channel anymore. If this call is successful (check onServerErrorEvent) then voice of the specified client
* will be transmitted to all specified channels and all the specified clients. Pass 0 to both target parameter arrays
* to restore default behavior of transmitting voice to current channel. You will receive an onServerErrorEvent with the
* passed returnCode indicating whether or not the operation was successful.
*
* @param server_connection_handler_id the connection handler on which to set the whisper list
* @param client_id the client to set the whisper list for. Set to 0 or your own client ID to set your own whisper list.
* @param channel_ids an array of channel ids to transmit voice to.
* @param channel_ids_size number of elements in aforementioned array.
* @param client_ids a zero terminated array of client ids to transmit voice to.
* @param client_ids_size number of elements in aforementioned array.
* @param impersonate if the target client is a webrtc client, the voice packets will look like as if they have been
* send by the invoking client id
* @param return_code a c string to identify this request in callbacks. Pass an empty string if unused.
* @return An error code from the @ref Ts3ErrorType enum indicating either success or the failure reason
*/
EXPORTDLL unsigned int ts_client_request_client_set_whisper_list(uint64 server_connection_handler_id, anyID client_id,
const uint64* channel_ids,
int channel_ids_size,
const anyID* client_ids,
int client_ids_size, int impersonate,
const char* return_code);
/**
* @brief Send a binary-serialized ClientCommandRequest protobuf to the client library.
*
* The response will be delivered asynchronously via the onProtoResponse callback
* as a serialized ClientCommandResponse protobuf.
*
* @param data Pointer to serialized ClientCommandRequest protobuf bytes
* @param size Size of the serialized data in bytes
* @param return_code Caller-provided string to correlate the response in onProtoResponse. May be NULL.
* @return An error code: ERROR_ok on successful dispatch, ERROR_parameter_invalid on parse failure
*/
EXPORTDLL unsigned int ts3client_postProtoCommand(const void* data, size_t size, const char* return_code);
#ifdef __cplusplus
}
#endif
#endif // CLIENTLIB_SDK_H
@@ -1,635 +0,0 @@
#ifndef PUBLIC_DEFINITIONS_H
#define PUBLIC_DEFINITIONS_H
#include "teamlog/logtypes.h"
#define TS3_MAX_SIZE_CHANNEL_NAME 40 // channel name maximum length in characters
#define TS3_MAX_SIZE_VIRTUALSERVER_NAME 64 // virtual server name maximum length in characters
#define TS3_MAX_SIZE_CLIENT_NICKNAME 64 // client display name length limit in characters
#define TS3_MIN_SIZE_CLIENT_NICKNAME 3 // client display name minimum length in characters
#define TS3_MAX_SIZE_REASON_MESSAGE 80 // length limit in characters for kick, move, etc reasons
#define TS3_MAX_SIZE_TEXTMESSAGE 8192 // text message length limit, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_TOPIC 255 // channel topic lengt limith, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_DESCRIPTION 8192 // channel description length limit, measured in bytes (utf8 encoded)
// server welcome message length limit measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_VIRTUALSERVER_WELCOMEMESSAGE 1024
#define TS3_SIZE_MYTSID 44
// minimum amount of seconds before a clientID that was in use can be assigned to a new client
#define TS3_MIN_SECONDS_CLIENTID_REUSE 300
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32)
typedef unsigned __int16 anyID;
typedef unsigned __int64 uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __declspec(dllexport)
#else
#define EXPORTDLL
#endif
#endif
#else
#include <stdint.h>
typedef uint16_t anyID;
typedef uint64_t uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __attribute__((visibility("default")))
#else
#define EXPORTDLL
#endif
#endif
#endif
enum Visibility
{
ENTER_VISIBILITY = 0, ///< Client joined from an unsubscribed channel, or joined the server.
RETAIN_VISIBILITY, ///< Client switched from one subscribed channel to a different subscribed channel.
LEAVE_VISIBILITY ///< Client switches to an unsubscribed channel, or disconnected from server.
};
enum ConnectStatus
{
STATUS_DISCONNECTED = 0, ///< There is no activity to the server, this is the default value
STATUS_CONNECTING, ///< We are trying to connect, we haven't got a client id yet, we haven't been accepted by the server
STATUS_CONNECTED, ///< The server has accepted us, we can talk and hear and we have a client id, but we don't
///< have the channels and clients yet, we can get server infos (welcome msg etc.)
STATUS_CONNECTION_ESTABLISHING, ///< we are connected and we are visible
STATUS_CONNECTION_ESTABLISHED, ///< we are connected and we have the client and channels available
};
enum LocalTestMode
{
TEST_MODE_OFF = 0,
TEST_MODE_VOICE_LOCAL_ONLY,
TEST_MODE_VOICE_LOCAL_AND_REMOTE,
TEST_MODE_TALK_STATUS_CHANGES_ONLY
};
enum TalkStatus
{
STATUS_NOT_TALKING = 0, ///< client is not talking
STATUS_TALKING = 1, ///< client is talking
STATUS_TALKING_WHILE_DISABLED = 2, ///< client is talking while the microphone is muted (only valid for own client)
};
enum CodecType
{
CODEC_SPEEX_NARROWBAND = 0, ///< (deprecated) mono, 16bit, 8kHz, bitrate dependent on the quality setting
CODEC_SPEEX_WIDEBAND, ///< (deprecated) mono, 16bit, 16kHz, bitrate dependent on the quality setting
CODEC_SPEEX_ULTRAWIDEBAND, ///< (deprecated) mono, 16bit, 32kHz, bitrate dependent on the quality setting
CODEC_CELT_MONO, ///< (deprecated) mono, 16bit, 48kHz, bitrate dependent on the quality setting
CODEC_OPUS_VOICE, ///< mono, 16bit, 48khz, bitrate dependent on the quality setting, optimized for voice
CODEC_OPUS_MUSIC, ///< stereo, 16bit, 48khz, bitrate dependent on the quality setting, optimized for music
};
enum CodecEncryptionMode
{
CODEC_ENCRYPTION_PER_CHANNEL = 0, ///< voice data encryption decided per channel
CODEC_ENCRYPTION_FORCED_OFF, ///< voice data encryption disabled
CODEC_ENCRYPTION_FORCED_ON, ///< voice data encryption enabled
};
enum TextMessageTargetMode
{
TextMessageTarget_CLIENT = 1, ///< Message is a private message to another client
TextMessageTarget_CHANNEL, ///< Message is sent to a channel, received by all clients in that channel at the time
TextMessageTarget_SERVER, ///< Message is sent to every client on the server
TextMessageTarget_MAX
};
enum MuteInputStatus
{
MUTEINPUT_NONE = 0, ///< Microphone is not muted, audio is sent to the server
MUTEINPUT_MUTED, ///< Microphone is muted, no audio is transmitted to the server
};
enum MuteOutputStatus
{
MUTEOUTPUT_NONE = 0, ///< Speaker is active, server is sending us audio
MUTEOUTPUT_MUTED, ///< Speaker is muted, server is not sending audio to us
};
enum HardwareInputStatus
{
HARDWAREINPUT_DISABLED = 0, ///< no capture device opened
HARDWAREINPUT_ENABLED, ///< capture device open
};
enum HardwareOutputStatus
{
HARDWAREOUTPUT_DISABLED = 0, ///< no playback device opened
HARDWAREOUTPUT_ENABLED, ///< playback device open
};
enum InputDeactivationStatus
{
INPUT_ACTIVE = 0, ///< Audio is captured from the capture device.
INPUT_DEACTIVATED = 1, ///< No audio is captured from the capture device.
};
enum ReasonIdentifier
{
REASON_NONE = 0, ///< no reason data
REASON_MOVED = 1, ///< client was moved
REASON_SUBSCRIPTION = 2, // no reason data
REASON_LOST_CONNECTION = 3, // reasonmsg=reason
REASON_KICK_CHANNEL = 4, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER = 5, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER_BAN = 6, //{SectionInvoker} reasonmsg=reason bantime=time //{SectionInvoker} is only added server->client
REASON_SERVERSTOP = 7, // reasonmsg=reason
REASON_CLIENTDISCONNECT = 8, // reasonmsg=reason
REASON_CHANNELUPDATE = 9, // no reason data
REASON_CHANNELEDIT = 10, //{SectionInvoker}
REASON_CLIENTDISCONNECT_SERVER_SHUTDOWN = 11, // reasonmsg=reason
};
enum Protocol_Encryption_Cipher
{
AES_128 = 0b00000000,
AES_256 = 0b00000001,
PROTOCOL_ENCRYPTION_CIPHER_END_MARKER,
RESERVED = 0b00010000, // reserved until puzzle v2 is fully released, then can be reused
PUZZLE_2 = 0b00100000,
};
enum ChannelProperties
{
CHANNEL_NAME = 0, ///< String. Read/Write. Name of the channel. Always available.
CHANNEL_TOPIC, ///< String. Read/Write. Short single line text describing what the channel is about. Always available.
CHANNEL_DESCRIPTION, ///< String. Read/Write. Arbitrary text (up to 8k bytes) with information about the channel.
///< Must be requested (\ref ts3client_requestChannelDescription)
CHANNEL_PASSWORD, ///< String. Read/Write. Password of the channel. Read access is limited to the server. Clients
///< will only ever see the last password they attempted to use when joining the channel. Always available.
CHANNEL_CODEC, ///< Integer. Read/Write. The codec this channel is using. One of the values from the \ref CodecType
///< enum. Always available.
CHANNEL_CODEC_QUALITY, ///< Integer. Read/Write. The quality setting of the channel. Valid values are 0 to 10 inclusive.
///< Higher value means better voice quality but also more bandwidth usage. Always available.
CHANNEL_MAXCLIENTS, ///< Integer. Read/Write. The number of clients that can be in the channel simultaneously.
///< Always available.
CHANNEL_MAXFAMILYCLIENTS, ///< Integer. Read/Write. The total number of clients that can be in this channel and all
///< sub channels of this channel. Always available.
CHANNEL_ORDER, ///< UInt64. Read/Write. The ID of the channel below which this channel should be displayed. If 0
///< the channel is sorted at the top of the current level. Always available.
CHANNEL_FLAG_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when empty.
///< Permanent channels are stored to the database and available after server restart. SDK
///< users will need to take care of restoring channel at server start on their own.
///< Mutually exclusive with \ref CHANNEL_FLAG_SEMI_PERMANENT. Always available.
CHANNEL_FLAG_SEMI_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when
///< empty. Semi permanent channels are not stored to disk and gone after server
///< restart but remain while empty. Mutually exclusive with \ref
///< CHANNEL_FLAG_PERMANENT. Always available.
CHANNEL_FLAG_DEFAULT, ///< Integer. Read/Write. Boolean (1/0). The default channel is the channel that all clients
///< are located in when they join the server, unless the client explicitly specified a
///< different channel when connecting and is allowed to join their preferred channel. Only
///< one channel on the server can have this flag set. The default channel must have \ref
///< CHANNEL_FLAG_PERMANENT set. Always available.
CHANNEL_FLAG_PASSWORD, ///< Integer. Read/Write. Boolean (1/0) indicating whether this channel is password protected.
///< When removing or setting \ref CHANNEL_PASSWORD you also need to adjust this flag.
CHANNEL_CODEC_LATENCY_FACTOR, ///< (deprecated) Integer. Read/Write. Allows to increase packet size, reducing
///< bandwith at the cost of higher latency of voice transmission. Valid values are
///< 1-10 inclusive. 1 is the default and offers the lowest latency. Always available.
CHANNEL_CODEC_IS_UNENCRYPTED, ///< Integer. Read/Write. Boolean (1/0). If 0 voice data is encrypted, if 1 the voice
///< data is not encrypted. Only used if the server \ref
///< VIRTUALSERVER_CODEC_ENCRYPTION_MODE is set to \ref CODEC_ENCRYPTION_PER_CHANNEL.
///< Always available.
CHANNEL_SECURITY_SALT, ///< String. Read/Write. SDK Only, not used by TeamSpeak. This channels security hash. When
///< a client joins their \ref CLIENT_SECURITY_HASH is compared to this value, to allow or
///< deny the client access to the channel. Used to enforce clients joining the server with
///< specific identity and \ref CLIENT_META_DATA. See SDK Documentation about this feature
///< for further details. Always available.
CHANNEL_DELETE_DELAY, ///< UInt64. Read/Write. Number of seconds deletion of temporary channels is delayed after
///< the last client leaves the channel. Channel is only deleted if empty when the delete
///< delay expired. Always available.
CHANNEL_UNIQUE_IDENTIFIER, ///< String. Read only. An identifier that uniquely identifies a channel. Available in
///< Server >= 3.10.0
CHANNEL_ENDMARKER,
};
enum ClientProperties
{
CLIENT_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Public Identity, can be used to identify a client
///< installation. Remains identical as long as the client keeps using the same
///< identity. Available for visible clients.
CLIENT_NICKNAME, ///< String. Read/Write. Display name of the client. Available for visible clients.
CLIENT_VERSION, ///< String. Read only. Version String of the client used. For clients other than ourself this
///< needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_PLATFORM, ///< String. Read only. Operating system used by the client. For other clients other than ourself
///< this needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_FLAG_TALKING, ///< Integer. Read only. Whether the client is talking. Available on clients that are either
///< whispering to us, or in our channel.
CLIENT_INPUT_MUTED, ///< Integer. Read/Write. Microphone mute status. Available for visible clients. One of the
///< values from the \ref MuteInputStatus enum.
CLIENT_OUTPUT_MUTED, ///< Integer. Read/Write. Speaker mute status. Speaker mute implies microphone mute. Available
///< for visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_OUTPUTONLY_MUTED, ///< Integer. Read/Write. Speaker mute status. Microphone may be active. Available for
///< visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_INPUT_HARDWARE, ///< Integer. Read only. Indicates whether a capture device is open. Available for visible
///< clients. One of the values from the \ref HardwareInputStatus enum.
CLIENT_OUTPUT_HARDWARE, ///< Integer. Read only. Indicates whether a playback device is open. Available for visible
///< clients. One of the values from the \ref HardwareOutputStatus enum.
CLIENT_INPUT_DEACTIVATED, ///< Integer. Read/Write. Not available server side. Local microphone mute status.
///< Available only for own client. Used to implement Push To Talk. One of the values from
///< the \ref InputDeactivationStatus enum.
CLIENT_IDLE_TIME, ///< UInt64. Read only. Seconds since last activity. Available only for own client.
CLIENT_DEFAULT_CHANNEL, ///< String. Read only. User specified channel they joined when connecting to the server.
///< Available only for own client.
CLIENT_DEFAULT_CHANNEL_PASSWORD, ///< String. Read only. User specified channel password for the channel they
///< attempted to join when connecting to the server. Available only for own
///< client.
CLIENT_SERVER_PASSWORD, ///< String. Read only. User specified server password. Available only for own client.
CLIENT_META_DATA, ///< String. Read/Write. Can be used to store up to 4096 bytes of information on clients. Not
///< used by TeamSpeak. Available for visible clients.
CLIENT_IS_MUTED, ///< Integer. Read only. Not available server side. Indicates whether we have muted the client
///< using \ref ts3client_requestMuteClients. Available for visible clients other than ourselves.
CLIENT_IS_RECORDING, ///< Integer. Read only. Indicates whether the client is recording incoming audio. Available
///< for visible clients.
CLIENT_VOLUME_MODIFICATOR, ///< Integer. Read only. Volume adjustment for this client as set by \ref
///< ts3client_setClientVolumeModifier. Available for visible clients.
CLIENT_VERSION_SIGN, ///< String. Read only. TeamSpeak internal signature.
CLIENT_SECURITY_HASH, ///< String. Read/Write. This clients security hash. Not used by TeamSpeak, SDK only. Hash is
///< provided by an outside source. A channel will use the security salt + other client data
///< to calculate a hash, which must be the same as the one provided here. See SDK
///< documentation about Client / Channel Security Hashes for more details.
CLIENT_ENCRYPTION_CIPHERS, ///< String. Read only. SDK only. List of available ciphers this client can use.
CLIENT_IS_STREAMING, ///< bool. Read only, Is currently streaming.
CLIENT_ENDMARKER,
};
enum VirtualServerProperties
{
VIRTUALSERVER_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Unique identifier for a virtual server, does not
///< change on server restart. Available if \ref ts3client_getConnectionStatus
///< is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_NAME, ///< String. Read/Write. The virtual server display name. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_WELCOMEMESSAGE, ///< String. Read/Write. The welcome message displayed to clients on connect.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED. Not
///< updated automatically when changed, updates need to be requested (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_PLATFORM, ///< String. Read only. The operating system the server is running on. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_VERSION, ///< String. Read only. The server software version string. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_MAXCLIENTS, ///< UInt64. Read/Write. The maximum number of clients that can be connected
///< simultaneously. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_PASSWORD, ///< String. Read/Write. The server password. Read access is limited to the server. Clients
///< will only get the password they supplied when connecting. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_CLIENTS_ONLINE, ///< UInt64. Read only. The current number of clients connected to the server,
///< including query connections. Only available on request (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_CHANNELS_ONLINE, ///< UInt64. Read only. The current number of channels on the server. Only
///< available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CREATED, ///< Integer. Read only. The time this virtual server was created as unix timestamp.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_UPTIME, ///< UInt64. Read only. Number of seconds that have passed since the virtual server was
///< started. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CODEC_ENCRYPTION_MODE, ///< Integer. Read/Write. Boolean (1/0) that specifies if voice data is encrypted
///< during transfer. One of the values from the \ref CodecEncryptionMode enum.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_ENCRYPTION_CIPHERS, ///< String. Read/Write. Comma separated list of available ciphers to encrypt the
///< connection. The server will use the first cipher in the list that is also
///< listed in the \ref CLIENT_ENCRYPTION_CIPHERS of the connecting client.
///< Clients will fail to connect if no match is found. Always available.
VIRTUALSERVER_ADDRESS, ///< Any resolvable address for the specific virtual server
VIRTUALSERVER_VERSION_SIGN, ///< String. Read only. Signature of Platform and Version.
VIRTUALSERVER_ENDMARKER,
VIRTUALSERVER_FILEBASE = 24, ///< String. Read only. The path to the base directory used to store files
///< transferred using file transfer. Available only on the server. Is set by \ref
///< ts3server_enableFileManager
VIRTUALSERVER_MAX_DOWNLOAD_TOTAL_BANDWIDTH = 29, ///< UInt64. Read/Write. Maximum traffic in bytes the server can
///< use for file transfer downloads. Only available on request
///< (\ref ts3client_requestServerVariables).
VIRTUALSERVER_MAX_UPLOAD_TOTAL_BANDWIDTH = 30, ///< UInt64. Read/Write. Maximum traffic in bytes the server can use
///< for file transfer uploads. Only available on request (=>
///< requestServerVariables)
VIRTUALSERVER_LOG_FILETRANSFER = 64 ///< Integer. Read/Write. Boolean (1/0) indicating whether to include file
///< transfer activities (uploading or downloading of files) in the server log.
///< Always available.
};
/**
* Various connection properties.
* These are all read only, and except for your own client must be requested using \ref ts3client_requestConnectionInfo
*/
enum ConnectionProperties
{
CONNECTION_PING = 0, ///< UInt64. Round trip latency for the connection based on the last 5 seconds. On the server
///< this is the average across all connected clients for the last 5 seconds.
CONNECTION_PING_DEVIATION, ///< Double. Standard deviation for the round trip latency in \ref CONNECTION_PING
CONNECTION_CONNECTED_TIME, ///< UInt64. Seconds the client has been connected.
CONNECTION_IDLE_TIME, ///< UInt64. Time in seconds since the last activity (voice transmission, switching channels,
///< changing mic / speaker mute status) of the client.
CONNECTION_CLIENT_IP, ///< String. IP of this client (as seen from the server side)
CONNECTION_CLIENT_PORT, ///< UInt64. Client side port of this client (as seen from the server side)
CONNECTION_SERVER_IP, ///< String. The IP or hostname used to connect to the server. Only available on yourself.
CONNECTION_SERVER_PORT, ///< UInt64. The server port connected to. Only available on yourself.
CONNECTION_PACKETS_SENT_SPEECH, ///< UInt64. The number of voice packets transmitted by the client.
CONNECTION_PACKETS_SENT_KEEPALIVE, ///< UInt64. The number of keep alive packets transmitted by the client.
CONNECTION_PACKETS_SENT_CONTROL, ///< UInt64. The number of command & control packets transmitted by the client.
CONNECTION_PACKETS_SENT_TOTAL, ///< UInt64. Total number of packets transmitted by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_SENT_SPEECH, \ref CONNECTION_PACKETS_SENT_KEEPALIVE and
///< \ref CONNECTION_PACKETS_SENT_CONTROL
CONNECTION_BYTES_SENT_SPEECH, ///< UInt64. Outgoing traffic used for voice data by the client.
CONNECTION_BYTES_SENT_KEEPALIVE, ///< UInt64. Outgoing traffic used for keeping the connection alive by the client.
CONNECTION_BYTES_SENT_CONTROL, ///< UInt64. Outgoing traffic used for command & control data by the client.
CONNECTION_BYTES_SENT_TOTAL, ///< UInt64. Total outgoing traffic to the server by this client. Equal to the sum of
///< \ref CONNECTION_BYTES_SENT_SPEECH, \ref CONNECTION_BYTES_SENT_KEEPALIVE and \ref
///< CONNECTION_BYTES_SENT_CONTROL
CONNECTION_PACKETS_RECEIVED_SPEECH, ///< UInt64. Number of voice packets received by the client.
CONNECTION_PACKETS_RECEIVED_KEEPALIVE, ///< UInt64. Number of keep alive packets received by the client.
CONNECTION_PACKETS_RECEIVED_CONTROL, ///< UInt64. Number of command & control packets received by the client.
CONNECTION_PACKETS_RECEIVED_TOTAL, ///< UInt64. Total number of packets received by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_RECEIVED_SPEECH, \ref
///< CONNECTION_PACKETS_RECEIVED_KEEPALIVE and \ref
///< CONNECTION_PACKETS_RECEIVED_CONTROL
CONNECTION_BYTES_RECEIVED_SPEECH, ///< UInt64. Incoming traffic used by the client for voice data.
CONNECTION_BYTES_RECEIVED_KEEPALIVE, ///< UInt64. Incoming traffic used by the client to keep the connection alive.
CONNECTION_BYTES_RECEIVED_CONTROL, ///< UInt64. Incoming traffic used by the client for command & control data.
CONNECTION_BYTES_RECEIVED_TOTAL, ///< UInt64. Total incoming traffic used by the client. Equal to the sum of \ref
///< CONNECTION_BYTES_RECEIVED_SPEECH, \ref CONNECTION_BYTES_RECEIVED_KEEPALIVE and
///< \ref CONNECTION_BYTES_RECEIVED_CONTROL
CONNECTION_PACKETLOSS_SPEECH, ///< Double. Percentage points of voice packets for the client that did not arrive at
///< the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_KEEPALIVE, ///< Double. Percentage points of keep alive packets for the client that did not
///< arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_CONTROL, ///< Double. Percentage points of command & control packets for the client that did
///< not arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_TOTAL, ///< Double. Cumulative chance in percentage points with which a packet round trip
///< failed because a packet was lost
CONNECTION_SERVER2CLIENT_PACKETLOSS_SPEECH, ///< Double. Probability with which a voice packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< server was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the server was not
///< received by the client.
CONNECTION_CLIENT2SERVER_PACKETLOSS_SPEECH, ///< Double. Probability with which a speech packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< client was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the client was not
///< received by the server.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes sent for speech data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes sent for keepalive data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes sent for control data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes sent in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second sent for speech data, averaged over the
///< last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second sent for keepalive data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second sent for control data, averaged over
///< the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second sent, averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes received for speech data in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes received for keepalive data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes received for control data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes received in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second received for speech data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second received for keepalive data,
///< averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second received for control data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second received, averaged over the last minute.
CONNECTION_DUMMY_0,
CONNECTION_DUMMY_1,
CONNECTION_DUMMY_2,
CONNECTION_DUMMY_3,
CONNECTION_DUMMY_4,
CONNECTION_DUMMY_5,
CONNECTION_DUMMY_6,
CONNECTION_DUMMY_7,
CONNECTION_DUMMY_8,
CONNECTION_DUMMY_9,
CONNECTION_FILETRANSFER_BANDWIDTH_SENT, ///< UInt64. Current file transfer upstream activity in bytes per second.
///< Only available on request (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BANDWIDTH_RECEIVED, ///< UInt64. Current file transfer downstream activity in bytes per
///< second. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_RECEIVED_TOTAL, ///< UInt64. Total downstream traffic, in bytes, used for file
///< transfer since the server was started. Only available on request
///< (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_SENT_TOTAL, ///< UInt64. Total upstream traffic, in bytes, used for file transfer
///< since the server was started. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_ENDMARKER
};
/**
* Describes a client position in 3 dimensional space, used for 3D Sound.
*/
typedef struct
{
float x; ///< X co-ordinate in 3D space.
float y; ///< Y co-ordinate in 3D space.
float z; ///< Z co-ordinate in 3D space.
} TS3_VECTOR;
enum GroupWhisperType
{
GROUPWHISPERTYPE_SERVERGROUP = 0, ///< Whisper list consists of server groups
GROUPWHISPERTYPE_CHANNELGROUP = 1, ///< Whisper list consists of channel groups
GROUPWHISPERTYPE_CHANNELCOMMANDER = 2, ///< whisper to channel commanders
GROUPWHISPERTYPE_ALLCLIENTS = 3, ///< whisper to all clients
GROUPWHISPERTYPE_ENDMARKER,
};
enum GroupWhisperTargetMode
{
GROUPWHISPERTARGETMODE_ALL = 0,
GROUPWHISPERTARGETMODE_CURRENTCHANNEL = 1, ///< Whisper the current channel of the client
GROUPWHISPERTARGETMODE_PARENTCHANNEL = 2, ///< Whisper the parent channel of whatever channel the client is currently in
GROUPWHISPERTARGETMODE_ALLPARENTCHANNELS = 3, ///< Whipser to the parent channel and all their parent channels as well
GROUPWHISPERTARGETMODE_CHANNELFAMILY = 4, ///< Whisper to the current channel and all its sub channels
GROUPWHISPERTARGETMODE_ANCESTORCHANNELFAMILY = 5, ///< Whisper to the current channel, all its parent and sub channels.
GROUPWHISPERTARGETMODE_SUBCHANNELS = 6, ///< Whisper to all sub channels of the current channel of the client
GROUPWHISPERTARGETMODE_ENDMARKER,
};
enum MonoSoundDestination
{
MONO_SOUND_DESTINATION_ALL = 0, ///< Send mono sound to all available speakers
MONO_SOUND_DESTINATION_FRONT_CENTER = 1, ///< Send mono sound to front center speaker if available
MONO_SOUND_DESTINATION_FRONT_LEFT_AND_RIGHT = 2 ///< Send mono sound to front left/right speakers if available
};
enum SecuritySaltOptions
{
SECURITY_SALT_CHECK_NICKNAME = 1, ///< put nickname into security hash
SECURITY_SALT_CHECK_META_DATA = 2 ///< put meta data into security hash
};
/*this enum is used to disable client commands on the server*/
enum ClientCommand
{
CLIENT_COMMAND_requestConnectionInfo = 0, ///< disable client connection info request (client bandwidth usage, ip,
///< port, ping)
CLIENT_COMMAND_requestClientMove = 1, ///< disable moving clients
CLIENT_COMMAND_requestXXMuteClients = 2, ///< disable muting other clients
CLIENT_COMMAND_requestClientKickFromXXX = 3, ///< disable kicking clients
CLIENT_COMMAND_flushChannelCreation = 4, ///< disable creating channels
CLIENT_COMMAND_flushChannelUpdates = 5, ///< disable editing channels
CLIENT_COMMAND_requestChannelMove = 6, ///< disable moving channels
CLIENT_COMMAND_requestChannelDelete = 7, ///< disable deleting channels
CLIENT_COMMAND_requestChannelDescription = 8, ///< disable channel descriptions
CLIENT_COMMAND_requestChannelXXSubscribeXXX = 9, ///< disable being able to see clients in channels other than the
///< current channel the client is in
CLIENT_COMMAND_requestServerConnectionInfo = 10, ///< disable server connection info request (server bandwidth
///< usage, ip, port, ping)
CLIENT_COMMAND_requestSendXXXTextMsg = 11, ///< disable text messaging
CLIENT_COMMAND_filetransfers = 12, ///< disable file transfer
CLIENT_COMMAND_ENDMARKER
};
/* Access Control List*/
enum ACLType
{
ACL_NONE = 0,
ACL_WHITE_LIST = 1,
ACL_BLACK_LIST = 2
};
/* file transfer actions*/
enum FTAction
{
FT_INIT_SERVER = 0, ///< The virtual server is created. result->channelPath can be changed to create a different
///< directory than the default 'virtualserver_x' where x is the virtual server.
FT_INIT_CHANNEL = 1, ///< A channel is created. result->channelPath can be changed to create a different directory
///< then the default 'channel_x' where x is the channel id.
FT_UPLOAD = 2, ///< A file is being uploaded. All values in the result struct can be modified.
FT_DOWNLOAD = 3, ///< A file is being downloaded. All values in the result struct can be modified.
FT_DELETE = 4, ///< A file is being deleted. All values in the result struct can be modified.
FT_CREATEDIR = 5, ///< A directory is being created in a channel. All values in the result struct can be modified.
FT_RENAME = 6, ///< A file or folder is being renamed. The callback will be called twice! Once for the old and then
///< for the new name. All values in the result struct can be modified.
FT_FILELIST = 7, ///< A directory listing is requested. All values in the result struct can be modified.
FT_FILEINFO = 8 ///< Information of a file is requested. All values in the result struct can be modified.
};
/* file transfer status */
enum FileTransferState
{
FILETRANSFER_INITIALISING = 0, ///< File transfer is establishing connection.
FILETRANSFER_ACTIVE, ///< File transfer is in progress
FILETRANSFER_FINISHED, ///< File transfer has finished
};
/* file transfer types */
enum FileTransferType
{
FileListType_Directory = 0, ///< The file entry is a directory
FileListType_File, ///< The file entry is a regular file
};
/* some structs to handle variables in callbacks */
#define MAX_VARIABLES_EXPORT_COUNT 64
struct VariablesExportItem
{
unsigned char itemIsValid; ///< Whether or not there is any data in this item. Ignore this item if this is 0.
unsigned char proposedIsSet; ///< The value in proposed is set. If 0 ignore proposed
const char* current; ///< current value (stored in memory)
const char* proposed; ///< New value to change to (const, so no updates please)
};
struct VariablesExport
{
struct VariablesExportItem items[MAX_VARIABLES_EXPORT_COUNT];
};
struct ClientMiniExport
{
anyID ID; ///< id of the client
uint64 channel; ///< the channel the client is in
const char* ident; ///< client public identity
const char* nickname; ///< client display name
};
/**
* Structure used to describe a file transfer in the \ref ServerLibFunctions.onTransformFilePath callback.
* This describes the original values, and also contains hints for length limitations of the result parameter
* of the callback.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExport
{
uint64 channel; ///< The channel id of the file. 0 if action is \ref FT_INIT_SERVER
const char* filename; ///< utf8 encoded c string containing the original file name as intended by the client.
int action; ///< The action to be performed. One of the values from the \ref FTAction enum. Defines which values of
///< the result struct can be modified.
int transformedFileNameMaxSize; ///< The maximum length the file name can be rewritten to.
int channelPathMaxSize; ///< The maximum length the path can be rewritten to.
};
/**
* Structure to rewrite the file transfer file name and path in the \ref ServerLibFunctions.onTransformFilePath callback.
* The lengths are limited as described in the original parameter.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExportReturns
{
char* transformedFileName; ///< pointer to target file name. Fill the memory pointed to with an utf8 encoded c string
///< containing the new file name. Limited to original->transformedFileNameMaxSize bytes.
char* channelPath; ///< pointer to memory for new path. Fill the memory pointed to with an utf8 encoded c string
///< containing the new path. Limited to original->channelPathMaxSize bytes.
int logFileAction; ///< boolean (1/0). Whether to log this file transfer to the log. Action is not logged regardless
///< of this value if the servers \ref VIRTUALSERVER_LOG_FILETRANSFER property is 0.
};
struct FileTransferCallbackExport
{
anyID clientID; ///< the client who started the file transfer
anyID transferID; ///< local identifier of the transfer that has completed
anyID remoteTransferID; ///< remote identifier of the transfer that has completed
unsigned int status; ///< status of the transfer. One of the values from the \ref FileTransferState enum
const char* statusMessage; ///< utf8 encoded c string containing a human readable description of the status
uint64 remotefileSize; ///< size in bytes of the complete file to be transferred
uint64 bytes; ///< number of bytes transferred. Same as remotefileSize when the transfer completed entirely.
int isSender; ///< boolean. 1 if the server is sending the file. 0 if the server is receiving the file.
};
/*define for file transfer bandwith limits*/
#define BANDWIDTH_LIMIT_UNLIMITED 0xFFFFFFFFFFFFFFFFll
/*defines for speaker locations used by some sound callbacks*/
#ifndef SPEAKER_FRONT_LEFT
#define SPEAKER_FRONT_LEFT 0x1
#define SPEAKER_FRONT_RIGHT 0x2
#define SPEAKER_FRONT_CENTER 0x4
#define SPEAKER_LOW_FREQUENCY 0x8
#define SPEAKER_BACK_LEFT 0x10
#define SPEAKER_BACK_RIGHT 0x20
#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
#define SPEAKER_BACK_CENTER 0x100
#define SPEAKER_SIDE_LEFT 0x200
#define SPEAKER_SIDE_RIGHT 0x400
#define SPEAKER_TOP_CENTER 0x800
#define SPEAKER_TOP_FRONT_LEFT 0x1000
#define SPEAKER_TOP_FRONT_CENTER 0x2000
#define SPEAKER_TOP_FRONT_RIGHT 0x4000
#define SPEAKER_TOP_BACK_LEFT 0x8000
#define SPEAKER_TOP_BACK_CENTER 0x10000
#define SPEAKER_TOP_BACK_RIGHT 0x20000
#endif
#define SPEAKER_HEADPHONES_LEFT 0x10000000
#define SPEAKER_HEADPHONES_RIGHT 0x20000000
#define SPEAKER_MONO 0x40000000
#endif /*PUBLIC_DEFINITIONS_H*/
@@ -1,217 +0,0 @@
#ifndef PUBLIC_ERRORS_H
#define PUBLIC_ERRORS_H
//The idea here is: the values are 2 bytes wide, the first byte identifies the group, the second the count within that group
enum Ts3ErrorType {
//general
ERROR_ok = 0x0000, ///< Indicates success.
ERROR_undefined = 0x0001,
ERROR_not_implemented = 0x0002, ///< The attempted operation is not available in this context
ERROR_ok_no_update = 0x0003, ///< Indicates success, but no change occurred. Returned for example upon flushing (e.g. using \ref ts3client_flushChannelUpdates) when all indicated changes already matched the current state.
ERROR_dont_notify = 0x0004,
ERROR_lib_time_limit_reached = 0x0005,
ERROR_out_of_memory = 0x0006, ///< Not enough system memory to perform operation
ERROR_canceled = 0x0007,
ERROR_ok_no_error_event = 0x0008, ///< Indicates success, but no error event was generated. This is used because of the return code management and reduce packets.
//dunno
ERROR_command_not_found = 0x0100,
ERROR_unable_to_bind_network_port = 0x0101, ///< Unspecified failure to create a listening port
ERROR_no_network_port_available = 0x0102, ///< Failure to initialize a listening port for FileTransfer
ERROR_port_already_in_use = 0x0103, ///< Specified port is already in use by a different application
ERROR_command_line_parse_failed = 0x0104, ///< Command line arguments are invalid
ERROR_command_line_exit_version = 0x0105, ///< Command line specified version. The process should exit with code 0 after printing the version.
ERROR_command_line_exit_help = 0x0106, ///< Command line specified help. The process should exit with code 0 after priting the help.
//client
ERROR_client_invalid_id = 0x0200, ///< Client no longer connected
ERROR_client_nickname_inuse = 0x0201, ///< Client name is already in use. Client names must be unique
ERROR_client_protocol_limit_reached = 0x0203, ///< Too many clients on the server
ERROR_client_invalid_type = 0x0204, ///< Function called for normal clients that is only available for query clients or vice versa
ERROR_client_already_subscribed = 0x0205, ///< Attempting to subscribe to a channel already subscribed to
ERROR_client_not_logged_in = 0x0206,
ERROR_client_could_not_validate_identity = 0x0207, ///< Identity not valid or insufficient security level
ERROR_client_invalid_password = 0x0208,
ERROR_client_version_outdated = 0x020a, ///< Server requires newer client version as determined by the min_client_version properties
ERROR_client_is_flooding = 0x020c, ///< Triggered flood protection. Further information is supplied in the extra message if applicable.
ERROR_client_hacked = 0x020d,
ERROR_client_cannot_verify_now = 0x020e,
ERROR_client_login_not_permitted = 0x020f,
ERROR_client_not_subscribed = 0x0210, ///< Action is only available on subscribed channels
//channel
ERROR_channel_invalid_id = 0x0300, ///< Channel does not exist on the server (any longer)
ERROR_channel_protocol_limit_reached = 0x0301, ///< Too many channels on the server
ERROR_channel_already_in = 0x0302, ///< Attempting to move a client or channel to its current channel
ERROR_channel_name_inuse = 0x0303, ///< Channel name is already taken by another channel. Channel names must be unique
ERROR_channel_not_empty = 0x0304, ///< Attempting to delete a channel with clients or sub channels in it
ERROR_channel_can_not_delete_default = 0x0305, ///< Default channel cannot be deleted. Set a new default channel first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_default_require_permanent = 0x0306, ///< Attempt to set a non permanent channel as default channel. Set channel to permanent first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_invalid_flags = 0x0307, ///< Invalid combination of \ref ChannelProperties, trying to remove \ref CHANNEL_FLAG_DEFAULT or set a password on the default channel
ERROR_channel_parent_not_permanent = 0x0308, ///< Attempt to move a permanent channel into a non-permanent one, or set a channel to be permanent that is a sub channel of a non-permanent one
ERROR_channel_maxclients_reached = 0x0309, ///< Channel is full as determined by its \ref CHANNEL_MAXCLIENTS setting
ERROR_channel_maxfamily_reached = 0x030a, ///< Channel tree is full as determined by its \ref CHANNEL_MAXFAMILYCLIENTS setting
ERROR_channel_invalid_order = 0x030b, ///< Invalid value for the \ref CHANNEL_ORDER property. The specified channel must exist on the server and be on the same level.
ERROR_channel_no_filetransfer_supported = 0x030c, ///< Invalid \ref CHANNEL_FILEPATH set for the channel
ERROR_channel_invalid_password = 0x030d, ///< Channel has a password not matching the password supplied in the call
// used in public_rare_errors = 0x030e,
ERROR_channel_invalid_security_hash = 0x030f,
//server
ERROR_server_invalid_id = 0x0400, ///< Chosen virtual server does not exist or is offline
ERROR_server_running = 0x0401, ///< attempting to delete a server that is running. Stop the server before deleting it.
ERROR_server_is_shutting_down = 0x0402, ///< Client disconnected because the server is going offline
ERROR_server_maxclients_reached = 0x0403, ///< Given in the onConnectStatusChange event when the server has reached its maximum number of clients as defined by the \ref VIRTUALSERVER_MAXCLIENTS property
ERROR_server_invalid_password = 0x0404, ///< Specified server password is wrong. Provide the correct password in the \ref ts3client_startConnection / \ref ts3client_startConnectionWithChannelID call.
ERROR_server_is_virtual = 0x0407, ///< Server is in virtual status. The attempted action is not possible in this state. Start the virtual server first.
ERROR_server_is_not_running = 0x0409, ///< Attempting to stop a server that is not online.
ERROR_server_is_booting = 0x040a, // Not used
ERROR_server_status_invalid = 0x040b,
ERROR_server_version_outdated = 0x040d, ///< Attempt to connect to an outdated server version. The server needs to be updated.
ERROR_server_duplicate_running = 0x040e, ///< This server is already running within the instance. Each virtual server may only exist once.
//parameter
ERROR_parameter_quote = 0x0600, // Not used
ERROR_parameter_invalid_count = 0x0601, ///< Attempt to flush changes without previously calling set*VariableAs* since the last flush
ERROR_parameter_invalid = 0x0602, ///< At least one of the supplied parameters did not meet the criteria for that parameter
ERROR_parameter_not_found = 0x0603, ///< Failure to supply all the necessary parameters
ERROR_parameter_convert = 0x0604, ///< Invalid type supplied for a parameter, such as passing a string (ie. "five") that expects a number.
ERROR_parameter_invalid_size = 0x0605, ///< Value out of allowed range. Such as strings are too long/short or numeric values outside allowed range
ERROR_parameter_missing = 0x0606, ///< Neglecting to specify a required parameter
ERROR_parameter_checksum = 0x0607, ///< Attempting to deploy a modified snapshot
//unsorted, need further investigation
ERROR_vs_critical = 0x0700, ///< Failure to create default channel
ERROR_connection_lost = 0x0701, ///< Generic error with the connection.
ERROR_not_connected = 0x0702, ///< Attempting to call functions with a serverConnectionHandler that is not connected. You can use \ref ts3client_getConnectionStatus to check whether the connection handler is connected to a server
ERROR_no_cached_connection_info = 0x0703, ///< Attempting to query connection information (bandwidth usage, ping, etc) without requesting them first using \ref ts3client_requestConnectionInfo
ERROR_currently_not_possible = 0x0704, ///< Requested information is not currently available. You may have to call \ref ts3client_requestClientVariables or \ref ts3client_requestServerVariables
ERROR_failed_connection_initialisation = 0x0705, ///< No TeamSpeak server running on the specified IP address and port
ERROR_could_not_resolve_hostname = 0x0706, ///< Failure to resolve the specified hostname to an IP address
ERROR_invalid_server_connection_handler_id = 0x0707, ///< Attempting to perform actions on a non-existent server connection handler
ERROR_could_not_initialise_input_manager = 0x0708, // Not used
ERROR_clientlibrary_not_initialised = 0x0709, ///< Calling client library functions without successfully calling \ref ts3client_initClientLib before
ERROR_serverlibrary_not_initialised = 0x070a, ///< Calling server library functions without successfully calling \ref ts3server_initServerLib before
ERROR_whisper_too_many_targets = 0x070b, ///< Using a whisper list that contain more clients than the servers \ref VIRTUALSERVER_MIN_CLIENTS_IN_CHANNEL_BEFORE_FORCED_SILENCE property
ERROR_whisper_no_targets = 0x070c, ///< The active whisper list is empty or no clients matched the whisper list (e.g. all channels in the list are empty)
ERROR_connection_ip_protocol_missing = 0x070d, ///< Invalid or unsupported protocol (e.g. attempting an IPv6 connection on an IPv4 only machine)
ERROR_handshake_failed = 0x070e,
ERROR_illegal_server_license = 0x070f,
//file transfer
ERROR_file_invalid_name = 0x0800, ///< Invalid UTF8 string or not a valid file
ERROR_file_invalid_permissions = 0x0801, ///< Permissions prevent opening the file
ERROR_file_already_exists = 0x0802, ///< Target path already exists as a directory
ERROR_file_not_found = 0x0803, ///< Attempt to access or move non existing file
ERROR_file_io_error = 0x0804, ///< Generic file input / output error
ERROR_file_invalid_transfer_id = 0x0805, ///< Attempt to get information about a file transfer after it has already been cleaned up. File transfer information is not available indefinitely after the transfer completed
ERROR_file_invalid_path = 0x0806, ///< specified path contains invalid characters or does not start with "/"
ERROR_file_no_files_available = 0x0807, // Not used
ERROR_file_overwrite_excludes_resume = 0x0808, ///< File overwrite and resume are mutually exclusive. Only one or neither can be 1.
ERROR_file_invalid_size = 0x0809, ///< Attempt to write more bytes than claimed file size.
ERROR_file_already_in_use = 0x080a, ///< File is currently not available, try again later.
ERROR_file_could_not_open_connection = 0x080b, ///< Generic failure in file transfer connection / other party did not conform to file transfer protocol
ERROR_file_no_space_left_on_device = 0x080c, ///< Operating system reports hard disk is full. May be caused by quota limitations.
ERROR_file_exceeds_file_system_maximum_size = 0x080d, ///< File is too large for the file system of the target device.
ERROR_file_transfer_connection_timeout = 0x080e, // Not used
ERROR_file_connection_lost = 0x080f, ///< File input / output timeout or connection failure
ERROR_file_exceeds_supplied_size = 0x0810, // Not used
ERROR_file_transfer_complete = 0x0811, ///< Indicates successful completion
ERROR_file_transfer_canceled = 0x0812, ///< Transfer was cancelled through @ref ts3client_haltTransfer
ERROR_file_transfer_interrupted = 0x0813, ///< Transfer failed because the server is shutting down, or network connection issues
ERROR_file_transfer_server_quota_exceeded = 0x0814, ///< Transfer terminated due to server bandwidth quota being exceeded. No client can transfer files.
ERROR_file_transfer_client_quota_exceeded = 0x0815, ///< Attempt to transfer more data than allowed by this clients' bandwidth quota. Other clients may continue to transfer files.
ERROR_file_transfer_reset = 0x0816, // Not used
ERROR_file_transfer_limit_reached = 0x0817, ///< Too many file transfers are in progress. Try again later
ERROR_file_invalid_storage_class = 0x0818, // TODO: Invalid storage class for HTTP FileTransfer (what is a storage class?)
ERROR_file_invalid_dimension = 0x0819, ///< Avatar image exceeds maximum width or height accepted by the server.
ERROR_file_transfer_channel_quota_exceeded = 0x081a, ///< Transfer failed because the channel quota was exceeded. Uploading to this channel is not possible, but other channels may be fine.
//sound
ERROR_sound_preprocessor_disabled = 0x0900, ///< Cannot set or query pre processor variables with preprocessing disabled
ERROR_sound_internal_preprocessor = 0x0901,
ERROR_sound_internal_encoder = 0x0902,
ERROR_sound_internal_playback = 0x0903,
ERROR_sound_no_capture_device_available = 0x0904, ///< No audio capture devices are available
ERROR_sound_no_playback_device_available = 0x0905, ///< No audio playback devices are available
ERROR_sound_could_not_open_capture_device = 0x0906, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_could_not_open_playback_device = 0x0907, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_handler_has_device = 0x0908, ///< Attempt to open a sound device on a connection handler which already has an open device. Close the already open device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_invalid_capture_device = 0x0909, ///< Attempt to use a device for capture that does not support capturing audio
ERROR_sound_invalid_playback_device = 0x090a, ///< Attempt to use a device for playback that does not support playback of audio
ERROR_sound_invalid_wave = 0x090b, ///< Attempt to use a non WAV file in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle
ERROR_sound_unsupported_wave = 0x090c, ///< Unsupported wave file used in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle.
ERROR_sound_open_wave = 0x090d, ///< Failure to open the specified sound file
ERROR_sound_internal_capture = 0x090e,
ERROR_sound_device_in_use = 0x090f, ///< Attempt to unregister a custom device that is being used. Close the device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_device_already_registerred = 0x0910, ///< Attempt to register a custom device with a device id that has already been used in a previous call. Device ids must be unique.
ERROR_sound_unknown_device = 0x0911, ///< Attempt to open, close, unregister or use a device which is not known. Custom devices must be registered before being used (see \ref ts3client_registerCustomDevice)
ERROR_sound_unsupported_frequency = 0x0912,
ERROR_sound_invalid_channel_count = 0x0913, ///< Invalid device audio channel count, must be > 0
ERROR_sound_read_wave = 0x0914, ///< Failure to read sound samples from an opened wave file. Is this a valid wave file?
ERROR_sound_need_more_data = 0x0915, // for internal purposes only
ERROR_sound_device_busy = 0x0916, // for internal purposes only
ERROR_sound_no_data = 0x0917, ///< Indicates there is currently no data for playback, e.g. nobody is speaking right now.
ERROR_sound_channel_mask_mismatch = 0x0918, ///< Opening a device with an unsupported channel count
//permissions
ERROR_permissions_client_insufficient = 0x0a08, ///< Not enough permissions to perform the requested activity
ERROR_permissions = 0x0a0c, ///< Permissions to use sound device not granted by operating system, e.g. Windows denied microphone access.
//accounting
ERROR_accounting_virtualserver_limit_reached = 0x0b00, ///< Attempt to use more virtual servers than allowed by the license
ERROR_accounting_slot_limit_reached = 0x0b01, ///< Attempt to set more slots than allowed by the license
ERROR_accounting_license_file_not_found = 0x0b02, // Not used
ERROR_accounting_license_date_not_ok = 0x0b03, ///< License expired or not valid yet
ERROR_accounting_unable_to_connect_to_server = 0x0b04, ///< Failure to communicate with accounting backend
ERROR_accounting_unknown_error = 0x0b05, ///< Failure to write update license file
ERROR_accounting_server_error = 0x0b06, // Not used
ERROR_accounting_instance_limit_reached = 0x0b07, ///< More than one process of the server is running
ERROR_accounting_instance_check_error = 0x0b08, ///< Shared memory access failure.
ERROR_accounting_license_file_invalid = 0x0b09, ///< License is not a TeamSpeak license
ERROR_accounting_running_elsewhere = 0x0b0a, ///< A copy of this server is already running in another instance. Each server may only exist once.
ERROR_accounting_instance_duplicated = 0x0b0b, ///< A copy of this server is running already in this process. Each server may only exist once.
ERROR_accounting_already_started = 0x0b0c, ///< Attempt to start a server that is already running
ERROR_accounting_not_started = 0x0b0d,
ERROR_accounting_to_many_starts = 0x0b0e, ///< Starting instance / virtual servers too often in too short a time period
//provisioning server
/// @cond HAS_PROVISIONING
ERROR_provisioning_invalid_password = 0x1100,
ERROR_provisioning_invalid_request = 0x1101,
ERROR_provisioning_no_slots_available = 0x1102,
ERROR_provisioning_pool_missing = 0x1103,
ERROR_provisioning_pool_unknown = 0x1104,
ERROR_provisioning_unknown_ip_location = 0x1105,
ERROR_provisioning_internal_tries_exceeded = 0x1106,
ERROR_provisioning_too_many_slots_requested = 0x1107,
ERROR_provisioning_too_many_reserved = 0x1108,
ERROR_provisioning_could_not_connect = 0x1109,
ERROR_provisioning_auth_server_not_connected = 0x1110,
ERROR_provisioning_auth_data_too_large = 0x1111,
ERROR_provisioning_already_initialized = 0x1112,
ERROR_provisioning_not_initialized = 0x1113,
ERROR_provisioning_connecting = 0x1114,
ERROR_provisioning_already_connected = 0x1115,
ERROR_provisioning_not_connected = 0x1116,
ERROR_provisioning_io_error = 0x1117,
ERROR_provisioning_invalid_timeout = 0x1118,
ERROR_provisioning_ts3server_not_found = 0x1119,
ERROR_provisioning_no_permission = 0x111A,
/// @endcond
// 0x12 - 0x15 are reserved in rare
// screen share
ERROR_already_registered = 0x1600,
ERROR_stream_session_limit_reached = 0x1601,
ERROR_stream_session_not_found = 0x1602,
ERROR_stream_unknown = 0x1603,
ERROR_stream_not_participating = 0x1604,
ERROR_not_streamer = 0x1605,
ERROR_already_joined = 0x1606,
ERROR_join_request_not_found = 0x1607,
ERROR_sfu_failed_to_start = 0x1608,
};
#endif
@@ -1,236 +0,0 @@
#ifndef TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#define TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Version definitions.
#define TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1 1
// Protocol used for communication between the session subscriber and the session (a single stream).
// Commands are sent bidirectionally or unidirectionally between the parties.
// e.g. SESSION => SUBSCRIBER: ON_FRAME, ON_PAUSED_CHANGED
// e.g. SUBSCRIBER => SESSION: ON_FRAME_ACK, ON_RESIZE
// Command type enum with a lowercase type name.
typedef enum
{
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME = 0,
TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE,
TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED,
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK,
TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP,
TS_SESSION_SUBSCRIBER_CMD_REMOVE_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED,
} ts_session_subscriber_command_type_t;
// Pixel format enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_I420 = 0,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_NV12,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ABGR,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ARGB,
} ts_session_subscriber_pixel_format_t;
// Buffer location enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_CPU = 0,
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_GPU
} ts_session_subscriber_buffer_location_t;
// Buffer type enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_SINGLE = 0,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_MAIN,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_SUB
} ts_session_subscriber_buffer_type_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(push, 4)
#endif
// Main buffer header for shared CPU Memory Front/Back Buffers.
// The Main Buffer contains metadata about the current front/back buffer and the versioning for both the main and sub buffer.
// The information from the main buffer can be used to always read the front buffer.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t front_buffer_index; // index of the front buffer. (0: main buffer, 1: sub buffer)
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_main_buffer_header_t;
// Sub buffer header.
typedef struct
{
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
} ts_session_subscriber_sub_buffer_header_t;
// Single frame buffer header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_single_frame_buffer_header_t;
// Command header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // Total message length (header + payload).
ts_session_subscriber_command_type_t type;
uint64_t target_session_id; // always set to the target session id this command is for or is originating from.
uint64_t target_subscriber_id; // 0 if broadcast.
} ts_session_subscriber_command_header_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME.
// The frame data is not included in the message, but is attached seperately or was sent beforehand. The buffer is identified by it's id.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_id; // buffer id, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_frame_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t frame_id;
} ts_session_subscriber_on_frame_ack_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE.
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t width;
uint32_t height;
} ts_session_subscriber_on_resize_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t paused; // 0 or 1.
} ts_session_subscriber_on_paused_changed_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE.
// Contains a single frame buffer. The header is of format |ts_session_subscriber_single_frame_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
ts_session_subscriber_buffer_type_t buffer_type;
} ts_session_subscriber_on_buffer_single_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK.
// Contains a main buffer and a sub buffer. The main buffer header
// contains metadata about the current front/back buffer and
// is of type |ts_session_subscriber_main_buffer_header_t|.
// The sub buffer's header is of type |ts_session_subscriber_sub_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t main_buffer_ptr; // main buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t main_buffer_length;
uint64_t sub_buffer_ptr; // sub buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t sub_buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
} ts_session_subscriber_on_buffer_front_back_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER.
// SUBSCRIBER => SESSION.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_resp_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_release_buffer_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr;
int bits_per_sample;
int sample_rate;
uint32_t number_of_channels;
uint32_t number_of_frames;
int64_t absolute_capture_timestamp_ms;
float volume;
} ts_session_subscriber_on_audio_frames_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t audio_enabled;
} ts_session_subscriber_on_audio_enabled_changed_payload_t;
// Overall Command structure.
typedef struct
{
ts_session_subscriber_command_header_t header;
union
{
ts_session_subscriber_on_frame_payload_t frame;
ts_session_subscriber_on_resize_payload_t resize;
ts_session_subscriber_on_paused_changed_payload_t paused;
ts_session_subscriber_on_frame_ack_payload_t frame_ack;
ts_session_subscriber_on_buffer_single_payload_t buffer_single;
ts_session_subscriber_on_buffer_front_back_payload_t buffer_front_back;
ts_session_subscriber_on_release_buffer_payload_t release_buffer;
ts_session_subscriber_add_subscriber_payload_t add_subscriber;
ts_session_subscriber_add_subscriber_resp_payload_t add_subscriber_resp;
ts_session_subscriber_on_audio_frames_payload_t audio_frames;
ts_session_subscriber_on_audio_enabled_changed_payload_t audio_enabled_changed;
} payload;
} ts_session_subscriber_command_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif // TS_SESSION_SUBSCRIBER_PROTOCOL_H_
@@ -1,29 +0,0 @@
####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
####### Any changes to this file will be overwritten by the next CMake run ####
####### The input file was team_clientConfig.cmake.in ########
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
macro(set_and_check _var _file)
set(${_var} "${_file}")
if(NOT EXISTS "${_file}")
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
endif()
endmacro()
macro(check_required_components _NAME)
foreach(comp ${${_NAME}_FIND_COMPONENTS})
if(NOT ${_NAME}_${comp}_FOUND)
if(${_NAME}_FIND_REQUIRED_${comp})
set(${_NAME}_FOUND FALSE)
endif()
endif()
endforeach()
endmacro()
####################################################################################
include("${CMAKE_CURRENT_LIST_DIR}/team_clientTargets.cmake")
check_required_components(team_client)
@@ -1,19 +0,0 @@
#----------------------------------------------------------------
# Generated CMake target import file for configuration "Release".
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Import target "teamspeak::client" for configuration "Release"
set_property(TARGET teamspeak::client APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(teamspeak::client PROPERTIES
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.so"
IMPORTED_SONAME_RELEASE "libteamspeak_sdk_client.so"
)
list(APPEND _cmake_import_check_targets teamspeak::client )
list(APPEND _cmake_import_check_files_for_teamspeak::client "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.so" )
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
@@ -1,121 +0,0 @@
# Generated by CMake
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
if(CMAKE_VERSION VERSION_LESS "2.8.3")
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
cmake_policy(PUSH)
cmake_policy(VERSION 2.8.3...4.0)
#----------------------------------------------------------------
# Generated CMake target import file.
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
set(_cmake_targets_defined "")
set(_cmake_targets_not_defined "")
set(_cmake_expected_targets "")
foreach(_cmake_expected_target IN ITEMS teamspeak::client)
list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
if(TARGET "${_cmake_expected_target}")
list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
else()
list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
endif()
endforeach()
unset(_cmake_expected_target)
if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
unset(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
return()
endif()
if(NOT _cmake_targets_defined STREQUAL "")
string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
endif()
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
# Compute the installation prefix relative to this file.
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
set(_IMPORT_PREFIX "")
endif()
# Create imported target teamspeak::client
add_library(teamspeak::client SHARED IMPORTED)
set_target_properties(teamspeak::client PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
)
if(NOT CMAKE_VERSION VERSION_LESS "3.23.0")
target_sources(teamspeak::client
INTERFACE
FILE_SET "public_headers"
TYPE "HEADERS"
BASE_DIRS "${_IMPORT_PREFIX}/include"
FILES "${_IMPORT_PREFIX}/include/teamspeak/clientlib.h" "${_IMPORT_PREFIX}/include/teamspeak/clientlib_sdk.h" "${_IMPORT_PREFIX}/include/teamspeak/video/session_subscriber_protocol.h"
)
else()
set_property(TARGET teamspeak::client
APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
"${_IMPORT_PREFIX}/include"
)
endif()
# Load information for each installed configuration.
file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/team_clientTargets-*.cmake")
foreach(_cmake_config_file IN LISTS _cmake_config_files)
include("${_cmake_config_file}")
endforeach()
unset(_cmake_config_file)
unset(_cmake_config_files)
# Cleanup temporary variables.
set(_IMPORT_PREFIX)
# Loop over all imported files and verify that they actually exist
foreach(_cmake_target IN LISTS _cmake_import_check_targets)
if(CMAKE_VERSION VERSION_LESS "3.28"
OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
if(NOT EXISTS "${_cmake_file}")
message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
\"${_cmake_file}\"
but this file does not exist. Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
\"${CMAKE_CURRENT_LIST_FILE}\"
but not all the files it references.
")
endif()
endforeach()
endif()
unset(_cmake_file)
unset("_cmake_import_check_files_for_${_cmake_target}")
endforeach()
unset(_cmake_target)
unset(_cmake_import_check_targets)
# This file does not depend on other imported targets which have
# been exported from the same project but in a separate export set.
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
@@ -1,23 +0,0 @@
#ifndef TEAMLOG_LOGTYPES_H
#define TEAMLOG_LOGTYPES_H
enum LogTypes {
LogType_NONE = 0x0000, ///< Logging is disabled
LogType_FILE = 0x0001, ///< Log to regular log file
LogType_CONSOLE = 0x0002, ///< Log to standard output / error
LogType_USERLOGGING = 0x0004, ///< User defined logging. Will call the \ref ServerLibFunctions.onUserLoggingMessageEvent callback for every message to be logged
LogType_NO_NETLOGGING = 0x0008, ///< Not used
LogType_DATABASE = 0x0010, ///< Log to database (deprecated, server only, no effect in SDK)
LogType_SYSLOG = 0x0020, ///< Log to syslog (only available on Linux)
};
enum LogLevel {
LogLevel_CRITICAL = 0, ///< these messages stop the program
LogLevel_ERROR, ///< everything that is really bad, but not so bad we need to shut down
LogLevel_WARNING, ///< everything that *might* be bad
LogLevel_DEBUG, ///< output that might help find a problem
LogLevel_INFO, ///< informational output, like "starting database version x.y.z"
LogLevel_DEVEL ///< developer only output (will not be displayed in release mode)
};
#endif //TEAMLOG_LOGTYPES_H
File diff suppressed because it is too large Load Diff
@@ -1,58 +0,0 @@
#ifndef CLIENTLIB_SDK_H
#define CLIENTLIB_SDK_H
// system
#include <stdlib.h>
// own
#include "teamspeak/public_definitions.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Sets the client to which to transmit voice. Stops standard channel voice transmission.
*
* The client will still receive voice from their current channel, however their voice will not be transmitted to their
* current channel anymore. If this call is successful (check onServerErrorEvent) then voice of the specified client
* will be transmitted to all specified channels and all the specified clients. Pass 0 to both target parameter arrays
* to restore default behavior of transmitting voice to current channel. You will receive an onServerErrorEvent with the
* passed returnCode indicating whether or not the operation was successful.
*
* @param server_connection_handler_id the connection handler on which to set the whisper list
* @param client_id the client to set the whisper list for. Set to 0 or your own client ID to set your own whisper list.
* @param channel_ids an array of channel ids to transmit voice to.
* @param channel_ids_size number of elements in aforementioned array.
* @param client_ids a zero terminated array of client ids to transmit voice to.
* @param client_ids_size number of elements in aforementioned array.
* @param impersonate if the target client is a webrtc client, the voice packets will look like as if they have been
* send by the invoking client id
* @param return_code a c string to identify this request in callbacks. Pass an empty string if unused.
* @return An error code from the @ref Ts3ErrorType enum indicating either success or the failure reason
*/
EXPORTDLL unsigned int ts_client_request_client_set_whisper_list(uint64 server_connection_handler_id, anyID client_id,
const uint64* channel_ids,
int channel_ids_size,
const anyID* client_ids,
int client_ids_size, int impersonate,
const char* return_code);
/**
* @brief Send a binary-serialized ClientCommandRequest protobuf to the client library.
*
* The response will be delivered asynchronously via the onProtoResponse callback
* as a serialized ClientCommandResponse protobuf.
*
* @param data Pointer to serialized ClientCommandRequest protobuf bytes
* @param size Size of the serialized data in bytes
* @param return_code Caller-provided string to correlate the response in onProtoResponse. May be NULL.
* @return An error code: ERROR_ok on successful dispatch, ERROR_parameter_invalid on parse failure
*/
EXPORTDLL unsigned int ts3client_postProtoCommand(const void* data, size_t size, const char* return_code);
#ifdef __cplusplus
}
#endif
#endif // CLIENTLIB_SDK_H
@@ -1,635 +0,0 @@
#ifndef PUBLIC_DEFINITIONS_H
#define PUBLIC_DEFINITIONS_H
#include "teamlog/logtypes.h"
#define TS3_MAX_SIZE_CHANNEL_NAME 40 // channel name maximum length in characters
#define TS3_MAX_SIZE_VIRTUALSERVER_NAME 64 // virtual server name maximum length in characters
#define TS3_MAX_SIZE_CLIENT_NICKNAME 64 // client display name length limit in characters
#define TS3_MIN_SIZE_CLIENT_NICKNAME 3 // client display name minimum length in characters
#define TS3_MAX_SIZE_REASON_MESSAGE 80 // length limit in characters for kick, move, etc reasons
#define TS3_MAX_SIZE_TEXTMESSAGE 8192 // text message length limit, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_TOPIC 255 // channel topic lengt limith, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_DESCRIPTION 8192 // channel description length limit, measured in bytes (utf8 encoded)
// server welcome message length limit measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_VIRTUALSERVER_WELCOMEMESSAGE 1024
#define TS3_SIZE_MYTSID 44
// minimum amount of seconds before a clientID that was in use can be assigned to a new client
#define TS3_MIN_SECONDS_CLIENTID_REUSE 300
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32)
typedef unsigned __int16 anyID;
typedef unsigned __int64 uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __declspec(dllexport)
#else
#define EXPORTDLL
#endif
#endif
#else
#include <stdint.h>
typedef uint16_t anyID;
typedef uint64_t uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __attribute__((visibility("default")))
#else
#define EXPORTDLL
#endif
#endif
#endif
enum Visibility
{
ENTER_VISIBILITY = 0, ///< Client joined from an unsubscribed channel, or joined the server.
RETAIN_VISIBILITY, ///< Client switched from one subscribed channel to a different subscribed channel.
LEAVE_VISIBILITY ///< Client switches to an unsubscribed channel, or disconnected from server.
};
enum ConnectStatus
{
STATUS_DISCONNECTED = 0, ///< There is no activity to the server, this is the default value
STATUS_CONNECTING, ///< We are trying to connect, we haven't got a client id yet, we haven't been accepted by the server
STATUS_CONNECTED, ///< The server has accepted us, we can talk and hear and we have a client id, but we don't
///< have the channels and clients yet, we can get server infos (welcome msg etc.)
STATUS_CONNECTION_ESTABLISHING, ///< we are connected and we are visible
STATUS_CONNECTION_ESTABLISHED, ///< we are connected and we have the client and channels available
};
enum LocalTestMode
{
TEST_MODE_OFF = 0,
TEST_MODE_VOICE_LOCAL_ONLY,
TEST_MODE_VOICE_LOCAL_AND_REMOTE,
TEST_MODE_TALK_STATUS_CHANGES_ONLY
};
enum TalkStatus
{
STATUS_NOT_TALKING = 0, ///< client is not talking
STATUS_TALKING = 1, ///< client is talking
STATUS_TALKING_WHILE_DISABLED = 2, ///< client is talking while the microphone is muted (only valid for own client)
};
enum CodecType
{
CODEC_SPEEX_NARROWBAND = 0, ///< (deprecated) mono, 16bit, 8kHz, bitrate dependent on the quality setting
CODEC_SPEEX_WIDEBAND, ///< (deprecated) mono, 16bit, 16kHz, bitrate dependent on the quality setting
CODEC_SPEEX_ULTRAWIDEBAND, ///< (deprecated) mono, 16bit, 32kHz, bitrate dependent on the quality setting
CODEC_CELT_MONO, ///< (deprecated) mono, 16bit, 48kHz, bitrate dependent on the quality setting
CODEC_OPUS_VOICE, ///< mono, 16bit, 48khz, bitrate dependent on the quality setting, optimized for voice
CODEC_OPUS_MUSIC, ///< stereo, 16bit, 48khz, bitrate dependent on the quality setting, optimized for music
};
enum CodecEncryptionMode
{
CODEC_ENCRYPTION_PER_CHANNEL = 0, ///< voice data encryption decided per channel
CODEC_ENCRYPTION_FORCED_OFF, ///< voice data encryption disabled
CODEC_ENCRYPTION_FORCED_ON, ///< voice data encryption enabled
};
enum TextMessageTargetMode
{
TextMessageTarget_CLIENT = 1, ///< Message is a private message to another client
TextMessageTarget_CHANNEL, ///< Message is sent to a channel, received by all clients in that channel at the time
TextMessageTarget_SERVER, ///< Message is sent to every client on the server
TextMessageTarget_MAX
};
enum MuteInputStatus
{
MUTEINPUT_NONE = 0, ///< Microphone is not muted, audio is sent to the server
MUTEINPUT_MUTED, ///< Microphone is muted, no audio is transmitted to the server
};
enum MuteOutputStatus
{
MUTEOUTPUT_NONE = 0, ///< Speaker is active, server is sending us audio
MUTEOUTPUT_MUTED, ///< Speaker is muted, server is not sending audio to us
};
enum HardwareInputStatus
{
HARDWAREINPUT_DISABLED = 0, ///< no capture device opened
HARDWAREINPUT_ENABLED, ///< capture device open
};
enum HardwareOutputStatus
{
HARDWAREOUTPUT_DISABLED = 0, ///< no playback device opened
HARDWAREOUTPUT_ENABLED, ///< playback device open
};
enum InputDeactivationStatus
{
INPUT_ACTIVE = 0, ///< Audio is captured from the capture device.
INPUT_DEACTIVATED = 1, ///< No audio is captured from the capture device.
};
enum ReasonIdentifier
{
REASON_NONE = 0, ///< no reason data
REASON_MOVED = 1, ///< client was moved
REASON_SUBSCRIPTION = 2, // no reason data
REASON_LOST_CONNECTION = 3, // reasonmsg=reason
REASON_KICK_CHANNEL = 4, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER = 5, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER_BAN = 6, //{SectionInvoker} reasonmsg=reason bantime=time //{SectionInvoker} is only added server->client
REASON_SERVERSTOP = 7, // reasonmsg=reason
REASON_CLIENTDISCONNECT = 8, // reasonmsg=reason
REASON_CHANNELUPDATE = 9, // no reason data
REASON_CHANNELEDIT = 10, //{SectionInvoker}
REASON_CLIENTDISCONNECT_SERVER_SHUTDOWN = 11, // reasonmsg=reason
};
enum Protocol_Encryption_Cipher
{
AES_128 = 0b00000000,
AES_256 = 0b00000001,
PROTOCOL_ENCRYPTION_CIPHER_END_MARKER,
RESERVED = 0b00010000, // reserved until puzzle v2 is fully released, then can be reused
PUZZLE_2 = 0b00100000,
};
enum ChannelProperties
{
CHANNEL_NAME = 0, ///< String. Read/Write. Name of the channel. Always available.
CHANNEL_TOPIC, ///< String. Read/Write. Short single line text describing what the channel is about. Always available.
CHANNEL_DESCRIPTION, ///< String. Read/Write. Arbitrary text (up to 8k bytes) with information about the channel.
///< Must be requested (\ref ts3client_requestChannelDescription)
CHANNEL_PASSWORD, ///< String. Read/Write. Password of the channel. Read access is limited to the server. Clients
///< will only ever see the last password they attempted to use when joining the channel. Always available.
CHANNEL_CODEC, ///< Integer. Read/Write. The codec this channel is using. One of the values from the \ref CodecType
///< enum. Always available.
CHANNEL_CODEC_QUALITY, ///< Integer. Read/Write. The quality setting of the channel. Valid values are 0 to 10 inclusive.
///< Higher value means better voice quality but also more bandwidth usage. Always available.
CHANNEL_MAXCLIENTS, ///< Integer. Read/Write. The number of clients that can be in the channel simultaneously.
///< Always available.
CHANNEL_MAXFAMILYCLIENTS, ///< Integer. Read/Write. The total number of clients that can be in this channel and all
///< sub channels of this channel. Always available.
CHANNEL_ORDER, ///< UInt64. Read/Write. The ID of the channel below which this channel should be displayed. If 0
///< the channel is sorted at the top of the current level. Always available.
CHANNEL_FLAG_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when empty.
///< Permanent channels are stored to the database and available after server restart. SDK
///< users will need to take care of restoring channel at server start on their own.
///< Mutually exclusive with \ref CHANNEL_FLAG_SEMI_PERMANENT. Always available.
CHANNEL_FLAG_SEMI_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when
///< empty. Semi permanent channels are not stored to disk and gone after server
///< restart but remain while empty. Mutually exclusive with \ref
///< CHANNEL_FLAG_PERMANENT. Always available.
CHANNEL_FLAG_DEFAULT, ///< Integer. Read/Write. Boolean (1/0). The default channel is the channel that all clients
///< are located in when they join the server, unless the client explicitly specified a
///< different channel when connecting and is allowed to join their preferred channel. Only
///< one channel on the server can have this flag set. The default channel must have \ref
///< CHANNEL_FLAG_PERMANENT set. Always available.
CHANNEL_FLAG_PASSWORD, ///< Integer. Read/Write. Boolean (1/0) indicating whether this channel is password protected.
///< When removing or setting \ref CHANNEL_PASSWORD you also need to adjust this flag.
CHANNEL_CODEC_LATENCY_FACTOR, ///< (deprecated) Integer. Read/Write. Allows to increase packet size, reducing
///< bandwith at the cost of higher latency of voice transmission. Valid values are
///< 1-10 inclusive. 1 is the default and offers the lowest latency. Always available.
CHANNEL_CODEC_IS_UNENCRYPTED, ///< Integer. Read/Write. Boolean (1/0). If 0 voice data is encrypted, if 1 the voice
///< data is not encrypted. Only used if the server \ref
///< VIRTUALSERVER_CODEC_ENCRYPTION_MODE is set to \ref CODEC_ENCRYPTION_PER_CHANNEL.
///< Always available.
CHANNEL_SECURITY_SALT, ///< String. Read/Write. SDK Only, not used by TeamSpeak. This channels security hash. When
///< a client joins their \ref CLIENT_SECURITY_HASH is compared to this value, to allow or
///< deny the client access to the channel. Used to enforce clients joining the server with
///< specific identity and \ref CLIENT_META_DATA. See SDK Documentation about this feature
///< for further details. Always available.
CHANNEL_DELETE_DELAY, ///< UInt64. Read/Write. Number of seconds deletion of temporary channels is delayed after
///< the last client leaves the channel. Channel is only deleted if empty when the delete
///< delay expired. Always available.
CHANNEL_UNIQUE_IDENTIFIER, ///< String. Read only. An identifier that uniquely identifies a channel. Available in
///< Server >= 3.10.0
CHANNEL_ENDMARKER,
};
enum ClientProperties
{
CLIENT_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Public Identity, can be used to identify a client
///< installation. Remains identical as long as the client keeps using the same
///< identity. Available for visible clients.
CLIENT_NICKNAME, ///< String. Read/Write. Display name of the client. Available for visible clients.
CLIENT_VERSION, ///< String. Read only. Version String of the client used. For clients other than ourself this
///< needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_PLATFORM, ///< String. Read only. Operating system used by the client. For other clients other than ourself
///< this needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_FLAG_TALKING, ///< Integer. Read only. Whether the client is talking. Available on clients that are either
///< whispering to us, or in our channel.
CLIENT_INPUT_MUTED, ///< Integer. Read/Write. Microphone mute status. Available for visible clients. One of the
///< values from the \ref MuteInputStatus enum.
CLIENT_OUTPUT_MUTED, ///< Integer. Read/Write. Speaker mute status. Speaker mute implies microphone mute. Available
///< for visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_OUTPUTONLY_MUTED, ///< Integer. Read/Write. Speaker mute status. Microphone may be active. Available for
///< visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_INPUT_HARDWARE, ///< Integer. Read only. Indicates whether a capture device is open. Available for visible
///< clients. One of the values from the \ref HardwareInputStatus enum.
CLIENT_OUTPUT_HARDWARE, ///< Integer. Read only. Indicates whether a playback device is open. Available for visible
///< clients. One of the values from the \ref HardwareOutputStatus enum.
CLIENT_INPUT_DEACTIVATED, ///< Integer. Read/Write. Not available server side. Local microphone mute status.
///< Available only for own client. Used to implement Push To Talk. One of the values from
///< the \ref InputDeactivationStatus enum.
CLIENT_IDLE_TIME, ///< UInt64. Read only. Seconds since last activity. Available only for own client.
CLIENT_DEFAULT_CHANNEL, ///< String. Read only. User specified channel they joined when connecting to the server.
///< Available only for own client.
CLIENT_DEFAULT_CHANNEL_PASSWORD, ///< String. Read only. User specified channel password for the channel they
///< attempted to join when connecting to the server. Available only for own
///< client.
CLIENT_SERVER_PASSWORD, ///< String. Read only. User specified server password. Available only for own client.
CLIENT_META_DATA, ///< String. Read/Write. Can be used to store up to 4096 bytes of information on clients. Not
///< used by TeamSpeak. Available for visible clients.
CLIENT_IS_MUTED, ///< Integer. Read only. Not available server side. Indicates whether we have muted the client
///< using \ref ts3client_requestMuteClients. Available for visible clients other than ourselves.
CLIENT_IS_RECORDING, ///< Integer. Read only. Indicates whether the client is recording incoming audio. Available
///< for visible clients.
CLIENT_VOLUME_MODIFICATOR, ///< Integer. Read only. Volume adjustment for this client as set by \ref
///< ts3client_setClientVolumeModifier. Available for visible clients.
CLIENT_VERSION_SIGN, ///< String. Read only. TeamSpeak internal signature.
CLIENT_SECURITY_HASH, ///< String. Read/Write. This clients security hash. Not used by TeamSpeak, SDK only. Hash is
///< provided by an outside source. A channel will use the security salt + other client data
///< to calculate a hash, which must be the same as the one provided here. See SDK
///< documentation about Client / Channel Security Hashes for more details.
CLIENT_ENCRYPTION_CIPHERS, ///< String. Read only. SDK only. List of available ciphers this client can use.
CLIENT_IS_STREAMING, ///< bool. Read only, Is currently streaming.
CLIENT_ENDMARKER,
};
enum VirtualServerProperties
{
VIRTUALSERVER_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Unique identifier for a virtual server, does not
///< change on server restart. Available if \ref ts3client_getConnectionStatus
///< is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_NAME, ///< String. Read/Write. The virtual server display name. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_WELCOMEMESSAGE, ///< String. Read/Write. The welcome message displayed to clients on connect.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED. Not
///< updated automatically when changed, updates need to be requested (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_PLATFORM, ///< String. Read only. The operating system the server is running on. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_VERSION, ///< String. Read only. The server software version string. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_MAXCLIENTS, ///< UInt64. Read/Write. The maximum number of clients that can be connected
///< simultaneously. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_PASSWORD, ///< String. Read/Write. The server password. Read access is limited to the server. Clients
///< will only get the password they supplied when connecting. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_CLIENTS_ONLINE, ///< UInt64. Read only. The current number of clients connected to the server,
///< including query connections. Only available on request (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_CHANNELS_ONLINE, ///< UInt64. Read only. The current number of channels on the server. Only
///< available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CREATED, ///< Integer. Read only. The time this virtual server was created as unix timestamp.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_UPTIME, ///< UInt64. Read only. Number of seconds that have passed since the virtual server was
///< started. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CODEC_ENCRYPTION_MODE, ///< Integer. Read/Write. Boolean (1/0) that specifies if voice data is encrypted
///< during transfer. One of the values from the \ref CodecEncryptionMode enum.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_ENCRYPTION_CIPHERS, ///< String. Read/Write. Comma separated list of available ciphers to encrypt the
///< connection. The server will use the first cipher in the list that is also
///< listed in the \ref CLIENT_ENCRYPTION_CIPHERS of the connecting client.
///< Clients will fail to connect if no match is found. Always available.
VIRTUALSERVER_ADDRESS, ///< Any resolvable address for the specific virtual server
VIRTUALSERVER_VERSION_SIGN, ///< String. Read only. Signature of Platform and Version.
VIRTUALSERVER_ENDMARKER,
VIRTUALSERVER_FILEBASE = 24, ///< String. Read only. The path to the base directory used to store files
///< transferred using file transfer. Available only on the server. Is set by \ref
///< ts3server_enableFileManager
VIRTUALSERVER_MAX_DOWNLOAD_TOTAL_BANDWIDTH = 29, ///< UInt64. Read/Write. Maximum traffic in bytes the server can
///< use for file transfer downloads. Only available on request
///< (\ref ts3client_requestServerVariables).
VIRTUALSERVER_MAX_UPLOAD_TOTAL_BANDWIDTH = 30, ///< UInt64. Read/Write. Maximum traffic in bytes the server can use
///< for file transfer uploads. Only available on request (=>
///< requestServerVariables)
VIRTUALSERVER_LOG_FILETRANSFER = 64 ///< Integer. Read/Write. Boolean (1/0) indicating whether to include file
///< transfer activities (uploading or downloading of files) in the server log.
///< Always available.
};
/**
* Various connection properties.
* These are all read only, and except for your own client must be requested using \ref ts3client_requestConnectionInfo
*/
enum ConnectionProperties
{
CONNECTION_PING = 0, ///< UInt64. Round trip latency for the connection based on the last 5 seconds. On the server
///< this is the average across all connected clients for the last 5 seconds.
CONNECTION_PING_DEVIATION, ///< Double. Standard deviation for the round trip latency in \ref CONNECTION_PING
CONNECTION_CONNECTED_TIME, ///< UInt64. Seconds the client has been connected.
CONNECTION_IDLE_TIME, ///< UInt64. Time in seconds since the last activity (voice transmission, switching channels,
///< changing mic / speaker mute status) of the client.
CONNECTION_CLIENT_IP, ///< String. IP of this client (as seen from the server side)
CONNECTION_CLIENT_PORT, ///< UInt64. Client side port of this client (as seen from the server side)
CONNECTION_SERVER_IP, ///< String. The IP or hostname used to connect to the server. Only available on yourself.
CONNECTION_SERVER_PORT, ///< UInt64. The server port connected to. Only available on yourself.
CONNECTION_PACKETS_SENT_SPEECH, ///< UInt64. The number of voice packets transmitted by the client.
CONNECTION_PACKETS_SENT_KEEPALIVE, ///< UInt64. The number of keep alive packets transmitted by the client.
CONNECTION_PACKETS_SENT_CONTROL, ///< UInt64. The number of command & control packets transmitted by the client.
CONNECTION_PACKETS_SENT_TOTAL, ///< UInt64. Total number of packets transmitted by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_SENT_SPEECH, \ref CONNECTION_PACKETS_SENT_KEEPALIVE and
///< \ref CONNECTION_PACKETS_SENT_CONTROL
CONNECTION_BYTES_SENT_SPEECH, ///< UInt64. Outgoing traffic used for voice data by the client.
CONNECTION_BYTES_SENT_KEEPALIVE, ///< UInt64. Outgoing traffic used for keeping the connection alive by the client.
CONNECTION_BYTES_SENT_CONTROL, ///< UInt64. Outgoing traffic used for command & control data by the client.
CONNECTION_BYTES_SENT_TOTAL, ///< UInt64. Total outgoing traffic to the server by this client. Equal to the sum of
///< \ref CONNECTION_BYTES_SENT_SPEECH, \ref CONNECTION_BYTES_SENT_KEEPALIVE and \ref
///< CONNECTION_BYTES_SENT_CONTROL
CONNECTION_PACKETS_RECEIVED_SPEECH, ///< UInt64. Number of voice packets received by the client.
CONNECTION_PACKETS_RECEIVED_KEEPALIVE, ///< UInt64. Number of keep alive packets received by the client.
CONNECTION_PACKETS_RECEIVED_CONTROL, ///< UInt64. Number of command & control packets received by the client.
CONNECTION_PACKETS_RECEIVED_TOTAL, ///< UInt64. Total number of packets received by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_RECEIVED_SPEECH, \ref
///< CONNECTION_PACKETS_RECEIVED_KEEPALIVE and \ref
///< CONNECTION_PACKETS_RECEIVED_CONTROL
CONNECTION_BYTES_RECEIVED_SPEECH, ///< UInt64. Incoming traffic used by the client for voice data.
CONNECTION_BYTES_RECEIVED_KEEPALIVE, ///< UInt64. Incoming traffic used by the client to keep the connection alive.
CONNECTION_BYTES_RECEIVED_CONTROL, ///< UInt64. Incoming traffic used by the client for command & control data.
CONNECTION_BYTES_RECEIVED_TOTAL, ///< UInt64. Total incoming traffic used by the client. Equal to the sum of \ref
///< CONNECTION_BYTES_RECEIVED_SPEECH, \ref CONNECTION_BYTES_RECEIVED_KEEPALIVE and
///< \ref CONNECTION_BYTES_RECEIVED_CONTROL
CONNECTION_PACKETLOSS_SPEECH, ///< Double. Percentage points of voice packets for the client that did not arrive at
///< the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_KEEPALIVE, ///< Double. Percentage points of keep alive packets for the client that did not
///< arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_CONTROL, ///< Double. Percentage points of command & control packets for the client that did
///< not arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_TOTAL, ///< Double. Cumulative chance in percentage points with which a packet round trip
///< failed because a packet was lost
CONNECTION_SERVER2CLIENT_PACKETLOSS_SPEECH, ///< Double. Probability with which a voice packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< server was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the server was not
///< received by the client.
CONNECTION_CLIENT2SERVER_PACKETLOSS_SPEECH, ///< Double. Probability with which a speech packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< client was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the client was not
///< received by the server.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes sent for speech data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes sent for keepalive data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes sent for control data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes sent in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second sent for speech data, averaged over the
///< last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second sent for keepalive data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second sent for control data, averaged over
///< the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second sent, averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes received for speech data in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes received for keepalive data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes received for control data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes received in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second received for speech data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second received for keepalive data,
///< averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second received for control data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second received, averaged over the last minute.
CONNECTION_DUMMY_0,
CONNECTION_DUMMY_1,
CONNECTION_DUMMY_2,
CONNECTION_DUMMY_3,
CONNECTION_DUMMY_4,
CONNECTION_DUMMY_5,
CONNECTION_DUMMY_6,
CONNECTION_DUMMY_7,
CONNECTION_DUMMY_8,
CONNECTION_DUMMY_9,
CONNECTION_FILETRANSFER_BANDWIDTH_SENT, ///< UInt64. Current file transfer upstream activity in bytes per second.
///< Only available on request (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BANDWIDTH_RECEIVED, ///< UInt64. Current file transfer downstream activity in bytes per
///< second. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_RECEIVED_TOTAL, ///< UInt64. Total downstream traffic, in bytes, used for file
///< transfer since the server was started. Only available on request
///< (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_SENT_TOTAL, ///< UInt64. Total upstream traffic, in bytes, used for file transfer
///< since the server was started. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_ENDMARKER
};
/**
* Describes a client position in 3 dimensional space, used for 3D Sound.
*/
typedef struct
{
float x; ///< X co-ordinate in 3D space.
float y; ///< Y co-ordinate in 3D space.
float z; ///< Z co-ordinate in 3D space.
} TS3_VECTOR;
enum GroupWhisperType
{
GROUPWHISPERTYPE_SERVERGROUP = 0, ///< Whisper list consists of server groups
GROUPWHISPERTYPE_CHANNELGROUP = 1, ///< Whisper list consists of channel groups
GROUPWHISPERTYPE_CHANNELCOMMANDER = 2, ///< whisper to channel commanders
GROUPWHISPERTYPE_ALLCLIENTS = 3, ///< whisper to all clients
GROUPWHISPERTYPE_ENDMARKER,
};
enum GroupWhisperTargetMode
{
GROUPWHISPERTARGETMODE_ALL = 0,
GROUPWHISPERTARGETMODE_CURRENTCHANNEL = 1, ///< Whisper the current channel of the client
GROUPWHISPERTARGETMODE_PARENTCHANNEL = 2, ///< Whisper the parent channel of whatever channel the client is currently in
GROUPWHISPERTARGETMODE_ALLPARENTCHANNELS = 3, ///< Whipser to the parent channel and all their parent channels as well
GROUPWHISPERTARGETMODE_CHANNELFAMILY = 4, ///< Whisper to the current channel and all its sub channels
GROUPWHISPERTARGETMODE_ANCESTORCHANNELFAMILY = 5, ///< Whisper to the current channel, all its parent and sub channels.
GROUPWHISPERTARGETMODE_SUBCHANNELS = 6, ///< Whisper to all sub channels of the current channel of the client
GROUPWHISPERTARGETMODE_ENDMARKER,
};
enum MonoSoundDestination
{
MONO_SOUND_DESTINATION_ALL = 0, ///< Send mono sound to all available speakers
MONO_SOUND_DESTINATION_FRONT_CENTER = 1, ///< Send mono sound to front center speaker if available
MONO_SOUND_DESTINATION_FRONT_LEFT_AND_RIGHT = 2 ///< Send mono sound to front left/right speakers if available
};
enum SecuritySaltOptions
{
SECURITY_SALT_CHECK_NICKNAME = 1, ///< put nickname into security hash
SECURITY_SALT_CHECK_META_DATA = 2 ///< put meta data into security hash
};
/*this enum is used to disable client commands on the server*/
enum ClientCommand
{
CLIENT_COMMAND_requestConnectionInfo = 0, ///< disable client connection info request (client bandwidth usage, ip,
///< port, ping)
CLIENT_COMMAND_requestClientMove = 1, ///< disable moving clients
CLIENT_COMMAND_requestXXMuteClients = 2, ///< disable muting other clients
CLIENT_COMMAND_requestClientKickFromXXX = 3, ///< disable kicking clients
CLIENT_COMMAND_flushChannelCreation = 4, ///< disable creating channels
CLIENT_COMMAND_flushChannelUpdates = 5, ///< disable editing channels
CLIENT_COMMAND_requestChannelMove = 6, ///< disable moving channels
CLIENT_COMMAND_requestChannelDelete = 7, ///< disable deleting channels
CLIENT_COMMAND_requestChannelDescription = 8, ///< disable channel descriptions
CLIENT_COMMAND_requestChannelXXSubscribeXXX = 9, ///< disable being able to see clients in channels other than the
///< current channel the client is in
CLIENT_COMMAND_requestServerConnectionInfo = 10, ///< disable server connection info request (server bandwidth
///< usage, ip, port, ping)
CLIENT_COMMAND_requestSendXXXTextMsg = 11, ///< disable text messaging
CLIENT_COMMAND_filetransfers = 12, ///< disable file transfer
CLIENT_COMMAND_ENDMARKER
};
/* Access Control List*/
enum ACLType
{
ACL_NONE = 0,
ACL_WHITE_LIST = 1,
ACL_BLACK_LIST = 2
};
/* file transfer actions*/
enum FTAction
{
FT_INIT_SERVER = 0, ///< The virtual server is created. result->channelPath can be changed to create a different
///< directory than the default 'virtualserver_x' where x is the virtual server.
FT_INIT_CHANNEL = 1, ///< A channel is created. result->channelPath can be changed to create a different directory
///< then the default 'channel_x' where x is the channel id.
FT_UPLOAD = 2, ///< A file is being uploaded. All values in the result struct can be modified.
FT_DOWNLOAD = 3, ///< A file is being downloaded. All values in the result struct can be modified.
FT_DELETE = 4, ///< A file is being deleted. All values in the result struct can be modified.
FT_CREATEDIR = 5, ///< A directory is being created in a channel. All values in the result struct can be modified.
FT_RENAME = 6, ///< A file or folder is being renamed. The callback will be called twice! Once for the old and then
///< for the new name. All values in the result struct can be modified.
FT_FILELIST = 7, ///< A directory listing is requested. All values in the result struct can be modified.
FT_FILEINFO = 8 ///< Information of a file is requested. All values in the result struct can be modified.
};
/* file transfer status */
enum FileTransferState
{
FILETRANSFER_INITIALISING = 0, ///< File transfer is establishing connection.
FILETRANSFER_ACTIVE, ///< File transfer is in progress
FILETRANSFER_FINISHED, ///< File transfer has finished
};
/* file transfer types */
enum FileTransferType
{
FileListType_Directory = 0, ///< The file entry is a directory
FileListType_File, ///< The file entry is a regular file
};
/* some structs to handle variables in callbacks */
#define MAX_VARIABLES_EXPORT_COUNT 64
struct VariablesExportItem
{
unsigned char itemIsValid; ///< Whether or not there is any data in this item. Ignore this item if this is 0.
unsigned char proposedIsSet; ///< The value in proposed is set. If 0 ignore proposed
const char* current; ///< current value (stored in memory)
const char* proposed; ///< New value to change to (const, so no updates please)
};
struct VariablesExport
{
struct VariablesExportItem items[MAX_VARIABLES_EXPORT_COUNT];
};
struct ClientMiniExport
{
anyID ID; ///< id of the client
uint64 channel; ///< the channel the client is in
const char* ident; ///< client public identity
const char* nickname; ///< client display name
};
/**
* Structure used to describe a file transfer in the \ref ServerLibFunctions.onTransformFilePath callback.
* This describes the original values, and also contains hints for length limitations of the result parameter
* of the callback.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExport
{
uint64 channel; ///< The channel id of the file. 0 if action is \ref FT_INIT_SERVER
const char* filename; ///< utf8 encoded c string containing the original file name as intended by the client.
int action; ///< The action to be performed. One of the values from the \ref FTAction enum. Defines which values of
///< the result struct can be modified.
int transformedFileNameMaxSize; ///< The maximum length the file name can be rewritten to.
int channelPathMaxSize; ///< The maximum length the path can be rewritten to.
};
/**
* Structure to rewrite the file transfer file name and path in the \ref ServerLibFunctions.onTransformFilePath callback.
* The lengths are limited as described in the original parameter.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExportReturns
{
char* transformedFileName; ///< pointer to target file name. Fill the memory pointed to with an utf8 encoded c string
///< containing the new file name. Limited to original->transformedFileNameMaxSize bytes.
char* channelPath; ///< pointer to memory for new path. Fill the memory pointed to with an utf8 encoded c string
///< containing the new path. Limited to original->channelPathMaxSize bytes.
int logFileAction; ///< boolean (1/0). Whether to log this file transfer to the log. Action is not logged regardless
///< of this value if the servers \ref VIRTUALSERVER_LOG_FILETRANSFER property is 0.
};
struct FileTransferCallbackExport
{
anyID clientID; ///< the client who started the file transfer
anyID transferID; ///< local identifier of the transfer that has completed
anyID remoteTransferID; ///< remote identifier of the transfer that has completed
unsigned int status; ///< status of the transfer. One of the values from the \ref FileTransferState enum
const char* statusMessage; ///< utf8 encoded c string containing a human readable description of the status
uint64 remotefileSize; ///< size in bytes of the complete file to be transferred
uint64 bytes; ///< number of bytes transferred. Same as remotefileSize when the transfer completed entirely.
int isSender; ///< boolean. 1 if the server is sending the file. 0 if the server is receiving the file.
};
/*define for file transfer bandwith limits*/
#define BANDWIDTH_LIMIT_UNLIMITED 0xFFFFFFFFFFFFFFFFll
/*defines for speaker locations used by some sound callbacks*/
#ifndef SPEAKER_FRONT_LEFT
#define SPEAKER_FRONT_LEFT 0x1
#define SPEAKER_FRONT_RIGHT 0x2
#define SPEAKER_FRONT_CENTER 0x4
#define SPEAKER_LOW_FREQUENCY 0x8
#define SPEAKER_BACK_LEFT 0x10
#define SPEAKER_BACK_RIGHT 0x20
#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
#define SPEAKER_BACK_CENTER 0x100
#define SPEAKER_SIDE_LEFT 0x200
#define SPEAKER_SIDE_RIGHT 0x400
#define SPEAKER_TOP_CENTER 0x800
#define SPEAKER_TOP_FRONT_LEFT 0x1000
#define SPEAKER_TOP_FRONT_CENTER 0x2000
#define SPEAKER_TOP_FRONT_RIGHT 0x4000
#define SPEAKER_TOP_BACK_LEFT 0x8000
#define SPEAKER_TOP_BACK_CENTER 0x10000
#define SPEAKER_TOP_BACK_RIGHT 0x20000
#endif
#define SPEAKER_HEADPHONES_LEFT 0x10000000
#define SPEAKER_HEADPHONES_RIGHT 0x20000000
#define SPEAKER_MONO 0x40000000
#endif /*PUBLIC_DEFINITIONS_H*/
@@ -1,217 +0,0 @@
#ifndef PUBLIC_ERRORS_H
#define PUBLIC_ERRORS_H
//The idea here is: the values are 2 bytes wide, the first byte identifies the group, the second the count within that group
enum Ts3ErrorType {
//general
ERROR_ok = 0x0000, ///< Indicates success.
ERROR_undefined = 0x0001,
ERROR_not_implemented = 0x0002, ///< The attempted operation is not available in this context
ERROR_ok_no_update = 0x0003, ///< Indicates success, but no change occurred. Returned for example upon flushing (e.g. using \ref ts3client_flushChannelUpdates) when all indicated changes already matched the current state.
ERROR_dont_notify = 0x0004,
ERROR_lib_time_limit_reached = 0x0005,
ERROR_out_of_memory = 0x0006, ///< Not enough system memory to perform operation
ERROR_canceled = 0x0007,
ERROR_ok_no_error_event = 0x0008, ///< Indicates success, but no error event was generated. This is used because of the return code management and reduce packets.
//dunno
ERROR_command_not_found = 0x0100,
ERROR_unable_to_bind_network_port = 0x0101, ///< Unspecified failure to create a listening port
ERROR_no_network_port_available = 0x0102, ///< Failure to initialize a listening port for FileTransfer
ERROR_port_already_in_use = 0x0103, ///< Specified port is already in use by a different application
ERROR_command_line_parse_failed = 0x0104, ///< Command line arguments are invalid
ERROR_command_line_exit_version = 0x0105, ///< Command line specified version. The process should exit with code 0 after printing the version.
ERROR_command_line_exit_help = 0x0106, ///< Command line specified help. The process should exit with code 0 after priting the help.
//client
ERROR_client_invalid_id = 0x0200, ///< Client no longer connected
ERROR_client_nickname_inuse = 0x0201, ///< Client name is already in use. Client names must be unique
ERROR_client_protocol_limit_reached = 0x0203, ///< Too many clients on the server
ERROR_client_invalid_type = 0x0204, ///< Function called for normal clients that is only available for query clients or vice versa
ERROR_client_already_subscribed = 0x0205, ///< Attempting to subscribe to a channel already subscribed to
ERROR_client_not_logged_in = 0x0206,
ERROR_client_could_not_validate_identity = 0x0207, ///< Identity not valid or insufficient security level
ERROR_client_invalid_password = 0x0208,
ERROR_client_version_outdated = 0x020a, ///< Server requires newer client version as determined by the min_client_version properties
ERROR_client_is_flooding = 0x020c, ///< Triggered flood protection. Further information is supplied in the extra message if applicable.
ERROR_client_hacked = 0x020d,
ERROR_client_cannot_verify_now = 0x020e,
ERROR_client_login_not_permitted = 0x020f,
ERROR_client_not_subscribed = 0x0210, ///< Action is only available on subscribed channels
//channel
ERROR_channel_invalid_id = 0x0300, ///< Channel does not exist on the server (any longer)
ERROR_channel_protocol_limit_reached = 0x0301, ///< Too many channels on the server
ERROR_channel_already_in = 0x0302, ///< Attempting to move a client or channel to its current channel
ERROR_channel_name_inuse = 0x0303, ///< Channel name is already taken by another channel. Channel names must be unique
ERROR_channel_not_empty = 0x0304, ///< Attempting to delete a channel with clients or sub channels in it
ERROR_channel_can_not_delete_default = 0x0305, ///< Default channel cannot be deleted. Set a new default channel first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_default_require_permanent = 0x0306, ///< Attempt to set a non permanent channel as default channel. Set channel to permanent first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_invalid_flags = 0x0307, ///< Invalid combination of \ref ChannelProperties, trying to remove \ref CHANNEL_FLAG_DEFAULT or set a password on the default channel
ERROR_channel_parent_not_permanent = 0x0308, ///< Attempt to move a permanent channel into a non-permanent one, or set a channel to be permanent that is a sub channel of a non-permanent one
ERROR_channel_maxclients_reached = 0x0309, ///< Channel is full as determined by its \ref CHANNEL_MAXCLIENTS setting
ERROR_channel_maxfamily_reached = 0x030a, ///< Channel tree is full as determined by its \ref CHANNEL_MAXFAMILYCLIENTS setting
ERROR_channel_invalid_order = 0x030b, ///< Invalid value for the \ref CHANNEL_ORDER property. The specified channel must exist on the server and be on the same level.
ERROR_channel_no_filetransfer_supported = 0x030c, ///< Invalid \ref CHANNEL_FILEPATH set for the channel
ERROR_channel_invalid_password = 0x030d, ///< Channel has a password not matching the password supplied in the call
// used in public_rare_errors = 0x030e,
ERROR_channel_invalid_security_hash = 0x030f,
//server
ERROR_server_invalid_id = 0x0400, ///< Chosen virtual server does not exist or is offline
ERROR_server_running = 0x0401, ///< attempting to delete a server that is running. Stop the server before deleting it.
ERROR_server_is_shutting_down = 0x0402, ///< Client disconnected because the server is going offline
ERROR_server_maxclients_reached = 0x0403, ///< Given in the onConnectStatusChange event when the server has reached its maximum number of clients as defined by the \ref VIRTUALSERVER_MAXCLIENTS property
ERROR_server_invalid_password = 0x0404, ///< Specified server password is wrong. Provide the correct password in the \ref ts3client_startConnection / \ref ts3client_startConnectionWithChannelID call.
ERROR_server_is_virtual = 0x0407, ///< Server is in virtual status. The attempted action is not possible in this state. Start the virtual server first.
ERROR_server_is_not_running = 0x0409, ///< Attempting to stop a server that is not online.
ERROR_server_is_booting = 0x040a, // Not used
ERROR_server_status_invalid = 0x040b,
ERROR_server_version_outdated = 0x040d, ///< Attempt to connect to an outdated server version. The server needs to be updated.
ERROR_server_duplicate_running = 0x040e, ///< This server is already running within the instance. Each virtual server may only exist once.
//parameter
ERROR_parameter_quote = 0x0600, // Not used
ERROR_parameter_invalid_count = 0x0601, ///< Attempt to flush changes without previously calling set*VariableAs* since the last flush
ERROR_parameter_invalid = 0x0602, ///< At least one of the supplied parameters did not meet the criteria for that parameter
ERROR_parameter_not_found = 0x0603, ///< Failure to supply all the necessary parameters
ERROR_parameter_convert = 0x0604, ///< Invalid type supplied for a parameter, such as passing a string (ie. "five") that expects a number.
ERROR_parameter_invalid_size = 0x0605, ///< Value out of allowed range. Such as strings are too long/short or numeric values outside allowed range
ERROR_parameter_missing = 0x0606, ///< Neglecting to specify a required parameter
ERROR_parameter_checksum = 0x0607, ///< Attempting to deploy a modified snapshot
//unsorted, need further investigation
ERROR_vs_critical = 0x0700, ///< Failure to create default channel
ERROR_connection_lost = 0x0701, ///< Generic error with the connection.
ERROR_not_connected = 0x0702, ///< Attempting to call functions with a serverConnectionHandler that is not connected. You can use \ref ts3client_getConnectionStatus to check whether the connection handler is connected to a server
ERROR_no_cached_connection_info = 0x0703, ///< Attempting to query connection information (bandwidth usage, ping, etc) without requesting them first using \ref ts3client_requestConnectionInfo
ERROR_currently_not_possible = 0x0704, ///< Requested information is not currently available. You may have to call \ref ts3client_requestClientVariables or \ref ts3client_requestServerVariables
ERROR_failed_connection_initialisation = 0x0705, ///< No TeamSpeak server running on the specified IP address and port
ERROR_could_not_resolve_hostname = 0x0706, ///< Failure to resolve the specified hostname to an IP address
ERROR_invalid_server_connection_handler_id = 0x0707, ///< Attempting to perform actions on a non-existent server connection handler
ERROR_could_not_initialise_input_manager = 0x0708, // Not used
ERROR_clientlibrary_not_initialised = 0x0709, ///< Calling client library functions without successfully calling \ref ts3client_initClientLib before
ERROR_serverlibrary_not_initialised = 0x070a, ///< Calling server library functions without successfully calling \ref ts3server_initServerLib before
ERROR_whisper_too_many_targets = 0x070b, ///< Using a whisper list that contain more clients than the servers \ref VIRTUALSERVER_MIN_CLIENTS_IN_CHANNEL_BEFORE_FORCED_SILENCE property
ERROR_whisper_no_targets = 0x070c, ///< The active whisper list is empty or no clients matched the whisper list (e.g. all channels in the list are empty)
ERROR_connection_ip_protocol_missing = 0x070d, ///< Invalid or unsupported protocol (e.g. attempting an IPv6 connection on an IPv4 only machine)
ERROR_handshake_failed = 0x070e,
ERROR_illegal_server_license = 0x070f,
//file transfer
ERROR_file_invalid_name = 0x0800, ///< Invalid UTF8 string or not a valid file
ERROR_file_invalid_permissions = 0x0801, ///< Permissions prevent opening the file
ERROR_file_already_exists = 0x0802, ///< Target path already exists as a directory
ERROR_file_not_found = 0x0803, ///< Attempt to access or move non existing file
ERROR_file_io_error = 0x0804, ///< Generic file input / output error
ERROR_file_invalid_transfer_id = 0x0805, ///< Attempt to get information about a file transfer after it has already been cleaned up. File transfer information is not available indefinitely after the transfer completed
ERROR_file_invalid_path = 0x0806, ///< specified path contains invalid characters or does not start with "/"
ERROR_file_no_files_available = 0x0807, // Not used
ERROR_file_overwrite_excludes_resume = 0x0808, ///< File overwrite and resume are mutually exclusive. Only one or neither can be 1.
ERROR_file_invalid_size = 0x0809, ///< Attempt to write more bytes than claimed file size.
ERROR_file_already_in_use = 0x080a, ///< File is currently not available, try again later.
ERROR_file_could_not_open_connection = 0x080b, ///< Generic failure in file transfer connection / other party did not conform to file transfer protocol
ERROR_file_no_space_left_on_device = 0x080c, ///< Operating system reports hard disk is full. May be caused by quota limitations.
ERROR_file_exceeds_file_system_maximum_size = 0x080d, ///< File is too large for the file system of the target device.
ERROR_file_transfer_connection_timeout = 0x080e, // Not used
ERROR_file_connection_lost = 0x080f, ///< File input / output timeout or connection failure
ERROR_file_exceeds_supplied_size = 0x0810, // Not used
ERROR_file_transfer_complete = 0x0811, ///< Indicates successful completion
ERROR_file_transfer_canceled = 0x0812, ///< Transfer was cancelled through @ref ts3client_haltTransfer
ERROR_file_transfer_interrupted = 0x0813, ///< Transfer failed because the server is shutting down, or network connection issues
ERROR_file_transfer_server_quota_exceeded = 0x0814, ///< Transfer terminated due to server bandwidth quota being exceeded. No client can transfer files.
ERROR_file_transfer_client_quota_exceeded = 0x0815, ///< Attempt to transfer more data than allowed by this clients' bandwidth quota. Other clients may continue to transfer files.
ERROR_file_transfer_reset = 0x0816, // Not used
ERROR_file_transfer_limit_reached = 0x0817, ///< Too many file transfers are in progress. Try again later
ERROR_file_invalid_storage_class = 0x0818, // TODO: Invalid storage class for HTTP FileTransfer (what is a storage class?)
ERROR_file_invalid_dimension = 0x0819, ///< Avatar image exceeds maximum width or height accepted by the server.
ERROR_file_transfer_channel_quota_exceeded = 0x081a, ///< Transfer failed because the channel quota was exceeded. Uploading to this channel is not possible, but other channels may be fine.
//sound
ERROR_sound_preprocessor_disabled = 0x0900, ///< Cannot set or query pre processor variables with preprocessing disabled
ERROR_sound_internal_preprocessor = 0x0901,
ERROR_sound_internal_encoder = 0x0902,
ERROR_sound_internal_playback = 0x0903,
ERROR_sound_no_capture_device_available = 0x0904, ///< No audio capture devices are available
ERROR_sound_no_playback_device_available = 0x0905, ///< No audio playback devices are available
ERROR_sound_could_not_open_capture_device = 0x0906, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_could_not_open_playback_device = 0x0907, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_handler_has_device = 0x0908, ///< Attempt to open a sound device on a connection handler which already has an open device. Close the already open device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_invalid_capture_device = 0x0909, ///< Attempt to use a device for capture that does not support capturing audio
ERROR_sound_invalid_playback_device = 0x090a, ///< Attempt to use a device for playback that does not support playback of audio
ERROR_sound_invalid_wave = 0x090b, ///< Attempt to use a non WAV file in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle
ERROR_sound_unsupported_wave = 0x090c, ///< Unsupported wave file used in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle.
ERROR_sound_open_wave = 0x090d, ///< Failure to open the specified sound file
ERROR_sound_internal_capture = 0x090e,
ERROR_sound_device_in_use = 0x090f, ///< Attempt to unregister a custom device that is being used. Close the device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_device_already_registerred = 0x0910, ///< Attempt to register a custom device with a device id that has already been used in a previous call. Device ids must be unique.
ERROR_sound_unknown_device = 0x0911, ///< Attempt to open, close, unregister or use a device which is not known. Custom devices must be registered before being used (see \ref ts3client_registerCustomDevice)
ERROR_sound_unsupported_frequency = 0x0912,
ERROR_sound_invalid_channel_count = 0x0913, ///< Invalid device audio channel count, must be > 0
ERROR_sound_read_wave = 0x0914, ///< Failure to read sound samples from an opened wave file. Is this a valid wave file?
ERROR_sound_need_more_data = 0x0915, // for internal purposes only
ERROR_sound_device_busy = 0x0916, // for internal purposes only
ERROR_sound_no_data = 0x0917, ///< Indicates there is currently no data for playback, e.g. nobody is speaking right now.
ERROR_sound_channel_mask_mismatch = 0x0918, ///< Opening a device with an unsupported channel count
//permissions
ERROR_permissions_client_insufficient = 0x0a08, ///< Not enough permissions to perform the requested activity
ERROR_permissions = 0x0a0c, ///< Permissions to use sound device not granted by operating system, e.g. Windows denied microphone access.
//accounting
ERROR_accounting_virtualserver_limit_reached = 0x0b00, ///< Attempt to use more virtual servers than allowed by the license
ERROR_accounting_slot_limit_reached = 0x0b01, ///< Attempt to set more slots than allowed by the license
ERROR_accounting_license_file_not_found = 0x0b02, // Not used
ERROR_accounting_license_date_not_ok = 0x0b03, ///< License expired or not valid yet
ERROR_accounting_unable_to_connect_to_server = 0x0b04, ///< Failure to communicate with accounting backend
ERROR_accounting_unknown_error = 0x0b05, ///< Failure to write update license file
ERROR_accounting_server_error = 0x0b06, // Not used
ERROR_accounting_instance_limit_reached = 0x0b07, ///< More than one process of the server is running
ERROR_accounting_instance_check_error = 0x0b08, ///< Shared memory access failure.
ERROR_accounting_license_file_invalid = 0x0b09, ///< License is not a TeamSpeak license
ERROR_accounting_running_elsewhere = 0x0b0a, ///< A copy of this server is already running in another instance. Each server may only exist once.
ERROR_accounting_instance_duplicated = 0x0b0b, ///< A copy of this server is running already in this process. Each server may only exist once.
ERROR_accounting_already_started = 0x0b0c, ///< Attempt to start a server that is already running
ERROR_accounting_not_started = 0x0b0d,
ERROR_accounting_to_many_starts = 0x0b0e, ///< Starting instance / virtual servers too often in too short a time period
//provisioning server
/// @cond HAS_PROVISIONING
ERROR_provisioning_invalid_password = 0x1100,
ERROR_provisioning_invalid_request = 0x1101,
ERROR_provisioning_no_slots_available = 0x1102,
ERROR_provisioning_pool_missing = 0x1103,
ERROR_provisioning_pool_unknown = 0x1104,
ERROR_provisioning_unknown_ip_location = 0x1105,
ERROR_provisioning_internal_tries_exceeded = 0x1106,
ERROR_provisioning_too_many_slots_requested = 0x1107,
ERROR_provisioning_too_many_reserved = 0x1108,
ERROR_provisioning_could_not_connect = 0x1109,
ERROR_provisioning_auth_server_not_connected = 0x1110,
ERROR_provisioning_auth_data_too_large = 0x1111,
ERROR_provisioning_already_initialized = 0x1112,
ERROR_provisioning_not_initialized = 0x1113,
ERROR_provisioning_connecting = 0x1114,
ERROR_provisioning_already_connected = 0x1115,
ERROR_provisioning_not_connected = 0x1116,
ERROR_provisioning_io_error = 0x1117,
ERROR_provisioning_invalid_timeout = 0x1118,
ERROR_provisioning_ts3server_not_found = 0x1119,
ERROR_provisioning_no_permission = 0x111A,
/// @endcond
// 0x12 - 0x15 are reserved in rare
// screen share
ERROR_already_registered = 0x1600,
ERROR_stream_session_limit_reached = 0x1601,
ERROR_stream_session_not_found = 0x1602,
ERROR_stream_unknown = 0x1603,
ERROR_stream_not_participating = 0x1604,
ERROR_not_streamer = 0x1605,
ERROR_already_joined = 0x1606,
ERROR_join_request_not_found = 0x1607,
ERROR_sfu_failed_to_start = 0x1608,
};
#endif
@@ -1,236 +0,0 @@
#ifndef TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#define TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Version definitions.
#define TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1 1
// Protocol used for communication between the session subscriber and the session (a single stream).
// Commands are sent bidirectionally or unidirectionally between the parties.
// e.g. SESSION => SUBSCRIBER: ON_FRAME, ON_PAUSED_CHANGED
// e.g. SUBSCRIBER => SESSION: ON_FRAME_ACK, ON_RESIZE
// Command type enum with a lowercase type name.
typedef enum
{
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME = 0,
TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE,
TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED,
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK,
TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP,
TS_SESSION_SUBSCRIBER_CMD_REMOVE_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED,
} ts_session_subscriber_command_type_t;
// Pixel format enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_I420 = 0,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_NV12,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ABGR,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ARGB,
} ts_session_subscriber_pixel_format_t;
// Buffer location enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_CPU = 0,
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_GPU
} ts_session_subscriber_buffer_location_t;
// Buffer type enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_SINGLE = 0,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_MAIN,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_SUB
} ts_session_subscriber_buffer_type_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(push, 4)
#endif
// Main buffer header for shared CPU Memory Front/Back Buffers.
// The Main Buffer contains metadata about the current front/back buffer and the versioning for both the main and sub buffer.
// The information from the main buffer can be used to always read the front buffer.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t front_buffer_index; // index of the front buffer. (0: main buffer, 1: sub buffer)
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_main_buffer_header_t;
// Sub buffer header.
typedef struct
{
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
} ts_session_subscriber_sub_buffer_header_t;
// Single frame buffer header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_single_frame_buffer_header_t;
// Command header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // Total message length (header + payload).
ts_session_subscriber_command_type_t type;
uint64_t target_session_id; // always set to the target session id this command is for or is originating from.
uint64_t target_subscriber_id; // 0 if broadcast.
} ts_session_subscriber_command_header_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME.
// The frame data is not included in the message, but is attached seperately or was sent beforehand. The buffer is identified by it's id.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_id; // buffer id, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_frame_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t frame_id;
} ts_session_subscriber_on_frame_ack_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE.
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t width;
uint32_t height;
} ts_session_subscriber_on_resize_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t paused; // 0 or 1.
} ts_session_subscriber_on_paused_changed_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE.
// Contains a single frame buffer. The header is of format |ts_session_subscriber_single_frame_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
ts_session_subscriber_buffer_type_t buffer_type;
} ts_session_subscriber_on_buffer_single_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK.
// Contains a main buffer and a sub buffer. The main buffer header
// contains metadata about the current front/back buffer and
// is of type |ts_session_subscriber_main_buffer_header_t|.
// The sub buffer's header is of type |ts_session_subscriber_sub_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t main_buffer_ptr; // main buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t main_buffer_length;
uint64_t sub_buffer_ptr; // sub buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t sub_buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
} ts_session_subscriber_on_buffer_front_back_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER.
// SUBSCRIBER => SESSION.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_resp_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_release_buffer_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr;
int bits_per_sample;
int sample_rate;
uint32_t number_of_channels;
uint32_t number_of_frames;
int64_t absolute_capture_timestamp_ms;
float volume;
} ts_session_subscriber_on_audio_frames_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t audio_enabled;
} ts_session_subscriber_on_audio_enabled_changed_payload_t;
// Overall Command structure.
typedef struct
{
ts_session_subscriber_command_header_t header;
union
{
ts_session_subscriber_on_frame_payload_t frame;
ts_session_subscriber_on_resize_payload_t resize;
ts_session_subscriber_on_paused_changed_payload_t paused;
ts_session_subscriber_on_frame_ack_payload_t frame_ack;
ts_session_subscriber_on_buffer_single_payload_t buffer_single;
ts_session_subscriber_on_buffer_front_back_payload_t buffer_front_back;
ts_session_subscriber_on_release_buffer_payload_t release_buffer;
ts_session_subscriber_add_subscriber_payload_t add_subscriber;
ts_session_subscriber_add_subscriber_resp_payload_t add_subscriber_resp;
ts_session_subscriber_on_audio_frames_payload_t audio_frames;
ts_session_subscriber_on_audio_enabled_changed_payload_t audio_enabled_changed;
} payload;
} ts_session_subscriber_command_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif // TS_SESSION_SUBSCRIBER_PROTOCOL_H_
@@ -1,29 +0,0 @@
####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
####### Any changes to this file will be overwritten by the next CMake run ####
####### The input file was team_clientConfig.cmake.in ########
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
macro(set_and_check _var _file)
set(${_var} "${_file}")
if(NOT EXISTS "${_file}")
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
endif()
endmacro()
macro(check_required_components _NAME)
foreach(comp ${${_NAME}_FIND_COMPONENTS})
if(NOT ${_NAME}_${comp}_FOUND)
if(${_NAME}_FIND_REQUIRED_${comp})
set(${_NAME}_FOUND FALSE)
endif()
endif()
endforeach()
endmacro()
####################################################################################
include("${CMAKE_CURRENT_LIST_DIR}/team_clientTargets.cmake")
check_required_components(team_client)
@@ -1,19 +0,0 @@
#----------------------------------------------------------------
# Generated CMake target import file for configuration "Release".
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Import target "teamspeak::client" for configuration "Release"
set_property(TARGET teamspeak::client APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(teamspeak::client PROPERTIES
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.so"
IMPORTED_SONAME_RELEASE "libteamspeak_sdk_client.so"
)
list(APPEND _cmake_import_check_targets teamspeak::client )
list(APPEND _cmake_import_check_files_for_teamspeak::client "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.so" )
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
@@ -1,121 +0,0 @@
# Generated by CMake
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
if(CMAKE_VERSION VERSION_LESS "2.8.3")
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
cmake_policy(PUSH)
cmake_policy(VERSION 2.8.3...4.0)
#----------------------------------------------------------------
# Generated CMake target import file.
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
set(_cmake_targets_defined "")
set(_cmake_targets_not_defined "")
set(_cmake_expected_targets "")
foreach(_cmake_expected_target IN ITEMS teamspeak::client)
list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
if(TARGET "${_cmake_expected_target}")
list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
else()
list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
endif()
endforeach()
unset(_cmake_expected_target)
if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
unset(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
return()
endif()
if(NOT _cmake_targets_defined STREQUAL "")
string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
endif()
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
# Compute the installation prefix relative to this file.
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
set(_IMPORT_PREFIX "")
endif()
# Create imported target teamspeak::client
add_library(teamspeak::client SHARED IMPORTED)
set_target_properties(teamspeak::client PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
)
if(NOT CMAKE_VERSION VERSION_LESS "3.23.0")
target_sources(teamspeak::client
INTERFACE
FILE_SET "public_headers"
TYPE "HEADERS"
BASE_DIRS "${_IMPORT_PREFIX}/include"
FILES "${_IMPORT_PREFIX}/include/teamspeak/clientlib.h" "${_IMPORT_PREFIX}/include/teamspeak/clientlib_sdk.h" "${_IMPORT_PREFIX}/include/teamspeak/video/session_subscriber_protocol.h"
)
else()
set_property(TARGET teamspeak::client
APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
"${_IMPORT_PREFIX}/include"
)
endif()
# Load information for each installed configuration.
file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/team_clientTargets-*.cmake")
foreach(_cmake_config_file IN LISTS _cmake_config_files)
include("${_cmake_config_file}")
endforeach()
unset(_cmake_config_file)
unset(_cmake_config_files)
# Cleanup temporary variables.
set(_IMPORT_PREFIX)
# Loop over all imported files and verify that they actually exist
foreach(_cmake_target IN LISTS _cmake_import_check_targets)
if(CMAKE_VERSION VERSION_LESS "3.28"
OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
if(NOT EXISTS "${_cmake_file}")
message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
\"${_cmake_file}\"
but this file does not exist. Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
\"${CMAKE_CURRENT_LIST_FILE}\"
but not all the files it references.
")
endif()
endforeach()
endif()
unset(_cmake_file)
unset("_cmake_import_check_files_for_${_cmake_target}")
endforeach()
unset(_cmake_target)
unset(_cmake_import_check_targets)
# This file does not depend on other imported targets which have
# been exported from the same project but in a separate export set.
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>TeamSpeakClient.framework/TeamSpeakClient</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>TeamSpeakClient.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>TeamSpeakClient.framework/TeamSpeakClient</string>
<key>LibraryIdentifier</key>
<string>ios-arm64-simulator</string>
<key>LibraryPath</key>
<string>TeamSpeakClient.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>
@@ -1,23 +0,0 @@
#ifndef TEAMLOG_LOGTYPES_H
#define TEAMLOG_LOGTYPES_H
enum LogTypes {
LogType_NONE = 0x0000, ///< Logging is disabled
LogType_FILE = 0x0001, ///< Log to regular log file
LogType_CONSOLE = 0x0002, ///< Log to standard output / error
LogType_USERLOGGING = 0x0004, ///< User defined logging. Will call the \ref ServerLibFunctions.onUserLoggingMessageEvent callback for every message to be logged
LogType_NO_NETLOGGING = 0x0008, ///< Not used
LogType_DATABASE = 0x0010, ///< Log to database (deprecated, server only, no effect in SDK)
LogType_SYSLOG = 0x0020, ///< Log to syslog (only available on Linux)
};
enum LogLevel {
LogLevel_CRITICAL = 0, ///< these messages stop the program
LogLevel_ERROR, ///< everything that is really bad, but not so bad we need to shut down
LogLevel_WARNING, ///< everything that *might* be bad
LogLevel_DEBUG, ///< output that might help find a problem
LogLevel_INFO, ///< informational output, like "starting database version x.y.z"
LogLevel_DEVEL ///< developer only output (will not be displayed in release mode)
};
#endif //TEAMLOG_LOGTYPES_H
@@ -1,58 +0,0 @@
#ifndef CLIENTLIB_SDK_H
#define CLIENTLIB_SDK_H
// system
#include <stdlib.h>
// own
#include "teamspeak/public_definitions.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Sets the client to which to transmit voice. Stops standard channel voice transmission.
*
* The client will still receive voice from their current channel, however their voice will not be transmitted to their
* current channel anymore. If this call is successful (check onServerErrorEvent) then voice of the specified client
* will be transmitted to all specified channels and all the specified clients. Pass 0 to both target parameter arrays
* to restore default behavior of transmitting voice to current channel. You will receive an onServerErrorEvent with the
* passed returnCode indicating whether or not the operation was successful.
*
* @param server_connection_handler_id the connection handler on which to set the whisper list
* @param client_id the client to set the whisper list for. Set to 0 or your own client ID to set your own whisper list.
* @param channel_ids an array of channel ids to transmit voice to.
* @param channel_ids_size number of elements in aforementioned array.
* @param client_ids a zero terminated array of client ids to transmit voice to.
* @param client_ids_size number of elements in aforementioned array.
* @param impersonate if the target client is a webrtc client, the voice packets will look like as if they have been
* send by the invoking client id
* @param return_code a c string to identify this request in callbacks. Pass an empty string if unused.
* @return An error code from the @ref Ts3ErrorType enum indicating either success or the failure reason
*/
EXPORTDLL unsigned int ts_client_request_client_set_whisper_list(uint64 server_connection_handler_id, anyID client_id,
const uint64* channel_ids,
int channel_ids_size,
const anyID* client_ids,
int client_ids_size, int impersonate,
const char* return_code);
/**
* @brief Send a binary-serialized ClientCommandRequest protobuf to the client library.
*
* The response will be delivered asynchronously via the onProtoResponse callback
* as a serialized ClientCommandResponse protobuf.
*
* @param data Pointer to serialized ClientCommandRequest protobuf bytes
* @param size Size of the serialized data in bytes
* @param return_code Caller-provided string to correlate the response in onProtoResponse. May be NULL.
* @return An error code: ERROR_ok on successful dispatch, ERROR_parameter_invalid on parse failure
*/
EXPORTDLL unsigned int ts3client_postProtoCommand(const void* data, size_t size, const char* return_code);
#ifdef __cplusplus
}
#endif
#endif // CLIENTLIB_SDK_H
@@ -1,635 +0,0 @@
#ifndef PUBLIC_DEFINITIONS_H
#define PUBLIC_DEFINITIONS_H
#include "teamlog/logtypes.h"
#define TS3_MAX_SIZE_CHANNEL_NAME 40 // channel name maximum length in characters
#define TS3_MAX_SIZE_VIRTUALSERVER_NAME 64 // virtual server name maximum length in characters
#define TS3_MAX_SIZE_CLIENT_NICKNAME 64 // client display name length limit in characters
#define TS3_MIN_SIZE_CLIENT_NICKNAME 3 // client display name minimum length in characters
#define TS3_MAX_SIZE_REASON_MESSAGE 80 // length limit in characters for kick, move, etc reasons
#define TS3_MAX_SIZE_TEXTMESSAGE 8192 // text message length limit, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_TOPIC 255 // channel topic lengt limith, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_DESCRIPTION 8192 // channel description length limit, measured in bytes (utf8 encoded)
// server welcome message length limit measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_VIRTUALSERVER_WELCOMEMESSAGE 1024
#define TS3_SIZE_MYTSID 44
// minimum amount of seconds before a clientID that was in use can be assigned to a new client
#define TS3_MIN_SECONDS_CLIENTID_REUSE 300
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32)
typedef unsigned __int16 anyID;
typedef unsigned __int64 uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __declspec(dllexport)
#else
#define EXPORTDLL
#endif
#endif
#else
#include <stdint.h>
typedef uint16_t anyID;
typedef uint64_t uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __attribute__((visibility("default")))
#else
#define EXPORTDLL
#endif
#endif
#endif
enum Visibility
{
ENTER_VISIBILITY = 0, ///< Client joined from an unsubscribed channel, or joined the server.
RETAIN_VISIBILITY, ///< Client switched from one subscribed channel to a different subscribed channel.
LEAVE_VISIBILITY ///< Client switches to an unsubscribed channel, or disconnected from server.
};
enum ConnectStatus
{
STATUS_DISCONNECTED = 0, ///< There is no activity to the server, this is the default value
STATUS_CONNECTING, ///< We are trying to connect, we haven't got a client id yet, we haven't been accepted by the server
STATUS_CONNECTED, ///< The server has accepted us, we can talk and hear and we have a client id, but we don't
///< have the channels and clients yet, we can get server infos (welcome msg etc.)
STATUS_CONNECTION_ESTABLISHING, ///< we are connected and we are visible
STATUS_CONNECTION_ESTABLISHED, ///< we are connected and we have the client and channels available
};
enum LocalTestMode
{
TEST_MODE_OFF = 0,
TEST_MODE_VOICE_LOCAL_ONLY,
TEST_MODE_VOICE_LOCAL_AND_REMOTE,
TEST_MODE_TALK_STATUS_CHANGES_ONLY
};
enum TalkStatus
{
STATUS_NOT_TALKING = 0, ///< client is not talking
STATUS_TALKING = 1, ///< client is talking
STATUS_TALKING_WHILE_DISABLED = 2, ///< client is talking while the microphone is muted (only valid for own client)
};
enum CodecType
{
CODEC_SPEEX_NARROWBAND = 0, ///< (deprecated) mono, 16bit, 8kHz, bitrate dependent on the quality setting
CODEC_SPEEX_WIDEBAND, ///< (deprecated) mono, 16bit, 16kHz, bitrate dependent on the quality setting
CODEC_SPEEX_ULTRAWIDEBAND, ///< (deprecated) mono, 16bit, 32kHz, bitrate dependent on the quality setting
CODEC_CELT_MONO, ///< (deprecated) mono, 16bit, 48kHz, bitrate dependent on the quality setting
CODEC_OPUS_VOICE, ///< mono, 16bit, 48khz, bitrate dependent on the quality setting, optimized for voice
CODEC_OPUS_MUSIC, ///< stereo, 16bit, 48khz, bitrate dependent on the quality setting, optimized for music
};
enum CodecEncryptionMode
{
CODEC_ENCRYPTION_PER_CHANNEL = 0, ///< voice data encryption decided per channel
CODEC_ENCRYPTION_FORCED_OFF, ///< voice data encryption disabled
CODEC_ENCRYPTION_FORCED_ON, ///< voice data encryption enabled
};
enum TextMessageTargetMode
{
TextMessageTarget_CLIENT = 1, ///< Message is a private message to another client
TextMessageTarget_CHANNEL, ///< Message is sent to a channel, received by all clients in that channel at the time
TextMessageTarget_SERVER, ///< Message is sent to every client on the server
TextMessageTarget_MAX
};
enum MuteInputStatus
{
MUTEINPUT_NONE = 0, ///< Microphone is not muted, audio is sent to the server
MUTEINPUT_MUTED, ///< Microphone is muted, no audio is transmitted to the server
};
enum MuteOutputStatus
{
MUTEOUTPUT_NONE = 0, ///< Speaker is active, server is sending us audio
MUTEOUTPUT_MUTED, ///< Speaker is muted, server is not sending audio to us
};
enum HardwareInputStatus
{
HARDWAREINPUT_DISABLED = 0, ///< no capture device opened
HARDWAREINPUT_ENABLED, ///< capture device open
};
enum HardwareOutputStatus
{
HARDWAREOUTPUT_DISABLED = 0, ///< no playback device opened
HARDWAREOUTPUT_ENABLED, ///< playback device open
};
enum InputDeactivationStatus
{
INPUT_ACTIVE = 0, ///< Audio is captured from the capture device.
INPUT_DEACTIVATED = 1, ///< No audio is captured from the capture device.
};
enum ReasonIdentifier
{
REASON_NONE = 0, ///< no reason data
REASON_MOVED = 1, ///< client was moved
REASON_SUBSCRIPTION = 2, // no reason data
REASON_LOST_CONNECTION = 3, // reasonmsg=reason
REASON_KICK_CHANNEL = 4, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER = 5, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER_BAN = 6, //{SectionInvoker} reasonmsg=reason bantime=time //{SectionInvoker} is only added server->client
REASON_SERVERSTOP = 7, // reasonmsg=reason
REASON_CLIENTDISCONNECT = 8, // reasonmsg=reason
REASON_CHANNELUPDATE = 9, // no reason data
REASON_CHANNELEDIT = 10, //{SectionInvoker}
REASON_CLIENTDISCONNECT_SERVER_SHUTDOWN = 11, // reasonmsg=reason
};
enum Protocol_Encryption_Cipher
{
AES_128 = 0b00000000,
AES_256 = 0b00000001,
PROTOCOL_ENCRYPTION_CIPHER_END_MARKER,
RESERVED = 0b00010000, // reserved until puzzle v2 is fully released, then can be reused
PUZZLE_2 = 0b00100000,
};
enum ChannelProperties
{
CHANNEL_NAME = 0, ///< String. Read/Write. Name of the channel. Always available.
CHANNEL_TOPIC, ///< String. Read/Write. Short single line text describing what the channel is about. Always available.
CHANNEL_DESCRIPTION, ///< String. Read/Write. Arbitrary text (up to 8k bytes) with information about the channel.
///< Must be requested (\ref ts3client_requestChannelDescription)
CHANNEL_PASSWORD, ///< String. Read/Write. Password of the channel. Read access is limited to the server. Clients
///< will only ever see the last password they attempted to use when joining the channel. Always available.
CHANNEL_CODEC, ///< Integer. Read/Write. The codec this channel is using. One of the values from the \ref CodecType
///< enum. Always available.
CHANNEL_CODEC_QUALITY, ///< Integer. Read/Write. The quality setting of the channel. Valid values are 0 to 10 inclusive.
///< Higher value means better voice quality but also more bandwidth usage. Always available.
CHANNEL_MAXCLIENTS, ///< Integer. Read/Write. The number of clients that can be in the channel simultaneously.
///< Always available.
CHANNEL_MAXFAMILYCLIENTS, ///< Integer. Read/Write. The total number of clients that can be in this channel and all
///< sub channels of this channel. Always available.
CHANNEL_ORDER, ///< UInt64. Read/Write. The ID of the channel below which this channel should be displayed. If 0
///< the channel is sorted at the top of the current level. Always available.
CHANNEL_FLAG_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when empty.
///< Permanent channels are stored to the database and available after server restart. SDK
///< users will need to take care of restoring channel at server start on their own.
///< Mutually exclusive with \ref CHANNEL_FLAG_SEMI_PERMANENT. Always available.
CHANNEL_FLAG_SEMI_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when
///< empty. Semi permanent channels are not stored to disk and gone after server
///< restart but remain while empty. Mutually exclusive with \ref
///< CHANNEL_FLAG_PERMANENT. Always available.
CHANNEL_FLAG_DEFAULT, ///< Integer. Read/Write. Boolean (1/0). The default channel is the channel that all clients
///< are located in when they join the server, unless the client explicitly specified a
///< different channel when connecting and is allowed to join their preferred channel. Only
///< one channel on the server can have this flag set. The default channel must have \ref
///< CHANNEL_FLAG_PERMANENT set. Always available.
CHANNEL_FLAG_PASSWORD, ///< Integer. Read/Write. Boolean (1/0) indicating whether this channel is password protected.
///< When removing or setting \ref CHANNEL_PASSWORD you also need to adjust this flag.
CHANNEL_CODEC_LATENCY_FACTOR, ///< (deprecated) Integer. Read/Write. Allows to increase packet size, reducing
///< bandwith at the cost of higher latency of voice transmission. Valid values are
///< 1-10 inclusive. 1 is the default and offers the lowest latency. Always available.
CHANNEL_CODEC_IS_UNENCRYPTED, ///< Integer. Read/Write. Boolean (1/0). If 0 voice data is encrypted, if 1 the voice
///< data is not encrypted. Only used if the server \ref
///< VIRTUALSERVER_CODEC_ENCRYPTION_MODE is set to \ref CODEC_ENCRYPTION_PER_CHANNEL.
///< Always available.
CHANNEL_SECURITY_SALT, ///< String. Read/Write. SDK Only, not used by TeamSpeak. This channels security hash. When
///< a client joins their \ref CLIENT_SECURITY_HASH is compared to this value, to allow or
///< deny the client access to the channel. Used to enforce clients joining the server with
///< specific identity and \ref CLIENT_META_DATA. See SDK Documentation about this feature
///< for further details. Always available.
CHANNEL_DELETE_DELAY, ///< UInt64. Read/Write. Number of seconds deletion of temporary channels is delayed after
///< the last client leaves the channel. Channel is only deleted if empty when the delete
///< delay expired. Always available.
CHANNEL_UNIQUE_IDENTIFIER, ///< String. Read only. An identifier that uniquely identifies a channel. Available in
///< Server >= 3.10.0
CHANNEL_ENDMARKER,
};
enum ClientProperties
{
CLIENT_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Public Identity, can be used to identify a client
///< installation. Remains identical as long as the client keeps using the same
///< identity. Available for visible clients.
CLIENT_NICKNAME, ///< String. Read/Write. Display name of the client. Available for visible clients.
CLIENT_VERSION, ///< String. Read only. Version String of the client used. For clients other than ourself this
///< needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_PLATFORM, ///< String. Read only. Operating system used by the client. For other clients other than ourself
///< this needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_FLAG_TALKING, ///< Integer. Read only. Whether the client is talking. Available on clients that are either
///< whispering to us, or in our channel.
CLIENT_INPUT_MUTED, ///< Integer. Read/Write. Microphone mute status. Available for visible clients. One of the
///< values from the \ref MuteInputStatus enum.
CLIENT_OUTPUT_MUTED, ///< Integer. Read/Write. Speaker mute status. Speaker mute implies microphone mute. Available
///< for visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_OUTPUTONLY_MUTED, ///< Integer. Read/Write. Speaker mute status. Microphone may be active. Available for
///< visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_INPUT_HARDWARE, ///< Integer. Read only. Indicates whether a capture device is open. Available for visible
///< clients. One of the values from the \ref HardwareInputStatus enum.
CLIENT_OUTPUT_HARDWARE, ///< Integer. Read only. Indicates whether a playback device is open. Available for visible
///< clients. One of the values from the \ref HardwareOutputStatus enum.
CLIENT_INPUT_DEACTIVATED, ///< Integer. Read/Write. Not available server side. Local microphone mute status.
///< Available only for own client. Used to implement Push To Talk. One of the values from
///< the \ref InputDeactivationStatus enum.
CLIENT_IDLE_TIME, ///< UInt64. Read only. Seconds since last activity. Available only for own client.
CLIENT_DEFAULT_CHANNEL, ///< String. Read only. User specified channel they joined when connecting to the server.
///< Available only for own client.
CLIENT_DEFAULT_CHANNEL_PASSWORD, ///< String. Read only. User specified channel password for the channel they
///< attempted to join when connecting to the server. Available only for own
///< client.
CLIENT_SERVER_PASSWORD, ///< String. Read only. User specified server password. Available only for own client.
CLIENT_META_DATA, ///< String. Read/Write. Can be used to store up to 4096 bytes of information on clients. Not
///< used by TeamSpeak. Available for visible clients.
CLIENT_IS_MUTED, ///< Integer. Read only. Not available server side. Indicates whether we have muted the client
///< using \ref ts3client_requestMuteClients. Available for visible clients other than ourselves.
CLIENT_IS_RECORDING, ///< Integer. Read only. Indicates whether the client is recording incoming audio. Available
///< for visible clients.
CLIENT_VOLUME_MODIFICATOR, ///< Integer. Read only. Volume adjustment for this client as set by \ref
///< ts3client_setClientVolumeModifier. Available for visible clients.
CLIENT_VERSION_SIGN, ///< String. Read only. TeamSpeak internal signature.
CLIENT_SECURITY_HASH, ///< String. Read/Write. This clients security hash. Not used by TeamSpeak, SDK only. Hash is
///< provided by an outside source. A channel will use the security salt + other client data
///< to calculate a hash, which must be the same as the one provided here. See SDK
///< documentation about Client / Channel Security Hashes for more details.
CLIENT_ENCRYPTION_CIPHERS, ///< String. Read only. SDK only. List of available ciphers this client can use.
CLIENT_IS_STREAMING, ///< bool. Read only, Is currently streaming.
CLIENT_ENDMARKER,
};
enum VirtualServerProperties
{
VIRTUALSERVER_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Unique identifier for a virtual server, does not
///< change on server restart. Available if \ref ts3client_getConnectionStatus
///< is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_NAME, ///< String. Read/Write. The virtual server display name. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_WELCOMEMESSAGE, ///< String. Read/Write. The welcome message displayed to clients on connect.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED. Not
///< updated automatically when changed, updates need to be requested (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_PLATFORM, ///< String. Read only. The operating system the server is running on. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_VERSION, ///< String. Read only. The server software version string. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_MAXCLIENTS, ///< UInt64. Read/Write. The maximum number of clients that can be connected
///< simultaneously. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_PASSWORD, ///< String. Read/Write. The server password. Read access is limited to the server. Clients
///< will only get the password they supplied when connecting. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_CLIENTS_ONLINE, ///< UInt64. Read only. The current number of clients connected to the server,
///< including query connections. Only available on request (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_CHANNELS_ONLINE, ///< UInt64. Read only. The current number of channels on the server. Only
///< available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CREATED, ///< Integer. Read only. The time this virtual server was created as unix timestamp.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_UPTIME, ///< UInt64. Read only. Number of seconds that have passed since the virtual server was
///< started. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CODEC_ENCRYPTION_MODE, ///< Integer. Read/Write. Boolean (1/0) that specifies if voice data is encrypted
///< during transfer. One of the values from the \ref CodecEncryptionMode enum.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_ENCRYPTION_CIPHERS, ///< String. Read/Write. Comma separated list of available ciphers to encrypt the
///< connection. The server will use the first cipher in the list that is also
///< listed in the \ref CLIENT_ENCRYPTION_CIPHERS of the connecting client.
///< Clients will fail to connect if no match is found. Always available.
VIRTUALSERVER_ADDRESS, ///< Any resolvable address for the specific virtual server
VIRTUALSERVER_VERSION_SIGN, ///< String. Read only. Signature of Platform and Version.
VIRTUALSERVER_ENDMARKER,
VIRTUALSERVER_FILEBASE = 24, ///< String. Read only. The path to the base directory used to store files
///< transferred using file transfer. Available only on the server. Is set by \ref
///< ts3server_enableFileManager
VIRTUALSERVER_MAX_DOWNLOAD_TOTAL_BANDWIDTH = 29, ///< UInt64. Read/Write. Maximum traffic in bytes the server can
///< use for file transfer downloads. Only available on request
///< (\ref ts3client_requestServerVariables).
VIRTUALSERVER_MAX_UPLOAD_TOTAL_BANDWIDTH = 30, ///< UInt64. Read/Write. Maximum traffic in bytes the server can use
///< for file transfer uploads. Only available on request (=>
///< requestServerVariables)
VIRTUALSERVER_LOG_FILETRANSFER = 64 ///< Integer. Read/Write. Boolean (1/0) indicating whether to include file
///< transfer activities (uploading or downloading of files) in the server log.
///< Always available.
};
/**
* Various connection properties.
* These are all read only, and except for your own client must be requested using \ref ts3client_requestConnectionInfo
*/
enum ConnectionProperties
{
CONNECTION_PING = 0, ///< UInt64. Round trip latency for the connection based on the last 5 seconds. On the server
///< this is the average across all connected clients for the last 5 seconds.
CONNECTION_PING_DEVIATION, ///< Double. Standard deviation for the round trip latency in \ref CONNECTION_PING
CONNECTION_CONNECTED_TIME, ///< UInt64. Seconds the client has been connected.
CONNECTION_IDLE_TIME, ///< UInt64. Time in seconds since the last activity (voice transmission, switching channels,
///< changing mic / speaker mute status) of the client.
CONNECTION_CLIENT_IP, ///< String. IP of this client (as seen from the server side)
CONNECTION_CLIENT_PORT, ///< UInt64. Client side port of this client (as seen from the server side)
CONNECTION_SERVER_IP, ///< String. The IP or hostname used to connect to the server. Only available on yourself.
CONNECTION_SERVER_PORT, ///< UInt64. The server port connected to. Only available on yourself.
CONNECTION_PACKETS_SENT_SPEECH, ///< UInt64. The number of voice packets transmitted by the client.
CONNECTION_PACKETS_SENT_KEEPALIVE, ///< UInt64. The number of keep alive packets transmitted by the client.
CONNECTION_PACKETS_SENT_CONTROL, ///< UInt64. The number of command & control packets transmitted by the client.
CONNECTION_PACKETS_SENT_TOTAL, ///< UInt64. Total number of packets transmitted by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_SENT_SPEECH, \ref CONNECTION_PACKETS_SENT_KEEPALIVE and
///< \ref CONNECTION_PACKETS_SENT_CONTROL
CONNECTION_BYTES_SENT_SPEECH, ///< UInt64. Outgoing traffic used for voice data by the client.
CONNECTION_BYTES_SENT_KEEPALIVE, ///< UInt64. Outgoing traffic used for keeping the connection alive by the client.
CONNECTION_BYTES_SENT_CONTROL, ///< UInt64. Outgoing traffic used for command & control data by the client.
CONNECTION_BYTES_SENT_TOTAL, ///< UInt64. Total outgoing traffic to the server by this client. Equal to the sum of
///< \ref CONNECTION_BYTES_SENT_SPEECH, \ref CONNECTION_BYTES_SENT_KEEPALIVE and \ref
///< CONNECTION_BYTES_SENT_CONTROL
CONNECTION_PACKETS_RECEIVED_SPEECH, ///< UInt64. Number of voice packets received by the client.
CONNECTION_PACKETS_RECEIVED_KEEPALIVE, ///< UInt64. Number of keep alive packets received by the client.
CONNECTION_PACKETS_RECEIVED_CONTROL, ///< UInt64. Number of command & control packets received by the client.
CONNECTION_PACKETS_RECEIVED_TOTAL, ///< UInt64. Total number of packets received by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_RECEIVED_SPEECH, \ref
///< CONNECTION_PACKETS_RECEIVED_KEEPALIVE and \ref
///< CONNECTION_PACKETS_RECEIVED_CONTROL
CONNECTION_BYTES_RECEIVED_SPEECH, ///< UInt64. Incoming traffic used by the client for voice data.
CONNECTION_BYTES_RECEIVED_KEEPALIVE, ///< UInt64. Incoming traffic used by the client to keep the connection alive.
CONNECTION_BYTES_RECEIVED_CONTROL, ///< UInt64. Incoming traffic used by the client for command & control data.
CONNECTION_BYTES_RECEIVED_TOTAL, ///< UInt64. Total incoming traffic used by the client. Equal to the sum of \ref
///< CONNECTION_BYTES_RECEIVED_SPEECH, \ref CONNECTION_BYTES_RECEIVED_KEEPALIVE and
///< \ref CONNECTION_BYTES_RECEIVED_CONTROL
CONNECTION_PACKETLOSS_SPEECH, ///< Double. Percentage points of voice packets for the client that did not arrive at
///< the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_KEEPALIVE, ///< Double. Percentage points of keep alive packets for the client that did not
///< arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_CONTROL, ///< Double. Percentage points of command & control packets for the client that did
///< not arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_TOTAL, ///< Double. Cumulative chance in percentage points with which a packet round trip
///< failed because a packet was lost
CONNECTION_SERVER2CLIENT_PACKETLOSS_SPEECH, ///< Double. Probability with which a voice packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< server was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the server was not
///< received by the client.
CONNECTION_CLIENT2SERVER_PACKETLOSS_SPEECH, ///< Double. Probability with which a speech packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< client was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the client was not
///< received by the server.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes sent for speech data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes sent for keepalive data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes sent for control data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes sent in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second sent for speech data, averaged over the
///< last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second sent for keepalive data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second sent for control data, averaged over
///< the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second sent, averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes received for speech data in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes received for keepalive data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes received for control data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes received in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second received for speech data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second received for keepalive data,
///< averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second received for control data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second received, averaged over the last minute.
CONNECTION_DUMMY_0,
CONNECTION_DUMMY_1,
CONNECTION_DUMMY_2,
CONNECTION_DUMMY_3,
CONNECTION_DUMMY_4,
CONNECTION_DUMMY_5,
CONNECTION_DUMMY_6,
CONNECTION_DUMMY_7,
CONNECTION_DUMMY_8,
CONNECTION_DUMMY_9,
CONNECTION_FILETRANSFER_BANDWIDTH_SENT, ///< UInt64. Current file transfer upstream activity in bytes per second.
///< Only available on request (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BANDWIDTH_RECEIVED, ///< UInt64. Current file transfer downstream activity in bytes per
///< second. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_RECEIVED_TOTAL, ///< UInt64. Total downstream traffic, in bytes, used for file
///< transfer since the server was started. Only available on request
///< (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_SENT_TOTAL, ///< UInt64. Total upstream traffic, in bytes, used for file transfer
///< since the server was started. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_ENDMARKER
};
/**
* Describes a client position in 3 dimensional space, used for 3D Sound.
*/
typedef struct
{
float x; ///< X co-ordinate in 3D space.
float y; ///< Y co-ordinate in 3D space.
float z; ///< Z co-ordinate in 3D space.
} TS3_VECTOR;
enum GroupWhisperType
{
GROUPWHISPERTYPE_SERVERGROUP = 0, ///< Whisper list consists of server groups
GROUPWHISPERTYPE_CHANNELGROUP = 1, ///< Whisper list consists of channel groups
GROUPWHISPERTYPE_CHANNELCOMMANDER = 2, ///< whisper to channel commanders
GROUPWHISPERTYPE_ALLCLIENTS = 3, ///< whisper to all clients
GROUPWHISPERTYPE_ENDMARKER,
};
enum GroupWhisperTargetMode
{
GROUPWHISPERTARGETMODE_ALL = 0,
GROUPWHISPERTARGETMODE_CURRENTCHANNEL = 1, ///< Whisper the current channel of the client
GROUPWHISPERTARGETMODE_PARENTCHANNEL = 2, ///< Whisper the parent channel of whatever channel the client is currently in
GROUPWHISPERTARGETMODE_ALLPARENTCHANNELS = 3, ///< Whipser to the parent channel and all their parent channels as well
GROUPWHISPERTARGETMODE_CHANNELFAMILY = 4, ///< Whisper to the current channel and all its sub channels
GROUPWHISPERTARGETMODE_ANCESTORCHANNELFAMILY = 5, ///< Whisper to the current channel, all its parent and sub channels.
GROUPWHISPERTARGETMODE_SUBCHANNELS = 6, ///< Whisper to all sub channels of the current channel of the client
GROUPWHISPERTARGETMODE_ENDMARKER,
};
enum MonoSoundDestination
{
MONO_SOUND_DESTINATION_ALL = 0, ///< Send mono sound to all available speakers
MONO_SOUND_DESTINATION_FRONT_CENTER = 1, ///< Send mono sound to front center speaker if available
MONO_SOUND_DESTINATION_FRONT_LEFT_AND_RIGHT = 2 ///< Send mono sound to front left/right speakers if available
};
enum SecuritySaltOptions
{
SECURITY_SALT_CHECK_NICKNAME = 1, ///< put nickname into security hash
SECURITY_SALT_CHECK_META_DATA = 2 ///< put meta data into security hash
};
/*this enum is used to disable client commands on the server*/
enum ClientCommand
{
CLIENT_COMMAND_requestConnectionInfo = 0, ///< disable client connection info request (client bandwidth usage, ip,
///< port, ping)
CLIENT_COMMAND_requestClientMove = 1, ///< disable moving clients
CLIENT_COMMAND_requestXXMuteClients = 2, ///< disable muting other clients
CLIENT_COMMAND_requestClientKickFromXXX = 3, ///< disable kicking clients
CLIENT_COMMAND_flushChannelCreation = 4, ///< disable creating channels
CLIENT_COMMAND_flushChannelUpdates = 5, ///< disable editing channels
CLIENT_COMMAND_requestChannelMove = 6, ///< disable moving channels
CLIENT_COMMAND_requestChannelDelete = 7, ///< disable deleting channels
CLIENT_COMMAND_requestChannelDescription = 8, ///< disable channel descriptions
CLIENT_COMMAND_requestChannelXXSubscribeXXX = 9, ///< disable being able to see clients in channels other than the
///< current channel the client is in
CLIENT_COMMAND_requestServerConnectionInfo = 10, ///< disable server connection info request (server bandwidth
///< usage, ip, port, ping)
CLIENT_COMMAND_requestSendXXXTextMsg = 11, ///< disable text messaging
CLIENT_COMMAND_filetransfers = 12, ///< disable file transfer
CLIENT_COMMAND_ENDMARKER
};
/* Access Control List*/
enum ACLType
{
ACL_NONE = 0,
ACL_WHITE_LIST = 1,
ACL_BLACK_LIST = 2
};
/* file transfer actions*/
enum FTAction
{
FT_INIT_SERVER = 0, ///< The virtual server is created. result->channelPath can be changed to create a different
///< directory than the default 'virtualserver_x' where x is the virtual server.
FT_INIT_CHANNEL = 1, ///< A channel is created. result->channelPath can be changed to create a different directory
///< then the default 'channel_x' where x is the channel id.
FT_UPLOAD = 2, ///< A file is being uploaded. All values in the result struct can be modified.
FT_DOWNLOAD = 3, ///< A file is being downloaded. All values in the result struct can be modified.
FT_DELETE = 4, ///< A file is being deleted. All values in the result struct can be modified.
FT_CREATEDIR = 5, ///< A directory is being created in a channel. All values in the result struct can be modified.
FT_RENAME = 6, ///< A file or folder is being renamed. The callback will be called twice! Once for the old and then
///< for the new name. All values in the result struct can be modified.
FT_FILELIST = 7, ///< A directory listing is requested. All values in the result struct can be modified.
FT_FILEINFO = 8 ///< Information of a file is requested. All values in the result struct can be modified.
};
/* file transfer status */
enum FileTransferState
{
FILETRANSFER_INITIALISING = 0, ///< File transfer is establishing connection.
FILETRANSFER_ACTIVE, ///< File transfer is in progress
FILETRANSFER_FINISHED, ///< File transfer has finished
};
/* file transfer types */
enum FileTransferType
{
FileListType_Directory = 0, ///< The file entry is a directory
FileListType_File, ///< The file entry is a regular file
};
/* some structs to handle variables in callbacks */
#define MAX_VARIABLES_EXPORT_COUNT 64
struct VariablesExportItem
{
unsigned char itemIsValid; ///< Whether or not there is any data in this item. Ignore this item if this is 0.
unsigned char proposedIsSet; ///< The value in proposed is set. If 0 ignore proposed
const char* current; ///< current value (stored in memory)
const char* proposed; ///< New value to change to (const, so no updates please)
};
struct VariablesExport
{
struct VariablesExportItem items[MAX_VARIABLES_EXPORT_COUNT];
};
struct ClientMiniExport
{
anyID ID; ///< id of the client
uint64 channel; ///< the channel the client is in
const char* ident; ///< client public identity
const char* nickname; ///< client display name
};
/**
* Structure used to describe a file transfer in the \ref ServerLibFunctions.onTransformFilePath callback.
* This describes the original values, and also contains hints for length limitations of the result parameter
* of the callback.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExport
{
uint64 channel; ///< The channel id of the file. 0 if action is \ref FT_INIT_SERVER
const char* filename; ///< utf8 encoded c string containing the original file name as intended by the client.
int action; ///< The action to be performed. One of the values from the \ref FTAction enum. Defines which values of
///< the result struct can be modified.
int transformedFileNameMaxSize; ///< The maximum length the file name can be rewritten to.
int channelPathMaxSize; ///< The maximum length the path can be rewritten to.
};
/**
* Structure to rewrite the file transfer file name and path in the \ref ServerLibFunctions.onTransformFilePath callback.
* The lengths are limited as described in the original parameter.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExportReturns
{
char* transformedFileName; ///< pointer to target file name. Fill the memory pointed to with an utf8 encoded c string
///< containing the new file name. Limited to original->transformedFileNameMaxSize bytes.
char* channelPath; ///< pointer to memory for new path. Fill the memory pointed to with an utf8 encoded c string
///< containing the new path. Limited to original->channelPathMaxSize bytes.
int logFileAction; ///< boolean (1/0). Whether to log this file transfer to the log. Action is not logged regardless
///< of this value if the servers \ref VIRTUALSERVER_LOG_FILETRANSFER property is 0.
};
struct FileTransferCallbackExport
{
anyID clientID; ///< the client who started the file transfer
anyID transferID; ///< local identifier of the transfer that has completed
anyID remoteTransferID; ///< remote identifier of the transfer that has completed
unsigned int status; ///< status of the transfer. One of the values from the \ref FileTransferState enum
const char* statusMessage; ///< utf8 encoded c string containing a human readable description of the status
uint64 remotefileSize; ///< size in bytes of the complete file to be transferred
uint64 bytes; ///< number of bytes transferred. Same as remotefileSize when the transfer completed entirely.
int isSender; ///< boolean. 1 if the server is sending the file. 0 if the server is receiving the file.
};
/*define for file transfer bandwith limits*/
#define BANDWIDTH_LIMIT_UNLIMITED 0xFFFFFFFFFFFFFFFFll
/*defines for speaker locations used by some sound callbacks*/
#ifndef SPEAKER_FRONT_LEFT
#define SPEAKER_FRONT_LEFT 0x1
#define SPEAKER_FRONT_RIGHT 0x2
#define SPEAKER_FRONT_CENTER 0x4
#define SPEAKER_LOW_FREQUENCY 0x8
#define SPEAKER_BACK_LEFT 0x10
#define SPEAKER_BACK_RIGHT 0x20
#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
#define SPEAKER_BACK_CENTER 0x100
#define SPEAKER_SIDE_LEFT 0x200
#define SPEAKER_SIDE_RIGHT 0x400
#define SPEAKER_TOP_CENTER 0x800
#define SPEAKER_TOP_FRONT_LEFT 0x1000
#define SPEAKER_TOP_FRONT_CENTER 0x2000
#define SPEAKER_TOP_FRONT_RIGHT 0x4000
#define SPEAKER_TOP_BACK_LEFT 0x8000
#define SPEAKER_TOP_BACK_CENTER 0x10000
#define SPEAKER_TOP_BACK_RIGHT 0x20000
#endif
#define SPEAKER_HEADPHONES_LEFT 0x10000000
#define SPEAKER_HEADPHONES_RIGHT 0x20000000
#define SPEAKER_MONO 0x40000000
#endif /*PUBLIC_DEFINITIONS_H*/
@@ -1,217 +0,0 @@
#ifndef PUBLIC_ERRORS_H
#define PUBLIC_ERRORS_H
//The idea here is: the values are 2 bytes wide, the first byte identifies the group, the second the count within that group
enum Ts3ErrorType {
//general
ERROR_ok = 0x0000, ///< Indicates success.
ERROR_undefined = 0x0001,
ERROR_not_implemented = 0x0002, ///< The attempted operation is not available in this context
ERROR_ok_no_update = 0x0003, ///< Indicates success, but no change occurred. Returned for example upon flushing (e.g. using \ref ts3client_flushChannelUpdates) when all indicated changes already matched the current state.
ERROR_dont_notify = 0x0004,
ERROR_lib_time_limit_reached = 0x0005,
ERROR_out_of_memory = 0x0006, ///< Not enough system memory to perform operation
ERROR_canceled = 0x0007,
ERROR_ok_no_error_event = 0x0008, ///< Indicates success, but no error event was generated. This is used because of the return code management and reduce packets.
//dunno
ERROR_command_not_found = 0x0100,
ERROR_unable_to_bind_network_port = 0x0101, ///< Unspecified failure to create a listening port
ERROR_no_network_port_available = 0x0102, ///< Failure to initialize a listening port for FileTransfer
ERROR_port_already_in_use = 0x0103, ///< Specified port is already in use by a different application
ERROR_command_line_parse_failed = 0x0104, ///< Command line arguments are invalid
ERROR_command_line_exit_version = 0x0105, ///< Command line specified version. The process should exit with code 0 after printing the version.
ERROR_command_line_exit_help = 0x0106, ///< Command line specified help. The process should exit with code 0 after priting the help.
//client
ERROR_client_invalid_id = 0x0200, ///< Client no longer connected
ERROR_client_nickname_inuse = 0x0201, ///< Client name is already in use. Client names must be unique
ERROR_client_protocol_limit_reached = 0x0203, ///< Too many clients on the server
ERROR_client_invalid_type = 0x0204, ///< Function called for normal clients that is only available for query clients or vice versa
ERROR_client_already_subscribed = 0x0205, ///< Attempting to subscribe to a channel already subscribed to
ERROR_client_not_logged_in = 0x0206,
ERROR_client_could_not_validate_identity = 0x0207, ///< Identity not valid or insufficient security level
ERROR_client_invalid_password = 0x0208,
ERROR_client_version_outdated = 0x020a, ///< Server requires newer client version as determined by the min_client_version properties
ERROR_client_is_flooding = 0x020c, ///< Triggered flood protection. Further information is supplied in the extra message if applicable.
ERROR_client_hacked = 0x020d,
ERROR_client_cannot_verify_now = 0x020e,
ERROR_client_login_not_permitted = 0x020f,
ERROR_client_not_subscribed = 0x0210, ///< Action is only available on subscribed channels
//channel
ERROR_channel_invalid_id = 0x0300, ///< Channel does not exist on the server (any longer)
ERROR_channel_protocol_limit_reached = 0x0301, ///< Too many channels on the server
ERROR_channel_already_in = 0x0302, ///< Attempting to move a client or channel to its current channel
ERROR_channel_name_inuse = 0x0303, ///< Channel name is already taken by another channel. Channel names must be unique
ERROR_channel_not_empty = 0x0304, ///< Attempting to delete a channel with clients or sub channels in it
ERROR_channel_can_not_delete_default = 0x0305, ///< Default channel cannot be deleted. Set a new default channel first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_default_require_permanent = 0x0306, ///< Attempt to set a non permanent channel as default channel. Set channel to permanent first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_invalid_flags = 0x0307, ///< Invalid combination of \ref ChannelProperties, trying to remove \ref CHANNEL_FLAG_DEFAULT or set a password on the default channel
ERROR_channel_parent_not_permanent = 0x0308, ///< Attempt to move a permanent channel into a non-permanent one, or set a channel to be permanent that is a sub channel of a non-permanent one
ERROR_channel_maxclients_reached = 0x0309, ///< Channel is full as determined by its \ref CHANNEL_MAXCLIENTS setting
ERROR_channel_maxfamily_reached = 0x030a, ///< Channel tree is full as determined by its \ref CHANNEL_MAXFAMILYCLIENTS setting
ERROR_channel_invalid_order = 0x030b, ///< Invalid value for the \ref CHANNEL_ORDER property. The specified channel must exist on the server and be on the same level.
ERROR_channel_no_filetransfer_supported = 0x030c, ///< Invalid \ref CHANNEL_FILEPATH set for the channel
ERROR_channel_invalid_password = 0x030d, ///< Channel has a password not matching the password supplied in the call
// used in public_rare_errors = 0x030e,
ERROR_channel_invalid_security_hash = 0x030f,
//server
ERROR_server_invalid_id = 0x0400, ///< Chosen virtual server does not exist or is offline
ERROR_server_running = 0x0401, ///< attempting to delete a server that is running. Stop the server before deleting it.
ERROR_server_is_shutting_down = 0x0402, ///< Client disconnected because the server is going offline
ERROR_server_maxclients_reached = 0x0403, ///< Given in the onConnectStatusChange event when the server has reached its maximum number of clients as defined by the \ref VIRTUALSERVER_MAXCLIENTS property
ERROR_server_invalid_password = 0x0404, ///< Specified server password is wrong. Provide the correct password in the \ref ts3client_startConnection / \ref ts3client_startConnectionWithChannelID call.
ERROR_server_is_virtual = 0x0407, ///< Server is in virtual status. The attempted action is not possible in this state. Start the virtual server first.
ERROR_server_is_not_running = 0x0409, ///< Attempting to stop a server that is not online.
ERROR_server_is_booting = 0x040a, // Not used
ERROR_server_status_invalid = 0x040b,
ERROR_server_version_outdated = 0x040d, ///< Attempt to connect to an outdated server version. The server needs to be updated.
ERROR_server_duplicate_running = 0x040e, ///< This server is already running within the instance. Each virtual server may only exist once.
//parameter
ERROR_parameter_quote = 0x0600, // Not used
ERROR_parameter_invalid_count = 0x0601, ///< Attempt to flush changes without previously calling set*VariableAs* since the last flush
ERROR_parameter_invalid = 0x0602, ///< At least one of the supplied parameters did not meet the criteria for that parameter
ERROR_parameter_not_found = 0x0603, ///< Failure to supply all the necessary parameters
ERROR_parameter_convert = 0x0604, ///< Invalid type supplied for a parameter, such as passing a string (ie. "five") that expects a number.
ERROR_parameter_invalid_size = 0x0605, ///< Value out of allowed range. Such as strings are too long/short or numeric values outside allowed range
ERROR_parameter_missing = 0x0606, ///< Neglecting to specify a required parameter
ERROR_parameter_checksum = 0x0607, ///< Attempting to deploy a modified snapshot
//unsorted, need further investigation
ERROR_vs_critical = 0x0700, ///< Failure to create default channel
ERROR_connection_lost = 0x0701, ///< Generic error with the connection.
ERROR_not_connected = 0x0702, ///< Attempting to call functions with a serverConnectionHandler that is not connected. You can use \ref ts3client_getConnectionStatus to check whether the connection handler is connected to a server
ERROR_no_cached_connection_info = 0x0703, ///< Attempting to query connection information (bandwidth usage, ping, etc) without requesting them first using \ref ts3client_requestConnectionInfo
ERROR_currently_not_possible = 0x0704, ///< Requested information is not currently available. You may have to call \ref ts3client_requestClientVariables or \ref ts3client_requestServerVariables
ERROR_failed_connection_initialisation = 0x0705, ///< No TeamSpeak server running on the specified IP address and port
ERROR_could_not_resolve_hostname = 0x0706, ///< Failure to resolve the specified hostname to an IP address
ERROR_invalid_server_connection_handler_id = 0x0707, ///< Attempting to perform actions on a non-existent server connection handler
ERROR_could_not_initialise_input_manager = 0x0708, // Not used
ERROR_clientlibrary_not_initialised = 0x0709, ///< Calling client library functions without successfully calling \ref ts3client_initClientLib before
ERROR_serverlibrary_not_initialised = 0x070a, ///< Calling server library functions without successfully calling \ref ts3server_initServerLib before
ERROR_whisper_too_many_targets = 0x070b, ///< Using a whisper list that contain more clients than the servers \ref VIRTUALSERVER_MIN_CLIENTS_IN_CHANNEL_BEFORE_FORCED_SILENCE property
ERROR_whisper_no_targets = 0x070c, ///< The active whisper list is empty or no clients matched the whisper list (e.g. all channels in the list are empty)
ERROR_connection_ip_protocol_missing = 0x070d, ///< Invalid or unsupported protocol (e.g. attempting an IPv6 connection on an IPv4 only machine)
ERROR_handshake_failed = 0x070e,
ERROR_illegal_server_license = 0x070f,
//file transfer
ERROR_file_invalid_name = 0x0800, ///< Invalid UTF8 string or not a valid file
ERROR_file_invalid_permissions = 0x0801, ///< Permissions prevent opening the file
ERROR_file_already_exists = 0x0802, ///< Target path already exists as a directory
ERROR_file_not_found = 0x0803, ///< Attempt to access or move non existing file
ERROR_file_io_error = 0x0804, ///< Generic file input / output error
ERROR_file_invalid_transfer_id = 0x0805, ///< Attempt to get information about a file transfer after it has already been cleaned up. File transfer information is not available indefinitely after the transfer completed
ERROR_file_invalid_path = 0x0806, ///< specified path contains invalid characters or does not start with "/"
ERROR_file_no_files_available = 0x0807, // Not used
ERROR_file_overwrite_excludes_resume = 0x0808, ///< File overwrite and resume are mutually exclusive. Only one or neither can be 1.
ERROR_file_invalid_size = 0x0809, ///< Attempt to write more bytes than claimed file size.
ERROR_file_already_in_use = 0x080a, ///< File is currently not available, try again later.
ERROR_file_could_not_open_connection = 0x080b, ///< Generic failure in file transfer connection / other party did not conform to file transfer protocol
ERROR_file_no_space_left_on_device = 0x080c, ///< Operating system reports hard disk is full. May be caused by quota limitations.
ERROR_file_exceeds_file_system_maximum_size = 0x080d, ///< File is too large for the file system of the target device.
ERROR_file_transfer_connection_timeout = 0x080e, // Not used
ERROR_file_connection_lost = 0x080f, ///< File input / output timeout or connection failure
ERROR_file_exceeds_supplied_size = 0x0810, // Not used
ERROR_file_transfer_complete = 0x0811, ///< Indicates successful completion
ERROR_file_transfer_canceled = 0x0812, ///< Transfer was cancelled through @ref ts3client_haltTransfer
ERROR_file_transfer_interrupted = 0x0813, ///< Transfer failed because the server is shutting down, or network connection issues
ERROR_file_transfer_server_quota_exceeded = 0x0814, ///< Transfer terminated due to server bandwidth quota being exceeded. No client can transfer files.
ERROR_file_transfer_client_quota_exceeded = 0x0815, ///< Attempt to transfer more data than allowed by this clients' bandwidth quota. Other clients may continue to transfer files.
ERROR_file_transfer_reset = 0x0816, // Not used
ERROR_file_transfer_limit_reached = 0x0817, ///< Too many file transfers are in progress. Try again later
ERROR_file_invalid_storage_class = 0x0818, // TODO: Invalid storage class for HTTP FileTransfer (what is a storage class?)
ERROR_file_invalid_dimension = 0x0819, ///< Avatar image exceeds maximum width or height accepted by the server.
ERROR_file_transfer_channel_quota_exceeded = 0x081a, ///< Transfer failed because the channel quota was exceeded. Uploading to this channel is not possible, but other channels may be fine.
//sound
ERROR_sound_preprocessor_disabled = 0x0900, ///< Cannot set or query pre processor variables with preprocessing disabled
ERROR_sound_internal_preprocessor = 0x0901,
ERROR_sound_internal_encoder = 0x0902,
ERROR_sound_internal_playback = 0x0903,
ERROR_sound_no_capture_device_available = 0x0904, ///< No audio capture devices are available
ERROR_sound_no_playback_device_available = 0x0905, ///< No audio playback devices are available
ERROR_sound_could_not_open_capture_device = 0x0906, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_could_not_open_playback_device = 0x0907, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_handler_has_device = 0x0908, ///< Attempt to open a sound device on a connection handler which already has an open device. Close the already open device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_invalid_capture_device = 0x0909, ///< Attempt to use a device for capture that does not support capturing audio
ERROR_sound_invalid_playback_device = 0x090a, ///< Attempt to use a device for playback that does not support playback of audio
ERROR_sound_invalid_wave = 0x090b, ///< Attempt to use a non WAV file in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle
ERROR_sound_unsupported_wave = 0x090c, ///< Unsupported wave file used in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle.
ERROR_sound_open_wave = 0x090d, ///< Failure to open the specified sound file
ERROR_sound_internal_capture = 0x090e,
ERROR_sound_device_in_use = 0x090f, ///< Attempt to unregister a custom device that is being used. Close the device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_device_already_registerred = 0x0910, ///< Attempt to register a custom device with a device id that has already been used in a previous call. Device ids must be unique.
ERROR_sound_unknown_device = 0x0911, ///< Attempt to open, close, unregister or use a device which is not known. Custom devices must be registered before being used (see \ref ts3client_registerCustomDevice)
ERROR_sound_unsupported_frequency = 0x0912,
ERROR_sound_invalid_channel_count = 0x0913, ///< Invalid device audio channel count, must be > 0
ERROR_sound_read_wave = 0x0914, ///< Failure to read sound samples from an opened wave file. Is this a valid wave file?
ERROR_sound_need_more_data = 0x0915, // for internal purposes only
ERROR_sound_device_busy = 0x0916, // for internal purposes only
ERROR_sound_no_data = 0x0917, ///< Indicates there is currently no data for playback, e.g. nobody is speaking right now.
ERROR_sound_channel_mask_mismatch = 0x0918, ///< Opening a device with an unsupported channel count
//permissions
ERROR_permissions_client_insufficient = 0x0a08, ///< Not enough permissions to perform the requested activity
ERROR_permissions = 0x0a0c, ///< Permissions to use sound device not granted by operating system, e.g. Windows denied microphone access.
//accounting
ERROR_accounting_virtualserver_limit_reached = 0x0b00, ///< Attempt to use more virtual servers than allowed by the license
ERROR_accounting_slot_limit_reached = 0x0b01, ///< Attempt to set more slots than allowed by the license
ERROR_accounting_license_file_not_found = 0x0b02, // Not used
ERROR_accounting_license_date_not_ok = 0x0b03, ///< License expired or not valid yet
ERROR_accounting_unable_to_connect_to_server = 0x0b04, ///< Failure to communicate with accounting backend
ERROR_accounting_unknown_error = 0x0b05, ///< Failure to write update license file
ERROR_accounting_server_error = 0x0b06, // Not used
ERROR_accounting_instance_limit_reached = 0x0b07, ///< More than one process of the server is running
ERROR_accounting_instance_check_error = 0x0b08, ///< Shared memory access failure.
ERROR_accounting_license_file_invalid = 0x0b09, ///< License is not a TeamSpeak license
ERROR_accounting_running_elsewhere = 0x0b0a, ///< A copy of this server is already running in another instance. Each server may only exist once.
ERROR_accounting_instance_duplicated = 0x0b0b, ///< A copy of this server is running already in this process. Each server may only exist once.
ERROR_accounting_already_started = 0x0b0c, ///< Attempt to start a server that is already running
ERROR_accounting_not_started = 0x0b0d,
ERROR_accounting_to_many_starts = 0x0b0e, ///< Starting instance / virtual servers too often in too short a time period
//provisioning server
/// @cond HAS_PROVISIONING
ERROR_provisioning_invalid_password = 0x1100,
ERROR_provisioning_invalid_request = 0x1101,
ERROR_provisioning_no_slots_available = 0x1102,
ERROR_provisioning_pool_missing = 0x1103,
ERROR_provisioning_pool_unknown = 0x1104,
ERROR_provisioning_unknown_ip_location = 0x1105,
ERROR_provisioning_internal_tries_exceeded = 0x1106,
ERROR_provisioning_too_many_slots_requested = 0x1107,
ERROR_provisioning_too_many_reserved = 0x1108,
ERROR_provisioning_could_not_connect = 0x1109,
ERROR_provisioning_auth_server_not_connected = 0x1110,
ERROR_provisioning_auth_data_too_large = 0x1111,
ERROR_provisioning_already_initialized = 0x1112,
ERROR_provisioning_not_initialized = 0x1113,
ERROR_provisioning_connecting = 0x1114,
ERROR_provisioning_already_connected = 0x1115,
ERROR_provisioning_not_connected = 0x1116,
ERROR_provisioning_io_error = 0x1117,
ERROR_provisioning_invalid_timeout = 0x1118,
ERROR_provisioning_ts3server_not_found = 0x1119,
ERROR_provisioning_no_permission = 0x111A,
/// @endcond
// 0x12 - 0x15 are reserved in rare
// screen share
ERROR_already_registered = 0x1600,
ERROR_stream_session_limit_reached = 0x1601,
ERROR_stream_session_not_found = 0x1602,
ERROR_stream_unknown = 0x1603,
ERROR_stream_not_participating = 0x1604,
ERROR_not_streamer = 0x1605,
ERROR_already_joined = 0x1606,
ERROR_join_request_not_found = 0x1607,
ERROR_sfu_failed_to_start = 0x1608,
};
#endif
@@ -1,236 +0,0 @@
#ifndef TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#define TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Version definitions.
#define TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1 1
// Protocol used for communication between the session subscriber and the session (a single stream).
// Commands are sent bidirectionally or unidirectionally between the parties.
// e.g. SESSION => SUBSCRIBER: ON_FRAME, ON_PAUSED_CHANGED
// e.g. SUBSCRIBER => SESSION: ON_FRAME_ACK, ON_RESIZE
// Command type enum with a lowercase type name.
typedef enum
{
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME = 0,
TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE,
TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED,
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK,
TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP,
TS_SESSION_SUBSCRIBER_CMD_REMOVE_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED,
} ts_session_subscriber_command_type_t;
// Pixel format enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_I420 = 0,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_NV12,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ABGR,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ARGB,
} ts_session_subscriber_pixel_format_t;
// Buffer location enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_CPU = 0,
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_GPU
} ts_session_subscriber_buffer_location_t;
// Buffer type enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_SINGLE = 0,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_MAIN,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_SUB
} ts_session_subscriber_buffer_type_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(push, 4)
#endif
// Main buffer header for shared CPU Memory Front/Back Buffers.
// The Main Buffer contains metadata about the current front/back buffer and the versioning for both the main and sub buffer.
// The information from the main buffer can be used to always read the front buffer.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t front_buffer_index; // index of the front buffer. (0: main buffer, 1: sub buffer)
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_main_buffer_header_t;
// Sub buffer header.
typedef struct
{
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
} ts_session_subscriber_sub_buffer_header_t;
// Single frame buffer header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_single_frame_buffer_header_t;
// Command header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // Total message length (header + payload).
ts_session_subscriber_command_type_t type;
uint64_t target_session_id; // always set to the target session id this command is for or is originating from.
uint64_t target_subscriber_id; // 0 if broadcast.
} ts_session_subscriber_command_header_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME.
// The frame data is not included in the message, but is attached seperately or was sent beforehand. The buffer is identified by it's id.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_id; // buffer id, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_frame_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t frame_id;
} ts_session_subscriber_on_frame_ack_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE.
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t width;
uint32_t height;
} ts_session_subscriber_on_resize_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t paused; // 0 or 1.
} ts_session_subscriber_on_paused_changed_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE.
// Contains a single frame buffer. The header is of format |ts_session_subscriber_single_frame_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
ts_session_subscriber_buffer_type_t buffer_type;
} ts_session_subscriber_on_buffer_single_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK.
// Contains a main buffer and a sub buffer. The main buffer header
// contains metadata about the current front/back buffer and
// is of type |ts_session_subscriber_main_buffer_header_t|.
// The sub buffer's header is of type |ts_session_subscriber_sub_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t main_buffer_ptr; // main buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t main_buffer_length;
uint64_t sub_buffer_ptr; // sub buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t sub_buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
} ts_session_subscriber_on_buffer_front_back_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER.
// SUBSCRIBER => SESSION.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_resp_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_release_buffer_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr;
int bits_per_sample;
int sample_rate;
uint32_t number_of_channels;
uint32_t number_of_frames;
int64_t absolute_capture_timestamp_ms;
float volume;
} ts_session_subscriber_on_audio_frames_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t audio_enabled;
} ts_session_subscriber_on_audio_enabled_changed_payload_t;
// Overall Command structure.
typedef struct
{
ts_session_subscriber_command_header_t header;
union
{
ts_session_subscriber_on_frame_payload_t frame;
ts_session_subscriber_on_resize_payload_t resize;
ts_session_subscriber_on_paused_changed_payload_t paused;
ts_session_subscriber_on_frame_ack_payload_t frame_ack;
ts_session_subscriber_on_buffer_single_payload_t buffer_single;
ts_session_subscriber_on_buffer_front_back_payload_t buffer_front_back;
ts_session_subscriber_on_release_buffer_payload_t release_buffer;
ts_session_subscriber_add_subscriber_payload_t add_subscriber;
ts_session_subscriber_add_subscriber_resp_payload_t add_subscriber_resp;
ts_session_subscriber_on_audio_frames_payload_t audio_frames;
ts_session_subscriber_on_audio_enabled_changed_payload_t audio_enabled_changed;
} payload;
} ts_session_subscriber_command_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif // TS_SESSION_SUBSCRIBER_PROTOCOL_H_
@@ -1,32 +0,0 @@
// TeamSpeakClient framework module map — SDK surface.
//
// This minimal map covers only the ObjC-safe public surface exposed by the
// team_client library itself (teamspeak/*.h, teamlog/logtypes.h, and the
// common headers that make up the public clientlib API).
//
// For non-SDK iOS app builds, workspace/_iOS/CMakeLists.txt generates a full
// replacement map (installed over this one) that additionally declares the
// C++-only submodules for cloud_common, cloud_sync_client, interface, tsdns,
// compiler_settings, and team_revocation.
//
// Consumers:
// - In .m / .h reached from .m sources:
// #import <TeamSpeakClient/teamspeak/clientlib.h> // ObjC-safe
// @import TeamSpeakClient; // ObjC-safe surface
//
// - In Swift:
// import TeamSpeakClient // ObjC-safe surface only
framework module TeamSpeakClient {
// ObjC-safe surface: plain-C / ObjC-compatible headers only.
// Enumerated by CMake at configure time — see OBJC_SAFE_HEADERS in
// workspace/client/CMakeLists.txt.
export *
header "teamspeak/clientlib.h"
header "teamspeak/video/session_subscriber_protocol.h"
header "teamspeak/clientlib_sdk.h"
header "teamspeak/public_definitions.h"
header "teamspeak/public_errors.h"
header "teamlog/logtypes.h"
}
@@ -1,23 +0,0 @@
#ifndef TEAMLOG_LOGTYPES_H
#define TEAMLOG_LOGTYPES_H
enum LogTypes {
LogType_NONE = 0x0000, ///< Logging is disabled
LogType_FILE = 0x0001, ///< Log to regular log file
LogType_CONSOLE = 0x0002, ///< Log to standard output / error
LogType_USERLOGGING = 0x0004, ///< User defined logging. Will call the \ref ServerLibFunctions.onUserLoggingMessageEvent callback for every message to be logged
LogType_NO_NETLOGGING = 0x0008, ///< Not used
LogType_DATABASE = 0x0010, ///< Log to database (deprecated, server only, no effect in SDK)
LogType_SYSLOG = 0x0020, ///< Log to syslog (only available on Linux)
};
enum LogLevel {
LogLevel_CRITICAL = 0, ///< these messages stop the program
LogLevel_ERROR, ///< everything that is really bad, but not so bad we need to shut down
LogLevel_WARNING, ///< everything that *might* be bad
LogLevel_DEBUG, ///< output that might help find a problem
LogLevel_INFO, ///< informational output, like "starting database version x.y.z"
LogLevel_DEVEL ///< developer only output (will not be displayed in release mode)
};
#endif //TEAMLOG_LOGTYPES_H
@@ -1,58 +0,0 @@
#ifndef CLIENTLIB_SDK_H
#define CLIENTLIB_SDK_H
// system
#include <stdlib.h>
// own
#include "teamspeak/public_definitions.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Sets the client to which to transmit voice. Stops standard channel voice transmission.
*
* The client will still receive voice from their current channel, however their voice will not be transmitted to their
* current channel anymore. If this call is successful (check onServerErrorEvent) then voice of the specified client
* will be transmitted to all specified channels and all the specified clients. Pass 0 to both target parameter arrays
* to restore default behavior of transmitting voice to current channel. You will receive an onServerErrorEvent with the
* passed returnCode indicating whether or not the operation was successful.
*
* @param server_connection_handler_id the connection handler on which to set the whisper list
* @param client_id the client to set the whisper list for. Set to 0 or your own client ID to set your own whisper list.
* @param channel_ids an array of channel ids to transmit voice to.
* @param channel_ids_size number of elements in aforementioned array.
* @param client_ids a zero terminated array of client ids to transmit voice to.
* @param client_ids_size number of elements in aforementioned array.
* @param impersonate if the target client is a webrtc client, the voice packets will look like as if they have been
* send by the invoking client id
* @param return_code a c string to identify this request in callbacks. Pass an empty string if unused.
* @return An error code from the @ref Ts3ErrorType enum indicating either success or the failure reason
*/
EXPORTDLL unsigned int ts_client_request_client_set_whisper_list(uint64 server_connection_handler_id, anyID client_id,
const uint64* channel_ids,
int channel_ids_size,
const anyID* client_ids,
int client_ids_size, int impersonate,
const char* return_code);
/**
* @brief Send a binary-serialized ClientCommandRequest protobuf to the client library.
*
* The response will be delivered asynchronously via the onProtoResponse callback
* as a serialized ClientCommandResponse protobuf.
*
* @param data Pointer to serialized ClientCommandRequest protobuf bytes
* @param size Size of the serialized data in bytes
* @param return_code Caller-provided string to correlate the response in onProtoResponse. May be NULL.
* @return An error code: ERROR_ok on successful dispatch, ERROR_parameter_invalid on parse failure
*/
EXPORTDLL unsigned int ts3client_postProtoCommand(const void* data, size_t size, const char* return_code);
#ifdef __cplusplus
}
#endif
#endif // CLIENTLIB_SDK_H
@@ -1,635 +0,0 @@
#ifndef PUBLIC_DEFINITIONS_H
#define PUBLIC_DEFINITIONS_H
#include "teamlog/logtypes.h"
#define TS3_MAX_SIZE_CHANNEL_NAME 40 // channel name maximum length in characters
#define TS3_MAX_SIZE_VIRTUALSERVER_NAME 64 // virtual server name maximum length in characters
#define TS3_MAX_SIZE_CLIENT_NICKNAME 64 // client display name length limit in characters
#define TS3_MIN_SIZE_CLIENT_NICKNAME 3 // client display name minimum length in characters
#define TS3_MAX_SIZE_REASON_MESSAGE 80 // length limit in characters for kick, move, etc reasons
#define TS3_MAX_SIZE_TEXTMESSAGE 8192 // text message length limit, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_TOPIC 255 // channel topic lengt limith, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_DESCRIPTION 8192 // channel description length limit, measured in bytes (utf8 encoded)
// server welcome message length limit measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_VIRTUALSERVER_WELCOMEMESSAGE 1024
#define TS3_SIZE_MYTSID 44
// minimum amount of seconds before a clientID that was in use can be assigned to a new client
#define TS3_MIN_SECONDS_CLIENTID_REUSE 300
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32)
typedef unsigned __int16 anyID;
typedef unsigned __int64 uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __declspec(dllexport)
#else
#define EXPORTDLL
#endif
#endif
#else
#include <stdint.h>
typedef uint16_t anyID;
typedef uint64_t uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __attribute__((visibility("default")))
#else
#define EXPORTDLL
#endif
#endif
#endif
enum Visibility
{
ENTER_VISIBILITY = 0, ///< Client joined from an unsubscribed channel, or joined the server.
RETAIN_VISIBILITY, ///< Client switched from one subscribed channel to a different subscribed channel.
LEAVE_VISIBILITY ///< Client switches to an unsubscribed channel, or disconnected from server.
};
enum ConnectStatus
{
STATUS_DISCONNECTED = 0, ///< There is no activity to the server, this is the default value
STATUS_CONNECTING, ///< We are trying to connect, we haven't got a client id yet, we haven't been accepted by the server
STATUS_CONNECTED, ///< The server has accepted us, we can talk and hear and we have a client id, but we don't
///< have the channels and clients yet, we can get server infos (welcome msg etc.)
STATUS_CONNECTION_ESTABLISHING, ///< we are connected and we are visible
STATUS_CONNECTION_ESTABLISHED, ///< we are connected and we have the client and channels available
};
enum LocalTestMode
{
TEST_MODE_OFF = 0,
TEST_MODE_VOICE_LOCAL_ONLY,
TEST_MODE_VOICE_LOCAL_AND_REMOTE,
TEST_MODE_TALK_STATUS_CHANGES_ONLY
};
enum TalkStatus
{
STATUS_NOT_TALKING = 0, ///< client is not talking
STATUS_TALKING = 1, ///< client is talking
STATUS_TALKING_WHILE_DISABLED = 2, ///< client is talking while the microphone is muted (only valid for own client)
};
enum CodecType
{
CODEC_SPEEX_NARROWBAND = 0, ///< (deprecated) mono, 16bit, 8kHz, bitrate dependent on the quality setting
CODEC_SPEEX_WIDEBAND, ///< (deprecated) mono, 16bit, 16kHz, bitrate dependent on the quality setting
CODEC_SPEEX_ULTRAWIDEBAND, ///< (deprecated) mono, 16bit, 32kHz, bitrate dependent on the quality setting
CODEC_CELT_MONO, ///< (deprecated) mono, 16bit, 48kHz, bitrate dependent on the quality setting
CODEC_OPUS_VOICE, ///< mono, 16bit, 48khz, bitrate dependent on the quality setting, optimized for voice
CODEC_OPUS_MUSIC, ///< stereo, 16bit, 48khz, bitrate dependent on the quality setting, optimized for music
};
enum CodecEncryptionMode
{
CODEC_ENCRYPTION_PER_CHANNEL = 0, ///< voice data encryption decided per channel
CODEC_ENCRYPTION_FORCED_OFF, ///< voice data encryption disabled
CODEC_ENCRYPTION_FORCED_ON, ///< voice data encryption enabled
};
enum TextMessageTargetMode
{
TextMessageTarget_CLIENT = 1, ///< Message is a private message to another client
TextMessageTarget_CHANNEL, ///< Message is sent to a channel, received by all clients in that channel at the time
TextMessageTarget_SERVER, ///< Message is sent to every client on the server
TextMessageTarget_MAX
};
enum MuteInputStatus
{
MUTEINPUT_NONE = 0, ///< Microphone is not muted, audio is sent to the server
MUTEINPUT_MUTED, ///< Microphone is muted, no audio is transmitted to the server
};
enum MuteOutputStatus
{
MUTEOUTPUT_NONE = 0, ///< Speaker is active, server is sending us audio
MUTEOUTPUT_MUTED, ///< Speaker is muted, server is not sending audio to us
};
enum HardwareInputStatus
{
HARDWAREINPUT_DISABLED = 0, ///< no capture device opened
HARDWAREINPUT_ENABLED, ///< capture device open
};
enum HardwareOutputStatus
{
HARDWAREOUTPUT_DISABLED = 0, ///< no playback device opened
HARDWAREOUTPUT_ENABLED, ///< playback device open
};
enum InputDeactivationStatus
{
INPUT_ACTIVE = 0, ///< Audio is captured from the capture device.
INPUT_DEACTIVATED = 1, ///< No audio is captured from the capture device.
};
enum ReasonIdentifier
{
REASON_NONE = 0, ///< no reason data
REASON_MOVED = 1, ///< client was moved
REASON_SUBSCRIPTION = 2, // no reason data
REASON_LOST_CONNECTION = 3, // reasonmsg=reason
REASON_KICK_CHANNEL = 4, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER = 5, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER_BAN = 6, //{SectionInvoker} reasonmsg=reason bantime=time //{SectionInvoker} is only added server->client
REASON_SERVERSTOP = 7, // reasonmsg=reason
REASON_CLIENTDISCONNECT = 8, // reasonmsg=reason
REASON_CHANNELUPDATE = 9, // no reason data
REASON_CHANNELEDIT = 10, //{SectionInvoker}
REASON_CLIENTDISCONNECT_SERVER_SHUTDOWN = 11, // reasonmsg=reason
};
enum Protocol_Encryption_Cipher
{
AES_128 = 0b00000000,
AES_256 = 0b00000001,
PROTOCOL_ENCRYPTION_CIPHER_END_MARKER,
RESERVED = 0b00010000, // reserved until puzzle v2 is fully released, then can be reused
PUZZLE_2 = 0b00100000,
};
enum ChannelProperties
{
CHANNEL_NAME = 0, ///< String. Read/Write. Name of the channel. Always available.
CHANNEL_TOPIC, ///< String. Read/Write. Short single line text describing what the channel is about. Always available.
CHANNEL_DESCRIPTION, ///< String. Read/Write. Arbitrary text (up to 8k bytes) with information about the channel.
///< Must be requested (\ref ts3client_requestChannelDescription)
CHANNEL_PASSWORD, ///< String. Read/Write. Password of the channel. Read access is limited to the server. Clients
///< will only ever see the last password they attempted to use when joining the channel. Always available.
CHANNEL_CODEC, ///< Integer. Read/Write. The codec this channel is using. One of the values from the \ref CodecType
///< enum. Always available.
CHANNEL_CODEC_QUALITY, ///< Integer. Read/Write. The quality setting of the channel. Valid values are 0 to 10 inclusive.
///< Higher value means better voice quality but also more bandwidth usage. Always available.
CHANNEL_MAXCLIENTS, ///< Integer. Read/Write. The number of clients that can be in the channel simultaneously.
///< Always available.
CHANNEL_MAXFAMILYCLIENTS, ///< Integer. Read/Write. The total number of clients that can be in this channel and all
///< sub channels of this channel. Always available.
CHANNEL_ORDER, ///< UInt64. Read/Write. The ID of the channel below which this channel should be displayed. If 0
///< the channel is sorted at the top of the current level. Always available.
CHANNEL_FLAG_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when empty.
///< Permanent channels are stored to the database and available after server restart. SDK
///< users will need to take care of restoring channel at server start on their own.
///< Mutually exclusive with \ref CHANNEL_FLAG_SEMI_PERMANENT. Always available.
CHANNEL_FLAG_SEMI_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when
///< empty. Semi permanent channels are not stored to disk and gone after server
///< restart but remain while empty. Mutually exclusive with \ref
///< CHANNEL_FLAG_PERMANENT. Always available.
CHANNEL_FLAG_DEFAULT, ///< Integer. Read/Write. Boolean (1/0). The default channel is the channel that all clients
///< are located in when they join the server, unless the client explicitly specified a
///< different channel when connecting and is allowed to join their preferred channel. Only
///< one channel on the server can have this flag set. The default channel must have \ref
///< CHANNEL_FLAG_PERMANENT set. Always available.
CHANNEL_FLAG_PASSWORD, ///< Integer. Read/Write. Boolean (1/0) indicating whether this channel is password protected.
///< When removing or setting \ref CHANNEL_PASSWORD you also need to adjust this flag.
CHANNEL_CODEC_LATENCY_FACTOR, ///< (deprecated) Integer. Read/Write. Allows to increase packet size, reducing
///< bandwith at the cost of higher latency of voice transmission. Valid values are
///< 1-10 inclusive. 1 is the default and offers the lowest latency. Always available.
CHANNEL_CODEC_IS_UNENCRYPTED, ///< Integer. Read/Write. Boolean (1/0). If 0 voice data is encrypted, if 1 the voice
///< data is not encrypted. Only used if the server \ref
///< VIRTUALSERVER_CODEC_ENCRYPTION_MODE is set to \ref CODEC_ENCRYPTION_PER_CHANNEL.
///< Always available.
CHANNEL_SECURITY_SALT, ///< String. Read/Write. SDK Only, not used by TeamSpeak. This channels security hash. When
///< a client joins their \ref CLIENT_SECURITY_HASH is compared to this value, to allow or
///< deny the client access to the channel. Used to enforce clients joining the server with
///< specific identity and \ref CLIENT_META_DATA. See SDK Documentation about this feature
///< for further details. Always available.
CHANNEL_DELETE_DELAY, ///< UInt64. Read/Write. Number of seconds deletion of temporary channels is delayed after
///< the last client leaves the channel. Channel is only deleted if empty when the delete
///< delay expired. Always available.
CHANNEL_UNIQUE_IDENTIFIER, ///< String. Read only. An identifier that uniquely identifies a channel. Available in
///< Server >= 3.10.0
CHANNEL_ENDMARKER,
};
enum ClientProperties
{
CLIENT_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Public Identity, can be used to identify a client
///< installation. Remains identical as long as the client keeps using the same
///< identity. Available for visible clients.
CLIENT_NICKNAME, ///< String. Read/Write. Display name of the client. Available for visible clients.
CLIENT_VERSION, ///< String. Read only. Version String of the client used. For clients other than ourself this
///< needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_PLATFORM, ///< String. Read only. Operating system used by the client. For other clients other than ourself
///< this needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_FLAG_TALKING, ///< Integer. Read only. Whether the client is talking. Available on clients that are either
///< whispering to us, or in our channel.
CLIENT_INPUT_MUTED, ///< Integer. Read/Write. Microphone mute status. Available for visible clients. One of the
///< values from the \ref MuteInputStatus enum.
CLIENT_OUTPUT_MUTED, ///< Integer. Read/Write. Speaker mute status. Speaker mute implies microphone mute. Available
///< for visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_OUTPUTONLY_MUTED, ///< Integer. Read/Write. Speaker mute status. Microphone may be active. Available for
///< visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_INPUT_HARDWARE, ///< Integer. Read only. Indicates whether a capture device is open. Available for visible
///< clients. One of the values from the \ref HardwareInputStatus enum.
CLIENT_OUTPUT_HARDWARE, ///< Integer. Read only. Indicates whether a playback device is open. Available for visible
///< clients. One of the values from the \ref HardwareOutputStatus enum.
CLIENT_INPUT_DEACTIVATED, ///< Integer. Read/Write. Not available server side. Local microphone mute status.
///< Available only for own client. Used to implement Push To Talk. One of the values from
///< the \ref InputDeactivationStatus enum.
CLIENT_IDLE_TIME, ///< UInt64. Read only. Seconds since last activity. Available only for own client.
CLIENT_DEFAULT_CHANNEL, ///< String. Read only. User specified channel they joined when connecting to the server.
///< Available only for own client.
CLIENT_DEFAULT_CHANNEL_PASSWORD, ///< String. Read only. User specified channel password for the channel they
///< attempted to join when connecting to the server. Available only for own
///< client.
CLIENT_SERVER_PASSWORD, ///< String. Read only. User specified server password. Available only for own client.
CLIENT_META_DATA, ///< String. Read/Write. Can be used to store up to 4096 bytes of information on clients. Not
///< used by TeamSpeak. Available for visible clients.
CLIENT_IS_MUTED, ///< Integer. Read only. Not available server side. Indicates whether we have muted the client
///< using \ref ts3client_requestMuteClients. Available for visible clients other than ourselves.
CLIENT_IS_RECORDING, ///< Integer. Read only. Indicates whether the client is recording incoming audio. Available
///< for visible clients.
CLIENT_VOLUME_MODIFICATOR, ///< Integer. Read only. Volume adjustment for this client as set by \ref
///< ts3client_setClientVolumeModifier. Available for visible clients.
CLIENT_VERSION_SIGN, ///< String. Read only. TeamSpeak internal signature.
CLIENT_SECURITY_HASH, ///< String. Read/Write. This clients security hash. Not used by TeamSpeak, SDK only. Hash is
///< provided by an outside source. A channel will use the security salt + other client data
///< to calculate a hash, which must be the same as the one provided here. See SDK
///< documentation about Client / Channel Security Hashes for more details.
CLIENT_ENCRYPTION_CIPHERS, ///< String. Read only. SDK only. List of available ciphers this client can use.
CLIENT_IS_STREAMING, ///< bool. Read only, Is currently streaming.
CLIENT_ENDMARKER,
};
enum VirtualServerProperties
{
VIRTUALSERVER_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Unique identifier for a virtual server, does not
///< change on server restart. Available if \ref ts3client_getConnectionStatus
///< is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_NAME, ///< String. Read/Write. The virtual server display name. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_WELCOMEMESSAGE, ///< String. Read/Write. The welcome message displayed to clients on connect.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED. Not
///< updated automatically when changed, updates need to be requested (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_PLATFORM, ///< String. Read only. The operating system the server is running on. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_VERSION, ///< String. Read only. The server software version string. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_MAXCLIENTS, ///< UInt64. Read/Write. The maximum number of clients that can be connected
///< simultaneously. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_PASSWORD, ///< String. Read/Write. The server password. Read access is limited to the server. Clients
///< will only get the password they supplied when connecting. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_CLIENTS_ONLINE, ///< UInt64. Read only. The current number of clients connected to the server,
///< including query connections. Only available on request (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_CHANNELS_ONLINE, ///< UInt64. Read only. The current number of channels on the server. Only
///< available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CREATED, ///< Integer. Read only. The time this virtual server was created as unix timestamp.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_UPTIME, ///< UInt64. Read only. Number of seconds that have passed since the virtual server was
///< started. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CODEC_ENCRYPTION_MODE, ///< Integer. Read/Write. Boolean (1/0) that specifies if voice data is encrypted
///< during transfer. One of the values from the \ref CodecEncryptionMode enum.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_ENCRYPTION_CIPHERS, ///< String. Read/Write. Comma separated list of available ciphers to encrypt the
///< connection. The server will use the first cipher in the list that is also
///< listed in the \ref CLIENT_ENCRYPTION_CIPHERS of the connecting client.
///< Clients will fail to connect if no match is found. Always available.
VIRTUALSERVER_ADDRESS, ///< Any resolvable address for the specific virtual server
VIRTUALSERVER_VERSION_SIGN, ///< String. Read only. Signature of Platform and Version.
VIRTUALSERVER_ENDMARKER,
VIRTUALSERVER_FILEBASE = 24, ///< String. Read only. The path to the base directory used to store files
///< transferred using file transfer. Available only on the server. Is set by \ref
///< ts3server_enableFileManager
VIRTUALSERVER_MAX_DOWNLOAD_TOTAL_BANDWIDTH = 29, ///< UInt64. Read/Write. Maximum traffic in bytes the server can
///< use for file transfer downloads. Only available on request
///< (\ref ts3client_requestServerVariables).
VIRTUALSERVER_MAX_UPLOAD_TOTAL_BANDWIDTH = 30, ///< UInt64. Read/Write. Maximum traffic in bytes the server can use
///< for file transfer uploads. Only available on request (=>
///< requestServerVariables)
VIRTUALSERVER_LOG_FILETRANSFER = 64 ///< Integer. Read/Write. Boolean (1/0) indicating whether to include file
///< transfer activities (uploading or downloading of files) in the server log.
///< Always available.
};
/**
* Various connection properties.
* These are all read only, and except for your own client must be requested using \ref ts3client_requestConnectionInfo
*/
enum ConnectionProperties
{
CONNECTION_PING = 0, ///< UInt64. Round trip latency for the connection based on the last 5 seconds. On the server
///< this is the average across all connected clients for the last 5 seconds.
CONNECTION_PING_DEVIATION, ///< Double. Standard deviation for the round trip latency in \ref CONNECTION_PING
CONNECTION_CONNECTED_TIME, ///< UInt64. Seconds the client has been connected.
CONNECTION_IDLE_TIME, ///< UInt64. Time in seconds since the last activity (voice transmission, switching channels,
///< changing mic / speaker mute status) of the client.
CONNECTION_CLIENT_IP, ///< String. IP of this client (as seen from the server side)
CONNECTION_CLIENT_PORT, ///< UInt64. Client side port of this client (as seen from the server side)
CONNECTION_SERVER_IP, ///< String. The IP or hostname used to connect to the server. Only available on yourself.
CONNECTION_SERVER_PORT, ///< UInt64. The server port connected to. Only available on yourself.
CONNECTION_PACKETS_SENT_SPEECH, ///< UInt64. The number of voice packets transmitted by the client.
CONNECTION_PACKETS_SENT_KEEPALIVE, ///< UInt64. The number of keep alive packets transmitted by the client.
CONNECTION_PACKETS_SENT_CONTROL, ///< UInt64. The number of command & control packets transmitted by the client.
CONNECTION_PACKETS_SENT_TOTAL, ///< UInt64. Total number of packets transmitted by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_SENT_SPEECH, \ref CONNECTION_PACKETS_SENT_KEEPALIVE and
///< \ref CONNECTION_PACKETS_SENT_CONTROL
CONNECTION_BYTES_SENT_SPEECH, ///< UInt64. Outgoing traffic used for voice data by the client.
CONNECTION_BYTES_SENT_KEEPALIVE, ///< UInt64. Outgoing traffic used for keeping the connection alive by the client.
CONNECTION_BYTES_SENT_CONTROL, ///< UInt64. Outgoing traffic used for command & control data by the client.
CONNECTION_BYTES_SENT_TOTAL, ///< UInt64. Total outgoing traffic to the server by this client. Equal to the sum of
///< \ref CONNECTION_BYTES_SENT_SPEECH, \ref CONNECTION_BYTES_SENT_KEEPALIVE and \ref
///< CONNECTION_BYTES_SENT_CONTROL
CONNECTION_PACKETS_RECEIVED_SPEECH, ///< UInt64. Number of voice packets received by the client.
CONNECTION_PACKETS_RECEIVED_KEEPALIVE, ///< UInt64. Number of keep alive packets received by the client.
CONNECTION_PACKETS_RECEIVED_CONTROL, ///< UInt64. Number of command & control packets received by the client.
CONNECTION_PACKETS_RECEIVED_TOTAL, ///< UInt64. Total number of packets received by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_RECEIVED_SPEECH, \ref
///< CONNECTION_PACKETS_RECEIVED_KEEPALIVE and \ref
///< CONNECTION_PACKETS_RECEIVED_CONTROL
CONNECTION_BYTES_RECEIVED_SPEECH, ///< UInt64. Incoming traffic used by the client for voice data.
CONNECTION_BYTES_RECEIVED_KEEPALIVE, ///< UInt64. Incoming traffic used by the client to keep the connection alive.
CONNECTION_BYTES_RECEIVED_CONTROL, ///< UInt64. Incoming traffic used by the client for command & control data.
CONNECTION_BYTES_RECEIVED_TOTAL, ///< UInt64. Total incoming traffic used by the client. Equal to the sum of \ref
///< CONNECTION_BYTES_RECEIVED_SPEECH, \ref CONNECTION_BYTES_RECEIVED_KEEPALIVE and
///< \ref CONNECTION_BYTES_RECEIVED_CONTROL
CONNECTION_PACKETLOSS_SPEECH, ///< Double. Percentage points of voice packets for the client that did not arrive at
///< the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_KEEPALIVE, ///< Double. Percentage points of keep alive packets for the client that did not
///< arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_CONTROL, ///< Double. Percentage points of command & control packets for the client that did
///< not arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_TOTAL, ///< Double. Cumulative chance in percentage points with which a packet round trip
///< failed because a packet was lost
CONNECTION_SERVER2CLIENT_PACKETLOSS_SPEECH, ///< Double. Probability with which a voice packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< server was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the server was not
///< received by the client.
CONNECTION_CLIENT2SERVER_PACKETLOSS_SPEECH, ///< Double. Probability with which a speech packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< client was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the client was not
///< received by the server.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes sent for speech data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes sent for keepalive data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes sent for control data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes sent in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second sent for speech data, averaged over the
///< last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second sent for keepalive data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second sent for control data, averaged over
///< the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second sent, averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes received for speech data in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes received for keepalive data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes received for control data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes received in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second received for speech data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second received for keepalive data,
///< averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second received for control data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second received, averaged over the last minute.
CONNECTION_DUMMY_0,
CONNECTION_DUMMY_1,
CONNECTION_DUMMY_2,
CONNECTION_DUMMY_3,
CONNECTION_DUMMY_4,
CONNECTION_DUMMY_5,
CONNECTION_DUMMY_6,
CONNECTION_DUMMY_7,
CONNECTION_DUMMY_8,
CONNECTION_DUMMY_9,
CONNECTION_FILETRANSFER_BANDWIDTH_SENT, ///< UInt64. Current file transfer upstream activity in bytes per second.
///< Only available on request (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BANDWIDTH_RECEIVED, ///< UInt64. Current file transfer downstream activity in bytes per
///< second. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_RECEIVED_TOTAL, ///< UInt64. Total downstream traffic, in bytes, used for file
///< transfer since the server was started. Only available on request
///< (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_SENT_TOTAL, ///< UInt64. Total upstream traffic, in bytes, used for file transfer
///< since the server was started. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_ENDMARKER
};
/**
* Describes a client position in 3 dimensional space, used for 3D Sound.
*/
typedef struct
{
float x; ///< X co-ordinate in 3D space.
float y; ///< Y co-ordinate in 3D space.
float z; ///< Z co-ordinate in 3D space.
} TS3_VECTOR;
enum GroupWhisperType
{
GROUPWHISPERTYPE_SERVERGROUP = 0, ///< Whisper list consists of server groups
GROUPWHISPERTYPE_CHANNELGROUP = 1, ///< Whisper list consists of channel groups
GROUPWHISPERTYPE_CHANNELCOMMANDER = 2, ///< whisper to channel commanders
GROUPWHISPERTYPE_ALLCLIENTS = 3, ///< whisper to all clients
GROUPWHISPERTYPE_ENDMARKER,
};
enum GroupWhisperTargetMode
{
GROUPWHISPERTARGETMODE_ALL = 0,
GROUPWHISPERTARGETMODE_CURRENTCHANNEL = 1, ///< Whisper the current channel of the client
GROUPWHISPERTARGETMODE_PARENTCHANNEL = 2, ///< Whisper the parent channel of whatever channel the client is currently in
GROUPWHISPERTARGETMODE_ALLPARENTCHANNELS = 3, ///< Whipser to the parent channel and all their parent channels as well
GROUPWHISPERTARGETMODE_CHANNELFAMILY = 4, ///< Whisper to the current channel and all its sub channels
GROUPWHISPERTARGETMODE_ANCESTORCHANNELFAMILY = 5, ///< Whisper to the current channel, all its parent and sub channels.
GROUPWHISPERTARGETMODE_SUBCHANNELS = 6, ///< Whisper to all sub channels of the current channel of the client
GROUPWHISPERTARGETMODE_ENDMARKER,
};
enum MonoSoundDestination
{
MONO_SOUND_DESTINATION_ALL = 0, ///< Send mono sound to all available speakers
MONO_SOUND_DESTINATION_FRONT_CENTER = 1, ///< Send mono sound to front center speaker if available
MONO_SOUND_DESTINATION_FRONT_LEFT_AND_RIGHT = 2 ///< Send mono sound to front left/right speakers if available
};
enum SecuritySaltOptions
{
SECURITY_SALT_CHECK_NICKNAME = 1, ///< put nickname into security hash
SECURITY_SALT_CHECK_META_DATA = 2 ///< put meta data into security hash
};
/*this enum is used to disable client commands on the server*/
enum ClientCommand
{
CLIENT_COMMAND_requestConnectionInfo = 0, ///< disable client connection info request (client bandwidth usage, ip,
///< port, ping)
CLIENT_COMMAND_requestClientMove = 1, ///< disable moving clients
CLIENT_COMMAND_requestXXMuteClients = 2, ///< disable muting other clients
CLIENT_COMMAND_requestClientKickFromXXX = 3, ///< disable kicking clients
CLIENT_COMMAND_flushChannelCreation = 4, ///< disable creating channels
CLIENT_COMMAND_flushChannelUpdates = 5, ///< disable editing channels
CLIENT_COMMAND_requestChannelMove = 6, ///< disable moving channels
CLIENT_COMMAND_requestChannelDelete = 7, ///< disable deleting channels
CLIENT_COMMAND_requestChannelDescription = 8, ///< disable channel descriptions
CLIENT_COMMAND_requestChannelXXSubscribeXXX = 9, ///< disable being able to see clients in channels other than the
///< current channel the client is in
CLIENT_COMMAND_requestServerConnectionInfo = 10, ///< disable server connection info request (server bandwidth
///< usage, ip, port, ping)
CLIENT_COMMAND_requestSendXXXTextMsg = 11, ///< disable text messaging
CLIENT_COMMAND_filetransfers = 12, ///< disable file transfer
CLIENT_COMMAND_ENDMARKER
};
/* Access Control List*/
enum ACLType
{
ACL_NONE = 0,
ACL_WHITE_LIST = 1,
ACL_BLACK_LIST = 2
};
/* file transfer actions*/
enum FTAction
{
FT_INIT_SERVER = 0, ///< The virtual server is created. result->channelPath can be changed to create a different
///< directory than the default 'virtualserver_x' where x is the virtual server.
FT_INIT_CHANNEL = 1, ///< A channel is created. result->channelPath can be changed to create a different directory
///< then the default 'channel_x' where x is the channel id.
FT_UPLOAD = 2, ///< A file is being uploaded. All values in the result struct can be modified.
FT_DOWNLOAD = 3, ///< A file is being downloaded. All values in the result struct can be modified.
FT_DELETE = 4, ///< A file is being deleted. All values in the result struct can be modified.
FT_CREATEDIR = 5, ///< A directory is being created in a channel. All values in the result struct can be modified.
FT_RENAME = 6, ///< A file or folder is being renamed. The callback will be called twice! Once for the old and then
///< for the new name. All values in the result struct can be modified.
FT_FILELIST = 7, ///< A directory listing is requested. All values in the result struct can be modified.
FT_FILEINFO = 8 ///< Information of a file is requested. All values in the result struct can be modified.
};
/* file transfer status */
enum FileTransferState
{
FILETRANSFER_INITIALISING = 0, ///< File transfer is establishing connection.
FILETRANSFER_ACTIVE, ///< File transfer is in progress
FILETRANSFER_FINISHED, ///< File transfer has finished
};
/* file transfer types */
enum FileTransferType
{
FileListType_Directory = 0, ///< The file entry is a directory
FileListType_File, ///< The file entry is a regular file
};
/* some structs to handle variables in callbacks */
#define MAX_VARIABLES_EXPORT_COUNT 64
struct VariablesExportItem
{
unsigned char itemIsValid; ///< Whether or not there is any data in this item. Ignore this item if this is 0.
unsigned char proposedIsSet; ///< The value in proposed is set. If 0 ignore proposed
const char* current; ///< current value (stored in memory)
const char* proposed; ///< New value to change to (const, so no updates please)
};
struct VariablesExport
{
struct VariablesExportItem items[MAX_VARIABLES_EXPORT_COUNT];
};
struct ClientMiniExport
{
anyID ID; ///< id of the client
uint64 channel; ///< the channel the client is in
const char* ident; ///< client public identity
const char* nickname; ///< client display name
};
/**
* Structure used to describe a file transfer in the \ref ServerLibFunctions.onTransformFilePath callback.
* This describes the original values, and also contains hints for length limitations of the result parameter
* of the callback.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExport
{
uint64 channel; ///< The channel id of the file. 0 if action is \ref FT_INIT_SERVER
const char* filename; ///< utf8 encoded c string containing the original file name as intended by the client.
int action; ///< The action to be performed. One of the values from the \ref FTAction enum. Defines which values of
///< the result struct can be modified.
int transformedFileNameMaxSize; ///< The maximum length the file name can be rewritten to.
int channelPathMaxSize; ///< The maximum length the path can be rewritten to.
};
/**
* Structure to rewrite the file transfer file name and path in the \ref ServerLibFunctions.onTransformFilePath callback.
* The lengths are limited as described in the original parameter.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExportReturns
{
char* transformedFileName; ///< pointer to target file name. Fill the memory pointed to with an utf8 encoded c string
///< containing the new file name. Limited to original->transformedFileNameMaxSize bytes.
char* channelPath; ///< pointer to memory for new path. Fill the memory pointed to with an utf8 encoded c string
///< containing the new path. Limited to original->channelPathMaxSize bytes.
int logFileAction; ///< boolean (1/0). Whether to log this file transfer to the log. Action is not logged regardless
///< of this value if the servers \ref VIRTUALSERVER_LOG_FILETRANSFER property is 0.
};
struct FileTransferCallbackExport
{
anyID clientID; ///< the client who started the file transfer
anyID transferID; ///< local identifier of the transfer that has completed
anyID remoteTransferID; ///< remote identifier of the transfer that has completed
unsigned int status; ///< status of the transfer. One of the values from the \ref FileTransferState enum
const char* statusMessage; ///< utf8 encoded c string containing a human readable description of the status
uint64 remotefileSize; ///< size in bytes of the complete file to be transferred
uint64 bytes; ///< number of bytes transferred. Same as remotefileSize when the transfer completed entirely.
int isSender; ///< boolean. 1 if the server is sending the file. 0 if the server is receiving the file.
};
/*define for file transfer bandwith limits*/
#define BANDWIDTH_LIMIT_UNLIMITED 0xFFFFFFFFFFFFFFFFll
/*defines for speaker locations used by some sound callbacks*/
#ifndef SPEAKER_FRONT_LEFT
#define SPEAKER_FRONT_LEFT 0x1
#define SPEAKER_FRONT_RIGHT 0x2
#define SPEAKER_FRONT_CENTER 0x4
#define SPEAKER_LOW_FREQUENCY 0x8
#define SPEAKER_BACK_LEFT 0x10
#define SPEAKER_BACK_RIGHT 0x20
#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
#define SPEAKER_BACK_CENTER 0x100
#define SPEAKER_SIDE_LEFT 0x200
#define SPEAKER_SIDE_RIGHT 0x400
#define SPEAKER_TOP_CENTER 0x800
#define SPEAKER_TOP_FRONT_LEFT 0x1000
#define SPEAKER_TOP_FRONT_CENTER 0x2000
#define SPEAKER_TOP_FRONT_RIGHT 0x4000
#define SPEAKER_TOP_BACK_LEFT 0x8000
#define SPEAKER_TOP_BACK_CENTER 0x10000
#define SPEAKER_TOP_BACK_RIGHT 0x20000
#endif
#define SPEAKER_HEADPHONES_LEFT 0x10000000
#define SPEAKER_HEADPHONES_RIGHT 0x20000000
#define SPEAKER_MONO 0x40000000
#endif /*PUBLIC_DEFINITIONS_H*/
@@ -1,217 +0,0 @@
#ifndef PUBLIC_ERRORS_H
#define PUBLIC_ERRORS_H
//The idea here is: the values are 2 bytes wide, the first byte identifies the group, the second the count within that group
enum Ts3ErrorType {
//general
ERROR_ok = 0x0000, ///< Indicates success.
ERROR_undefined = 0x0001,
ERROR_not_implemented = 0x0002, ///< The attempted operation is not available in this context
ERROR_ok_no_update = 0x0003, ///< Indicates success, but no change occurred. Returned for example upon flushing (e.g. using \ref ts3client_flushChannelUpdates) when all indicated changes already matched the current state.
ERROR_dont_notify = 0x0004,
ERROR_lib_time_limit_reached = 0x0005,
ERROR_out_of_memory = 0x0006, ///< Not enough system memory to perform operation
ERROR_canceled = 0x0007,
ERROR_ok_no_error_event = 0x0008, ///< Indicates success, but no error event was generated. This is used because of the return code management and reduce packets.
//dunno
ERROR_command_not_found = 0x0100,
ERROR_unable_to_bind_network_port = 0x0101, ///< Unspecified failure to create a listening port
ERROR_no_network_port_available = 0x0102, ///< Failure to initialize a listening port for FileTransfer
ERROR_port_already_in_use = 0x0103, ///< Specified port is already in use by a different application
ERROR_command_line_parse_failed = 0x0104, ///< Command line arguments are invalid
ERROR_command_line_exit_version = 0x0105, ///< Command line specified version. The process should exit with code 0 after printing the version.
ERROR_command_line_exit_help = 0x0106, ///< Command line specified help. The process should exit with code 0 after priting the help.
//client
ERROR_client_invalid_id = 0x0200, ///< Client no longer connected
ERROR_client_nickname_inuse = 0x0201, ///< Client name is already in use. Client names must be unique
ERROR_client_protocol_limit_reached = 0x0203, ///< Too many clients on the server
ERROR_client_invalid_type = 0x0204, ///< Function called for normal clients that is only available for query clients or vice versa
ERROR_client_already_subscribed = 0x0205, ///< Attempting to subscribe to a channel already subscribed to
ERROR_client_not_logged_in = 0x0206,
ERROR_client_could_not_validate_identity = 0x0207, ///< Identity not valid or insufficient security level
ERROR_client_invalid_password = 0x0208,
ERROR_client_version_outdated = 0x020a, ///< Server requires newer client version as determined by the min_client_version properties
ERROR_client_is_flooding = 0x020c, ///< Triggered flood protection. Further information is supplied in the extra message if applicable.
ERROR_client_hacked = 0x020d,
ERROR_client_cannot_verify_now = 0x020e,
ERROR_client_login_not_permitted = 0x020f,
ERROR_client_not_subscribed = 0x0210, ///< Action is only available on subscribed channels
//channel
ERROR_channel_invalid_id = 0x0300, ///< Channel does not exist on the server (any longer)
ERROR_channel_protocol_limit_reached = 0x0301, ///< Too many channels on the server
ERROR_channel_already_in = 0x0302, ///< Attempting to move a client or channel to its current channel
ERROR_channel_name_inuse = 0x0303, ///< Channel name is already taken by another channel. Channel names must be unique
ERROR_channel_not_empty = 0x0304, ///< Attempting to delete a channel with clients or sub channels in it
ERROR_channel_can_not_delete_default = 0x0305, ///< Default channel cannot be deleted. Set a new default channel first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_default_require_permanent = 0x0306, ///< Attempt to set a non permanent channel as default channel. Set channel to permanent first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_invalid_flags = 0x0307, ///< Invalid combination of \ref ChannelProperties, trying to remove \ref CHANNEL_FLAG_DEFAULT or set a password on the default channel
ERROR_channel_parent_not_permanent = 0x0308, ///< Attempt to move a permanent channel into a non-permanent one, or set a channel to be permanent that is a sub channel of a non-permanent one
ERROR_channel_maxclients_reached = 0x0309, ///< Channel is full as determined by its \ref CHANNEL_MAXCLIENTS setting
ERROR_channel_maxfamily_reached = 0x030a, ///< Channel tree is full as determined by its \ref CHANNEL_MAXFAMILYCLIENTS setting
ERROR_channel_invalid_order = 0x030b, ///< Invalid value for the \ref CHANNEL_ORDER property. The specified channel must exist on the server and be on the same level.
ERROR_channel_no_filetransfer_supported = 0x030c, ///< Invalid \ref CHANNEL_FILEPATH set for the channel
ERROR_channel_invalid_password = 0x030d, ///< Channel has a password not matching the password supplied in the call
// used in public_rare_errors = 0x030e,
ERROR_channel_invalid_security_hash = 0x030f,
//server
ERROR_server_invalid_id = 0x0400, ///< Chosen virtual server does not exist or is offline
ERROR_server_running = 0x0401, ///< attempting to delete a server that is running. Stop the server before deleting it.
ERROR_server_is_shutting_down = 0x0402, ///< Client disconnected because the server is going offline
ERROR_server_maxclients_reached = 0x0403, ///< Given in the onConnectStatusChange event when the server has reached its maximum number of clients as defined by the \ref VIRTUALSERVER_MAXCLIENTS property
ERROR_server_invalid_password = 0x0404, ///< Specified server password is wrong. Provide the correct password in the \ref ts3client_startConnection / \ref ts3client_startConnectionWithChannelID call.
ERROR_server_is_virtual = 0x0407, ///< Server is in virtual status. The attempted action is not possible in this state. Start the virtual server first.
ERROR_server_is_not_running = 0x0409, ///< Attempting to stop a server that is not online.
ERROR_server_is_booting = 0x040a, // Not used
ERROR_server_status_invalid = 0x040b,
ERROR_server_version_outdated = 0x040d, ///< Attempt to connect to an outdated server version. The server needs to be updated.
ERROR_server_duplicate_running = 0x040e, ///< This server is already running within the instance. Each virtual server may only exist once.
//parameter
ERROR_parameter_quote = 0x0600, // Not used
ERROR_parameter_invalid_count = 0x0601, ///< Attempt to flush changes without previously calling set*VariableAs* since the last flush
ERROR_parameter_invalid = 0x0602, ///< At least one of the supplied parameters did not meet the criteria for that parameter
ERROR_parameter_not_found = 0x0603, ///< Failure to supply all the necessary parameters
ERROR_parameter_convert = 0x0604, ///< Invalid type supplied for a parameter, such as passing a string (ie. "five") that expects a number.
ERROR_parameter_invalid_size = 0x0605, ///< Value out of allowed range. Such as strings are too long/short or numeric values outside allowed range
ERROR_parameter_missing = 0x0606, ///< Neglecting to specify a required parameter
ERROR_parameter_checksum = 0x0607, ///< Attempting to deploy a modified snapshot
//unsorted, need further investigation
ERROR_vs_critical = 0x0700, ///< Failure to create default channel
ERROR_connection_lost = 0x0701, ///< Generic error with the connection.
ERROR_not_connected = 0x0702, ///< Attempting to call functions with a serverConnectionHandler that is not connected. You can use \ref ts3client_getConnectionStatus to check whether the connection handler is connected to a server
ERROR_no_cached_connection_info = 0x0703, ///< Attempting to query connection information (bandwidth usage, ping, etc) without requesting them first using \ref ts3client_requestConnectionInfo
ERROR_currently_not_possible = 0x0704, ///< Requested information is not currently available. You may have to call \ref ts3client_requestClientVariables or \ref ts3client_requestServerVariables
ERROR_failed_connection_initialisation = 0x0705, ///< No TeamSpeak server running on the specified IP address and port
ERROR_could_not_resolve_hostname = 0x0706, ///< Failure to resolve the specified hostname to an IP address
ERROR_invalid_server_connection_handler_id = 0x0707, ///< Attempting to perform actions on a non-existent server connection handler
ERROR_could_not_initialise_input_manager = 0x0708, // Not used
ERROR_clientlibrary_not_initialised = 0x0709, ///< Calling client library functions without successfully calling \ref ts3client_initClientLib before
ERROR_serverlibrary_not_initialised = 0x070a, ///< Calling server library functions without successfully calling \ref ts3server_initServerLib before
ERROR_whisper_too_many_targets = 0x070b, ///< Using a whisper list that contain more clients than the servers \ref VIRTUALSERVER_MIN_CLIENTS_IN_CHANNEL_BEFORE_FORCED_SILENCE property
ERROR_whisper_no_targets = 0x070c, ///< The active whisper list is empty or no clients matched the whisper list (e.g. all channels in the list are empty)
ERROR_connection_ip_protocol_missing = 0x070d, ///< Invalid or unsupported protocol (e.g. attempting an IPv6 connection on an IPv4 only machine)
ERROR_handshake_failed = 0x070e,
ERROR_illegal_server_license = 0x070f,
//file transfer
ERROR_file_invalid_name = 0x0800, ///< Invalid UTF8 string or not a valid file
ERROR_file_invalid_permissions = 0x0801, ///< Permissions prevent opening the file
ERROR_file_already_exists = 0x0802, ///< Target path already exists as a directory
ERROR_file_not_found = 0x0803, ///< Attempt to access or move non existing file
ERROR_file_io_error = 0x0804, ///< Generic file input / output error
ERROR_file_invalid_transfer_id = 0x0805, ///< Attempt to get information about a file transfer after it has already been cleaned up. File transfer information is not available indefinitely after the transfer completed
ERROR_file_invalid_path = 0x0806, ///< specified path contains invalid characters or does not start with "/"
ERROR_file_no_files_available = 0x0807, // Not used
ERROR_file_overwrite_excludes_resume = 0x0808, ///< File overwrite and resume are mutually exclusive. Only one or neither can be 1.
ERROR_file_invalid_size = 0x0809, ///< Attempt to write more bytes than claimed file size.
ERROR_file_already_in_use = 0x080a, ///< File is currently not available, try again later.
ERROR_file_could_not_open_connection = 0x080b, ///< Generic failure in file transfer connection / other party did not conform to file transfer protocol
ERROR_file_no_space_left_on_device = 0x080c, ///< Operating system reports hard disk is full. May be caused by quota limitations.
ERROR_file_exceeds_file_system_maximum_size = 0x080d, ///< File is too large for the file system of the target device.
ERROR_file_transfer_connection_timeout = 0x080e, // Not used
ERROR_file_connection_lost = 0x080f, ///< File input / output timeout or connection failure
ERROR_file_exceeds_supplied_size = 0x0810, // Not used
ERROR_file_transfer_complete = 0x0811, ///< Indicates successful completion
ERROR_file_transfer_canceled = 0x0812, ///< Transfer was cancelled through @ref ts3client_haltTransfer
ERROR_file_transfer_interrupted = 0x0813, ///< Transfer failed because the server is shutting down, or network connection issues
ERROR_file_transfer_server_quota_exceeded = 0x0814, ///< Transfer terminated due to server bandwidth quota being exceeded. No client can transfer files.
ERROR_file_transfer_client_quota_exceeded = 0x0815, ///< Attempt to transfer more data than allowed by this clients' bandwidth quota. Other clients may continue to transfer files.
ERROR_file_transfer_reset = 0x0816, // Not used
ERROR_file_transfer_limit_reached = 0x0817, ///< Too many file transfers are in progress. Try again later
ERROR_file_invalid_storage_class = 0x0818, // TODO: Invalid storage class for HTTP FileTransfer (what is a storage class?)
ERROR_file_invalid_dimension = 0x0819, ///< Avatar image exceeds maximum width or height accepted by the server.
ERROR_file_transfer_channel_quota_exceeded = 0x081a, ///< Transfer failed because the channel quota was exceeded. Uploading to this channel is not possible, but other channels may be fine.
//sound
ERROR_sound_preprocessor_disabled = 0x0900, ///< Cannot set or query pre processor variables with preprocessing disabled
ERROR_sound_internal_preprocessor = 0x0901,
ERROR_sound_internal_encoder = 0x0902,
ERROR_sound_internal_playback = 0x0903,
ERROR_sound_no_capture_device_available = 0x0904, ///< No audio capture devices are available
ERROR_sound_no_playback_device_available = 0x0905, ///< No audio playback devices are available
ERROR_sound_could_not_open_capture_device = 0x0906, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_could_not_open_playback_device = 0x0907, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_handler_has_device = 0x0908, ///< Attempt to open a sound device on a connection handler which already has an open device. Close the already open device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_invalid_capture_device = 0x0909, ///< Attempt to use a device for capture that does not support capturing audio
ERROR_sound_invalid_playback_device = 0x090a, ///< Attempt to use a device for playback that does not support playback of audio
ERROR_sound_invalid_wave = 0x090b, ///< Attempt to use a non WAV file in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle
ERROR_sound_unsupported_wave = 0x090c, ///< Unsupported wave file used in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle.
ERROR_sound_open_wave = 0x090d, ///< Failure to open the specified sound file
ERROR_sound_internal_capture = 0x090e,
ERROR_sound_device_in_use = 0x090f, ///< Attempt to unregister a custom device that is being used. Close the device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_device_already_registerred = 0x0910, ///< Attempt to register a custom device with a device id that has already been used in a previous call. Device ids must be unique.
ERROR_sound_unknown_device = 0x0911, ///< Attempt to open, close, unregister or use a device which is not known. Custom devices must be registered before being used (see \ref ts3client_registerCustomDevice)
ERROR_sound_unsupported_frequency = 0x0912,
ERROR_sound_invalid_channel_count = 0x0913, ///< Invalid device audio channel count, must be > 0
ERROR_sound_read_wave = 0x0914, ///< Failure to read sound samples from an opened wave file. Is this a valid wave file?
ERROR_sound_need_more_data = 0x0915, // for internal purposes only
ERROR_sound_device_busy = 0x0916, // for internal purposes only
ERROR_sound_no_data = 0x0917, ///< Indicates there is currently no data for playback, e.g. nobody is speaking right now.
ERROR_sound_channel_mask_mismatch = 0x0918, ///< Opening a device with an unsupported channel count
//permissions
ERROR_permissions_client_insufficient = 0x0a08, ///< Not enough permissions to perform the requested activity
ERROR_permissions = 0x0a0c, ///< Permissions to use sound device not granted by operating system, e.g. Windows denied microphone access.
//accounting
ERROR_accounting_virtualserver_limit_reached = 0x0b00, ///< Attempt to use more virtual servers than allowed by the license
ERROR_accounting_slot_limit_reached = 0x0b01, ///< Attempt to set more slots than allowed by the license
ERROR_accounting_license_file_not_found = 0x0b02, // Not used
ERROR_accounting_license_date_not_ok = 0x0b03, ///< License expired or not valid yet
ERROR_accounting_unable_to_connect_to_server = 0x0b04, ///< Failure to communicate with accounting backend
ERROR_accounting_unknown_error = 0x0b05, ///< Failure to write update license file
ERROR_accounting_server_error = 0x0b06, // Not used
ERROR_accounting_instance_limit_reached = 0x0b07, ///< More than one process of the server is running
ERROR_accounting_instance_check_error = 0x0b08, ///< Shared memory access failure.
ERROR_accounting_license_file_invalid = 0x0b09, ///< License is not a TeamSpeak license
ERROR_accounting_running_elsewhere = 0x0b0a, ///< A copy of this server is already running in another instance. Each server may only exist once.
ERROR_accounting_instance_duplicated = 0x0b0b, ///< A copy of this server is running already in this process. Each server may only exist once.
ERROR_accounting_already_started = 0x0b0c, ///< Attempt to start a server that is already running
ERROR_accounting_not_started = 0x0b0d,
ERROR_accounting_to_many_starts = 0x0b0e, ///< Starting instance / virtual servers too often in too short a time period
//provisioning server
/// @cond HAS_PROVISIONING
ERROR_provisioning_invalid_password = 0x1100,
ERROR_provisioning_invalid_request = 0x1101,
ERROR_provisioning_no_slots_available = 0x1102,
ERROR_provisioning_pool_missing = 0x1103,
ERROR_provisioning_pool_unknown = 0x1104,
ERROR_provisioning_unknown_ip_location = 0x1105,
ERROR_provisioning_internal_tries_exceeded = 0x1106,
ERROR_provisioning_too_many_slots_requested = 0x1107,
ERROR_provisioning_too_many_reserved = 0x1108,
ERROR_provisioning_could_not_connect = 0x1109,
ERROR_provisioning_auth_server_not_connected = 0x1110,
ERROR_provisioning_auth_data_too_large = 0x1111,
ERROR_provisioning_already_initialized = 0x1112,
ERROR_provisioning_not_initialized = 0x1113,
ERROR_provisioning_connecting = 0x1114,
ERROR_provisioning_already_connected = 0x1115,
ERROR_provisioning_not_connected = 0x1116,
ERROR_provisioning_io_error = 0x1117,
ERROR_provisioning_invalid_timeout = 0x1118,
ERROR_provisioning_ts3server_not_found = 0x1119,
ERROR_provisioning_no_permission = 0x111A,
/// @endcond
// 0x12 - 0x15 are reserved in rare
// screen share
ERROR_already_registered = 0x1600,
ERROR_stream_session_limit_reached = 0x1601,
ERROR_stream_session_not_found = 0x1602,
ERROR_stream_unknown = 0x1603,
ERROR_stream_not_participating = 0x1604,
ERROR_not_streamer = 0x1605,
ERROR_already_joined = 0x1606,
ERROR_join_request_not_found = 0x1607,
ERROR_sfu_failed_to_start = 0x1608,
};
#endif
@@ -1,236 +0,0 @@
#ifndef TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#define TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Version definitions.
#define TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1 1
// Protocol used for communication between the session subscriber and the session (a single stream).
// Commands are sent bidirectionally or unidirectionally between the parties.
// e.g. SESSION => SUBSCRIBER: ON_FRAME, ON_PAUSED_CHANGED
// e.g. SUBSCRIBER => SESSION: ON_FRAME_ACK, ON_RESIZE
// Command type enum with a lowercase type name.
typedef enum
{
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME = 0,
TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE,
TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED,
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK,
TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP,
TS_SESSION_SUBSCRIBER_CMD_REMOVE_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED,
} ts_session_subscriber_command_type_t;
// Pixel format enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_I420 = 0,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_NV12,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ABGR,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ARGB,
} ts_session_subscriber_pixel_format_t;
// Buffer location enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_CPU = 0,
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_GPU
} ts_session_subscriber_buffer_location_t;
// Buffer type enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_SINGLE = 0,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_MAIN,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_SUB
} ts_session_subscriber_buffer_type_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(push, 4)
#endif
// Main buffer header for shared CPU Memory Front/Back Buffers.
// The Main Buffer contains metadata about the current front/back buffer and the versioning for both the main and sub buffer.
// The information from the main buffer can be used to always read the front buffer.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t front_buffer_index; // index of the front buffer. (0: main buffer, 1: sub buffer)
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_main_buffer_header_t;
// Sub buffer header.
typedef struct
{
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
} ts_session_subscriber_sub_buffer_header_t;
// Single frame buffer header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_single_frame_buffer_header_t;
// Command header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // Total message length (header + payload).
ts_session_subscriber_command_type_t type;
uint64_t target_session_id; // always set to the target session id this command is for or is originating from.
uint64_t target_subscriber_id; // 0 if broadcast.
} ts_session_subscriber_command_header_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME.
// The frame data is not included in the message, but is attached seperately or was sent beforehand. The buffer is identified by it's id.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_id; // buffer id, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_frame_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t frame_id;
} ts_session_subscriber_on_frame_ack_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE.
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t width;
uint32_t height;
} ts_session_subscriber_on_resize_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t paused; // 0 or 1.
} ts_session_subscriber_on_paused_changed_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE.
// Contains a single frame buffer. The header is of format |ts_session_subscriber_single_frame_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
ts_session_subscriber_buffer_type_t buffer_type;
} ts_session_subscriber_on_buffer_single_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK.
// Contains a main buffer and a sub buffer. The main buffer header
// contains metadata about the current front/back buffer and
// is of type |ts_session_subscriber_main_buffer_header_t|.
// The sub buffer's header is of type |ts_session_subscriber_sub_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t main_buffer_ptr; // main buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t main_buffer_length;
uint64_t sub_buffer_ptr; // sub buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t sub_buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
} ts_session_subscriber_on_buffer_front_back_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER.
// SUBSCRIBER => SESSION.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_resp_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_release_buffer_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr;
int bits_per_sample;
int sample_rate;
uint32_t number_of_channels;
uint32_t number_of_frames;
int64_t absolute_capture_timestamp_ms;
float volume;
} ts_session_subscriber_on_audio_frames_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t audio_enabled;
} ts_session_subscriber_on_audio_enabled_changed_payload_t;
// Overall Command structure.
typedef struct
{
ts_session_subscriber_command_header_t header;
union
{
ts_session_subscriber_on_frame_payload_t frame;
ts_session_subscriber_on_resize_payload_t resize;
ts_session_subscriber_on_paused_changed_payload_t paused;
ts_session_subscriber_on_frame_ack_payload_t frame_ack;
ts_session_subscriber_on_buffer_single_payload_t buffer_single;
ts_session_subscriber_on_buffer_front_back_payload_t buffer_front_back;
ts_session_subscriber_on_release_buffer_payload_t release_buffer;
ts_session_subscriber_add_subscriber_payload_t add_subscriber;
ts_session_subscriber_add_subscriber_resp_payload_t add_subscriber_resp;
ts_session_subscriber_on_audio_frames_payload_t audio_frames;
ts_session_subscriber_on_audio_enabled_changed_payload_t audio_enabled_changed;
} payload;
} ts_session_subscriber_command_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif // TS_SESSION_SUBSCRIBER_PROTOCOL_H_
@@ -1,32 +0,0 @@
// TeamSpeakClient framework module map — SDK surface.
//
// This minimal map covers only the ObjC-safe public surface exposed by the
// team_client library itself (teamspeak/*.h, teamlog/logtypes.h, and the
// common headers that make up the public clientlib API).
//
// For non-SDK iOS app builds, workspace/_iOS/CMakeLists.txt generates a full
// replacement map (installed over this one) that additionally declares the
// C++-only submodules for cloud_common, cloud_sync_client, interface, tsdns,
// compiler_settings, and team_revocation.
//
// Consumers:
// - In .m / .h reached from .m sources:
// #import <TeamSpeakClient/teamspeak/clientlib.h> // ObjC-safe
// @import TeamSpeakClient; // ObjC-safe surface
//
// - In Swift:
// import TeamSpeakClient // ObjC-safe surface only
framework module TeamSpeakClient {
// ObjC-safe surface: plain-C / ObjC-compatible headers only.
// Enumerated by CMake at configure time — see OBJC_SAFE_HEADERS in
// workspace/client/CMakeLists.txt.
export *
header "teamspeak/clientlib.h"
header "teamspeak/video/session_subscriber_protocol.h"
header "teamspeak/clientlib_sdk.h"
header "teamspeak/public_definitions.h"
header "teamspeak/public_errors.h"
header "teamlog/logtypes.h"
}
@@ -1,23 +0,0 @@
#ifndef TEAMLOG_LOGTYPES_H
#define TEAMLOG_LOGTYPES_H
enum LogTypes {
LogType_NONE = 0x0000, ///< Logging is disabled
LogType_FILE = 0x0001, ///< Log to regular log file
LogType_CONSOLE = 0x0002, ///< Log to standard output / error
LogType_USERLOGGING = 0x0004, ///< User defined logging. Will call the \ref ServerLibFunctions.onUserLoggingMessageEvent callback for every message to be logged
LogType_NO_NETLOGGING = 0x0008, ///< Not used
LogType_DATABASE = 0x0010, ///< Log to database (deprecated, server only, no effect in SDK)
LogType_SYSLOG = 0x0020, ///< Log to syslog (only available on Linux)
};
enum LogLevel {
LogLevel_CRITICAL = 0, ///< these messages stop the program
LogLevel_ERROR, ///< everything that is really bad, but not so bad we need to shut down
LogLevel_WARNING, ///< everything that *might* be bad
LogLevel_DEBUG, ///< output that might help find a problem
LogLevel_INFO, ///< informational output, like "starting database version x.y.z"
LogLevel_DEVEL ///< developer only output (will not be displayed in release mode)
};
#endif //TEAMLOG_LOGTYPES_H
File diff suppressed because it is too large Load Diff
@@ -1,58 +0,0 @@
#ifndef CLIENTLIB_SDK_H
#define CLIENTLIB_SDK_H
// system
#include <stdlib.h>
// own
#include "teamspeak/public_definitions.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Sets the client to which to transmit voice. Stops standard channel voice transmission.
*
* The client will still receive voice from their current channel, however their voice will not be transmitted to their
* current channel anymore. If this call is successful (check onServerErrorEvent) then voice of the specified client
* will be transmitted to all specified channels and all the specified clients. Pass 0 to both target parameter arrays
* to restore default behavior of transmitting voice to current channel. You will receive an onServerErrorEvent with the
* passed returnCode indicating whether or not the operation was successful.
*
* @param server_connection_handler_id the connection handler on which to set the whisper list
* @param client_id the client to set the whisper list for. Set to 0 or your own client ID to set your own whisper list.
* @param channel_ids an array of channel ids to transmit voice to.
* @param channel_ids_size number of elements in aforementioned array.
* @param client_ids a zero terminated array of client ids to transmit voice to.
* @param client_ids_size number of elements in aforementioned array.
* @param impersonate if the target client is a webrtc client, the voice packets will look like as if they have been
* send by the invoking client id
* @param return_code a c string to identify this request in callbacks. Pass an empty string if unused.
* @return An error code from the @ref Ts3ErrorType enum indicating either success or the failure reason
*/
EXPORTDLL unsigned int ts_client_request_client_set_whisper_list(uint64 server_connection_handler_id, anyID client_id,
const uint64* channel_ids,
int channel_ids_size,
const anyID* client_ids,
int client_ids_size, int impersonate,
const char* return_code);
/**
* @brief Send a binary-serialized ClientCommandRequest protobuf to the client library.
*
* The response will be delivered asynchronously via the onProtoResponse callback
* as a serialized ClientCommandResponse protobuf.
*
* @param data Pointer to serialized ClientCommandRequest protobuf bytes
* @param size Size of the serialized data in bytes
* @param return_code Caller-provided string to correlate the response in onProtoResponse. May be NULL.
* @return An error code: ERROR_ok on successful dispatch, ERROR_parameter_invalid on parse failure
*/
EXPORTDLL unsigned int ts3client_postProtoCommand(const void* data, size_t size, const char* return_code);
#ifdef __cplusplus
}
#endif
#endif // CLIENTLIB_SDK_H
@@ -1,635 +0,0 @@
#ifndef PUBLIC_DEFINITIONS_H
#define PUBLIC_DEFINITIONS_H
#include "teamlog/logtypes.h"
#define TS3_MAX_SIZE_CHANNEL_NAME 40 // channel name maximum length in characters
#define TS3_MAX_SIZE_VIRTUALSERVER_NAME 64 // virtual server name maximum length in characters
#define TS3_MAX_SIZE_CLIENT_NICKNAME 64 // client display name length limit in characters
#define TS3_MIN_SIZE_CLIENT_NICKNAME 3 // client display name minimum length in characters
#define TS3_MAX_SIZE_REASON_MESSAGE 80 // length limit in characters for kick, move, etc reasons
#define TS3_MAX_SIZE_TEXTMESSAGE 8192 // text message length limit, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_TOPIC 255 // channel topic lengt limith, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_DESCRIPTION 8192 // channel description length limit, measured in bytes (utf8 encoded)
// server welcome message length limit measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_VIRTUALSERVER_WELCOMEMESSAGE 1024
#define TS3_SIZE_MYTSID 44
// minimum amount of seconds before a clientID that was in use can be assigned to a new client
#define TS3_MIN_SECONDS_CLIENTID_REUSE 300
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32)
typedef unsigned __int16 anyID;
typedef unsigned __int64 uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __declspec(dllexport)
#else
#define EXPORTDLL
#endif
#endif
#else
#include <stdint.h>
typedef uint16_t anyID;
typedef uint64_t uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __attribute__((visibility("default")))
#else
#define EXPORTDLL
#endif
#endif
#endif
enum Visibility
{
ENTER_VISIBILITY = 0, ///< Client joined from an unsubscribed channel, or joined the server.
RETAIN_VISIBILITY, ///< Client switched from one subscribed channel to a different subscribed channel.
LEAVE_VISIBILITY ///< Client switches to an unsubscribed channel, or disconnected from server.
};
enum ConnectStatus
{
STATUS_DISCONNECTED = 0, ///< There is no activity to the server, this is the default value
STATUS_CONNECTING, ///< We are trying to connect, we haven't got a client id yet, we haven't been accepted by the server
STATUS_CONNECTED, ///< The server has accepted us, we can talk and hear and we have a client id, but we don't
///< have the channels and clients yet, we can get server infos (welcome msg etc.)
STATUS_CONNECTION_ESTABLISHING, ///< we are connected and we are visible
STATUS_CONNECTION_ESTABLISHED, ///< we are connected and we have the client and channels available
};
enum LocalTestMode
{
TEST_MODE_OFF = 0,
TEST_MODE_VOICE_LOCAL_ONLY,
TEST_MODE_VOICE_LOCAL_AND_REMOTE,
TEST_MODE_TALK_STATUS_CHANGES_ONLY
};
enum TalkStatus
{
STATUS_NOT_TALKING = 0, ///< client is not talking
STATUS_TALKING = 1, ///< client is talking
STATUS_TALKING_WHILE_DISABLED = 2, ///< client is talking while the microphone is muted (only valid for own client)
};
enum CodecType
{
CODEC_SPEEX_NARROWBAND = 0, ///< (deprecated) mono, 16bit, 8kHz, bitrate dependent on the quality setting
CODEC_SPEEX_WIDEBAND, ///< (deprecated) mono, 16bit, 16kHz, bitrate dependent on the quality setting
CODEC_SPEEX_ULTRAWIDEBAND, ///< (deprecated) mono, 16bit, 32kHz, bitrate dependent on the quality setting
CODEC_CELT_MONO, ///< (deprecated) mono, 16bit, 48kHz, bitrate dependent on the quality setting
CODEC_OPUS_VOICE, ///< mono, 16bit, 48khz, bitrate dependent on the quality setting, optimized for voice
CODEC_OPUS_MUSIC, ///< stereo, 16bit, 48khz, bitrate dependent on the quality setting, optimized for music
};
enum CodecEncryptionMode
{
CODEC_ENCRYPTION_PER_CHANNEL = 0, ///< voice data encryption decided per channel
CODEC_ENCRYPTION_FORCED_OFF, ///< voice data encryption disabled
CODEC_ENCRYPTION_FORCED_ON, ///< voice data encryption enabled
};
enum TextMessageTargetMode
{
TextMessageTarget_CLIENT = 1, ///< Message is a private message to another client
TextMessageTarget_CHANNEL, ///< Message is sent to a channel, received by all clients in that channel at the time
TextMessageTarget_SERVER, ///< Message is sent to every client on the server
TextMessageTarget_MAX
};
enum MuteInputStatus
{
MUTEINPUT_NONE = 0, ///< Microphone is not muted, audio is sent to the server
MUTEINPUT_MUTED, ///< Microphone is muted, no audio is transmitted to the server
};
enum MuteOutputStatus
{
MUTEOUTPUT_NONE = 0, ///< Speaker is active, server is sending us audio
MUTEOUTPUT_MUTED, ///< Speaker is muted, server is not sending audio to us
};
enum HardwareInputStatus
{
HARDWAREINPUT_DISABLED = 0, ///< no capture device opened
HARDWAREINPUT_ENABLED, ///< capture device open
};
enum HardwareOutputStatus
{
HARDWAREOUTPUT_DISABLED = 0, ///< no playback device opened
HARDWAREOUTPUT_ENABLED, ///< playback device open
};
enum InputDeactivationStatus
{
INPUT_ACTIVE = 0, ///< Audio is captured from the capture device.
INPUT_DEACTIVATED = 1, ///< No audio is captured from the capture device.
};
enum ReasonIdentifier
{
REASON_NONE = 0, ///< no reason data
REASON_MOVED = 1, ///< client was moved
REASON_SUBSCRIPTION = 2, // no reason data
REASON_LOST_CONNECTION = 3, // reasonmsg=reason
REASON_KICK_CHANNEL = 4, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER = 5, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER_BAN = 6, //{SectionInvoker} reasonmsg=reason bantime=time //{SectionInvoker} is only added server->client
REASON_SERVERSTOP = 7, // reasonmsg=reason
REASON_CLIENTDISCONNECT = 8, // reasonmsg=reason
REASON_CHANNELUPDATE = 9, // no reason data
REASON_CHANNELEDIT = 10, //{SectionInvoker}
REASON_CLIENTDISCONNECT_SERVER_SHUTDOWN = 11, // reasonmsg=reason
};
enum Protocol_Encryption_Cipher
{
AES_128 = 0b00000000,
AES_256 = 0b00000001,
PROTOCOL_ENCRYPTION_CIPHER_END_MARKER,
RESERVED = 0b00010000, // reserved until puzzle v2 is fully released, then can be reused
PUZZLE_2 = 0b00100000,
};
enum ChannelProperties
{
CHANNEL_NAME = 0, ///< String. Read/Write. Name of the channel. Always available.
CHANNEL_TOPIC, ///< String. Read/Write. Short single line text describing what the channel is about. Always available.
CHANNEL_DESCRIPTION, ///< String. Read/Write. Arbitrary text (up to 8k bytes) with information about the channel.
///< Must be requested (\ref ts3client_requestChannelDescription)
CHANNEL_PASSWORD, ///< String. Read/Write. Password of the channel. Read access is limited to the server. Clients
///< will only ever see the last password they attempted to use when joining the channel. Always available.
CHANNEL_CODEC, ///< Integer. Read/Write. The codec this channel is using. One of the values from the \ref CodecType
///< enum. Always available.
CHANNEL_CODEC_QUALITY, ///< Integer. Read/Write. The quality setting of the channel. Valid values are 0 to 10 inclusive.
///< Higher value means better voice quality but also more bandwidth usage. Always available.
CHANNEL_MAXCLIENTS, ///< Integer. Read/Write. The number of clients that can be in the channel simultaneously.
///< Always available.
CHANNEL_MAXFAMILYCLIENTS, ///< Integer. Read/Write. The total number of clients that can be in this channel and all
///< sub channels of this channel. Always available.
CHANNEL_ORDER, ///< UInt64. Read/Write. The ID of the channel below which this channel should be displayed. If 0
///< the channel is sorted at the top of the current level. Always available.
CHANNEL_FLAG_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when empty.
///< Permanent channels are stored to the database and available after server restart. SDK
///< users will need to take care of restoring channel at server start on their own.
///< Mutually exclusive with \ref CHANNEL_FLAG_SEMI_PERMANENT. Always available.
CHANNEL_FLAG_SEMI_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when
///< empty. Semi permanent channels are not stored to disk and gone after server
///< restart but remain while empty. Mutually exclusive with \ref
///< CHANNEL_FLAG_PERMANENT. Always available.
CHANNEL_FLAG_DEFAULT, ///< Integer. Read/Write. Boolean (1/0). The default channel is the channel that all clients
///< are located in when they join the server, unless the client explicitly specified a
///< different channel when connecting and is allowed to join their preferred channel. Only
///< one channel on the server can have this flag set. The default channel must have \ref
///< CHANNEL_FLAG_PERMANENT set. Always available.
CHANNEL_FLAG_PASSWORD, ///< Integer. Read/Write. Boolean (1/0) indicating whether this channel is password protected.
///< When removing or setting \ref CHANNEL_PASSWORD you also need to adjust this flag.
CHANNEL_CODEC_LATENCY_FACTOR, ///< (deprecated) Integer. Read/Write. Allows to increase packet size, reducing
///< bandwith at the cost of higher latency of voice transmission. Valid values are
///< 1-10 inclusive. 1 is the default and offers the lowest latency. Always available.
CHANNEL_CODEC_IS_UNENCRYPTED, ///< Integer. Read/Write. Boolean (1/0). If 0 voice data is encrypted, if 1 the voice
///< data is not encrypted. Only used if the server \ref
///< VIRTUALSERVER_CODEC_ENCRYPTION_MODE is set to \ref CODEC_ENCRYPTION_PER_CHANNEL.
///< Always available.
CHANNEL_SECURITY_SALT, ///< String. Read/Write. SDK Only, not used by TeamSpeak. This channels security hash. When
///< a client joins their \ref CLIENT_SECURITY_HASH is compared to this value, to allow or
///< deny the client access to the channel. Used to enforce clients joining the server with
///< specific identity and \ref CLIENT_META_DATA. See SDK Documentation about this feature
///< for further details. Always available.
CHANNEL_DELETE_DELAY, ///< UInt64. Read/Write. Number of seconds deletion of temporary channels is delayed after
///< the last client leaves the channel. Channel is only deleted if empty when the delete
///< delay expired. Always available.
CHANNEL_UNIQUE_IDENTIFIER, ///< String. Read only. An identifier that uniquely identifies a channel. Available in
///< Server >= 3.10.0
CHANNEL_ENDMARKER,
};
enum ClientProperties
{
CLIENT_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Public Identity, can be used to identify a client
///< installation. Remains identical as long as the client keeps using the same
///< identity. Available for visible clients.
CLIENT_NICKNAME, ///< String. Read/Write. Display name of the client. Available for visible clients.
CLIENT_VERSION, ///< String. Read only. Version String of the client used. For clients other than ourself this
///< needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_PLATFORM, ///< String. Read only. Operating system used by the client. For other clients other than ourself
///< this needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_FLAG_TALKING, ///< Integer. Read only. Whether the client is talking. Available on clients that are either
///< whispering to us, or in our channel.
CLIENT_INPUT_MUTED, ///< Integer. Read/Write. Microphone mute status. Available for visible clients. One of the
///< values from the \ref MuteInputStatus enum.
CLIENT_OUTPUT_MUTED, ///< Integer. Read/Write. Speaker mute status. Speaker mute implies microphone mute. Available
///< for visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_OUTPUTONLY_MUTED, ///< Integer. Read/Write. Speaker mute status. Microphone may be active. Available for
///< visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_INPUT_HARDWARE, ///< Integer. Read only. Indicates whether a capture device is open. Available for visible
///< clients. One of the values from the \ref HardwareInputStatus enum.
CLIENT_OUTPUT_HARDWARE, ///< Integer. Read only. Indicates whether a playback device is open. Available for visible
///< clients. One of the values from the \ref HardwareOutputStatus enum.
CLIENT_INPUT_DEACTIVATED, ///< Integer. Read/Write. Not available server side. Local microphone mute status.
///< Available only for own client. Used to implement Push To Talk. One of the values from
///< the \ref InputDeactivationStatus enum.
CLIENT_IDLE_TIME, ///< UInt64. Read only. Seconds since last activity. Available only for own client.
CLIENT_DEFAULT_CHANNEL, ///< String. Read only. User specified channel they joined when connecting to the server.
///< Available only for own client.
CLIENT_DEFAULT_CHANNEL_PASSWORD, ///< String. Read only. User specified channel password for the channel they
///< attempted to join when connecting to the server. Available only for own
///< client.
CLIENT_SERVER_PASSWORD, ///< String. Read only. User specified server password. Available only for own client.
CLIENT_META_DATA, ///< String. Read/Write. Can be used to store up to 4096 bytes of information on clients. Not
///< used by TeamSpeak. Available for visible clients.
CLIENT_IS_MUTED, ///< Integer. Read only. Not available server side. Indicates whether we have muted the client
///< using \ref ts3client_requestMuteClients. Available for visible clients other than ourselves.
CLIENT_IS_RECORDING, ///< Integer. Read only. Indicates whether the client is recording incoming audio. Available
///< for visible clients.
CLIENT_VOLUME_MODIFICATOR, ///< Integer. Read only. Volume adjustment for this client as set by \ref
///< ts3client_setClientVolumeModifier. Available for visible clients.
CLIENT_VERSION_SIGN, ///< String. Read only. TeamSpeak internal signature.
CLIENT_SECURITY_HASH, ///< String. Read/Write. This clients security hash. Not used by TeamSpeak, SDK only. Hash is
///< provided by an outside source. A channel will use the security salt + other client data
///< to calculate a hash, which must be the same as the one provided here. See SDK
///< documentation about Client / Channel Security Hashes for more details.
CLIENT_ENCRYPTION_CIPHERS, ///< String. Read only. SDK only. List of available ciphers this client can use.
CLIENT_IS_STREAMING, ///< bool. Read only, Is currently streaming.
CLIENT_ENDMARKER,
};
enum VirtualServerProperties
{
VIRTUALSERVER_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Unique identifier for a virtual server, does not
///< change on server restart. Available if \ref ts3client_getConnectionStatus
///< is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_NAME, ///< String. Read/Write. The virtual server display name. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_WELCOMEMESSAGE, ///< String. Read/Write. The welcome message displayed to clients on connect.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED. Not
///< updated automatically when changed, updates need to be requested (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_PLATFORM, ///< String. Read only. The operating system the server is running on. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_VERSION, ///< String. Read only. The server software version string. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_MAXCLIENTS, ///< UInt64. Read/Write. The maximum number of clients that can be connected
///< simultaneously. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_PASSWORD, ///< String. Read/Write. The server password. Read access is limited to the server. Clients
///< will only get the password they supplied when connecting. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_CLIENTS_ONLINE, ///< UInt64. Read only. The current number of clients connected to the server,
///< including query connections. Only available on request (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_CHANNELS_ONLINE, ///< UInt64. Read only. The current number of channels on the server. Only
///< available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CREATED, ///< Integer. Read only. The time this virtual server was created as unix timestamp.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_UPTIME, ///< UInt64. Read only. Number of seconds that have passed since the virtual server was
///< started. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CODEC_ENCRYPTION_MODE, ///< Integer. Read/Write. Boolean (1/0) that specifies if voice data is encrypted
///< during transfer. One of the values from the \ref CodecEncryptionMode enum.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_ENCRYPTION_CIPHERS, ///< String. Read/Write. Comma separated list of available ciphers to encrypt the
///< connection. The server will use the first cipher in the list that is also
///< listed in the \ref CLIENT_ENCRYPTION_CIPHERS of the connecting client.
///< Clients will fail to connect if no match is found. Always available.
VIRTUALSERVER_ADDRESS, ///< Any resolvable address for the specific virtual server
VIRTUALSERVER_VERSION_SIGN, ///< String. Read only. Signature of Platform and Version.
VIRTUALSERVER_ENDMARKER,
VIRTUALSERVER_FILEBASE = 24, ///< String. Read only. The path to the base directory used to store files
///< transferred using file transfer. Available only on the server. Is set by \ref
///< ts3server_enableFileManager
VIRTUALSERVER_MAX_DOWNLOAD_TOTAL_BANDWIDTH = 29, ///< UInt64. Read/Write. Maximum traffic in bytes the server can
///< use for file transfer downloads. Only available on request
///< (\ref ts3client_requestServerVariables).
VIRTUALSERVER_MAX_UPLOAD_TOTAL_BANDWIDTH = 30, ///< UInt64. Read/Write. Maximum traffic in bytes the server can use
///< for file transfer uploads. Only available on request (=>
///< requestServerVariables)
VIRTUALSERVER_LOG_FILETRANSFER = 64 ///< Integer. Read/Write. Boolean (1/0) indicating whether to include file
///< transfer activities (uploading or downloading of files) in the server log.
///< Always available.
};
/**
* Various connection properties.
* These are all read only, and except for your own client must be requested using \ref ts3client_requestConnectionInfo
*/
enum ConnectionProperties
{
CONNECTION_PING = 0, ///< UInt64. Round trip latency for the connection based on the last 5 seconds. On the server
///< this is the average across all connected clients for the last 5 seconds.
CONNECTION_PING_DEVIATION, ///< Double. Standard deviation for the round trip latency in \ref CONNECTION_PING
CONNECTION_CONNECTED_TIME, ///< UInt64. Seconds the client has been connected.
CONNECTION_IDLE_TIME, ///< UInt64. Time in seconds since the last activity (voice transmission, switching channels,
///< changing mic / speaker mute status) of the client.
CONNECTION_CLIENT_IP, ///< String. IP of this client (as seen from the server side)
CONNECTION_CLIENT_PORT, ///< UInt64. Client side port of this client (as seen from the server side)
CONNECTION_SERVER_IP, ///< String. The IP or hostname used to connect to the server. Only available on yourself.
CONNECTION_SERVER_PORT, ///< UInt64. The server port connected to. Only available on yourself.
CONNECTION_PACKETS_SENT_SPEECH, ///< UInt64. The number of voice packets transmitted by the client.
CONNECTION_PACKETS_SENT_KEEPALIVE, ///< UInt64. The number of keep alive packets transmitted by the client.
CONNECTION_PACKETS_SENT_CONTROL, ///< UInt64. The number of command & control packets transmitted by the client.
CONNECTION_PACKETS_SENT_TOTAL, ///< UInt64. Total number of packets transmitted by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_SENT_SPEECH, \ref CONNECTION_PACKETS_SENT_KEEPALIVE and
///< \ref CONNECTION_PACKETS_SENT_CONTROL
CONNECTION_BYTES_SENT_SPEECH, ///< UInt64. Outgoing traffic used for voice data by the client.
CONNECTION_BYTES_SENT_KEEPALIVE, ///< UInt64. Outgoing traffic used for keeping the connection alive by the client.
CONNECTION_BYTES_SENT_CONTROL, ///< UInt64. Outgoing traffic used for command & control data by the client.
CONNECTION_BYTES_SENT_TOTAL, ///< UInt64. Total outgoing traffic to the server by this client. Equal to the sum of
///< \ref CONNECTION_BYTES_SENT_SPEECH, \ref CONNECTION_BYTES_SENT_KEEPALIVE and \ref
///< CONNECTION_BYTES_SENT_CONTROL
CONNECTION_PACKETS_RECEIVED_SPEECH, ///< UInt64. Number of voice packets received by the client.
CONNECTION_PACKETS_RECEIVED_KEEPALIVE, ///< UInt64. Number of keep alive packets received by the client.
CONNECTION_PACKETS_RECEIVED_CONTROL, ///< UInt64. Number of command & control packets received by the client.
CONNECTION_PACKETS_RECEIVED_TOTAL, ///< UInt64. Total number of packets received by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_RECEIVED_SPEECH, \ref
///< CONNECTION_PACKETS_RECEIVED_KEEPALIVE and \ref
///< CONNECTION_PACKETS_RECEIVED_CONTROL
CONNECTION_BYTES_RECEIVED_SPEECH, ///< UInt64. Incoming traffic used by the client for voice data.
CONNECTION_BYTES_RECEIVED_KEEPALIVE, ///< UInt64. Incoming traffic used by the client to keep the connection alive.
CONNECTION_BYTES_RECEIVED_CONTROL, ///< UInt64. Incoming traffic used by the client for command & control data.
CONNECTION_BYTES_RECEIVED_TOTAL, ///< UInt64. Total incoming traffic used by the client. Equal to the sum of \ref
///< CONNECTION_BYTES_RECEIVED_SPEECH, \ref CONNECTION_BYTES_RECEIVED_KEEPALIVE and
///< \ref CONNECTION_BYTES_RECEIVED_CONTROL
CONNECTION_PACKETLOSS_SPEECH, ///< Double. Percentage points of voice packets for the client that did not arrive at
///< the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_KEEPALIVE, ///< Double. Percentage points of keep alive packets for the client that did not
///< arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_CONTROL, ///< Double. Percentage points of command & control packets for the client that did
///< not arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_TOTAL, ///< Double. Cumulative chance in percentage points with which a packet round trip
///< failed because a packet was lost
CONNECTION_SERVER2CLIENT_PACKETLOSS_SPEECH, ///< Double. Probability with which a voice packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< server was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the server was not
///< received by the client.
CONNECTION_CLIENT2SERVER_PACKETLOSS_SPEECH, ///< Double. Probability with which a speech packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< client was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the client was not
///< received by the server.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes sent for speech data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes sent for keepalive data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes sent for control data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes sent in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second sent for speech data, averaged over the
///< last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second sent for keepalive data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second sent for control data, averaged over
///< the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second sent, averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes received for speech data in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes received for keepalive data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes received for control data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes received in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second received for speech data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second received for keepalive data,
///< averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second received for control data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second received, averaged over the last minute.
CONNECTION_DUMMY_0,
CONNECTION_DUMMY_1,
CONNECTION_DUMMY_2,
CONNECTION_DUMMY_3,
CONNECTION_DUMMY_4,
CONNECTION_DUMMY_5,
CONNECTION_DUMMY_6,
CONNECTION_DUMMY_7,
CONNECTION_DUMMY_8,
CONNECTION_DUMMY_9,
CONNECTION_FILETRANSFER_BANDWIDTH_SENT, ///< UInt64. Current file transfer upstream activity in bytes per second.
///< Only available on request (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BANDWIDTH_RECEIVED, ///< UInt64. Current file transfer downstream activity in bytes per
///< second. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_RECEIVED_TOTAL, ///< UInt64. Total downstream traffic, in bytes, used for file
///< transfer since the server was started. Only available on request
///< (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_SENT_TOTAL, ///< UInt64. Total upstream traffic, in bytes, used for file transfer
///< since the server was started. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_ENDMARKER
};
/**
* Describes a client position in 3 dimensional space, used for 3D Sound.
*/
typedef struct
{
float x; ///< X co-ordinate in 3D space.
float y; ///< Y co-ordinate in 3D space.
float z; ///< Z co-ordinate in 3D space.
} TS3_VECTOR;
enum GroupWhisperType
{
GROUPWHISPERTYPE_SERVERGROUP = 0, ///< Whisper list consists of server groups
GROUPWHISPERTYPE_CHANNELGROUP = 1, ///< Whisper list consists of channel groups
GROUPWHISPERTYPE_CHANNELCOMMANDER = 2, ///< whisper to channel commanders
GROUPWHISPERTYPE_ALLCLIENTS = 3, ///< whisper to all clients
GROUPWHISPERTYPE_ENDMARKER,
};
enum GroupWhisperTargetMode
{
GROUPWHISPERTARGETMODE_ALL = 0,
GROUPWHISPERTARGETMODE_CURRENTCHANNEL = 1, ///< Whisper the current channel of the client
GROUPWHISPERTARGETMODE_PARENTCHANNEL = 2, ///< Whisper the parent channel of whatever channel the client is currently in
GROUPWHISPERTARGETMODE_ALLPARENTCHANNELS = 3, ///< Whipser to the parent channel and all their parent channels as well
GROUPWHISPERTARGETMODE_CHANNELFAMILY = 4, ///< Whisper to the current channel and all its sub channels
GROUPWHISPERTARGETMODE_ANCESTORCHANNELFAMILY = 5, ///< Whisper to the current channel, all its parent and sub channels.
GROUPWHISPERTARGETMODE_SUBCHANNELS = 6, ///< Whisper to all sub channels of the current channel of the client
GROUPWHISPERTARGETMODE_ENDMARKER,
};
enum MonoSoundDestination
{
MONO_SOUND_DESTINATION_ALL = 0, ///< Send mono sound to all available speakers
MONO_SOUND_DESTINATION_FRONT_CENTER = 1, ///< Send mono sound to front center speaker if available
MONO_SOUND_DESTINATION_FRONT_LEFT_AND_RIGHT = 2 ///< Send mono sound to front left/right speakers if available
};
enum SecuritySaltOptions
{
SECURITY_SALT_CHECK_NICKNAME = 1, ///< put nickname into security hash
SECURITY_SALT_CHECK_META_DATA = 2 ///< put meta data into security hash
};
/*this enum is used to disable client commands on the server*/
enum ClientCommand
{
CLIENT_COMMAND_requestConnectionInfo = 0, ///< disable client connection info request (client bandwidth usage, ip,
///< port, ping)
CLIENT_COMMAND_requestClientMove = 1, ///< disable moving clients
CLIENT_COMMAND_requestXXMuteClients = 2, ///< disable muting other clients
CLIENT_COMMAND_requestClientKickFromXXX = 3, ///< disable kicking clients
CLIENT_COMMAND_flushChannelCreation = 4, ///< disable creating channels
CLIENT_COMMAND_flushChannelUpdates = 5, ///< disable editing channels
CLIENT_COMMAND_requestChannelMove = 6, ///< disable moving channels
CLIENT_COMMAND_requestChannelDelete = 7, ///< disable deleting channels
CLIENT_COMMAND_requestChannelDescription = 8, ///< disable channel descriptions
CLIENT_COMMAND_requestChannelXXSubscribeXXX = 9, ///< disable being able to see clients in channels other than the
///< current channel the client is in
CLIENT_COMMAND_requestServerConnectionInfo = 10, ///< disable server connection info request (server bandwidth
///< usage, ip, port, ping)
CLIENT_COMMAND_requestSendXXXTextMsg = 11, ///< disable text messaging
CLIENT_COMMAND_filetransfers = 12, ///< disable file transfer
CLIENT_COMMAND_ENDMARKER
};
/* Access Control List*/
enum ACLType
{
ACL_NONE = 0,
ACL_WHITE_LIST = 1,
ACL_BLACK_LIST = 2
};
/* file transfer actions*/
enum FTAction
{
FT_INIT_SERVER = 0, ///< The virtual server is created. result->channelPath can be changed to create a different
///< directory than the default 'virtualserver_x' where x is the virtual server.
FT_INIT_CHANNEL = 1, ///< A channel is created. result->channelPath can be changed to create a different directory
///< then the default 'channel_x' where x is the channel id.
FT_UPLOAD = 2, ///< A file is being uploaded. All values in the result struct can be modified.
FT_DOWNLOAD = 3, ///< A file is being downloaded. All values in the result struct can be modified.
FT_DELETE = 4, ///< A file is being deleted. All values in the result struct can be modified.
FT_CREATEDIR = 5, ///< A directory is being created in a channel. All values in the result struct can be modified.
FT_RENAME = 6, ///< A file or folder is being renamed. The callback will be called twice! Once for the old and then
///< for the new name. All values in the result struct can be modified.
FT_FILELIST = 7, ///< A directory listing is requested. All values in the result struct can be modified.
FT_FILEINFO = 8 ///< Information of a file is requested. All values in the result struct can be modified.
};
/* file transfer status */
enum FileTransferState
{
FILETRANSFER_INITIALISING = 0, ///< File transfer is establishing connection.
FILETRANSFER_ACTIVE, ///< File transfer is in progress
FILETRANSFER_FINISHED, ///< File transfer has finished
};
/* file transfer types */
enum FileTransferType
{
FileListType_Directory = 0, ///< The file entry is a directory
FileListType_File, ///< The file entry is a regular file
};
/* some structs to handle variables in callbacks */
#define MAX_VARIABLES_EXPORT_COUNT 64
struct VariablesExportItem
{
unsigned char itemIsValid; ///< Whether or not there is any data in this item. Ignore this item if this is 0.
unsigned char proposedIsSet; ///< The value in proposed is set. If 0 ignore proposed
const char* current; ///< current value (stored in memory)
const char* proposed; ///< New value to change to (const, so no updates please)
};
struct VariablesExport
{
struct VariablesExportItem items[MAX_VARIABLES_EXPORT_COUNT];
};
struct ClientMiniExport
{
anyID ID; ///< id of the client
uint64 channel; ///< the channel the client is in
const char* ident; ///< client public identity
const char* nickname; ///< client display name
};
/**
* Structure used to describe a file transfer in the \ref ServerLibFunctions.onTransformFilePath callback.
* This describes the original values, and also contains hints for length limitations of the result parameter
* of the callback.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExport
{
uint64 channel; ///< The channel id of the file. 0 if action is \ref FT_INIT_SERVER
const char* filename; ///< utf8 encoded c string containing the original file name as intended by the client.
int action; ///< The action to be performed. One of the values from the \ref FTAction enum. Defines which values of
///< the result struct can be modified.
int transformedFileNameMaxSize; ///< The maximum length the file name can be rewritten to.
int channelPathMaxSize; ///< The maximum length the path can be rewritten to.
};
/**
* Structure to rewrite the file transfer file name and path in the \ref ServerLibFunctions.onTransformFilePath callback.
* The lengths are limited as described in the original parameter.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExportReturns
{
char* transformedFileName; ///< pointer to target file name. Fill the memory pointed to with an utf8 encoded c string
///< containing the new file name. Limited to original->transformedFileNameMaxSize bytes.
char* channelPath; ///< pointer to memory for new path. Fill the memory pointed to with an utf8 encoded c string
///< containing the new path. Limited to original->channelPathMaxSize bytes.
int logFileAction; ///< boolean (1/0). Whether to log this file transfer to the log. Action is not logged regardless
///< of this value if the servers \ref VIRTUALSERVER_LOG_FILETRANSFER property is 0.
};
struct FileTransferCallbackExport
{
anyID clientID; ///< the client who started the file transfer
anyID transferID; ///< local identifier of the transfer that has completed
anyID remoteTransferID; ///< remote identifier of the transfer that has completed
unsigned int status; ///< status of the transfer. One of the values from the \ref FileTransferState enum
const char* statusMessage; ///< utf8 encoded c string containing a human readable description of the status
uint64 remotefileSize; ///< size in bytes of the complete file to be transferred
uint64 bytes; ///< number of bytes transferred. Same as remotefileSize when the transfer completed entirely.
int isSender; ///< boolean. 1 if the server is sending the file. 0 if the server is receiving the file.
};
/*define for file transfer bandwith limits*/
#define BANDWIDTH_LIMIT_UNLIMITED 0xFFFFFFFFFFFFFFFFll
/*defines for speaker locations used by some sound callbacks*/
#ifndef SPEAKER_FRONT_LEFT
#define SPEAKER_FRONT_LEFT 0x1
#define SPEAKER_FRONT_RIGHT 0x2
#define SPEAKER_FRONT_CENTER 0x4
#define SPEAKER_LOW_FREQUENCY 0x8
#define SPEAKER_BACK_LEFT 0x10
#define SPEAKER_BACK_RIGHT 0x20
#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
#define SPEAKER_BACK_CENTER 0x100
#define SPEAKER_SIDE_LEFT 0x200
#define SPEAKER_SIDE_RIGHT 0x400
#define SPEAKER_TOP_CENTER 0x800
#define SPEAKER_TOP_FRONT_LEFT 0x1000
#define SPEAKER_TOP_FRONT_CENTER 0x2000
#define SPEAKER_TOP_FRONT_RIGHT 0x4000
#define SPEAKER_TOP_BACK_LEFT 0x8000
#define SPEAKER_TOP_BACK_CENTER 0x10000
#define SPEAKER_TOP_BACK_RIGHT 0x20000
#endif
#define SPEAKER_HEADPHONES_LEFT 0x10000000
#define SPEAKER_HEADPHONES_RIGHT 0x20000000
#define SPEAKER_MONO 0x40000000
#endif /*PUBLIC_DEFINITIONS_H*/
@@ -1,217 +0,0 @@
#ifndef PUBLIC_ERRORS_H
#define PUBLIC_ERRORS_H
//The idea here is: the values are 2 bytes wide, the first byte identifies the group, the second the count within that group
enum Ts3ErrorType {
//general
ERROR_ok = 0x0000, ///< Indicates success.
ERROR_undefined = 0x0001,
ERROR_not_implemented = 0x0002, ///< The attempted operation is not available in this context
ERROR_ok_no_update = 0x0003, ///< Indicates success, but no change occurred. Returned for example upon flushing (e.g. using \ref ts3client_flushChannelUpdates) when all indicated changes already matched the current state.
ERROR_dont_notify = 0x0004,
ERROR_lib_time_limit_reached = 0x0005,
ERROR_out_of_memory = 0x0006, ///< Not enough system memory to perform operation
ERROR_canceled = 0x0007,
ERROR_ok_no_error_event = 0x0008, ///< Indicates success, but no error event was generated. This is used because of the return code management and reduce packets.
//dunno
ERROR_command_not_found = 0x0100,
ERROR_unable_to_bind_network_port = 0x0101, ///< Unspecified failure to create a listening port
ERROR_no_network_port_available = 0x0102, ///< Failure to initialize a listening port for FileTransfer
ERROR_port_already_in_use = 0x0103, ///< Specified port is already in use by a different application
ERROR_command_line_parse_failed = 0x0104, ///< Command line arguments are invalid
ERROR_command_line_exit_version = 0x0105, ///< Command line specified version. The process should exit with code 0 after printing the version.
ERROR_command_line_exit_help = 0x0106, ///< Command line specified help. The process should exit with code 0 after priting the help.
//client
ERROR_client_invalid_id = 0x0200, ///< Client no longer connected
ERROR_client_nickname_inuse = 0x0201, ///< Client name is already in use. Client names must be unique
ERROR_client_protocol_limit_reached = 0x0203, ///< Too many clients on the server
ERROR_client_invalid_type = 0x0204, ///< Function called for normal clients that is only available for query clients or vice versa
ERROR_client_already_subscribed = 0x0205, ///< Attempting to subscribe to a channel already subscribed to
ERROR_client_not_logged_in = 0x0206,
ERROR_client_could_not_validate_identity = 0x0207, ///< Identity not valid or insufficient security level
ERROR_client_invalid_password = 0x0208,
ERROR_client_version_outdated = 0x020a, ///< Server requires newer client version as determined by the min_client_version properties
ERROR_client_is_flooding = 0x020c, ///< Triggered flood protection. Further information is supplied in the extra message if applicable.
ERROR_client_hacked = 0x020d,
ERROR_client_cannot_verify_now = 0x020e,
ERROR_client_login_not_permitted = 0x020f,
ERROR_client_not_subscribed = 0x0210, ///< Action is only available on subscribed channels
//channel
ERROR_channel_invalid_id = 0x0300, ///< Channel does not exist on the server (any longer)
ERROR_channel_protocol_limit_reached = 0x0301, ///< Too many channels on the server
ERROR_channel_already_in = 0x0302, ///< Attempting to move a client or channel to its current channel
ERROR_channel_name_inuse = 0x0303, ///< Channel name is already taken by another channel. Channel names must be unique
ERROR_channel_not_empty = 0x0304, ///< Attempting to delete a channel with clients or sub channels in it
ERROR_channel_can_not_delete_default = 0x0305, ///< Default channel cannot be deleted. Set a new default channel first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_default_require_permanent = 0x0306, ///< Attempt to set a non permanent channel as default channel. Set channel to permanent first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_invalid_flags = 0x0307, ///< Invalid combination of \ref ChannelProperties, trying to remove \ref CHANNEL_FLAG_DEFAULT or set a password on the default channel
ERROR_channel_parent_not_permanent = 0x0308, ///< Attempt to move a permanent channel into a non-permanent one, or set a channel to be permanent that is a sub channel of a non-permanent one
ERROR_channel_maxclients_reached = 0x0309, ///< Channel is full as determined by its \ref CHANNEL_MAXCLIENTS setting
ERROR_channel_maxfamily_reached = 0x030a, ///< Channel tree is full as determined by its \ref CHANNEL_MAXFAMILYCLIENTS setting
ERROR_channel_invalid_order = 0x030b, ///< Invalid value for the \ref CHANNEL_ORDER property. The specified channel must exist on the server and be on the same level.
ERROR_channel_no_filetransfer_supported = 0x030c, ///< Invalid \ref CHANNEL_FILEPATH set for the channel
ERROR_channel_invalid_password = 0x030d, ///< Channel has a password not matching the password supplied in the call
// used in public_rare_errors = 0x030e,
ERROR_channel_invalid_security_hash = 0x030f,
//server
ERROR_server_invalid_id = 0x0400, ///< Chosen virtual server does not exist or is offline
ERROR_server_running = 0x0401, ///< attempting to delete a server that is running. Stop the server before deleting it.
ERROR_server_is_shutting_down = 0x0402, ///< Client disconnected because the server is going offline
ERROR_server_maxclients_reached = 0x0403, ///< Given in the onConnectStatusChange event when the server has reached its maximum number of clients as defined by the \ref VIRTUALSERVER_MAXCLIENTS property
ERROR_server_invalid_password = 0x0404, ///< Specified server password is wrong. Provide the correct password in the \ref ts3client_startConnection / \ref ts3client_startConnectionWithChannelID call.
ERROR_server_is_virtual = 0x0407, ///< Server is in virtual status. The attempted action is not possible in this state. Start the virtual server first.
ERROR_server_is_not_running = 0x0409, ///< Attempting to stop a server that is not online.
ERROR_server_is_booting = 0x040a, // Not used
ERROR_server_status_invalid = 0x040b,
ERROR_server_version_outdated = 0x040d, ///< Attempt to connect to an outdated server version. The server needs to be updated.
ERROR_server_duplicate_running = 0x040e, ///< This server is already running within the instance. Each virtual server may only exist once.
//parameter
ERROR_parameter_quote = 0x0600, // Not used
ERROR_parameter_invalid_count = 0x0601, ///< Attempt to flush changes without previously calling set*VariableAs* since the last flush
ERROR_parameter_invalid = 0x0602, ///< At least one of the supplied parameters did not meet the criteria for that parameter
ERROR_parameter_not_found = 0x0603, ///< Failure to supply all the necessary parameters
ERROR_parameter_convert = 0x0604, ///< Invalid type supplied for a parameter, such as passing a string (ie. "five") that expects a number.
ERROR_parameter_invalid_size = 0x0605, ///< Value out of allowed range. Such as strings are too long/short or numeric values outside allowed range
ERROR_parameter_missing = 0x0606, ///< Neglecting to specify a required parameter
ERROR_parameter_checksum = 0x0607, ///< Attempting to deploy a modified snapshot
//unsorted, need further investigation
ERROR_vs_critical = 0x0700, ///< Failure to create default channel
ERROR_connection_lost = 0x0701, ///< Generic error with the connection.
ERROR_not_connected = 0x0702, ///< Attempting to call functions with a serverConnectionHandler that is not connected. You can use \ref ts3client_getConnectionStatus to check whether the connection handler is connected to a server
ERROR_no_cached_connection_info = 0x0703, ///< Attempting to query connection information (bandwidth usage, ping, etc) without requesting them first using \ref ts3client_requestConnectionInfo
ERROR_currently_not_possible = 0x0704, ///< Requested information is not currently available. You may have to call \ref ts3client_requestClientVariables or \ref ts3client_requestServerVariables
ERROR_failed_connection_initialisation = 0x0705, ///< No TeamSpeak server running on the specified IP address and port
ERROR_could_not_resolve_hostname = 0x0706, ///< Failure to resolve the specified hostname to an IP address
ERROR_invalid_server_connection_handler_id = 0x0707, ///< Attempting to perform actions on a non-existent server connection handler
ERROR_could_not_initialise_input_manager = 0x0708, // Not used
ERROR_clientlibrary_not_initialised = 0x0709, ///< Calling client library functions without successfully calling \ref ts3client_initClientLib before
ERROR_serverlibrary_not_initialised = 0x070a, ///< Calling server library functions without successfully calling \ref ts3server_initServerLib before
ERROR_whisper_too_many_targets = 0x070b, ///< Using a whisper list that contain more clients than the servers \ref VIRTUALSERVER_MIN_CLIENTS_IN_CHANNEL_BEFORE_FORCED_SILENCE property
ERROR_whisper_no_targets = 0x070c, ///< The active whisper list is empty or no clients matched the whisper list (e.g. all channels in the list are empty)
ERROR_connection_ip_protocol_missing = 0x070d, ///< Invalid or unsupported protocol (e.g. attempting an IPv6 connection on an IPv4 only machine)
ERROR_handshake_failed = 0x070e,
ERROR_illegal_server_license = 0x070f,
//file transfer
ERROR_file_invalid_name = 0x0800, ///< Invalid UTF8 string or not a valid file
ERROR_file_invalid_permissions = 0x0801, ///< Permissions prevent opening the file
ERROR_file_already_exists = 0x0802, ///< Target path already exists as a directory
ERROR_file_not_found = 0x0803, ///< Attempt to access or move non existing file
ERROR_file_io_error = 0x0804, ///< Generic file input / output error
ERROR_file_invalid_transfer_id = 0x0805, ///< Attempt to get information about a file transfer after it has already been cleaned up. File transfer information is not available indefinitely after the transfer completed
ERROR_file_invalid_path = 0x0806, ///< specified path contains invalid characters or does not start with "/"
ERROR_file_no_files_available = 0x0807, // Not used
ERROR_file_overwrite_excludes_resume = 0x0808, ///< File overwrite and resume are mutually exclusive. Only one or neither can be 1.
ERROR_file_invalid_size = 0x0809, ///< Attempt to write more bytes than claimed file size.
ERROR_file_already_in_use = 0x080a, ///< File is currently not available, try again later.
ERROR_file_could_not_open_connection = 0x080b, ///< Generic failure in file transfer connection / other party did not conform to file transfer protocol
ERROR_file_no_space_left_on_device = 0x080c, ///< Operating system reports hard disk is full. May be caused by quota limitations.
ERROR_file_exceeds_file_system_maximum_size = 0x080d, ///< File is too large for the file system of the target device.
ERROR_file_transfer_connection_timeout = 0x080e, // Not used
ERROR_file_connection_lost = 0x080f, ///< File input / output timeout or connection failure
ERROR_file_exceeds_supplied_size = 0x0810, // Not used
ERROR_file_transfer_complete = 0x0811, ///< Indicates successful completion
ERROR_file_transfer_canceled = 0x0812, ///< Transfer was cancelled through @ref ts3client_haltTransfer
ERROR_file_transfer_interrupted = 0x0813, ///< Transfer failed because the server is shutting down, or network connection issues
ERROR_file_transfer_server_quota_exceeded = 0x0814, ///< Transfer terminated due to server bandwidth quota being exceeded. No client can transfer files.
ERROR_file_transfer_client_quota_exceeded = 0x0815, ///< Attempt to transfer more data than allowed by this clients' bandwidth quota. Other clients may continue to transfer files.
ERROR_file_transfer_reset = 0x0816, // Not used
ERROR_file_transfer_limit_reached = 0x0817, ///< Too many file transfers are in progress. Try again later
ERROR_file_invalid_storage_class = 0x0818, // TODO: Invalid storage class for HTTP FileTransfer (what is a storage class?)
ERROR_file_invalid_dimension = 0x0819, ///< Avatar image exceeds maximum width or height accepted by the server.
ERROR_file_transfer_channel_quota_exceeded = 0x081a, ///< Transfer failed because the channel quota was exceeded. Uploading to this channel is not possible, but other channels may be fine.
//sound
ERROR_sound_preprocessor_disabled = 0x0900, ///< Cannot set or query pre processor variables with preprocessing disabled
ERROR_sound_internal_preprocessor = 0x0901,
ERROR_sound_internal_encoder = 0x0902,
ERROR_sound_internal_playback = 0x0903,
ERROR_sound_no_capture_device_available = 0x0904, ///< No audio capture devices are available
ERROR_sound_no_playback_device_available = 0x0905, ///< No audio playback devices are available
ERROR_sound_could_not_open_capture_device = 0x0906, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_could_not_open_playback_device = 0x0907, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_handler_has_device = 0x0908, ///< Attempt to open a sound device on a connection handler which already has an open device. Close the already open device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_invalid_capture_device = 0x0909, ///< Attempt to use a device for capture that does not support capturing audio
ERROR_sound_invalid_playback_device = 0x090a, ///< Attempt to use a device for playback that does not support playback of audio
ERROR_sound_invalid_wave = 0x090b, ///< Attempt to use a non WAV file in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle
ERROR_sound_unsupported_wave = 0x090c, ///< Unsupported wave file used in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle.
ERROR_sound_open_wave = 0x090d, ///< Failure to open the specified sound file
ERROR_sound_internal_capture = 0x090e,
ERROR_sound_device_in_use = 0x090f, ///< Attempt to unregister a custom device that is being used. Close the device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_device_already_registerred = 0x0910, ///< Attempt to register a custom device with a device id that has already been used in a previous call. Device ids must be unique.
ERROR_sound_unknown_device = 0x0911, ///< Attempt to open, close, unregister or use a device which is not known. Custom devices must be registered before being used (see \ref ts3client_registerCustomDevice)
ERROR_sound_unsupported_frequency = 0x0912,
ERROR_sound_invalid_channel_count = 0x0913, ///< Invalid device audio channel count, must be > 0
ERROR_sound_read_wave = 0x0914, ///< Failure to read sound samples from an opened wave file. Is this a valid wave file?
ERROR_sound_need_more_data = 0x0915, // for internal purposes only
ERROR_sound_device_busy = 0x0916, // for internal purposes only
ERROR_sound_no_data = 0x0917, ///< Indicates there is currently no data for playback, e.g. nobody is speaking right now.
ERROR_sound_channel_mask_mismatch = 0x0918, ///< Opening a device with an unsupported channel count
//permissions
ERROR_permissions_client_insufficient = 0x0a08, ///< Not enough permissions to perform the requested activity
ERROR_permissions = 0x0a0c, ///< Permissions to use sound device not granted by operating system, e.g. Windows denied microphone access.
//accounting
ERROR_accounting_virtualserver_limit_reached = 0x0b00, ///< Attempt to use more virtual servers than allowed by the license
ERROR_accounting_slot_limit_reached = 0x0b01, ///< Attempt to set more slots than allowed by the license
ERROR_accounting_license_file_not_found = 0x0b02, // Not used
ERROR_accounting_license_date_not_ok = 0x0b03, ///< License expired or not valid yet
ERROR_accounting_unable_to_connect_to_server = 0x0b04, ///< Failure to communicate with accounting backend
ERROR_accounting_unknown_error = 0x0b05, ///< Failure to write update license file
ERROR_accounting_server_error = 0x0b06, // Not used
ERROR_accounting_instance_limit_reached = 0x0b07, ///< More than one process of the server is running
ERROR_accounting_instance_check_error = 0x0b08, ///< Shared memory access failure.
ERROR_accounting_license_file_invalid = 0x0b09, ///< License is not a TeamSpeak license
ERROR_accounting_running_elsewhere = 0x0b0a, ///< A copy of this server is already running in another instance. Each server may only exist once.
ERROR_accounting_instance_duplicated = 0x0b0b, ///< A copy of this server is running already in this process. Each server may only exist once.
ERROR_accounting_already_started = 0x0b0c, ///< Attempt to start a server that is already running
ERROR_accounting_not_started = 0x0b0d,
ERROR_accounting_to_many_starts = 0x0b0e, ///< Starting instance / virtual servers too often in too short a time period
//provisioning server
/// @cond HAS_PROVISIONING
ERROR_provisioning_invalid_password = 0x1100,
ERROR_provisioning_invalid_request = 0x1101,
ERROR_provisioning_no_slots_available = 0x1102,
ERROR_provisioning_pool_missing = 0x1103,
ERROR_provisioning_pool_unknown = 0x1104,
ERROR_provisioning_unknown_ip_location = 0x1105,
ERROR_provisioning_internal_tries_exceeded = 0x1106,
ERROR_provisioning_too_many_slots_requested = 0x1107,
ERROR_provisioning_too_many_reserved = 0x1108,
ERROR_provisioning_could_not_connect = 0x1109,
ERROR_provisioning_auth_server_not_connected = 0x1110,
ERROR_provisioning_auth_data_too_large = 0x1111,
ERROR_provisioning_already_initialized = 0x1112,
ERROR_provisioning_not_initialized = 0x1113,
ERROR_provisioning_connecting = 0x1114,
ERROR_provisioning_already_connected = 0x1115,
ERROR_provisioning_not_connected = 0x1116,
ERROR_provisioning_io_error = 0x1117,
ERROR_provisioning_invalid_timeout = 0x1118,
ERROR_provisioning_ts3server_not_found = 0x1119,
ERROR_provisioning_no_permission = 0x111A,
/// @endcond
// 0x12 - 0x15 are reserved in rare
// screen share
ERROR_already_registered = 0x1600,
ERROR_stream_session_limit_reached = 0x1601,
ERROR_stream_session_not_found = 0x1602,
ERROR_stream_unknown = 0x1603,
ERROR_stream_not_participating = 0x1604,
ERROR_not_streamer = 0x1605,
ERROR_already_joined = 0x1606,
ERROR_join_request_not_found = 0x1607,
ERROR_sfu_failed_to_start = 0x1608,
};
#endif
@@ -1,236 +0,0 @@
#ifndef TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#define TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Version definitions.
#define TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1 1
// Protocol used for communication between the session subscriber and the session (a single stream).
// Commands are sent bidirectionally or unidirectionally between the parties.
// e.g. SESSION => SUBSCRIBER: ON_FRAME, ON_PAUSED_CHANGED
// e.g. SUBSCRIBER => SESSION: ON_FRAME_ACK, ON_RESIZE
// Command type enum with a lowercase type name.
typedef enum
{
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME = 0,
TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE,
TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED,
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK,
TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP,
TS_SESSION_SUBSCRIBER_CMD_REMOVE_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED,
} ts_session_subscriber_command_type_t;
// Pixel format enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_I420 = 0,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_NV12,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ABGR,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ARGB,
} ts_session_subscriber_pixel_format_t;
// Buffer location enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_CPU = 0,
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_GPU
} ts_session_subscriber_buffer_location_t;
// Buffer type enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_SINGLE = 0,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_MAIN,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_SUB
} ts_session_subscriber_buffer_type_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(push, 4)
#endif
// Main buffer header for shared CPU Memory Front/Back Buffers.
// The Main Buffer contains metadata about the current front/back buffer and the versioning for both the main and sub buffer.
// The information from the main buffer can be used to always read the front buffer.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t front_buffer_index; // index of the front buffer. (0: main buffer, 1: sub buffer)
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_main_buffer_header_t;
// Sub buffer header.
typedef struct
{
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
} ts_session_subscriber_sub_buffer_header_t;
// Single frame buffer header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_single_frame_buffer_header_t;
// Command header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // Total message length (header + payload).
ts_session_subscriber_command_type_t type;
uint64_t target_session_id; // always set to the target session id this command is for or is originating from.
uint64_t target_subscriber_id; // 0 if broadcast.
} ts_session_subscriber_command_header_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME.
// The frame data is not included in the message, but is attached seperately or was sent beforehand. The buffer is identified by it's id.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_id; // buffer id, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_frame_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t frame_id;
} ts_session_subscriber_on_frame_ack_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE.
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t width;
uint32_t height;
} ts_session_subscriber_on_resize_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t paused; // 0 or 1.
} ts_session_subscriber_on_paused_changed_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE.
// Contains a single frame buffer. The header is of format |ts_session_subscriber_single_frame_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
ts_session_subscriber_buffer_type_t buffer_type;
} ts_session_subscriber_on_buffer_single_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK.
// Contains a main buffer and a sub buffer. The main buffer header
// contains metadata about the current front/back buffer and
// is of type |ts_session_subscriber_main_buffer_header_t|.
// The sub buffer's header is of type |ts_session_subscriber_sub_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t main_buffer_ptr; // main buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t main_buffer_length;
uint64_t sub_buffer_ptr; // sub buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t sub_buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
} ts_session_subscriber_on_buffer_front_back_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER.
// SUBSCRIBER => SESSION.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_resp_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_release_buffer_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr;
int bits_per_sample;
int sample_rate;
uint32_t number_of_channels;
uint32_t number_of_frames;
int64_t absolute_capture_timestamp_ms;
float volume;
} ts_session_subscriber_on_audio_frames_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t audio_enabled;
} ts_session_subscriber_on_audio_enabled_changed_payload_t;
// Overall Command structure.
typedef struct
{
ts_session_subscriber_command_header_t header;
union
{
ts_session_subscriber_on_frame_payload_t frame;
ts_session_subscriber_on_resize_payload_t resize;
ts_session_subscriber_on_paused_changed_payload_t paused;
ts_session_subscriber_on_frame_ack_payload_t frame_ack;
ts_session_subscriber_on_buffer_single_payload_t buffer_single;
ts_session_subscriber_on_buffer_front_back_payload_t buffer_front_back;
ts_session_subscriber_on_release_buffer_payload_t release_buffer;
ts_session_subscriber_add_subscriber_payload_t add_subscriber;
ts_session_subscriber_add_subscriber_resp_payload_t add_subscriber_resp;
ts_session_subscriber_on_audio_frames_payload_t audio_frames;
ts_session_subscriber_on_audio_enabled_changed_payload_t audio_enabled_changed;
} payload;
} ts_session_subscriber_command_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif // TS_SESSION_SUBSCRIBER_PROTOCOL_H_
@@ -1,29 +0,0 @@
####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
####### Any changes to this file will be overwritten by the next CMake run ####
####### The input file was team_clientConfig.cmake.in ########
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
macro(set_and_check _var _file)
set(${_var} "${_file}")
if(NOT EXISTS "${_file}")
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
endif()
endmacro()
macro(check_required_components _NAME)
foreach(comp ${${_NAME}_FIND_COMPONENTS})
if(NOT ${_NAME}_${comp}_FOUND)
if(${_NAME}_FIND_REQUIRED_${comp})
set(${_NAME}_FOUND FALSE)
endif()
endif()
endforeach()
endmacro()
####################################################################################
include("${CMAKE_CURRENT_LIST_DIR}/team_clientTargets.cmake")
check_required_components(team_client)
@@ -1,19 +0,0 @@
#----------------------------------------------------------------
# Generated CMake target import file for configuration "Release".
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Import target "teamspeak::client" for configuration "Release"
set_property(TARGET teamspeak::client APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(teamspeak::client PROPERTIES
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.so"
IMPORTED_SONAME_RELEASE "libteamspeak_sdk_client.so"
)
list(APPEND _cmake_import_check_targets teamspeak::client )
list(APPEND _cmake_import_check_files_for_teamspeak::client "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.so" )
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
@@ -1,121 +0,0 @@
# Generated by CMake
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
if(CMAKE_VERSION VERSION_LESS "2.8.3")
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
cmake_policy(PUSH)
cmake_policy(VERSION 2.8.3...4.0)
#----------------------------------------------------------------
# Generated CMake target import file.
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
set(_cmake_targets_defined "")
set(_cmake_targets_not_defined "")
set(_cmake_expected_targets "")
foreach(_cmake_expected_target IN ITEMS teamspeak::client)
list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
if(TARGET "${_cmake_expected_target}")
list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
else()
list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
endif()
endforeach()
unset(_cmake_expected_target)
if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
unset(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
return()
endif()
if(NOT _cmake_targets_defined STREQUAL "")
string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
endif()
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
# Compute the installation prefix relative to this file.
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
set(_IMPORT_PREFIX "")
endif()
# Create imported target teamspeak::client
add_library(teamspeak::client SHARED IMPORTED)
set_target_properties(teamspeak::client PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
)
if(NOT CMAKE_VERSION VERSION_LESS "3.23.0")
target_sources(teamspeak::client
INTERFACE
FILE_SET "public_headers"
TYPE "HEADERS"
BASE_DIRS "${_IMPORT_PREFIX}/include"
FILES "${_IMPORT_PREFIX}/include/teamspeak/clientlib.h" "${_IMPORT_PREFIX}/include/teamspeak/clientlib_sdk.h" "${_IMPORT_PREFIX}/include/teamspeak/video/session_subscriber_protocol.h"
)
else()
set_property(TARGET teamspeak::client
APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
"${_IMPORT_PREFIX}/include"
)
endif()
# Load information for each installed configuration.
file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/team_clientTargets-*.cmake")
foreach(_cmake_config_file IN LISTS _cmake_config_files)
include("${_cmake_config_file}")
endforeach()
unset(_cmake_config_file)
unset(_cmake_config_files)
# Cleanup temporary variables.
set(_IMPORT_PREFIX)
# Loop over all imported files and verify that they actually exist
foreach(_cmake_target IN LISTS _cmake_import_check_targets)
if(CMAKE_VERSION VERSION_LESS "3.28"
OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
if(NOT EXISTS "${_cmake_file}")
message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
\"${_cmake_file}\"
but this file does not exist. Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
\"${CMAKE_CURRENT_LIST_FILE}\"
but not all the files it references.
")
endif()
endforeach()
endif()
unset(_cmake_file)
unset("_cmake_import_check_files_for_${_cmake_target}")
endforeach()
unset(_cmake_target)
unset(_cmake_import_check_targets)
# This file does not depend on other imported targets which have
# been exported from the same project but in a separate export set.
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
@@ -1,23 +0,0 @@
#ifndef TEAMLOG_LOGTYPES_H
#define TEAMLOG_LOGTYPES_H
enum LogTypes {
LogType_NONE = 0x0000, ///< Logging is disabled
LogType_FILE = 0x0001, ///< Log to regular log file
LogType_CONSOLE = 0x0002, ///< Log to standard output / error
LogType_USERLOGGING = 0x0004, ///< User defined logging. Will call the \ref ServerLibFunctions.onUserLoggingMessageEvent callback for every message to be logged
LogType_NO_NETLOGGING = 0x0008, ///< Not used
LogType_DATABASE = 0x0010, ///< Log to database (deprecated, server only, no effect in SDK)
LogType_SYSLOG = 0x0020, ///< Log to syslog (only available on Linux)
};
enum LogLevel {
LogLevel_CRITICAL = 0, ///< these messages stop the program
LogLevel_ERROR, ///< everything that is really bad, but not so bad we need to shut down
LogLevel_WARNING, ///< everything that *might* be bad
LogLevel_DEBUG, ///< output that might help find a problem
LogLevel_INFO, ///< informational output, like "starting database version x.y.z"
LogLevel_DEVEL ///< developer only output (will not be displayed in release mode)
};
#endif //TEAMLOG_LOGTYPES_H
File diff suppressed because it is too large Load Diff
@@ -1,58 +0,0 @@
#ifndef CLIENTLIB_SDK_H
#define CLIENTLIB_SDK_H
// system
#include <stdlib.h>
// own
#include "teamspeak/public_definitions.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Sets the client to which to transmit voice. Stops standard channel voice transmission.
*
* The client will still receive voice from their current channel, however their voice will not be transmitted to their
* current channel anymore. If this call is successful (check onServerErrorEvent) then voice of the specified client
* will be transmitted to all specified channels and all the specified clients. Pass 0 to both target parameter arrays
* to restore default behavior of transmitting voice to current channel. You will receive an onServerErrorEvent with the
* passed returnCode indicating whether or not the operation was successful.
*
* @param server_connection_handler_id the connection handler on which to set the whisper list
* @param client_id the client to set the whisper list for. Set to 0 or your own client ID to set your own whisper list.
* @param channel_ids an array of channel ids to transmit voice to.
* @param channel_ids_size number of elements in aforementioned array.
* @param client_ids a zero terminated array of client ids to transmit voice to.
* @param client_ids_size number of elements in aforementioned array.
* @param impersonate if the target client is a webrtc client, the voice packets will look like as if they have been
* send by the invoking client id
* @param return_code a c string to identify this request in callbacks. Pass an empty string if unused.
* @return An error code from the @ref Ts3ErrorType enum indicating either success or the failure reason
*/
EXPORTDLL unsigned int ts_client_request_client_set_whisper_list(uint64 server_connection_handler_id, anyID client_id,
const uint64* channel_ids,
int channel_ids_size,
const anyID* client_ids,
int client_ids_size, int impersonate,
const char* return_code);
/**
* @brief Send a binary-serialized ClientCommandRequest protobuf to the client library.
*
* The response will be delivered asynchronously via the onProtoResponse callback
* as a serialized ClientCommandResponse protobuf.
*
* @param data Pointer to serialized ClientCommandRequest protobuf bytes
* @param size Size of the serialized data in bytes
* @param return_code Caller-provided string to correlate the response in onProtoResponse. May be NULL.
* @return An error code: ERROR_ok on successful dispatch, ERROR_parameter_invalid on parse failure
*/
EXPORTDLL unsigned int ts3client_postProtoCommand(const void* data, size_t size, const char* return_code);
#ifdef __cplusplus
}
#endif
#endif // CLIENTLIB_SDK_H
@@ -1,635 +0,0 @@
#ifndef PUBLIC_DEFINITIONS_H
#define PUBLIC_DEFINITIONS_H
#include "teamlog/logtypes.h"
#define TS3_MAX_SIZE_CHANNEL_NAME 40 // channel name maximum length in characters
#define TS3_MAX_SIZE_VIRTUALSERVER_NAME 64 // virtual server name maximum length in characters
#define TS3_MAX_SIZE_CLIENT_NICKNAME 64 // client display name length limit in characters
#define TS3_MIN_SIZE_CLIENT_NICKNAME 3 // client display name minimum length in characters
#define TS3_MAX_SIZE_REASON_MESSAGE 80 // length limit in characters for kick, move, etc reasons
#define TS3_MAX_SIZE_TEXTMESSAGE 8192 // text message length limit, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_TOPIC 255 // channel topic lengt limith, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_DESCRIPTION 8192 // channel description length limit, measured in bytes (utf8 encoded)
// server welcome message length limit measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_VIRTUALSERVER_WELCOMEMESSAGE 1024
#define TS3_SIZE_MYTSID 44
// minimum amount of seconds before a clientID that was in use can be assigned to a new client
#define TS3_MIN_SECONDS_CLIENTID_REUSE 300
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32)
typedef unsigned __int16 anyID;
typedef unsigned __int64 uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __declspec(dllexport)
#else
#define EXPORTDLL
#endif
#endif
#else
#include <stdint.h>
typedef uint16_t anyID;
typedef uint64_t uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __attribute__((visibility("default")))
#else
#define EXPORTDLL
#endif
#endif
#endif
enum Visibility
{
ENTER_VISIBILITY = 0, ///< Client joined from an unsubscribed channel, or joined the server.
RETAIN_VISIBILITY, ///< Client switched from one subscribed channel to a different subscribed channel.
LEAVE_VISIBILITY ///< Client switches to an unsubscribed channel, or disconnected from server.
};
enum ConnectStatus
{
STATUS_DISCONNECTED = 0, ///< There is no activity to the server, this is the default value
STATUS_CONNECTING, ///< We are trying to connect, we haven't got a client id yet, we haven't been accepted by the server
STATUS_CONNECTED, ///< The server has accepted us, we can talk and hear and we have a client id, but we don't
///< have the channels and clients yet, we can get server infos (welcome msg etc.)
STATUS_CONNECTION_ESTABLISHING, ///< we are connected and we are visible
STATUS_CONNECTION_ESTABLISHED, ///< we are connected and we have the client and channels available
};
enum LocalTestMode
{
TEST_MODE_OFF = 0,
TEST_MODE_VOICE_LOCAL_ONLY,
TEST_MODE_VOICE_LOCAL_AND_REMOTE,
TEST_MODE_TALK_STATUS_CHANGES_ONLY
};
enum TalkStatus
{
STATUS_NOT_TALKING = 0, ///< client is not talking
STATUS_TALKING = 1, ///< client is talking
STATUS_TALKING_WHILE_DISABLED = 2, ///< client is talking while the microphone is muted (only valid for own client)
};
enum CodecType
{
CODEC_SPEEX_NARROWBAND = 0, ///< (deprecated) mono, 16bit, 8kHz, bitrate dependent on the quality setting
CODEC_SPEEX_WIDEBAND, ///< (deprecated) mono, 16bit, 16kHz, bitrate dependent on the quality setting
CODEC_SPEEX_ULTRAWIDEBAND, ///< (deprecated) mono, 16bit, 32kHz, bitrate dependent on the quality setting
CODEC_CELT_MONO, ///< (deprecated) mono, 16bit, 48kHz, bitrate dependent on the quality setting
CODEC_OPUS_VOICE, ///< mono, 16bit, 48khz, bitrate dependent on the quality setting, optimized for voice
CODEC_OPUS_MUSIC, ///< stereo, 16bit, 48khz, bitrate dependent on the quality setting, optimized for music
};
enum CodecEncryptionMode
{
CODEC_ENCRYPTION_PER_CHANNEL = 0, ///< voice data encryption decided per channel
CODEC_ENCRYPTION_FORCED_OFF, ///< voice data encryption disabled
CODEC_ENCRYPTION_FORCED_ON, ///< voice data encryption enabled
};
enum TextMessageTargetMode
{
TextMessageTarget_CLIENT = 1, ///< Message is a private message to another client
TextMessageTarget_CHANNEL, ///< Message is sent to a channel, received by all clients in that channel at the time
TextMessageTarget_SERVER, ///< Message is sent to every client on the server
TextMessageTarget_MAX
};
enum MuteInputStatus
{
MUTEINPUT_NONE = 0, ///< Microphone is not muted, audio is sent to the server
MUTEINPUT_MUTED, ///< Microphone is muted, no audio is transmitted to the server
};
enum MuteOutputStatus
{
MUTEOUTPUT_NONE = 0, ///< Speaker is active, server is sending us audio
MUTEOUTPUT_MUTED, ///< Speaker is muted, server is not sending audio to us
};
enum HardwareInputStatus
{
HARDWAREINPUT_DISABLED = 0, ///< no capture device opened
HARDWAREINPUT_ENABLED, ///< capture device open
};
enum HardwareOutputStatus
{
HARDWAREOUTPUT_DISABLED = 0, ///< no playback device opened
HARDWAREOUTPUT_ENABLED, ///< playback device open
};
enum InputDeactivationStatus
{
INPUT_ACTIVE = 0, ///< Audio is captured from the capture device.
INPUT_DEACTIVATED = 1, ///< No audio is captured from the capture device.
};
enum ReasonIdentifier
{
REASON_NONE = 0, ///< no reason data
REASON_MOVED = 1, ///< client was moved
REASON_SUBSCRIPTION = 2, // no reason data
REASON_LOST_CONNECTION = 3, // reasonmsg=reason
REASON_KICK_CHANNEL = 4, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER = 5, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER_BAN = 6, //{SectionInvoker} reasonmsg=reason bantime=time //{SectionInvoker} is only added server->client
REASON_SERVERSTOP = 7, // reasonmsg=reason
REASON_CLIENTDISCONNECT = 8, // reasonmsg=reason
REASON_CHANNELUPDATE = 9, // no reason data
REASON_CHANNELEDIT = 10, //{SectionInvoker}
REASON_CLIENTDISCONNECT_SERVER_SHUTDOWN = 11, // reasonmsg=reason
};
enum Protocol_Encryption_Cipher
{
AES_128 = 0b00000000,
AES_256 = 0b00000001,
PROTOCOL_ENCRYPTION_CIPHER_END_MARKER,
RESERVED = 0b00010000, // reserved until puzzle v2 is fully released, then can be reused
PUZZLE_2 = 0b00100000,
};
enum ChannelProperties
{
CHANNEL_NAME = 0, ///< String. Read/Write. Name of the channel. Always available.
CHANNEL_TOPIC, ///< String. Read/Write. Short single line text describing what the channel is about. Always available.
CHANNEL_DESCRIPTION, ///< String. Read/Write. Arbitrary text (up to 8k bytes) with information about the channel.
///< Must be requested (\ref ts3client_requestChannelDescription)
CHANNEL_PASSWORD, ///< String. Read/Write. Password of the channel. Read access is limited to the server. Clients
///< will only ever see the last password they attempted to use when joining the channel. Always available.
CHANNEL_CODEC, ///< Integer. Read/Write. The codec this channel is using. One of the values from the \ref CodecType
///< enum. Always available.
CHANNEL_CODEC_QUALITY, ///< Integer. Read/Write. The quality setting of the channel. Valid values are 0 to 10 inclusive.
///< Higher value means better voice quality but also more bandwidth usage. Always available.
CHANNEL_MAXCLIENTS, ///< Integer. Read/Write. The number of clients that can be in the channel simultaneously.
///< Always available.
CHANNEL_MAXFAMILYCLIENTS, ///< Integer. Read/Write. The total number of clients that can be in this channel and all
///< sub channels of this channel. Always available.
CHANNEL_ORDER, ///< UInt64. Read/Write. The ID of the channel below which this channel should be displayed. If 0
///< the channel is sorted at the top of the current level. Always available.
CHANNEL_FLAG_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when empty.
///< Permanent channels are stored to the database and available after server restart. SDK
///< users will need to take care of restoring channel at server start on their own.
///< Mutually exclusive with \ref CHANNEL_FLAG_SEMI_PERMANENT. Always available.
CHANNEL_FLAG_SEMI_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when
///< empty. Semi permanent channels are not stored to disk and gone after server
///< restart but remain while empty. Mutually exclusive with \ref
///< CHANNEL_FLAG_PERMANENT. Always available.
CHANNEL_FLAG_DEFAULT, ///< Integer. Read/Write. Boolean (1/0). The default channel is the channel that all clients
///< are located in when they join the server, unless the client explicitly specified a
///< different channel when connecting and is allowed to join their preferred channel. Only
///< one channel on the server can have this flag set. The default channel must have \ref
///< CHANNEL_FLAG_PERMANENT set. Always available.
CHANNEL_FLAG_PASSWORD, ///< Integer. Read/Write. Boolean (1/0) indicating whether this channel is password protected.
///< When removing or setting \ref CHANNEL_PASSWORD you also need to adjust this flag.
CHANNEL_CODEC_LATENCY_FACTOR, ///< (deprecated) Integer. Read/Write. Allows to increase packet size, reducing
///< bandwith at the cost of higher latency of voice transmission. Valid values are
///< 1-10 inclusive. 1 is the default and offers the lowest latency. Always available.
CHANNEL_CODEC_IS_UNENCRYPTED, ///< Integer. Read/Write. Boolean (1/0). If 0 voice data is encrypted, if 1 the voice
///< data is not encrypted. Only used if the server \ref
///< VIRTUALSERVER_CODEC_ENCRYPTION_MODE is set to \ref CODEC_ENCRYPTION_PER_CHANNEL.
///< Always available.
CHANNEL_SECURITY_SALT, ///< String. Read/Write. SDK Only, not used by TeamSpeak. This channels security hash. When
///< a client joins their \ref CLIENT_SECURITY_HASH is compared to this value, to allow or
///< deny the client access to the channel. Used to enforce clients joining the server with
///< specific identity and \ref CLIENT_META_DATA. See SDK Documentation about this feature
///< for further details. Always available.
CHANNEL_DELETE_DELAY, ///< UInt64. Read/Write. Number of seconds deletion of temporary channels is delayed after
///< the last client leaves the channel. Channel is only deleted if empty when the delete
///< delay expired. Always available.
CHANNEL_UNIQUE_IDENTIFIER, ///< String. Read only. An identifier that uniquely identifies a channel. Available in
///< Server >= 3.10.0
CHANNEL_ENDMARKER,
};
enum ClientProperties
{
CLIENT_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Public Identity, can be used to identify a client
///< installation. Remains identical as long as the client keeps using the same
///< identity. Available for visible clients.
CLIENT_NICKNAME, ///< String. Read/Write. Display name of the client. Available for visible clients.
CLIENT_VERSION, ///< String. Read only. Version String of the client used. For clients other than ourself this
///< needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_PLATFORM, ///< String. Read only. Operating system used by the client. For other clients other than ourself
///< this needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_FLAG_TALKING, ///< Integer. Read only. Whether the client is talking. Available on clients that are either
///< whispering to us, or in our channel.
CLIENT_INPUT_MUTED, ///< Integer. Read/Write. Microphone mute status. Available for visible clients. One of the
///< values from the \ref MuteInputStatus enum.
CLIENT_OUTPUT_MUTED, ///< Integer. Read/Write. Speaker mute status. Speaker mute implies microphone mute. Available
///< for visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_OUTPUTONLY_MUTED, ///< Integer. Read/Write. Speaker mute status. Microphone may be active. Available for
///< visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_INPUT_HARDWARE, ///< Integer. Read only. Indicates whether a capture device is open. Available for visible
///< clients. One of the values from the \ref HardwareInputStatus enum.
CLIENT_OUTPUT_HARDWARE, ///< Integer. Read only. Indicates whether a playback device is open. Available for visible
///< clients. One of the values from the \ref HardwareOutputStatus enum.
CLIENT_INPUT_DEACTIVATED, ///< Integer. Read/Write. Not available server side. Local microphone mute status.
///< Available only for own client. Used to implement Push To Talk. One of the values from
///< the \ref InputDeactivationStatus enum.
CLIENT_IDLE_TIME, ///< UInt64. Read only. Seconds since last activity. Available only for own client.
CLIENT_DEFAULT_CHANNEL, ///< String. Read only. User specified channel they joined when connecting to the server.
///< Available only for own client.
CLIENT_DEFAULT_CHANNEL_PASSWORD, ///< String. Read only. User specified channel password for the channel they
///< attempted to join when connecting to the server. Available only for own
///< client.
CLIENT_SERVER_PASSWORD, ///< String. Read only. User specified server password. Available only for own client.
CLIENT_META_DATA, ///< String. Read/Write. Can be used to store up to 4096 bytes of information on clients. Not
///< used by TeamSpeak. Available for visible clients.
CLIENT_IS_MUTED, ///< Integer. Read only. Not available server side. Indicates whether we have muted the client
///< using \ref ts3client_requestMuteClients. Available for visible clients other than ourselves.
CLIENT_IS_RECORDING, ///< Integer. Read only. Indicates whether the client is recording incoming audio. Available
///< for visible clients.
CLIENT_VOLUME_MODIFICATOR, ///< Integer. Read only. Volume adjustment for this client as set by \ref
///< ts3client_setClientVolumeModifier. Available for visible clients.
CLIENT_VERSION_SIGN, ///< String. Read only. TeamSpeak internal signature.
CLIENT_SECURITY_HASH, ///< String. Read/Write. This clients security hash. Not used by TeamSpeak, SDK only. Hash is
///< provided by an outside source. A channel will use the security salt + other client data
///< to calculate a hash, which must be the same as the one provided here. See SDK
///< documentation about Client / Channel Security Hashes for more details.
CLIENT_ENCRYPTION_CIPHERS, ///< String. Read only. SDK only. List of available ciphers this client can use.
CLIENT_IS_STREAMING, ///< bool. Read only, Is currently streaming.
CLIENT_ENDMARKER,
};
enum VirtualServerProperties
{
VIRTUALSERVER_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Unique identifier for a virtual server, does not
///< change on server restart. Available if \ref ts3client_getConnectionStatus
///< is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_NAME, ///< String. Read/Write. The virtual server display name. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_WELCOMEMESSAGE, ///< String. Read/Write. The welcome message displayed to clients on connect.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED. Not
///< updated automatically when changed, updates need to be requested (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_PLATFORM, ///< String. Read only. The operating system the server is running on. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_VERSION, ///< String. Read only. The server software version string. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_MAXCLIENTS, ///< UInt64. Read/Write. The maximum number of clients that can be connected
///< simultaneously. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_PASSWORD, ///< String. Read/Write. The server password. Read access is limited to the server. Clients
///< will only get the password they supplied when connecting. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_CLIENTS_ONLINE, ///< UInt64. Read only. The current number of clients connected to the server,
///< including query connections. Only available on request (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_CHANNELS_ONLINE, ///< UInt64. Read only. The current number of channels on the server. Only
///< available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CREATED, ///< Integer. Read only. The time this virtual server was created as unix timestamp.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_UPTIME, ///< UInt64. Read only. Number of seconds that have passed since the virtual server was
///< started. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CODEC_ENCRYPTION_MODE, ///< Integer. Read/Write. Boolean (1/0) that specifies if voice data is encrypted
///< during transfer. One of the values from the \ref CodecEncryptionMode enum.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_ENCRYPTION_CIPHERS, ///< String. Read/Write. Comma separated list of available ciphers to encrypt the
///< connection. The server will use the first cipher in the list that is also
///< listed in the \ref CLIENT_ENCRYPTION_CIPHERS of the connecting client.
///< Clients will fail to connect if no match is found. Always available.
VIRTUALSERVER_ADDRESS, ///< Any resolvable address for the specific virtual server
VIRTUALSERVER_VERSION_SIGN, ///< String. Read only. Signature of Platform and Version.
VIRTUALSERVER_ENDMARKER,
VIRTUALSERVER_FILEBASE = 24, ///< String. Read only. The path to the base directory used to store files
///< transferred using file transfer. Available only on the server. Is set by \ref
///< ts3server_enableFileManager
VIRTUALSERVER_MAX_DOWNLOAD_TOTAL_BANDWIDTH = 29, ///< UInt64. Read/Write. Maximum traffic in bytes the server can
///< use for file transfer downloads. Only available on request
///< (\ref ts3client_requestServerVariables).
VIRTUALSERVER_MAX_UPLOAD_TOTAL_BANDWIDTH = 30, ///< UInt64. Read/Write. Maximum traffic in bytes the server can use
///< for file transfer uploads. Only available on request (=>
///< requestServerVariables)
VIRTUALSERVER_LOG_FILETRANSFER = 64 ///< Integer. Read/Write. Boolean (1/0) indicating whether to include file
///< transfer activities (uploading or downloading of files) in the server log.
///< Always available.
};
/**
* Various connection properties.
* These are all read only, and except for your own client must be requested using \ref ts3client_requestConnectionInfo
*/
enum ConnectionProperties
{
CONNECTION_PING = 0, ///< UInt64. Round trip latency for the connection based on the last 5 seconds. On the server
///< this is the average across all connected clients for the last 5 seconds.
CONNECTION_PING_DEVIATION, ///< Double. Standard deviation for the round trip latency in \ref CONNECTION_PING
CONNECTION_CONNECTED_TIME, ///< UInt64. Seconds the client has been connected.
CONNECTION_IDLE_TIME, ///< UInt64. Time in seconds since the last activity (voice transmission, switching channels,
///< changing mic / speaker mute status) of the client.
CONNECTION_CLIENT_IP, ///< String. IP of this client (as seen from the server side)
CONNECTION_CLIENT_PORT, ///< UInt64. Client side port of this client (as seen from the server side)
CONNECTION_SERVER_IP, ///< String. The IP or hostname used to connect to the server. Only available on yourself.
CONNECTION_SERVER_PORT, ///< UInt64. The server port connected to. Only available on yourself.
CONNECTION_PACKETS_SENT_SPEECH, ///< UInt64. The number of voice packets transmitted by the client.
CONNECTION_PACKETS_SENT_KEEPALIVE, ///< UInt64. The number of keep alive packets transmitted by the client.
CONNECTION_PACKETS_SENT_CONTROL, ///< UInt64. The number of command & control packets transmitted by the client.
CONNECTION_PACKETS_SENT_TOTAL, ///< UInt64. Total number of packets transmitted by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_SENT_SPEECH, \ref CONNECTION_PACKETS_SENT_KEEPALIVE and
///< \ref CONNECTION_PACKETS_SENT_CONTROL
CONNECTION_BYTES_SENT_SPEECH, ///< UInt64. Outgoing traffic used for voice data by the client.
CONNECTION_BYTES_SENT_KEEPALIVE, ///< UInt64. Outgoing traffic used for keeping the connection alive by the client.
CONNECTION_BYTES_SENT_CONTROL, ///< UInt64. Outgoing traffic used for command & control data by the client.
CONNECTION_BYTES_SENT_TOTAL, ///< UInt64. Total outgoing traffic to the server by this client. Equal to the sum of
///< \ref CONNECTION_BYTES_SENT_SPEECH, \ref CONNECTION_BYTES_SENT_KEEPALIVE and \ref
///< CONNECTION_BYTES_SENT_CONTROL
CONNECTION_PACKETS_RECEIVED_SPEECH, ///< UInt64. Number of voice packets received by the client.
CONNECTION_PACKETS_RECEIVED_KEEPALIVE, ///< UInt64. Number of keep alive packets received by the client.
CONNECTION_PACKETS_RECEIVED_CONTROL, ///< UInt64. Number of command & control packets received by the client.
CONNECTION_PACKETS_RECEIVED_TOTAL, ///< UInt64. Total number of packets received by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_RECEIVED_SPEECH, \ref
///< CONNECTION_PACKETS_RECEIVED_KEEPALIVE and \ref
///< CONNECTION_PACKETS_RECEIVED_CONTROL
CONNECTION_BYTES_RECEIVED_SPEECH, ///< UInt64. Incoming traffic used by the client for voice data.
CONNECTION_BYTES_RECEIVED_KEEPALIVE, ///< UInt64. Incoming traffic used by the client to keep the connection alive.
CONNECTION_BYTES_RECEIVED_CONTROL, ///< UInt64. Incoming traffic used by the client for command & control data.
CONNECTION_BYTES_RECEIVED_TOTAL, ///< UInt64. Total incoming traffic used by the client. Equal to the sum of \ref
///< CONNECTION_BYTES_RECEIVED_SPEECH, \ref CONNECTION_BYTES_RECEIVED_KEEPALIVE and
///< \ref CONNECTION_BYTES_RECEIVED_CONTROL
CONNECTION_PACKETLOSS_SPEECH, ///< Double. Percentage points of voice packets for the client that did not arrive at
///< the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_KEEPALIVE, ///< Double. Percentage points of keep alive packets for the client that did not
///< arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_CONTROL, ///< Double. Percentage points of command & control packets for the client that did
///< not arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_TOTAL, ///< Double. Cumulative chance in percentage points with which a packet round trip
///< failed because a packet was lost
CONNECTION_SERVER2CLIENT_PACKETLOSS_SPEECH, ///< Double. Probability with which a voice packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< server was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the server was not
///< received by the client.
CONNECTION_CLIENT2SERVER_PACKETLOSS_SPEECH, ///< Double. Probability with which a speech packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< client was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the client was not
///< received by the server.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes sent for speech data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes sent for keepalive data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes sent for control data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes sent in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second sent for speech data, averaged over the
///< last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second sent for keepalive data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second sent for control data, averaged over
///< the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second sent, averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes received for speech data in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes received for keepalive data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes received for control data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes received in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second received for speech data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second received for keepalive data,
///< averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second received for control data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second received, averaged over the last minute.
CONNECTION_DUMMY_0,
CONNECTION_DUMMY_1,
CONNECTION_DUMMY_2,
CONNECTION_DUMMY_3,
CONNECTION_DUMMY_4,
CONNECTION_DUMMY_5,
CONNECTION_DUMMY_6,
CONNECTION_DUMMY_7,
CONNECTION_DUMMY_8,
CONNECTION_DUMMY_9,
CONNECTION_FILETRANSFER_BANDWIDTH_SENT, ///< UInt64. Current file transfer upstream activity in bytes per second.
///< Only available on request (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BANDWIDTH_RECEIVED, ///< UInt64. Current file transfer downstream activity in bytes per
///< second. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_RECEIVED_TOTAL, ///< UInt64. Total downstream traffic, in bytes, used for file
///< transfer since the server was started. Only available on request
///< (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_SENT_TOTAL, ///< UInt64. Total upstream traffic, in bytes, used for file transfer
///< since the server was started. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_ENDMARKER
};
/**
* Describes a client position in 3 dimensional space, used for 3D Sound.
*/
typedef struct
{
float x; ///< X co-ordinate in 3D space.
float y; ///< Y co-ordinate in 3D space.
float z; ///< Z co-ordinate in 3D space.
} TS3_VECTOR;
enum GroupWhisperType
{
GROUPWHISPERTYPE_SERVERGROUP = 0, ///< Whisper list consists of server groups
GROUPWHISPERTYPE_CHANNELGROUP = 1, ///< Whisper list consists of channel groups
GROUPWHISPERTYPE_CHANNELCOMMANDER = 2, ///< whisper to channel commanders
GROUPWHISPERTYPE_ALLCLIENTS = 3, ///< whisper to all clients
GROUPWHISPERTYPE_ENDMARKER,
};
enum GroupWhisperTargetMode
{
GROUPWHISPERTARGETMODE_ALL = 0,
GROUPWHISPERTARGETMODE_CURRENTCHANNEL = 1, ///< Whisper the current channel of the client
GROUPWHISPERTARGETMODE_PARENTCHANNEL = 2, ///< Whisper the parent channel of whatever channel the client is currently in
GROUPWHISPERTARGETMODE_ALLPARENTCHANNELS = 3, ///< Whipser to the parent channel and all their parent channels as well
GROUPWHISPERTARGETMODE_CHANNELFAMILY = 4, ///< Whisper to the current channel and all its sub channels
GROUPWHISPERTARGETMODE_ANCESTORCHANNELFAMILY = 5, ///< Whisper to the current channel, all its parent and sub channels.
GROUPWHISPERTARGETMODE_SUBCHANNELS = 6, ///< Whisper to all sub channels of the current channel of the client
GROUPWHISPERTARGETMODE_ENDMARKER,
};
enum MonoSoundDestination
{
MONO_SOUND_DESTINATION_ALL = 0, ///< Send mono sound to all available speakers
MONO_SOUND_DESTINATION_FRONT_CENTER = 1, ///< Send mono sound to front center speaker if available
MONO_SOUND_DESTINATION_FRONT_LEFT_AND_RIGHT = 2 ///< Send mono sound to front left/right speakers if available
};
enum SecuritySaltOptions
{
SECURITY_SALT_CHECK_NICKNAME = 1, ///< put nickname into security hash
SECURITY_SALT_CHECK_META_DATA = 2 ///< put meta data into security hash
};
/*this enum is used to disable client commands on the server*/
enum ClientCommand
{
CLIENT_COMMAND_requestConnectionInfo = 0, ///< disable client connection info request (client bandwidth usage, ip,
///< port, ping)
CLIENT_COMMAND_requestClientMove = 1, ///< disable moving clients
CLIENT_COMMAND_requestXXMuteClients = 2, ///< disable muting other clients
CLIENT_COMMAND_requestClientKickFromXXX = 3, ///< disable kicking clients
CLIENT_COMMAND_flushChannelCreation = 4, ///< disable creating channels
CLIENT_COMMAND_flushChannelUpdates = 5, ///< disable editing channels
CLIENT_COMMAND_requestChannelMove = 6, ///< disable moving channels
CLIENT_COMMAND_requestChannelDelete = 7, ///< disable deleting channels
CLIENT_COMMAND_requestChannelDescription = 8, ///< disable channel descriptions
CLIENT_COMMAND_requestChannelXXSubscribeXXX = 9, ///< disable being able to see clients in channels other than the
///< current channel the client is in
CLIENT_COMMAND_requestServerConnectionInfo = 10, ///< disable server connection info request (server bandwidth
///< usage, ip, port, ping)
CLIENT_COMMAND_requestSendXXXTextMsg = 11, ///< disable text messaging
CLIENT_COMMAND_filetransfers = 12, ///< disable file transfer
CLIENT_COMMAND_ENDMARKER
};
/* Access Control List*/
enum ACLType
{
ACL_NONE = 0,
ACL_WHITE_LIST = 1,
ACL_BLACK_LIST = 2
};
/* file transfer actions*/
enum FTAction
{
FT_INIT_SERVER = 0, ///< The virtual server is created. result->channelPath can be changed to create a different
///< directory than the default 'virtualserver_x' where x is the virtual server.
FT_INIT_CHANNEL = 1, ///< A channel is created. result->channelPath can be changed to create a different directory
///< then the default 'channel_x' where x is the channel id.
FT_UPLOAD = 2, ///< A file is being uploaded. All values in the result struct can be modified.
FT_DOWNLOAD = 3, ///< A file is being downloaded. All values in the result struct can be modified.
FT_DELETE = 4, ///< A file is being deleted. All values in the result struct can be modified.
FT_CREATEDIR = 5, ///< A directory is being created in a channel. All values in the result struct can be modified.
FT_RENAME = 6, ///< A file or folder is being renamed. The callback will be called twice! Once for the old and then
///< for the new name. All values in the result struct can be modified.
FT_FILELIST = 7, ///< A directory listing is requested. All values in the result struct can be modified.
FT_FILEINFO = 8 ///< Information of a file is requested. All values in the result struct can be modified.
};
/* file transfer status */
enum FileTransferState
{
FILETRANSFER_INITIALISING = 0, ///< File transfer is establishing connection.
FILETRANSFER_ACTIVE, ///< File transfer is in progress
FILETRANSFER_FINISHED, ///< File transfer has finished
};
/* file transfer types */
enum FileTransferType
{
FileListType_Directory = 0, ///< The file entry is a directory
FileListType_File, ///< The file entry is a regular file
};
/* some structs to handle variables in callbacks */
#define MAX_VARIABLES_EXPORT_COUNT 64
struct VariablesExportItem
{
unsigned char itemIsValid; ///< Whether or not there is any data in this item. Ignore this item if this is 0.
unsigned char proposedIsSet; ///< The value in proposed is set. If 0 ignore proposed
const char* current; ///< current value (stored in memory)
const char* proposed; ///< New value to change to (const, so no updates please)
};
struct VariablesExport
{
struct VariablesExportItem items[MAX_VARIABLES_EXPORT_COUNT];
};
struct ClientMiniExport
{
anyID ID; ///< id of the client
uint64 channel; ///< the channel the client is in
const char* ident; ///< client public identity
const char* nickname; ///< client display name
};
/**
* Structure used to describe a file transfer in the \ref ServerLibFunctions.onTransformFilePath callback.
* This describes the original values, and also contains hints for length limitations of the result parameter
* of the callback.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExport
{
uint64 channel; ///< The channel id of the file. 0 if action is \ref FT_INIT_SERVER
const char* filename; ///< utf8 encoded c string containing the original file name as intended by the client.
int action; ///< The action to be performed. One of the values from the \ref FTAction enum. Defines which values of
///< the result struct can be modified.
int transformedFileNameMaxSize; ///< The maximum length the file name can be rewritten to.
int channelPathMaxSize; ///< The maximum length the path can be rewritten to.
};
/**
* Structure to rewrite the file transfer file name and path in the \ref ServerLibFunctions.onTransformFilePath callback.
* The lengths are limited as described in the original parameter.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExportReturns
{
char* transformedFileName; ///< pointer to target file name. Fill the memory pointed to with an utf8 encoded c string
///< containing the new file name. Limited to original->transformedFileNameMaxSize bytes.
char* channelPath; ///< pointer to memory for new path. Fill the memory pointed to with an utf8 encoded c string
///< containing the new path. Limited to original->channelPathMaxSize bytes.
int logFileAction; ///< boolean (1/0). Whether to log this file transfer to the log. Action is not logged regardless
///< of this value if the servers \ref VIRTUALSERVER_LOG_FILETRANSFER property is 0.
};
struct FileTransferCallbackExport
{
anyID clientID; ///< the client who started the file transfer
anyID transferID; ///< local identifier of the transfer that has completed
anyID remoteTransferID; ///< remote identifier of the transfer that has completed
unsigned int status; ///< status of the transfer. One of the values from the \ref FileTransferState enum
const char* statusMessage; ///< utf8 encoded c string containing a human readable description of the status
uint64 remotefileSize; ///< size in bytes of the complete file to be transferred
uint64 bytes; ///< number of bytes transferred. Same as remotefileSize when the transfer completed entirely.
int isSender; ///< boolean. 1 if the server is sending the file. 0 if the server is receiving the file.
};
/*define for file transfer bandwith limits*/
#define BANDWIDTH_LIMIT_UNLIMITED 0xFFFFFFFFFFFFFFFFll
/*defines for speaker locations used by some sound callbacks*/
#ifndef SPEAKER_FRONT_LEFT
#define SPEAKER_FRONT_LEFT 0x1
#define SPEAKER_FRONT_RIGHT 0x2
#define SPEAKER_FRONT_CENTER 0x4
#define SPEAKER_LOW_FREQUENCY 0x8
#define SPEAKER_BACK_LEFT 0x10
#define SPEAKER_BACK_RIGHT 0x20
#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
#define SPEAKER_BACK_CENTER 0x100
#define SPEAKER_SIDE_LEFT 0x200
#define SPEAKER_SIDE_RIGHT 0x400
#define SPEAKER_TOP_CENTER 0x800
#define SPEAKER_TOP_FRONT_LEFT 0x1000
#define SPEAKER_TOP_FRONT_CENTER 0x2000
#define SPEAKER_TOP_FRONT_RIGHT 0x4000
#define SPEAKER_TOP_BACK_LEFT 0x8000
#define SPEAKER_TOP_BACK_CENTER 0x10000
#define SPEAKER_TOP_BACK_RIGHT 0x20000
#endif
#define SPEAKER_HEADPHONES_LEFT 0x10000000
#define SPEAKER_HEADPHONES_RIGHT 0x20000000
#define SPEAKER_MONO 0x40000000
#endif /*PUBLIC_DEFINITIONS_H*/
@@ -1,217 +0,0 @@
#ifndef PUBLIC_ERRORS_H
#define PUBLIC_ERRORS_H
//The idea here is: the values are 2 bytes wide, the first byte identifies the group, the second the count within that group
enum Ts3ErrorType {
//general
ERROR_ok = 0x0000, ///< Indicates success.
ERROR_undefined = 0x0001,
ERROR_not_implemented = 0x0002, ///< The attempted operation is not available in this context
ERROR_ok_no_update = 0x0003, ///< Indicates success, but no change occurred. Returned for example upon flushing (e.g. using \ref ts3client_flushChannelUpdates) when all indicated changes already matched the current state.
ERROR_dont_notify = 0x0004,
ERROR_lib_time_limit_reached = 0x0005,
ERROR_out_of_memory = 0x0006, ///< Not enough system memory to perform operation
ERROR_canceled = 0x0007,
ERROR_ok_no_error_event = 0x0008, ///< Indicates success, but no error event was generated. This is used because of the return code management and reduce packets.
//dunno
ERROR_command_not_found = 0x0100,
ERROR_unable_to_bind_network_port = 0x0101, ///< Unspecified failure to create a listening port
ERROR_no_network_port_available = 0x0102, ///< Failure to initialize a listening port for FileTransfer
ERROR_port_already_in_use = 0x0103, ///< Specified port is already in use by a different application
ERROR_command_line_parse_failed = 0x0104, ///< Command line arguments are invalid
ERROR_command_line_exit_version = 0x0105, ///< Command line specified version. The process should exit with code 0 after printing the version.
ERROR_command_line_exit_help = 0x0106, ///< Command line specified help. The process should exit with code 0 after priting the help.
//client
ERROR_client_invalid_id = 0x0200, ///< Client no longer connected
ERROR_client_nickname_inuse = 0x0201, ///< Client name is already in use. Client names must be unique
ERROR_client_protocol_limit_reached = 0x0203, ///< Too many clients on the server
ERROR_client_invalid_type = 0x0204, ///< Function called for normal clients that is only available for query clients or vice versa
ERROR_client_already_subscribed = 0x0205, ///< Attempting to subscribe to a channel already subscribed to
ERROR_client_not_logged_in = 0x0206,
ERROR_client_could_not_validate_identity = 0x0207, ///< Identity not valid or insufficient security level
ERROR_client_invalid_password = 0x0208,
ERROR_client_version_outdated = 0x020a, ///< Server requires newer client version as determined by the min_client_version properties
ERROR_client_is_flooding = 0x020c, ///< Triggered flood protection. Further information is supplied in the extra message if applicable.
ERROR_client_hacked = 0x020d,
ERROR_client_cannot_verify_now = 0x020e,
ERROR_client_login_not_permitted = 0x020f,
ERROR_client_not_subscribed = 0x0210, ///< Action is only available on subscribed channels
//channel
ERROR_channel_invalid_id = 0x0300, ///< Channel does not exist on the server (any longer)
ERROR_channel_protocol_limit_reached = 0x0301, ///< Too many channels on the server
ERROR_channel_already_in = 0x0302, ///< Attempting to move a client or channel to its current channel
ERROR_channel_name_inuse = 0x0303, ///< Channel name is already taken by another channel. Channel names must be unique
ERROR_channel_not_empty = 0x0304, ///< Attempting to delete a channel with clients or sub channels in it
ERROR_channel_can_not_delete_default = 0x0305, ///< Default channel cannot be deleted. Set a new default channel first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_default_require_permanent = 0x0306, ///< Attempt to set a non permanent channel as default channel. Set channel to permanent first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_invalid_flags = 0x0307, ///< Invalid combination of \ref ChannelProperties, trying to remove \ref CHANNEL_FLAG_DEFAULT or set a password on the default channel
ERROR_channel_parent_not_permanent = 0x0308, ///< Attempt to move a permanent channel into a non-permanent one, or set a channel to be permanent that is a sub channel of a non-permanent one
ERROR_channel_maxclients_reached = 0x0309, ///< Channel is full as determined by its \ref CHANNEL_MAXCLIENTS setting
ERROR_channel_maxfamily_reached = 0x030a, ///< Channel tree is full as determined by its \ref CHANNEL_MAXFAMILYCLIENTS setting
ERROR_channel_invalid_order = 0x030b, ///< Invalid value for the \ref CHANNEL_ORDER property. The specified channel must exist on the server and be on the same level.
ERROR_channel_no_filetransfer_supported = 0x030c, ///< Invalid \ref CHANNEL_FILEPATH set for the channel
ERROR_channel_invalid_password = 0x030d, ///< Channel has a password not matching the password supplied in the call
// used in public_rare_errors = 0x030e,
ERROR_channel_invalid_security_hash = 0x030f,
//server
ERROR_server_invalid_id = 0x0400, ///< Chosen virtual server does not exist or is offline
ERROR_server_running = 0x0401, ///< attempting to delete a server that is running. Stop the server before deleting it.
ERROR_server_is_shutting_down = 0x0402, ///< Client disconnected because the server is going offline
ERROR_server_maxclients_reached = 0x0403, ///< Given in the onConnectStatusChange event when the server has reached its maximum number of clients as defined by the \ref VIRTUALSERVER_MAXCLIENTS property
ERROR_server_invalid_password = 0x0404, ///< Specified server password is wrong. Provide the correct password in the \ref ts3client_startConnection / \ref ts3client_startConnectionWithChannelID call.
ERROR_server_is_virtual = 0x0407, ///< Server is in virtual status. The attempted action is not possible in this state. Start the virtual server first.
ERROR_server_is_not_running = 0x0409, ///< Attempting to stop a server that is not online.
ERROR_server_is_booting = 0x040a, // Not used
ERROR_server_status_invalid = 0x040b,
ERROR_server_version_outdated = 0x040d, ///< Attempt to connect to an outdated server version. The server needs to be updated.
ERROR_server_duplicate_running = 0x040e, ///< This server is already running within the instance. Each virtual server may only exist once.
//parameter
ERROR_parameter_quote = 0x0600, // Not used
ERROR_parameter_invalid_count = 0x0601, ///< Attempt to flush changes without previously calling set*VariableAs* since the last flush
ERROR_parameter_invalid = 0x0602, ///< At least one of the supplied parameters did not meet the criteria for that parameter
ERROR_parameter_not_found = 0x0603, ///< Failure to supply all the necessary parameters
ERROR_parameter_convert = 0x0604, ///< Invalid type supplied for a parameter, such as passing a string (ie. "five") that expects a number.
ERROR_parameter_invalid_size = 0x0605, ///< Value out of allowed range. Such as strings are too long/short or numeric values outside allowed range
ERROR_parameter_missing = 0x0606, ///< Neglecting to specify a required parameter
ERROR_parameter_checksum = 0x0607, ///< Attempting to deploy a modified snapshot
//unsorted, need further investigation
ERROR_vs_critical = 0x0700, ///< Failure to create default channel
ERROR_connection_lost = 0x0701, ///< Generic error with the connection.
ERROR_not_connected = 0x0702, ///< Attempting to call functions with a serverConnectionHandler that is not connected. You can use \ref ts3client_getConnectionStatus to check whether the connection handler is connected to a server
ERROR_no_cached_connection_info = 0x0703, ///< Attempting to query connection information (bandwidth usage, ping, etc) without requesting them first using \ref ts3client_requestConnectionInfo
ERROR_currently_not_possible = 0x0704, ///< Requested information is not currently available. You may have to call \ref ts3client_requestClientVariables or \ref ts3client_requestServerVariables
ERROR_failed_connection_initialisation = 0x0705, ///< No TeamSpeak server running on the specified IP address and port
ERROR_could_not_resolve_hostname = 0x0706, ///< Failure to resolve the specified hostname to an IP address
ERROR_invalid_server_connection_handler_id = 0x0707, ///< Attempting to perform actions on a non-existent server connection handler
ERROR_could_not_initialise_input_manager = 0x0708, // Not used
ERROR_clientlibrary_not_initialised = 0x0709, ///< Calling client library functions without successfully calling \ref ts3client_initClientLib before
ERROR_serverlibrary_not_initialised = 0x070a, ///< Calling server library functions without successfully calling \ref ts3server_initServerLib before
ERROR_whisper_too_many_targets = 0x070b, ///< Using a whisper list that contain more clients than the servers \ref VIRTUALSERVER_MIN_CLIENTS_IN_CHANNEL_BEFORE_FORCED_SILENCE property
ERROR_whisper_no_targets = 0x070c, ///< The active whisper list is empty or no clients matched the whisper list (e.g. all channels in the list are empty)
ERROR_connection_ip_protocol_missing = 0x070d, ///< Invalid or unsupported protocol (e.g. attempting an IPv6 connection on an IPv4 only machine)
ERROR_handshake_failed = 0x070e,
ERROR_illegal_server_license = 0x070f,
//file transfer
ERROR_file_invalid_name = 0x0800, ///< Invalid UTF8 string or not a valid file
ERROR_file_invalid_permissions = 0x0801, ///< Permissions prevent opening the file
ERROR_file_already_exists = 0x0802, ///< Target path already exists as a directory
ERROR_file_not_found = 0x0803, ///< Attempt to access or move non existing file
ERROR_file_io_error = 0x0804, ///< Generic file input / output error
ERROR_file_invalid_transfer_id = 0x0805, ///< Attempt to get information about a file transfer after it has already been cleaned up. File transfer information is not available indefinitely after the transfer completed
ERROR_file_invalid_path = 0x0806, ///< specified path contains invalid characters or does not start with "/"
ERROR_file_no_files_available = 0x0807, // Not used
ERROR_file_overwrite_excludes_resume = 0x0808, ///< File overwrite and resume are mutually exclusive. Only one or neither can be 1.
ERROR_file_invalid_size = 0x0809, ///< Attempt to write more bytes than claimed file size.
ERROR_file_already_in_use = 0x080a, ///< File is currently not available, try again later.
ERROR_file_could_not_open_connection = 0x080b, ///< Generic failure in file transfer connection / other party did not conform to file transfer protocol
ERROR_file_no_space_left_on_device = 0x080c, ///< Operating system reports hard disk is full. May be caused by quota limitations.
ERROR_file_exceeds_file_system_maximum_size = 0x080d, ///< File is too large for the file system of the target device.
ERROR_file_transfer_connection_timeout = 0x080e, // Not used
ERROR_file_connection_lost = 0x080f, ///< File input / output timeout or connection failure
ERROR_file_exceeds_supplied_size = 0x0810, // Not used
ERROR_file_transfer_complete = 0x0811, ///< Indicates successful completion
ERROR_file_transfer_canceled = 0x0812, ///< Transfer was cancelled through @ref ts3client_haltTransfer
ERROR_file_transfer_interrupted = 0x0813, ///< Transfer failed because the server is shutting down, or network connection issues
ERROR_file_transfer_server_quota_exceeded = 0x0814, ///< Transfer terminated due to server bandwidth quota being exceeded. No client can transfer files.
ERROR_file_transfer_client_quota_exceeded = 0x0815, ///< Attempt to transfer more data than allowed by this clients' bandwidth quota. Other clients may continue to transfer files.
ERROR_file_transfer_reset = 0x0816, // Not used
ERROR_file_transfer_limit_reached = 0x0817, ///< Too many file transfers are in progress. Try again later
ERROR_file_invalid_storage_class = 0x0818, // TODO: Invalid storage class for HTTP FileTransfer (what is a storage class?)
ERROR_file_invalid_dimension = 0x0819, ///< Avatar image exceeds maximum width or height accepted by the server.
ERROR_file_transfer_channel_quota_exceeded = 0x081a, ///< Transfer failed because the channel quota was exceeded. Uploading to this channel is not possible, but other channels may be fine.
//sound
ERROR_sound_preprocessor_disabled = 0x0900, ///< Cannot set or query pre processor variables with preprocessing disabled
ERROR_sound_internal_preprocessor = 0x0901,
ERROR_sound_internal_encoder = 0x0902,
ERROR_sound_internal_playback = 0x0903,
ERROR_sound_no_capture_device_available = 0x0904, ///< No audio capture devices are available
ERROR_sound_no_playback_device_available = 0x0905, ///< No audio playback devices are available
ERROR_sound_could_not_open_capture_device = 0x0906, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_could_not_open_playback_device = 0x0907, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_handler_has_device = 0x0908, ///< Attempt to open a sound device on a connection handler which already has an open device. Close the already open device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_invalid_capture_device = 0x0909, ///< Attempt to use a device for capture that does not support capturing audio
ERROR_sound_invalid_playback_device = 0x090a, ///< Attempt to use a device for playback that does not support playback of audio
ERROR_sound_invalid_wave = 0x090b, ///< Attempt to use a non WAV file in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle
ERROR_sound_unsupported_wave = 0x090c, ///< Unsupported wave file used in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle.
ERROR_sound_open_wave = 0x090d, ///< Failure to open the specified sound file
ERROR_sound_internal_capture = 0x090e,
ERROR_sound_device_in_use = 0x090f, ///< Attempt to unregister a custom device that is being used. Close the device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_device_already_registerred = 0x0910, ///< Attempt to register a custom device with a device id that has already been used in a previous call. Device ids must be unique.
ERROR_sound_unknown_device = 0x0911, ///< Attempt to open, close, unregister or use a device which is not known. Custom devices must be registered before being used (see \ref ts3client_registerCustomDevice)
ERROR_sound_unsupported_frequency = 0x0912,
ERROR_sound_invalid_channel_count = 0x0913, ///< Invalid device audio channel count, must be > 0
ERROR_sound_read_wave = 0x0914, ///< Failure to read sound samples from an opened wave file. Is this a valid wave file?
ERROR_sound_need_more_data = 0x0915, // for internal purposes only
ERROR_sound_device_busy = 0x0916, // for internal purposes only
ERROR_sound_no_data = 0x0917, ///< Indicates there is currently no data for playback, e.g. nobody is speaking right now.
ERROR_sound_channel_mask_mismatch = 0x0918, ///< Opening a device with an unsupported channel count
//permissions
ERROR_permissions_client_insufficient = 0x0a08, ///< Not enough permissions to perform the requested activity
ERROR_permissions = 0x0a0c, ///< Permissions to use sound device not granted by operating system, e.g. Windows denied microphone access.
//accounting
ERROR_accounting_virtualserver_limit_reached = 0x0b00, ///< Attempt to use more virtual servers than allowed by the license
ERROR_accounting_slot_limit_reached = 0x0b01, ///< Attempt to set more slots than allowed by the license
ERROR_accounting_license_file_not_found = 0x0b02, // Not used
ERROR_accounting_license_date_not_ok = 0x0b03, ///< License expired or not valid yet
ERROR_accounting_unable_to_connect_to_server = 0x0b04, ///< Failure to communicate with accounting backend
ERROR_accounting_unknown_error = 0x0b05, ///< Failure to write update license file
ERROR_accounting_server_error = 0x0b06, // Not used
ERROR_accounting_instance_limit_reached = 0x0b07, ///< More than one process of the server is running
ERROR_accounting_instance_check_error = 0x0b08, ///< Shared memory access failure.
ERROR_accounting_license_file_invalid = 0x0b09, ///< License is not a TeamSpeak license
ERROR_accounting_running_elsewhere = 0x0b0a, ///< A copy of this server is already running in another instance. Each server may only exist once.
ERROR_accounting_instance_duplicated = 0x0b0b, ///< A copy of this server is running already in this process. Each server may only exist once.
ERROR_accounting_already_started = 0x0b0c, ///< Attempt to start a server that is already running
ERROR_accounting_not_started = 0x0b0d,
ERROR_accounting_to_many_starts = 0x0b0e, ///< Starting instance / virtual servers too often in too short a time period
//provisioning server
/// @cond HAS_PROVISIONING
ERROR_provisioning_invalid_password = 0x1100,
ERROR_provisioning_invalid_request = 0x1101,
ERROR_provisioning_no_slots_available = 0x1102,
ERROR_provisioning_pool_missing = 0x1103,
ERROR_provisioning_pool_unknown = 0x1104,
ERROR_provisioning_unknown_ip_location = 0x1105,
ERROR_provisioning_internal_tries_exceeded = 0x1106,
ERROR_provisioning_too_many_slots_requested = 0x1107,
ERROR_provisioning_too_many_reserved = 0x1108,
ERROR_provisioning_could_not_connect = 0x1109,
ERROR_provisioning_auth_server_not_connected = 0x1110,
ERROR_provisioning_auth_data_too_large = 0x1111,
ERROR_provisioning_already_initialized = 0x1112,
ERROR_provisioning_not_initialized = 0x1113,
ERROR_provisioning_connecting = 0x1114,
ERROR_provisioning_already_connected = 0x1115,
ERROR_provisioning_not_connected = 0x1116,
ERROR_provisioning_io_error = 0x1117,
ERROR_provisioning_invalid_timeout = 0x1118,
ERROR_provisioning_ts3server_not_found = 0x1119,
ERROR_provisioning_no_permission = 0x111A,
/// @endcond
// 0x12 - 0x15 are reserved in rare
// screen share
ERROR_already_registered = 0x1600,
ERROR_stream_session_limit_reached = 0x1601,
ERROR_stream_session_not_found = 0x1602,
ERROR_stream_unknown = 0x1603,
ERROR_stream_not_participating = 0x1604,
ERROR_not_streamer = 0x1605,
ERROR_already_joined = 0x1606,
ERROR_join_request_not_found = 0x1607,
ERROR_sfu_failed_to_start = 0x1608,
};
#endif
@@ -1,236 +0,0 @@
#ifndef TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#define TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Version definitions.
#define TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1 1
// Protocol used for communication between the session subscriber and the session (a single stream).
// Commands are sent bidirectionally or unidirectionally between the parties.
// e.g. SESSION => SUBSCRIBER: ON_FRAME, ON_PAUSED_CHANGED
// e.g. SUBSCRIBER => SESSION: ON_FRAME_ACK, ON_RESIZE
// Command type enum with a lowercase type name.
typedef enum
{
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME = 0,
TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE,
TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED,
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK,
TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP,
TS_SESSION_SUBSCRIBER_CMD_REMOVE_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED,
} ts_session_subscriber_command_type_t;
// Pixel format enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_I420 = 0,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_NV12,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ABGR,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ARGB,
} ts_session_subscriber_pixel_format_t;
// Buffer location enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_CPU = 0,
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_GPU
} ts_session_subscriber_buffer_location_t;
// Buffer type enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_SINGLE = 0,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_MAIN,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_SUB
} ts_session_subscriber_buffer_type_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(push, 4)
#endif
// Main buffer header for shared CPU Memory Front/Back Buffers.
// The Main Buffer contains metadata about the current front/back buffer and the versioning for both the main and sub buffer.
// The information from the main buffer can be used to always read the front buffer.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t front_buffer_index; // index of the front buffer. (0: main buffer, 1: sub buffer)
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_main_buffer_header_t;
// Sub buffer header.
typedef struct
{
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
} ts_session_subscriber_sub_buffer_header_t;
// Single frame buffer header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_single_frame_buffer_header_t;
// Command header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // Total message length (header + payload).
ts_session_subscriber_command_type_t type;
uint64_t target_session_id; // always set to the target session id this command is for or is originating from.
uint64_t target_subscriber_id; // 0 if broadcast.
} ts_session_subscriber_command_header_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME.
// The frame data is not included in the message, but is attached seperately or was sent beforehand. The buffer is identified by it's id.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_id; // buffer id, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_frame_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t frame_id;
} ts_session_subscriber_on_frame_ack_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE.
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t width;
uint32_t height;
} ts_session_subscriber_on_resize_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t paused; // 0 or 1.
} ts_session_subscriber_on_paused_changed_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE.
// Contains a single frame buffer. The header is of format |ts_session_subscriber_single_frame_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
ts_session_subscriber_buffer_type_t buffer_type;
} ts_session_subscriber_on_buffer_single_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK.
// Contains a main buffer and a sub buffer. The main buffer header
// contains metadata about the current front/back buffer and
// is of type |ts_session_subscriber_main_buffer_header_t|.
// The sub buffer's header is of type |ts_session_subscriber_sub_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t main_buffer_ptr; // main buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t main_buffer_length;
uint64_t sub_buffer_ptr; // sub buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t sub_buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
} ts_session_subscriber_on_buffer_front_back_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER.
// SUBSCRIBER => SESSION.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_resp_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_release_buffer_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr;
int bits_per_sample;
int sample_rate;
uint32_t number_of_channels;
uint32_t number_of_frames;
int64_t absolute_capture_timestamp_ms;
float volume;
} ts_session_subscriber_on_audio_frames_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t audio_enabled;
} ts_session_subscriber_on_audio_enabled_changed_payload_t;
// Overall Command structure.
typedef struct
{
ts_session_subscriber_command_header_t header;
union
{
ts_session_subscriber_on_frame_payload_t frame;
ts_session_subscriber_on_resize_payload_t resize;
ts_session_subscriber_on_paused_changed_payload_t paused;
ts_session_subscriber_on_frame_ack_payload_t frame_ack;
ts_session_subscriber_on_buffer_single_payload_t buffer_single;
ts_session_subscriber_on_buffer_front_back_payload_t buffer_front_back;
ts_session_subscriber_on_release_buffer_payload_t release_buffer;
ts_session_subscriber_add_subscriber_payload_t add_subscriber;
ts_session_subscriber_add_subscriber_resp_payload_t add_subscriber_resp;
ts_session_subscriber_on_audio_frames_payload_t audio_frames;
ts_session_subscriber_on_audio_enabled_changed_payload_t audio_enabled_changed;
} payload;
} ts_session_subscriber_command_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif // TS_SESSION_SUBSCRIBER_PROTOCOL_H_
@@ -1,29 +0,0 @@
####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
####### Any changes to this file will be overwritten by the next CMake run ####
####### The input file was team_clientConfig.cmake.in ########
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
macro(set_and_check _var _file)
set(${_var} "${_file}")
if(NOT EXISTS "${_file}")
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
endif()
endmacro()
macro(check_required_components _NAME)
foreach(comp ${${_NAME}_FIND_COMPONENTS})
if(NOT ${_NAME}_${comp}_FOUND)
if(${_NAME}_FIND_REQUIRED_${comp})
set(${_NAME}_FOUND FALSE)
endif()
endif()
endforeach()
endmacro()
####################################################################################
include("${CMAKE_CURRENT_LIST_DIR}/team_clientTargets.cmake")
check_required_components(team_client)
@@ -1,19 +0,0 @@
#----------------------------------------------------------------
# Generated CMake target import file for configuration "Release".
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Import target "teamspeak::client" for configuration "Release"
set_property(TARGET teamspeak::client APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(teamspeak::client PROPERTIES
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.so"
IMPORTED_SONAME_RELEASE "libteamspeak_sdk_client.so"
)
list(APPEND _cmake_import_check_targets teamspeak::client )
list(APPEND _cmake_import_check_files_for_teamspeak::client "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.so" )
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
@@ -1,121 +0,0 @@
# Generated by CMake
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
if(CMAKE_VERSION VERSION_LESS "2.8.3")
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
cmake_policy(PUSH)
cmake_policy(VERSION 2.8.3...4.0)
#----------------------------------------------------------------
# Generated CMake target import file.
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
set(_cmake_targets_defined "")
set(_cmake_targets_not_defined "")
set(_cmake_expected_targets "")
foreach(_cmake_expected_target IN ITEMS teamspeak::client)
list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
if(TARGET "${_cmake_expected_target}")
list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
else()
list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
endif()
endforeach()
unset(_cmake_expected_target)
if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
unset(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
return()
endif()
if(NOT _cmake_targets_defined STREQUAL "")
string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
endif()
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
# Compute the installation prefix relative to this file.
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
set(_IMPORT_PREFIX "")
endif()
# Create imported target teamspeak::client
add_library(teamspeak::client SHARED IMPORTED)
set_target_properties(teamspeak::client PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
)
if(NOT CMAKE_VERSION VERSION_LESS "3.23.0")
target_sources(teamspeak::client
INTERFACE
FILE_SET "public_headers"
TYPE "HEADERS"
BASE_DIRS "${_IMPORT_PREFIX}/include"
FILES "${_IMPORT_PREFIX}/include/teamspeak/clientlib.h" "${_IMPORT_PREFIX}/include/teamspeak/clientlib_sdk.h" "${_IMPORT_PREFIX}/include/teamspeak/video/session_subscriber_protocol.h"
)
else()
set_property(TARGET teamspeak::client
APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
"${_IMPORT_PREFIX}/include"
)
endif()
# Load information for each installed configuration.
file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/team_clientTargets-*.cmake")
foreach(_cmake_config_file IN LISTS _cmake_config_files)
include("${_cmake_config_file}")
endforeach()
unset(_cmake_config_file)
unset(_cmake_config_files)
# Cleanup temporary variables.
set(_IMPORT_PREFIX)
# Loop over all imported files and verify that they actually exist
foreach(_cmake_target IN LISTS _cmake_import_check_targets)
if(CMAKE_VERSION VERSION_LESS "3.28"
OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
if(NOT EXISTS "${_cmake_file}")
message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
\"${_cmake_file}\"
but this file does not exist. Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
\"${CMAKE_CURRENT_LIST_FILE}\"
but not all the files it references.
")
endif()
endforeach()
endif()
unset(_cmake_file)
unset("_cmake_import_check_files_for_${_cmake_target}")
endforeach()
unset(_cmake_target)
unset(_cmake_import_check_targets)
# This file does not depend on other imported targets which have
# been exported from the same project but in a separate export set.
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
@@ -1,23 +0,0 @@
#ifndef TEAMLOG_LOGTYPES_H
#define TEAMLOG_LOGTYPES_H
enum LogTypes {
LogType_NONE = 0x0000, ///< Logging is disabled
LogType_FILE = 0x0001, ///< Log to regular log file
LogType_CONSOLE = 0x0002, ///< Log to standard output / error
LogType_USERLOGGING = 0x0004, ///< User defined logging. Will call the \ref ServerLibFunctions.onUserLoggingMessageEvent callback for every message to be logged
LogType_NO_NETLOGGING = 0x0008, ///< Not used
LogType_DATABASE = 0x0010, ///< Log to database (deprecated, server only, no effect in SDK)
LogType_SYSLOG = 0x0020, ///< Log to syslog (only available on Linux)
};
enum LogLevel {
LogLevel_CRITICAL = 0, ///< these messages stop the program
LogLevel_ERROR, ///< everything that is really bad, but not so bad we need to shut down
LogLevel_WARNING, ///< everything that *might* be bad
LogLevel_DEBUG, ///< output that might help find a problem
LogLevel_INFO, ///< informational output, like "starting database version x.y.z"
LogLevel_DEVEL ///< developer only output (will not be displayed in release mode)
};
#endif //TEAMLOG_LOGTYPES_H
File diff suppressed because it is too large Load Diff
@@ -1,58 +0,0 @@
#ifndef CLIENTLIB_SDK_H
#define CLIENTLIB_SDK_H
// system
#include <stdlib.h>
// own
#include "teamspeak/public_definitions.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Sets the client to which to transmit voice. Stops standard channel voice transmission.
*
* The client will still receive voice from their current channel, however their voice will not be transmitted to their
* current channel anymore. If this call is successful (check onServerErrorEvent) then voice of the specified client
* will be transmitted to all specified channels and all the specified clients. Pass 0 to both target parameter arrays
* to restore default behavior of transmitting voice to current channel. You will receive an onServerErrorEvent with the
* passed returnCode indicating whether or not the operation was successful.
*
* @param server_connection_handler_id the connection handler on which to set the whisper list
* @param client_id the client to set the whisper list for. Set to 0 or your own client ID to set your own whisper list.
* @param channel_ids an array of channel ids to transmit voice to.
* @param channel_ids_size number of elements in aforementioned array.
* @param client_ids a zero terminated array of client ids to transmit voice to.
* @param client_ids_size number of elements in aforementioned array.
* @param impersonate if the target client is a webrtc client, the voice packets will look like as if they have been
* send by the invoking client id
* @param return_code a c string to identify this request in callbacks. Pass an empty string if unused.
* @return An error code from the @ref Ts3ErrorType enum indicating either success or the failure reason
*/
EXPORTDLL unsigned int ts_client_request_client_set_whisper_list(uint64 server_connection_handler_id, anyID client_id,
const uint64* channel_ids,
int channel_ids_size,
const anyID* client_ids,
int client_ids_size, int impersonate,
const char* return_code);
/**
* @brief Send a binary-serialized ClientCommandRequest protobuf to the client library.
*
* The response will be delivered asynchronously via the onProtoResponse callback
* as a serialized ClientCommandResponse protobuf.
*
* @param data Pointer to serialized ClientCommandRequest protobuf bytes
* @param size Size of the serialized data in bytes
* @param return_code Caller-provided string to correlate the response in onProtoResponse. May be NULL.
* @return An error code: ERROR_ok on successful dispatch, ERROR_parameter_invalid on parse failure
*/
EXPORTDLL unsigned int ts3client_postProtoCommand(const void* data, size_t size, const char* return_code);
#ifdef __cplusplus
}
#endif
#endif // CLIENTLIB_SDK_H
@@ -1,635 +0,0 @@
#ifndef PUBLIC_DEFINITIONS_H
#define PUBLIC_DEFINITIONS_H
#include "teamlog/logtypes.h"
#define TS3_MAX_SIZE_CHANNEL_NAME 40 // channel name maximum length in characters
#define TS3_MAX_SIZE_VIRTUALSERVER_NAME 64 // virtual server name maximum length in characters
#define TS3_MAX_SIZE_CLIENT_NICKNAME 64 // client display name length limit in characters
#define TS3_MIN_SIZE_CLIENT_NICKNAME 3 // client display name minimum length in characters
#define TS3_MAX_SIZE_REASON_MESSAGE 80 // length limit in characters for kick, move, etc reasons
#define TS3_MAX_SIZE_TEXTMESSAGE 8192 // text message length limit, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_TOPIC 255 // channel topic lengt limith, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_DESCRIPTION 8192 // channel description length limit, measured in bytes (utf8 encoded)
// server welcome message length limit measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_VIRTUALSERVER_WELCOMEMESSAGE 1024
#define TS3_SIZE_MYTSID 44
// minimum amount of seconds before a clientID that was in use can be assigned to a new client
#define TS3_MIN_SECONDS_CLIENTID_REUSE 300
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32)
typedef unsigned __int16 anyID;
typedef unsigned __int64 uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __declspec(dllexport)
#else
#define EXPORTDLL
#endif
#endif
#else
#include <stdint.h>
typedef uint16_t anyID;
typedef uint64_t uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __attribute__((visibility("default")))
#else
#define EXPORTDLL
#endif
#endif
#endif
enum Visibility
{
ENTER_VISIBILITY = 0, ///< Client joined from an unsubscribed channel, or joined the server.
RETAIN_VISIBILITY, ///< Client switched from one subscribed channel to a different subscribed channel.
LEAVE_VISIBILITY ///< Client switches to an unsubscribed channel, or disconnected from server.
};
enum ConnectStatus
{
STATUS_DISCONNECTED = 0, ///< There is no activity to the server, this is the default value
STATUS_CONNECTING, ///< We are trying to connect, we haven't got a client id yet, we haven't been accepted by the server
STATUS_CONNECTED, ///< The server has accepted us, we can talk and hear and we have a client id, but we don't
///< have the channels and clients yet, we can get server infos (welcome msg etc.)
STATUS_CONNECTION_ESTABLISHING, ///< we are connected and we are visible
STATUS_CONNECTION_ESTABLISHED, ///< we are connected and we have the client and channels available
};
enum LocalTestMode
{
TEST_MODE_OFF = 0,
TEST_MODE_VOICE_LOCAL_ONLY,
TEST_MODE_VOICE_LOCAL_AND_REMOTE,
TEST_MODE_TALK_STATUS_CHANGES_ONLY
};
enum TalkStatus
{
STATUS_NOT_TALKING = 0, ///< client is not talking
STATUS_TALKING = 1, ///< client is talking
STATUS_TALKING_WHILE_DISABLED = 2, ///< client is talking while the microphone is muted (only valid for own client)
};
enum CodecType
{
CODEC_SPEEX_NARROWBAND = 0, ///< (deprecated) mono, 16bit, 8kHz, bitrate dependent on the quality setting
CODEC_SPEEX_WIDEBAND, ///< (deprecated) mono, 16bit, 16kHz, bitrate dependent on the quality setting
CODEC_SPEEX_ULTRAWIDEBAND, ///< (deprecated) mono, 16bit, 32kHz, bitrate dependent on the quality setting
CODEC_CELT_MONO, ///< (deprecated) mono, 16bit, 48kHz, bitrate dependent on the quality setting
CODEC_OPUS_VOICE, ///< mono, 16bit, 48khz, bitrate dependent on the quality setting, optimized for voice
CODEC_OPUS_MUSIC, ///< stereo, 16bit, 48khz, bitrate dependent on the quality setting, optimized for music
};
enum CodecEncryptionMode
{
CODEC_ENCRYPTION_PER_CHANNEL = 0, ///< voice data encryption decided per channel
CODEC_ENCRYPTION_FORCED_OFF, ///< voice data encryption disabled
CODEC_ENCRYPTION_FORCED_ON, ///< voice data encryption enabled
};
enum TextMessageTargetMode
{
TextMessageTarget_CLIENT = 1, ///< Message is a private message to another client
TextMessageTarget_CHANNEL, ///< Message is sent to a channel, received by all clients in that channel at the time
TextMessageTarget_SERVER, ///< Message is sent to every client on the server
TextMessageTarget_MAX
};
enum MuteInputStatus
{
MUTEINPUT_NONE = 0, ///< Microphone is not muted, audio is sent to the server
MUTEINPUT_MUTED, ///< Microphone is muted, no audio is transmitted to the server
};
enum MuteOutputStatus
{
MUTEOUTPUT_NONE = 0, ///< Speaker is active, server is sending us audio
MUTEOUTPUT_MUTED, ///< Speaker is muted, server is not sending audio to us
};
enum HardwareInputStatus
{
HARDWAREINPUT_DISABLED = 0, ///< no capture device opened
HARDWAREINPUT_ENABLED, ///< capture device open
};
enum HardwareOutputStatus
{
HARDWAREOUTPUT_DISABLED = 0, ///< no playback device opened
HARDWAREOUTPUT_ENABLED, ///< playback device open
};
enum InputDeactivationStatus
{
INPUT_ACTIVE = 0, ///< Audio is captured from the capture device.
INPUT_DEACTIVATED = 1, ///< No audio is captured from the capture device.
};
enum ReasonIdentifier
{
REASON_NONE = 0, ///< no reason data
REASON_MOVED = 1, ///< client was moved
REASON_SUBSCRIPTION = 2, // no reason data
REASON_LOST_CONNECTION = 3, // reasonmsg=reason
REASON_KICK_CHANNEL = 4, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER = 5, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER_BAN = 6, //{SectionInvoker} reasonmsg=reason bantime=time //{SectionInvoker} is only added server->client
REASON_SERVERSTOP = 7, // reasonmsg=reason
REASON_CLIENTDISCONNECT = 8, // reasonmsg=reason
REASON_CHANNELUPDATE = 9, // no reason data
REASON_CHANNELEDIT = 10, //{SectionInvoker}
REASON_CLIENTDISCONNECT_SERVER_SHUTDOWN = 11, // reasonmsg=reason
};
enum Protocol_Encryption_Cipher
{
AES_128 = 0b00000000,
AES_256 = 0b00000001,
PROTOCOL_ENCRYPTION_CIPHER_END_MARKER,
RESERVED = 0b00010000, // reserved until puzzle v2 is fully released, then can be reused
PUZZLE_2 = 0b00100000,
};
enum ChannelProperties
{
CHANNEL_NAME = 0, ///< String. Read/Write. Name of the channel. Always available.
CHANNEL_TOPIC, ///< String. Read/Write. Short single line text describing what the channel is about. Always available.
CHANNEL_DESCRIPTION, ///< String. Read/Write. Arbitrary text (up to 8k bytes) with information about the channel.
///< Must be requested (\ref ts3client_requestChannelDescription)
CHANNEL_PASSWORD, ///< String. Read/Write. Password of the channel. Read access is limited to the server. Clients
///< will only ever see the last password they attempted to use when joining the channel. Always available.
CHANNEL_CODEC, ///< Integer. Read/Write. The codec this channel is using. One of the values from the \ref CodecType
///< enum. Always available.
CHANNEL_CODEC_QUALITY, ///< Integer. Read/Write. The quality setting of the channel. Valid values are 0 to 10 inclusive.
///< Higher value means better voice quality but also more bandwidth usage. Always available.
CHANNEL_MAXCLIENTS, ///< Integer. Read/Write. The number of clients that can be in the channel simultaneously.
///< Always available.
CHANNEL_MAXFAMILYCLIENTS, ///< Integer. Read/Write. The total number of clients that can be in this channel and all
///< sub channels of this channel. Always available.
CHANNEL_ORDER, ///< UInt64. Read/Write. The ID of the channel below which this channel should be displayed. If 0
///< the channel is sorted at the top of the current level. Always available.
CHANNEL_FLAG_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when empty.
///< Permanent channels are stored to the database and available after server restart. SDK
///< users will need to take care of restoring channel at server start on their own.
///< Mutually exclusive with \ref CHANNEL_FLAG_SEMI_PERMANENT. Always available.
CHANNEL_FLAG_SEMI_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when
///< empty. Semi permanent channels are not stored to disk and gone after server
///< restart but remain while empty. Mutually exclusive with \ref
///< CHANNEL_FLAG_PERMANENT. Always available.
CHANNEL_FLAG_DEFAULT, ///< Integer. Read/Write. Boolean (1/0). The default channel is the channel that all clients
///< are located in when they join the server, unless the client explicitly specified a
///< different channel when connecting and is allowed to join their preferred channel. Only
///< one channel on the server can have this flag set. The default channel must have \ref
///< CHANNEL_FLAG_PERMANENT set. Always available.
CHANNEL_FLAG_PASSWORD, ///< Integer. Read/Write. Boolean (1/0) indicating whether this channel is password protected.
///< When removing or setting \ref CHANNEL_PASSWORD you also need to adjust this flag.
CHANNEL_CODEC_LATENCY_FACTOR, ///< (deprecated) Integer. Read/Write. Allows to increase packet size, reducing
///< bandwith at the cost of higher latency of voice transmission. Valid values are
///< 1-10 inclusive. 1 is the default and offers the lowest latency. Always available.
CHANNEL_CODEC_IS_UNENCRYPTED, ///< Integer. Read/Write. Boolean (1/0). If 0 voice data is encrypted, if 1 the voice
///< data is not encrypted. Only used if the server \ref
///< VIRTUALSERVER_CODEC_ENCRYPTION_MODE is set to \ref CODEC_ENCRYPTION_PER_CHANNEL.
///< Always available.
CHANNEL_SECURITY_SALT, ///< String. Read/Write. SDK Only, not used by TeamSpeak. This channels security hash. When
///< a client joins their \ref CLIENT_SECURITY_HASH is compared to this value, to allow or
///< deny the client access to the channel. Used to enforce clients joining the server with
///< specific identity and \ref CLIENT_META_DATA. See SDK Documentation about this feature
///< for further details. Always available.
CHANNEL_DELETE_DELAY, ///< UInt64. Read/Write. Number of seconds deletion of temporary channels is delayed after
///< the last client leaves the channel. Channel is only deleted if empty when the delete
///< delay expired. Always available.
CHANNEL_UNIQUE_IDENTIFIER, ///< String. Read only. An identifier that uniquely identifies a channel. Available in
///< Server >= 3.10.0
CHANNEL_ENDMARKER,
};
enum ClientProperties
{
CLIENT_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Public Identity, can be used to identify a client
///< installation. Remains identical as long as the client keeps using the same
///< identity. Available for visible clients.
CLIENT_NICKNAME, ///< String. Read/Write. Display name of the client. Available for visible clients.
CLIENT_VERSION, ///< String. Read only. Version String of the client used. For clients other than ourself this
///< needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_PLATFORM, ///< String. Read only. Operating system used by the client. For other clients other than ourself
///< this needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_FLAG_TALKING, ///< Integer. Read only. Whether the client is talking. Available on clients that are either
///< whispering to us, or in our channel.
CLIENT_INPUT_MUTED, ///< Integer. Read/Write. Microphone mute status. Available for visible clients. One of the
///< values from the \ref MuteInputStatus enum.
CLIENT_OUTPUT_MUTED, ///< Integer. Read/Write. Speaker mute status. Speaker mute implies microphone mute. Available
///< for visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_OUTPUTONLY_MUTED, ///< Integer. Read/Write. Speaker mute status. Microphone may be active. Available for
///< visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_INPUT_HARDWARE, ///< Integer. Read only. Indicates whether a capture device is open. Available for visible
///< clients. One of the values from the \ref HardwareInputStatus enum.
CLIENT_OUTPUT_HARDWARE, ///< Integer. Read only. Indicates whether a playback device is open. Available for visible
///< clients. One of the values from the \ref HardwareOutputStatus enum.
CLIENT_INPUT_DEACTIVATED, ///< Integer. Read/Write. Not available server side. Local microphone mute status.
///< Available only for own client. Used to implement Push To Talk. One of the values from
///< the \ref InputDeactivationStatus enum.
CLIENT_IDLE_TIME, ///< UInt64. Read only. Seconds since last activity. Available only for own client.
CLIENT_DEFAULT_CHANNEL, ///< String. Read only. User specified channel they joined when connecting to the server.
///< Available only for own client.
CLIENT_DEFAULT_CHANNEL_PASSWORD, ///< String. Read only. User specified channel password for the channel they
///< attempted to join when connecting to the server. Available only for own
///< client.
CLIENT_SERVER_PASSWORD, ///< String. Read only. User specified server password. Available only for own client.
CLIENT_META_DATA, ///< String. Read/Write. Can be used to store up to 4096 bytes of information on clients. Not
///< used by TeamSpeak. Available for visible clients.
CLIENT_IS_MUTED, ///< Integer. Read only. Not available server side. Indicates whether we have muted the client
///< using \ref ts3client_requestMuteClients. Available for visible clients other than ourselves.
CLIENT_IS_RECORDING, ///< Integer. Read only. Indicates whether the client is recording incoming audio. Available
///< for visible clients.
CLIENT_VOLUME_MODIFICATOR, ///< Integer. Read only. Volume adjustment for this client as set by \ref
///< ts3client_setClientVolumeModifier. Available for visible clients.
CLIENT_VERSION_SIGN, ///< String. Read only. TeamSpeak internal signature.
CLIENT_SECURITY_HASH, ///< String. Read/Write. This clients security hash. Not used by TeamSpeak, SDK only. Hash is
///< provided by an outside source. A channel will use the security salt + other client data
///< to calculate a hash, which must be the same as the one provided here. See SDK
///< documentation about Client / Channel Security Hashes for more details.
CLIENT_ENCRYPTION_CIPHERS, ///< String. Read only. SDK only. List of available ciphers this client can use.
CLIENT_IS_STREAMING, ///< bool. Read only, Is currently streaming.
CLIENT_ENDMARKER,
};
enum VirtualServerProperties
{
VIRTUALSERVER_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Unique identifier for a virtual server, does not
///< change on server restart. Available if \ref ts3client_getConnectionStatus
///< is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_NAME, ///< String. Read/Write. The virtual server display name. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_WELCOMEMESSAGE, ///< String. Read/Write. The welcome message displayed to clients on connect.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED. Not
///< updated automatically when changed, updates need to be requested (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_PLATFORM, ///< String. Read only. The operating system the server is running on. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_VERSION, ///< String. Read only. The server software version string. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_MAXCLIENTS, ///< UInt64. Read/Write. The maximum number of clients that can be connected
///< simultaneously. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_PASSWORD, ///< String. Read/Write. The server password. Read access is limited to the server. Clients
///< will only get the password they supplied when connecting. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_CLIENTS_ONLINE, ///< UInt64. Read only. The current number of clients connected to the server,
///< including query connections. Only available on request (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_CHANNELS_ONLINE, ///< UInt64. Read only. The current number of channels on the server. Only
///< available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CREATED, ///< Integer. Read only. The time this virtual server was created as unix timestamp.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_UPTIME, ///< UInt64. Read only. Number of seconds that have passed since the virtual server was
///< started. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CODEC_ENCRYPTION_MODE, ///< Integer. Read/Write. Boolean (1/0) that specifies if voice data is encrypted
///< during transfer. One of the values from the \ref CodecEncryptionMode enum.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_ENCRYPTION_CIPHERS, ///< String. Read/Write. Comma separated list of available ciphers to encrypt the
///< connection. The server will use the first cipher in the list that is also
///< listed in the \ref CLIENT_ENCRYPTION_CIPHERS of the connecting client.
///< Clients will fail to connect if no match is found. Always available.
VIRTUALSERVER_ADDRESS, ///< Any resolvable address for the specific virtual server
VIRTUALSERVER_VERSION_SIGN, ///< String. Read only. Signature of Platform and Version.
VIRTUALSERVER_ENDMARKER,
VIRTUALSERVER_FILEBASE = 24, ///< String. Read only. The path to the base directory used to store files
///< transferred using file transfer. Available only on the server. Is set by \ref
///< ts3server_enableFileManager
VIRTUALSERVER_MAX_DOWNLOAD_TOTAL_BANDWIDTH = 29, ///< UInt64. Read/Write. Maximum traffic in bytes the server can
///< use for file transfer downloads. Only available on request
///< (\ref ts3client_requestServerVariables).
VIRTUALSERVER_MAX_UPLOAD_TOTAL_BANDWIDTH = 30, ///< UInt64. Read/Write. Maximum traffic in bytes the server can use
///< for file transfer uploads. Only available on request (=>
///< requestServerVariables)
VIRTUALSERVER_LOG_FILETRANSFER = 64 ///< Integer. Read/Write. Boolean (1/0) indicating whether to include file
///< transfer activities (uploading or downloading of files) in the server log.
///< Always available.
};
/**
* Various connection properties.
* These are all read only, and except for your own client must be requested using \ref ts3client_requestConnectionInfo
*/
enum ConnectionProperties
{
CONNECTION_PING = 0, ///< UInt64. Round trip latency for the connection based on the last 5 seconds. On the server
///< this is the average across all connected clients for the last 5 seconds.
CONNECTION_PING_DEVIATION, ///< Double. Standard deviation for the round trip latency in \ref CONNECTION_PING
CONNECTION_CONNECTED_TIME, ///< UInt64. Seconds the client has been connected.
CONNECTION_IDLE_TIME, ///< UInt64. Time in seconds since the last activity (voice transmission, switching channels,
///< changing mic / speaker mute status) of the client.
CONNECTION_CLIENT_IP, ///< String. IP of this client (as seen from the server side)
CONNECTION_CLIENT_PORT, ///< UInt64. Client side port of this client (as seen from the server side)
CONNECTION_SERVER_IP, ///< String. The IP or hostname used to connect to the server. Only available on yourself.
CONNECTION_SERVER_PORT, ///< UInt64. The server port connected to. Only available on yourself.
CONNECTION_PACKETS_SENT_SPEECH, ///< UInt64. The number of voice packets transmitted by the client.
CONNECTION_PACKETS_SENT_KEEPALIVE, ///< UInt64. The number of keep alive packets transmitted by the client.
CONNECTION_PACKETS_SENT_CONTROL, ///< UInt64. The number of command & control packets transmitted by the client.
CONNECTION_PACKETS_SENT_TOTAL, ///< UInt64. Total number of packets transmitted by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_SENT_SPEECH, \ref CONNECTION_PACKETS_SENT_KEEPALIVE and
///< \ref CONNECTION_PACKETS_SENT_CONTROL
CONNECTION_BYTES_SENT_SPEECH, ///< UInt64. Outgoing traffic used for voice data by the client.
CONNECTION_BYTES_SENT_KEEPALIVE, ///< UInt64. Outgoing traffic used for keeping the connection alive by the client.
CONNECTION_BYTES_SENT_CONTROL, ///< UInt64. Outgoing traffic used for command & control data by the client.
CONNECTION_BYTES_SENT_TOTAL, ///< UInt64. Total outgoing traffic to the server by this client. Equal to the sum of
///< \ref CONNECTION_BYTES_SENT_SPEECH, \ref CONNECTION_BYTES_SENT_KEEPALIVE and \ref
///< CONNECTION_BYTES_SENT_CONTROL
CONNECTION_PACKETS_RECEIVED_SPEECH, ///< UInt64. Number of voice packets received by the client.
CONNECTION_PACKETS_RECEIVED_KEEPALIVE, ///< UInt64. Number of keep alive packets received by the client.
CONNECTION_PACKETS_RECEIVED_CONTROL, ///< UInt64. Number of command & control packets received by the client.
CONNECTION_PACKETS_RECEIVED_TOTAL, ///< UInt64. Total number of packets received by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_RECEIVED_SPEECH, \ref
///< CONNECTION_PACKETS_RECEIVED_KEEPALIVE and \ref
///< CONNECTION_PACKETS_RECEIVED_CONTROL
CONNECTION_BYTES_RECEIVED_SPEECH, ///< UInt64. Incoming traffic used by the client for voice data.
CONNECTION_BYTES_RECEIVED_KEEPALIVE, ///< UInt64. Incoming traffic used by the client to keep the connection alive.
CONNECTION_BYTES_RECEIVED_CONTROL, ///< UInt64. Incoming traffic used by the client for command & control data.
CONNECTION_BYTES_RECEIVED_TOTAL, ///< UInt64. Total incoming traffic used by the client. Equal to the sum of \ref
///< CONNECTION_BYTES_RECEIVED_SPEECH, \ref CONNECTION_BYTES_RECEIVED_KEEPALIVE and
///< \ref CONNECTION_BYTES_RECEIVED_CONTROL
CONNECTION_PACKETLOSS_SPEECH, ///< Double. Percentage points of voice packets for the client that did not arrive at
///< the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_KEEPALIVE, ///< Double. Percentage points of keep alive packets for the client that did not
///< arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_CONTROL, ///< Double. Percentage points of command & control packets for the client that did
///< not arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_TOTAL, ///< Double. Cumulative chance in percentage points with which a packet round trip
///< failed because a packet was lost
CONNECTION_SERVER2CLIENT_PACKETLOSS_SPEECH, ///< Double. Probability with which a voice packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< server was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the server was not
///< received by the client.
CONNECTION_CLIENT2SERVER_PACKETLOSS_SPEECH, ///< Double. Probability with which a speech packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< client was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the client was not
///< received by the server.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes sent for speech data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes sent for keepalive data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes sent for control data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes sent in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second sent for speech data, averaged over the
///< last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second sent for keepalive data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second sent for control data, averaged over
///< the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second sent, averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes received for speech data in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes received for keepalive data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes received for control data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes received in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second received for speech data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second received for keepalive data,
///< averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second received for control data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second received, averaged over the last minute.
CONNECTION_DUMMY_0,
CONNECTION_DUMMY_1,
CONNECTION_DUMMY_2,
CONNECTION_DUMMY_3,
CONNECTION_DUMMY_4,
CONNECTION_DUMMY_5,
CONNECTION_DUMMY_6,
CONNECTION_DUMMY_7,
CONNECTION_DUMMY_8,
CONNECTION_DUMMY_9,
CONNECTION_FILETRANSFER_BANDWIDTH_SENT, ///< UInt64. Current file transfer upstream activity in bytes per second.
///< Only available on request (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BANDWIDTH_RECEIVED, ///< UInt64. Current file transfer downstream activity in bytes per
///< second. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_RECEIVED_TOTAL, ///< UInt64. Total downstream traffic, in bytes, used for file
///< transfer since the server was started. Only available on request
///< (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_SENT_TOTAL, ///< UInt64. Total upstream traffic, in bytes, used for file transfer
///< since the server was started. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_ENDMARKER
};
/**
* Describes a client position in 3 dimensional space, used for 3D Sound.
*/
typedef struct
{
float x; ///< X co-ordinate in 3D space.
float y; ///< Y co-ordinate in 3D space.
float z; ///< Z co-ordinate in 3D space.
} TS3_VECTOR;
enum GroupWhisperType
{
GROUPWHISPERTYPE_SERVERGROUP = 0, ///< Whisper list consists of server groups
GROUPWHISPERTYPE_CHANNELGROUP = 1, ///< Whisper list consists of channel groups
GROUPWHISPERTYPE_CHANNELCOMMANDER = 2, ///< whisper to channel commanders
GROUPWHISPERTYPE_ALLCLIENTS = 3, ///< whisper to all clients
GROUPWHISPERTYPE_ENDMARKER,
};
enum GroupWhisperTargetMode
{
GROUPWHISPERTARGETMODE_ALL = 0,
GROUPWHISPERTARGETMODE_CURRENTCHANNEL = 1, ///< Whisper the current channel of the client
GROUPWHISPERTARGETMODE_PARENTCHANNEL = 2, ///< Whisper the parent channel of whatever channel the client is currently in
GROUPWHISPERTARGETMODE_ALLPARENTCHANNELS = 3, ///< Whipser to the parent channel and all their parent channels as well
GROUPWHISPERTARGETMODE_CHANNELFAMILY = 4, ///< Whisper to the current channel and all its sub channels
GROUPWHISPERTARGETMODE_ANCESTORCHANNELFAMILY = 5, ///< Whisper to the current channel, all its parent and sub channels.
GROUPWHISPERTARGETMODE_SUBCHANNELS = 6, ///< Whisper to all sub channels of the current channel of the client
GROUPWHISPERTARGETMODE_ENDMARKER,
};
enum MonoSoundDestination
{
MONO_SOUND_DESTINATION_ALL = 0, ///< Send mono sound to all available speakers
MONO_SOUND_DESTINATION_FRONT_CENTER = 1, ///< Send mono sound to front center speaker if available
MONO_SOUND_DESTINATION_FRONT_LEFT_AND_RIGHT = 2 ///< Send mono sound to front left/right speakers if available
};
enum SecuritySaltOptions
{
SECURITY_SALT_CHECK_NICKNAME = 1, ///< put nickname into security hash
SECURITY_SALT_CHECK_META_DATA = 2 ///< put meta data into security hash
};
/*this enum is used to disable client commands on the server*/
enum ClientCommand
{
CLIENT_COMMAND_requestConnectionInfo = 0, ///< disable client connection info request (client bandwidth usage, ip,
///< port, ping)
CLIENT_COMMAND_requestClientMove = 1, ///< disable moving clients
CLIENT_COMMAND_requestXXMuteClients = 2, ///< disable muting other clients
CLIENT_COMMAND_requestClientKickFromXXX = 3, ///< disable kicking clients
CLIENT_COMMAND_flushChannelCreation = 4, ///< disable creating channels
CLIENT_COMMAND_flushChannelUpdates = 5, ///< disable editing channels
CLIENT_COMMAND_requestChannelMove = 6, ///< disable moving channels
CLIENT_COMMAND_requestChannelDelete = 7, ///< disable deleting channels
CLIENT_COMMAND_requestChannelDescription = 8, ///< disable channel descriptions
CLIENT_COMMAND_requestChannelXXSubscribeXXX = 9, ///< disable being able to see clients in channels other than the
///< current channel the client is in
CLIENT_COMMAND_requestServerConnectionInfo = 10, ///< disable server connection info request (server bandwidth
///< usage, ip, port, ping)
CLIENT_COMMAND_requestSendXXXTextMsg = 11, ///< disable text messaging
CLIENT_COMMAND_filetransfers = 12, ///< disable file transfer
CLIENT_COMMAND_ENDMARKER
};
/* Access Control List*/
enum ACLType
{
ACL_NONE = 0,
ACL_WHITE_LIST = 1,
ACL_BLACK_LIST = 2
};
/* file transfer actions*/
enum FTAction
{
FT_INIT_SERVER = 0, ///< The virtual server is created. result->channelPath can be changed to create a different
///< directory than the default 'virtualserver_x' where x is the virtual server.
FT_INIT_CHANNEL = 1, ///< A channel is created. result->channelPath can be changed to create a different directory
///< then the default 'channel_x' where x is the channel id.
FT_UPLOAD = 2, ///< A file is being uploaded. All values in the result struct can be modified.
FT_DOWNLOAD = 3, ///< A file is being downloaded. All values in the result struct can be modified.
FT_DELETE = 4, ///< A file is being deleted. All values in the result struct can be modified.
FT_CREATEDIR = 5, ///< A directory is being created in a channel. All values in the result struct can be modified.
FT_RENAME = 6, ///< A file or folder is being renamed. The callback will be called twice! Once for the old and then
///< for the new name. All values in the result struct can be modified.
FT_FILELIST = 7, ///< A directory listing is requested. All values in the result struct can be modified.
FT_FILEINFO = 8 ///< Information of a file is requested. All values in the result struct can be modified.
};
/* file transfer status */
enum FileTransferState
{
FILETRANSFER_INITIALISING = 0, ///< File transfer is establishing connection.
FILETRANSFER_ACTIVE, ///< File transfer is in progress
FILETRANSFER_FINISHED, ///< File transfer has finished
};
/* file transfer types */
enum FileTransferType
{
FileListType_Directory = 0, ///< The file entry is a directory
FileListType_File, ///< The file entry is a regular file
};
/* some structs to handle variables in callbacks */
#define MAX_VARIABLES_EXPORT_COUNT 64
struct VariablesExportItem
{
unsigned char itemIsValid; ///< Whether or not there is any data in this item. Ignore this item if this is 0.
unsigned char proposedIsSet; ///< The value in proposed is set. If 0 ignore proposed
const char* current; ///< current value (stored in memory)
const char* proposed; ///< New value to change to (const, so no updates please)
};
struct VariablesExport
{
struct VariablesExportItem items[MAX_VARIABLES_EXPORT_COUNT];
};
struct ClientMiniExport
{
anyID ID; ///< id of the client
uint64 channel; ///< the channel the client is in
const char* ident; ///< client public identity
const char* nickname; ///< client display name
};
/**
* Structure used to describe a file transfer in the \ref ServerLibFunctions.onTransformFilePath callback.
* This describes the original values, and also contains hints for length limitations of the result parameter
* of the callback.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExport
{
uint64 channel; ///< The channel id of the file. 0 if action is \ref FT_INIT_SERVER
const char* filename; ///< utf8 encoded c string containing the original file name as intended by the client.
int action; ///< The action to be performed. One of the values from the \ref FTAction enum. Defines which values of
///< the result struct can be modified.
int transformedFileNameMaxSize; ///< The maximum length the file name can be rewritten to.
int channelPathMaxSize; ///< The maximum length the path can be rewritten to.
};
/**
* Structure to rewrite the file transfer file name and path in the \ref ServerLibFunctions.onTransformFilePath callback.
* The lengths are limited as described in the original parameter.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExportReturns
{
char* transformedFileName; ///< pointer to target file name. Fill the memory pointed to with an utf8 encoded c string
///< containing the new file name. Limited to original->transformedFileNameMaxSize bytes.
char* channelPath; ///< pointer to memory for new path. Fill the memory pointed to with an utf8 encoded c string
///< containing the new path. Limited to original->channelPathMaxSize bytes.
int logFileAction; ///< boolean (1/0). Whether to log this file transfer to the log. Action is not logged regardless
///< of this value if the servers \ref VIRTUALSERVER_LOG_FILETRANSFER property is 0.
};
struct FileTransferCallbackExport
{
anyID clientID; ///< the client who started the file transfer
anyID transferID; ///< local identifier of the transfer that has completed
anyID remoteTransferID; ///< remote identifier of the transfer that has completed
unsigned int status; ///< status of the transfer. One of the values from the \ref FileTransferState enum
const char* statusMessage; ///< utf8 encoded c string containing a human readable description of the status
uint64 remotefileSize; ///< size in bytes of the complete file to be transferred
uint64 bytes; ///< number of bytes transferred. Same as remotefileSize when the transfer completed entirely.
int isSender; ///< boolean. 1 if the server is sending the file. 0 if the server is receiving the file.
};
/*define for file transfer bandwith limits*/
#define BANDWIDTH_LIMIT_UNLIMITED 0xFFFFFFFFFFFFFFFFll
/*defines for speaker locations used by some sound callbacks*/
#ifndef SPEAKER_FRONT_LEFT
#define SPEAKER_FRONT_LEFT 0x1
#define SPEAKER_FRONT_RIGHT 0x2
#define SPEAKER_FRONT_CENTER 0x4
#define SPEAKER_LOW_FREQUENCY 0x8
#define SPEAKER_BACK_LEFT 0x10
#define SPEAKER_BACK_RIGHT 0x20
#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
#define SPEAKER_BACK_CENTER 0x100
#define SPEAKER_SIDE_LEFT 0x200
#define SPEAKER_SIDE_RIGHT 0x400
#define SPEAKER_TOP_CENTER 0x800
#define SPEAKER_TOP_FRONT_LEFT 0x1000
#define SPEAKER_TOP_FRONT_CENTER 0x2000
#define SPEAKER_TOP_FRONT_RIGHT 0x4000
#define SPEAKER_TOP_BACK_LEFT 0x8000
#define SPEAKER_TOP_BACK_CENTER 0x10000
#define SPEAKER_TOP_BACK_RIGHT 0x20000
#endif
#define SPEAKER_HEADPHONES_LEFT 0x10000000
#define SPEAKER_HEADPHONES_RIGHT 0x20000000
#define SPEAKER_MONO 0x40000000
#endif /*PUBLIC_DEFINITIONS_H*/
@@ -1,217 +0,0 @@
#ifndef PUBLIC_ERRORS_H
#define PUBLIC_ERRORS_H
//The idea here is: the values are 2 bytes wide, the first byte identifies the group, the second the count within that group
enum Ts3ErrorType {
//general
ERROR_ok = 0x0000, ///< Indicates success.
ERROR_undefined = 0x0001,
ERROR_not_implemented = 0x0002, ///< The attempted operation is not available in this context
ERROR_ok_no_update = 0x0003, ///< Indicates success, but no change occurred. Returned for example upon flushing (e.g. using \ref ts3client_flushChannelUpdates) when all indicated changes already matched the current state.
ERROR_dont_notify = 0x0004,
ERROR_lib_time_limit_reached = 0x0005,
ERROR_out_of_memory = 0x0006, ///< Not enough system memory to perform operation
ERROR_canceled = 0x0007,
ERROR_ok_no_error_event = 0x0008, ///< Indicates success, but no error event was generated. This is used because of the return code management and reduce packets.
//dunno
ERROR_command_not_found = 0x0100,
ERROR_unable_to_bind_network_port = 0x0101, ///< Unspecified failure to create a listening port
ERROR_no_network_port_available = 0x0102, ///< Failure to initialize a listening port for FileTransfer
ERROR_port_already_in_use = 0x0103, ///< Specified port is already in use by a different application
ERROR_command_line_parse_failed = 0x0104, ///< Command line arguments are invalid
ERROR_command_line_exit_version = 0x0105, ///< Command line specified version. The process should exit with code 0 after printing the version.
ERROR_command_line_exit_help = 0x0106, ///< Command line specified help. The process should exit with code 0 after priting the help.
//client
ERROR_client_invalid_id = 0x0200, ///< Client no longer connected
ERROR_client_nickname_inuse = 0x0201, ///< Client name is already in use. Client names must be unique
ERROR_client_protocol_limit_reached = 0x0203, ///< Too many clients on the server
ERROR_client_invalid_type = 0x0204, ///< Function called for normal clients that is only available for query clients or vice versa
ERROR_client_already_subscribed = 0x0205, ///< Attempting to subscribe to a channel already subscribed to
ERROR_client_not_logged_in = 0x0206,
ERROR_client_could_not_validate_identity = 0x0207, ///< Identity not valid or insufficient security level
ERROR_client_invalid_password = 0x0208,
ERROR_client_version_outdated = 0x020a, ///< Server requires newer client version as determined by the min_client_version properties
ERROR_client_is_flooding = 0x020c, ///< Triggered flood protection. Further information is supplied in the extra message if applicable.
ERROR_client_hacked = 0x020d,
ERROR_client_cannot_verify_now = 0x020e,
ERROR_client_login_not_permitted = 0x020f,
ERROR_client_not_subscribed = 0x0210, ///< Action is only available on subscribed channels
//channel
ERROR_channel_invalid_id = 0x0300, ///< Channel does not exist on the server (any longer)
ERROR_channel_protocol_limit_reached = 0x0301, ///< Too many channels on the server
ERROR_channel_already_in = 0x0302, ///< Attempting to move a client or channel to its current channel
ERROR_channel_name_inuse = 0x0303, ///< Channel name is already taken by another channel. Channel names must be unique
ERROR_channel_not_empty = 0x0304, ///< Attempting to delete a channel with clients or sub channels in it
ERROR_channel_can_not_delete_default = 0x0305, ///< Default channel cannot be deleted. Set a new default channel first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_default_require_permanent = 0x0306, ///< Attempt to set a non permanent channel as default channel. Set channel to permanent first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_invalid_flags = 0x0307, ///< Invalid combination of \ref ChannelProperties, trying to remove \ref CHANNEL_FLAG_DEFAULT or set a password on the default channel
ERROR_channel_parent_not_permanent = 0x0308, ///< Attempt to move a permanent channel into a non-permanent one, or set a channel to be permanent that is a sub channel of a non-permanent one
ERROR_channel_maxclients_reached = 0x0309, ///< Channel is full as determined by its \ref CHANNEL_MAXCLIENTS setting
ERROR_channel_maxfamily_reached = 0x030a, ///< Channel tree is full as determined by its \ref CHANNEL_MAXFAMILYCLIENTS setting
ERROR_channel_invalid_order = 0x030b, ///< Invalid value for the \ref CHANNEL_ORDER property. The specified channel must exist on the server and be on the same level.
ERROR_channel_no_filetransfer_supported = 0x030c, ///< Invalid \ref CHANNEL_FILEPATH set for the channel
ERROR_channel_invalid_password = 0x030d, ///< Channel has a password not matching the password supplied in the call
// used in public_rare_errors = 0x030e,
ERROR_channel_invalid_security_hash = 0x030f,
//server
ERROR_server_invalid_id = 0x0400, ///< Chosen virtual server does not exist or is offline
ERROR_server_running = 0x0401, ///< attempting to delete a server that is running. Stop the server before deleting it.
ERROR_server_is_shutting_down = 0x0402, ///< Client disconnected because the server is going offline
ERROR_server_maxclients_reached = 0x0403, ///< Given in the onConnectStatusChange event when the server has reached its maximum number of clients as defined by the \ref VIRTUALSERVER_MAXCLIENTS property
ERROR_server_invalid_password = 0x0404, ///< Specified server password is wrong. Provide the correct password in the \ref ts3client_startConnection / \ref ts3client_startConnectionWithChannelID call.
ERROR_server_is_virtual = 0x0407, ///< Server is in virtual status. The attempted action is not possible in this state. Start the virtual server first.
ERROR_server_is_not_running = 0x0409, ///< Attempting to stop a server that is not online.
ERROR_server_is_booting = 0x040a, // Not used
ERROR_server_status_invalid = 0x040b,
ERROR_server_version_outdated = 0x040d, ///< Attempt to connect to an outdated server version. The server needs to be updated.
ERROR_server_duplicate_running = 0x040e, ///< This server is already running within the instance. Each virtual server may only exist once.
//parameter
ERROR_parameter_quote = 0x0600, // Not used
ERROR_parameter_invalid_count = 0x0601, ///< Attempt to flush changes without previously calling set*VariableAs* since the last flush
ERROR_parameter_invalid = 0x0602, ///< At least one of the supplied parameters did not meet the criteria for that parameter
ERROR_parameter_not_found = 0x0603, ///< Failure to supply all the necessary parameters
ERROR_parameter_convert = 0x0604, ///< Invalid type supplied for a parameter, such as passing a string (ie. "five") that expects a number.
ERROR_parameter_invalid_size = 0x0605, ///< Value out of allowed range. Such as strings are too long/short or numeric values outside allowed range
ERROR_parameter_missing = 0x0606, ///< Neglecting to specify a required parameter
ERROR_parameter_checksum = 0x0607, ///< Attempting to deploy a modified snapshot
//unsorted, need further investigation
ERROR_vs_critical = 0x0700, ///< Failure to create default channel
ERROR_connection_lost = 0x0701, ///< Generic error with the connection.
ERROR_not_connected = 0x0702, ///< Attempting to call functions with a serverConnectionHandler that is not connected. You can use \ref ts3client_getConnectionStatus to check whether the connection handler is connected to a server
ERROR_no_cached_connection_info = 0x0703, ///< Attempting to query connection information (bandwidth usage, ping, etc) without requesting them first using \ref ts3client_requestConnectionInfo
ERROR_currently_not_possible = 0x0704, ///< Requested information is not currently available. You may have to call \ref ts3client_requestClientVariables or \ref ts3client_requestServerVariables
ERROR_failed_connection_initialisation = 0x0705, ///< No TeamSpeak server running on the specified IP address and port
ERROR_could_not_resolve_hostname = 0x0706, ///< Failure to resolve the specified hostname to an IP address
ERROR_invalid_server_connection_handler_id = 0x0707, ///< Attempting to perform actions on a non-existent server connection handler
ERROR_could_not_initialise_input_manager = 0x0708, // Not used
ERROR_clientlibrary_not_initialised = 0x0709, ///< Calling client library functions without successfully calling \ref ts3client_initClientLib before
ERROR_serverlibrary_not_initialised = 0x070a, ///< Calling server library functions without successfully calling \ref ts3server_initServerLib before
ERROR_whisper_too_many_targets = 0x070b, ///< Using a whisper list that contain more clients than the servers \ref VIRTUALSERVER_MIN_CLIENTS_IN_CHANNEL_BEFORE_FORCED_SILENCE property
ERROR_whisper_no_targets = 0x070c, ///< The active whisper list is empty or no clients matched the whisper list (e.g. all channels in the list are empty)
ERROR_connection_ip_protocol_missing = 0x070d, ///< Invalid or unsupported protocol (e.g. attempting an IPv6 connection on an IPv4 only machine)
ERROR_handshake_failed = 0x070e,
ERROR_illegal_server_license = 0x070f,
//file transfer
ERROR_file_invalid_name = 0x0800, ///< Invalid UTF8 string or not a valid file
ERROR_file_invalid_permissions = 0x0801, ///< Permissions prevent opening the file
ERROR_file_already_exists = 0x0802, ///< Target path already exists as a directory
ERROR_file_not_found = 0x0803, ///< Attempt to access or move non existing file
ERROR_file_io_error = 0x0804, ///< Generic file input / output error
ERROR_file_invalid_transfer_id = 0x0805, ///< Attempt to get information about a file transfer after it has already been cleaned up. File transfer information is not available indefinitely after the transfer completed
ERROR_file_invalid_path = 0x0806, ///< specified path contains invalid characters or does not start with "/"
ERROR_file_no_files_available = 0x0807, // Not used
ERROR_file_overwrite_excludes_resume = 0x0808, ///< File overwrite and resume are mutually exclusive. Only one or neither can be 1.
ERROR_file_invalid_size = 0x0809, ///< Attempt to write more bytes than claimed file size.
ERROR_file_already_in_use = 0x080a, ///< File is currently not available, try again later.
ERROR_file_could_not_open_connection = 0x080b, ///< Generic failure in file transfer connection / other party did not conform to file transfer protocol
ERROR_file_no_space_left_on_device = 0x080c, ///< Operating system reports hard disk is full. May be caused by quota limitations.
ERROR_file_exceeds_file_system_maximum_size = 0x080d, ///< File is too large for the file system of the target device.
ERROR_file_transfer_connection_timeout = 0x080e, // Not used
ERROR_file_connection_lost = 0x080f, ///< File input / output timeout or connection failure
ERROR_file_exceeds_supplied_size = 0x0810, // Not used
ERROR_file_transfer_complete = 0x0811, ///< Indicates successful completion
ERROR_file_transfer_canceled = 0x0812, ///< Transfer was cancelled through @ref ts3client_haltTransfer
ERROR_file_transfer_interrupted = 0x0813, ///< Transfer failed because the server is shutting down, or network connection issues
ERROR_file_transfer_server_quota_exceeded = 0x0814, ///< Transfer terminated due to server bandwidth quota being exceeded. No client can transfer files.
ERROR_file_transfer_client_quota_exceeded = 0x0815, ///< Attempt to transfer more data than allowed by this clients' bandwidth quota. Other clients may continue to transfer files.
ERROR_file_transfer_reset = 0x0816, // Not used
ERROR_file_transfer_limit_reached = 0x0817, ///< Too many file transfers are in progress. Try again later
ERROR_file_invalid_storage_class = 0x0818, // TODO: Invalid storage class for HTTP FileTransfer (what is a storage class?)
ERROR_file_invalid_dimension = 0x0819, ///< Avatar image exceeds maximum width or height accepted by the server.
ERROR_file_transfer_channel_quota_exceeded = 0x081a, ///< Transfer failed because the channel quota was exceeded. Uploading to this channel is not possible, but other channels may be fine.
//sound
ERROR_sound_preprocessor_disabled = 0x0900, ///< Cannot set or query pre processor variables with preprocessing disabled
ERROR_sound_internal_preprocessor = 0x0901,
ERROR_sound_internal_encoder = 0x0902,
ERROR_sound_internal_playback = 0x0903,
ERROR_sound_no_capture_device_available = 0x0904, ///< No audio capture devices are available
ERROR_sound_no_playback_device_available = 0x0905, ///< No audio playback devices are available
ERROR_sound_could_not_open_capture_device = 0x0906, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_could_not_open_playback_device = 0x0907, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_handler_has_device = 0x0908, ///< Attempt to open a sound device on a connection handler which already has an open device. Close the already open device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_invalid_capture_device = 0x0909, ///< Attempt to use a device for capture that does not support capturing audio
ERROR_sound_invalid_playback_device = 0x090a, ///< Attempt to use a device for playback that does not support playback of audio
ERROR_sound_invalid_wave = 0x090b, ///< Attempt to use a non WAV file in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle
ERROR_sound_unsupported_wave = 0x090c, ///< Unsupported wave file used in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle.
ERROR_sound_open_wave = 0x090d, ///< Failure to open the specified sound file
ERROR_sound_internal_capture = 0x090e,
ERROR_sound_device_in_use = 0x090f, ///< Attempt to unregister a custom device that is being used. Close the device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_device_already_registerred = 0x0910, ///< Attempt to register a custom device with a device id that has already been used in a previous call. Device ids must be unique.
ERROR_sound_unknown_device = 0x0911, ///< Attempt to open, close, unregister or use a device which is not known. Custom devices must be registered before being used (see \ref ts3client_registerCustomDevice)
ERROR_sound_unsupported_frequency = 0x0912,
ERROR_sound_invalid_channel_count = 0x0913, ///< Invalid device audio channel count, must be > 0
ERROR_sound_read_wave = 0x0914, ///< Failure to read sound samples from an opened wave file. Is this a valid wave file?
ERROR_sound_need_more_data = 0x0915, // for internal purposes only
ERROR_sound_device_busy = 0x0916, // for internal purposes only
ERROR_sound_no_data = 0x0917, ///< Indicates there is currently no data for playback, e.g. nobody is speaking right now.
ERROR_sound_channel_mask_mismatch = 0x0918, ///< Opening a device with an unsupported channel count
//permissions
ERROR_permissions_client_insufficient = 0x0a08, ///< Not enough permissions to perform the requested activity
ERROR_permissions = 0x0a0c, ///< Permissions to use sound device not granted by operating system, e.g. Windows denied microphone access.
//accounting
ERROR_accounting_virtualserver_limit_reached = 0x0b00, ///< Attempt to use more virtual servers than allowed by the license
ERROR_accounting_slot_limit_reached = 0x0b01, ///< Attempt to set more slots than allowed by the license
ERROR_accounting_license_file_not_found = 0x0b02, // Not used
ERROR_accounting_license_date_not_ok = 0x0b03, ///< License expired or not valid yet
ERROR_accounting_unable_to_connect_to_server = 0x0b04, ///< Failure to communicate with accounting backend
ERROR_accounting_unknown_error = 0x0b05, ///< Failure to write update license file
ERROR_accounting_server_error = 0x0b06, // Not used
ERROR_accounting_instance_limit_reached = 0x0b07, ///< More than one process of the server is running
ERROR_accounting_instance_check_error = 0x0b08, ///< Shared memory access failure.
ERROR_accounting_license_file_invalid = 0x0b09, ///< License is not a TeamSpeak license
ERROR_accounting_running_elsewhere = 0x0b0a, ///< A copy of this server is already running in another instance. Each server may only exist once.
ERROR_accounting_instance_duplicated = 0x0b0b, ///< A copy of this server is running already in this process. Each server may only exist once.
ERROR_accounting_already_started = 0x0b0c, ///< Attempt to start a server that is already running
ERROR_accounting_not_started = 0x0b0d,
ERROR_accounting_to_many_starts = 0x0b0e, ///< Starting instance / virtual servers too often in too short a time period
//provisioning server
/// @cond HAS_PROVISIONING
ERROR_provisioning_invalid_password = 0x1100,
ERROR_provisioning_invalid_request = 0x1101,
ERROR_provisioning_no_slots_available = 0x1102,
ERROR_provisioning_pool_missing = 0x1103,
ERROR_provisioning_pool_unknown = 0x1104,
ERROR_provisioning_unknown_ip_location = 0x1105,
ERROR_provisioning_internal_tries_exceeded = 0x1106,
ERROR_provisioning_too_many_slots_requested = 0x1107,
ERROR_provisioning_too_many_reserved = 0x1108,
ERROR_provisioning_could_not_connect = 0x1109,
ERROR_provisioning_auth_server_not_connected = 0x1110,
ERROR_provisioning_auth_data_too_large = 0x1111,
ERROR_provisioning_already_initialized = 0x1112,
ERROR_provisioning_not_initialized = 0x1113,
ERROR_provisioning_connecting = 0x1114,
ERROR_provisioning_already_connected = 0x1115,
ERROR_provisioning_not_connected = 0x1116,
ERROR_provisioning_io_error = 0x1117,
ERROR_provisioning_invalid_timeout = 0x1118,
ERROR_provisioning_ts3server_not_found = 0x1119,
ERROR_provisioning_no_permission = 0x111A,
/// @endcond
// 0x12 - 0x15 are reserved in rare
// screen share
ERROR_already_registered = 0x1600,
ERROR_stream_session_limit_reached = 0x1601,
ERROR_stream_session_not_found = 0x1602,
ERROR_stream_unknown = 0x1603,
ERROR_stream_not_participating = 0x1604,
ERROR_not_streamer = 0x1605,
ERROR_already_joined = 0x1606,
ERROR_join_request_not_found = 0x1607,
ERROR_sfu_failed_to_start = 0x1608,
};
#endif
@@ -1,236 +0,0 @@
#ifndef TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#define TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Version definitions.
#define TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1 1
// Protocol used for communication between the session subscriber and the session (a single stream).
// Commands are sent bidirectionally or unidirectionally between the parties.
// e.g. SESSION => SUBSCRIBER: ON_FRAME, ON_PAUSED_CHANGED
// e.g. SUBSCRIBER => SESSION: ON_FRAME_ACK, ON_RESIZE
// Command type enum with a lowercase type name.
typedef enum
{
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME = 0,
TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE,
TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED,
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK,
TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP,
TS_SESSION_SUBSCRIBER_CMD_REMOVE_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED,
} ts_session_subscriber_command_type_t;
// Pixel format enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_I420 = 0,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_NV12,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ABGR,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ARGB,
} ts_session_subscriber_pixel_format_t;
// Buffer location enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_CPU = 0,
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_GPU
} ts_session_subscriber_buffer_location_t;
// Buffer type enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_SINGLE = 0,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_MAIN,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_SUB
} ts_session_subscriber_buffer_type_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(push, 4)
#endif
// Main buffer header for shared CPU Memory Front/Back Buffers.
// The Main Buffer contains metadata about the current front/back buffer and the versioning for both the main and sub buffer.
// The information from the main buffer can be used to always read the front buffer.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t front_buffer_index; // index of the front buffer. (0: main buffer, 1: sub buffer)
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_main_buffer_header_t;
// Sub buffer header.
typedef struct
{
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
} ts_session_subscriber_sub_buffer_header_t;
// Single frame buffer header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_single_frame_buffer_header_t;
// Command header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // Total message length (header + payload).
ts_session_subscriber_command_type_t type;
uint64_t target_session_id; // always set to the target session id this command is for or is originating from.
uint64_t target_subscriber_id; // 0 if broadcast.
} ts_session_subscriber_command_header_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME.
// The frame data is not included in the message, but is attached seperately or was sent beforehand. The buffer is identified by it's id.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_id; // buffer id, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_frame_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t frame_id;
} ts_session_subscriber_on_frame_ack_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE.
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t width;
uint32_t height;
} ts_session_subscriber_on_resize_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t paused; // 0 or 1.
} ts_session_subscriber_on_paused_changed_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE.
// Contains a single frame buffer. The header is of format |ts_session_subscriber_single_frame_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
ts_session_subscriber_buffer_type_t buffer_type;
} ts_session_subscriber_on_buffer_single_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK.
// Contains a main buffer and a sub buffer. The main buffer header
// contains metadata about the current front/back buffer and
// is of type |ts_session_subscriber_main_buffer_header_t|.
// The sub buffer's header is of type |ts_session_subscriber_sub_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t main_buffer_ptr; // main buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t main_buffer_length;
uint64_t sub_buffer_ptr; // sub buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t sub_buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
} ts_session_subscriber_on_buffer_front_back_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER.
// SUBSCRIBER => SESSION.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_resp_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_release_buffer_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr;
int bits_per_sample;
int sample_rate;
uint32_t number_of_channels;
uint32_t number_of_frames;
int64_t absolute_capture_timestamp_ms;
float volume;
} ts_session_subscriber_on_audio_frames_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t audio_enabled;
} ts_session_subscriber_on_audio_enabled_changed_payload_t;
// Overall Command structure.
typedef struct
{
ts_session_subscriber_command_header_t header;
union
{
ts_session_subscriber_on_frame_payload_t frame;
ts_session_subscriber_on_resize_payload_t resize;
ts_session_subscriber_on_paused_changed_payload_t paused;
ts_session_subscriber_on_frame_ack_payload_t frame_ack;
ts_session_subscriber_on_buffer_single_payload_t buffer_single;
ts_session_subscriber_on_buffer_front_back_payload_t buffer_front_back;
ts_session_subscriber_on_release_buffer_payload_t release_buffer;
ts_session_subscriber_add_subscriber_payload_t add_subscriber;
ts_session_subscriber_add_subscriber_resp_payload_t add_subscriber_resp;
ts_session_subscriber_on_audio_frames_payload_t audio_frames;
ts_session_subscriber_on_audio_enabled_changed_payload_t audio_enabled_changed;
} payload;
} ts_session_subscriber_command_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif // TS_SESSION_SUBSCRIBER_PROTOCOL_H_
@@ -1,29 +0,0 @@
####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
####### Any changes to this file will be overwritten by the next CMake run ####
####### The input file was team_clientConfig.cmake.in ########
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
macro(set_and_check _var _file)
set(${_var} "${_file}")
if(NOT EXISTS "${_file}")
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
endif()
endmacro()
macro(check_required_components _NAME)
foreach(comp ${${_NAME}_FIND_COMPONENTS})
if(NOT ${_NAME}_${comp}_FOUND)
if(${_NAME}_FIND_REQUIRED_${comp})
set(${_NAME}_FOUND FALSE)
endif()
endif()
endforeach()
endmacro()
####################################################################################
include("${CMAKE_CURRENT_LIST_DIR}/team_clientTargets.cmake")
check_required_components(team_client)
@@ -1,19 +0,0 @@
#----------------------------------------------------------------
# Generated CMake target import file for configuration "Release".
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Import target "teamspeak::client" for configuration "Release"
set_property(TARGET teamspeak::client APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(teamspeak::client PROPERTIES
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.dylib"
IMPORTED_SONAME_RELEASE "@rpath/libteamspeak_sdk_client.dylib"
)
list(APPEND _cmake_import_check_targets teamspeak::client )
list(APPEND _cmake_import_check_files_for_teamspeak::client "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.dylib" )
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
@@ -1,121 +0,0 @@
# Generated by CMake
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
if(CMAKE_VERSION VERSION_LESS "2.8.3")
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
cmake_policy(PUSH)
cmake_policy(VERSION 2.8.3...4.0)
#----------------------------------------------------------------
# Generated CMake target import file.
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
set(_cmake_targets_defined "")
set(_cmake_targets_not_defined "")
set(_cmake_expected_targets "")
foreach(_cmake_expected_target IN ITEMS teamspeak::client)
list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
if(TARGET "${_cmake_expected_target}")
list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
else()
list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
endif()
endforeach()
unset(_cmake_expected_target)
if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
unset(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
return()
endif()
if(NOT _cmake_targets_defined STREQUAL "")
string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
endif()
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
# Compute the installation prefix relative to this file.
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
set(_IMPORT_PREFIX "")
endif()
# Create imported target teamspeak::client
add_library(teamspeak::client SHARED IMPORTED)
set_target_properties(teamspeak::client PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
)
if(NOT CMAKE_VERSION VERSION_LESS "3.23.0")
target_sources(teamspeak::client
INTERFACE
FILE_SET "public_headers"
TYPE "HEADERS"
BASE_DIRS "${_IMPORT_PREFIX}/include"
FILES "${_IMPORT_PREFIX}/include/teamspeak/clientlib.h" "${_IMPORT_PREFIX}/include/teamspeak/clientlib_sdk.h" "${_IMPORT_PREFIX}/include/teamspeak/video/session_subscriber_protocol.h"
)
else()
set_property(TARGET teamspeak::client
APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
"${_IMPORT_PREFIX}/include"
)
endif()
# Load information for each installed configuration.
file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/team_clientTargets-*.cmake")
foreach(_cmake_config_file IN LISTS _cmake_config_files)
include("${_cmake_config_file}")
endforeach()
unset(_cmake_config_file)
unset(_cmake_config_files)
# Cleanup temporary variables.
set(_IMPORT_PREFIX)
# Loop over all imported files and verify that they actually exist
foreach(_cmake_target IN LISTS _cmake_import_check_targets)
if(CMAKE_VERSION VERSION_LESS "3.28"
OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
if(NOT EXISTS "${_cmake_file}")
message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
\"${_cmake_file}\"
but this file does not exist. Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
\"${CMAKE_CURRENT_LIST_FILE}\"
but not all the files it references.
")
endif()
endforeach()
endif()
unset(_cmake_file)
unset("_cmake_import_check_files_for_${_cmake_target}")
endforeach()
unset(_cmake_target)
unset(_cmake_import_check_targets)
# This file does not depend on other imported targets which have
# been exported from the same project but in a separate export set.
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
@@ -1,23 +0,0 @@
#ifndef TEAMLOG_LOGTYPES_H
#define TEAMLOG_LOGTYPES_H
enum LogTypes {
LogType_NONE = 0x0000, ///< Logging is disabled
LogType_FILE = 0x0001, ///< Log to regular log file
LogType_CONSOLE = 0x0002, ///< Log to standard output / error
LogType_USERLOGGING = 0x0004, ///< User defined logging. Will call the \ref ServerLibFunctions.onUserLoggingMessageEvent callback for every message to be logged
LogType_NO_NETLOGGING = 0x0008, ///< Not used
LogType_DATABASE = 0x0010, ///< Log to database (deprecated, server only, no effect in SDK)
LogType_SYSLOG = 0x0020, ///< Log to syslog (only available on Linux)
};
enum LogLevel {
LogLevel_CRITICAL = 0, ///< these messages stop the program
LogLevel_ERROR, ///< everything that is really bad, but not so bad we need to shut down
LogLevel_WARNING, ///< everything that *might* be bad
LogLevel_DEBUG, ///< output that might help find a problem
LogLevel_INFO, ///< informational output, like "starting database version x.y.z"
LogLevel_DEVEL ///< developer only output (will not be displayed in release mode)
};
#endif //TEAMLOG_LOGTYPES_H
File diff suppressed because it is too large Load Diff
@@ -1,58 +0,0 @@
#ifndef CLIENTLIB_SDK_H
#define CLIENTLIB_SDK_H
// system
#include <stdlib.h>
// own
#include "teamspeak/public_definitions.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Sets the client to which to transmit voice. Stops standard channel voice transmission.
*
* The client will still receive voice from their current channel, however their voice will not be transmitted to their
* current channel anymore. If this call is successful (check onServerErrorEvent) then voice of the specified client
* will be transmitted to all specified channels and all the specified clients. Pass 0 to both target parameter arrays
* to restore default behavior of transmitting voice to current channel. You will receive an onServerErrorEvent with the
* passed returnCode indicating whether or not the operation was successful.
*
* @param server_connection_handler_id the connection handler on which to set the whisper list
* @param client_id the client to set the whisper list for. Set to 0 or your own client ID to set your own whisper list.
* @param channel_ids an array of channel ids to transmit voice to.
* @param channel_ids_size number of elements in aforementioned array.
* @param client_ids a zero terminated array of client ids to transmit voice to.
* @param client_ids_size number of elements in aforementioned array.
* @param impersonate if the target client is a webrtc client, the voice packets will look like as if they have been
* send by the invoking client id
* @param return_code a c string to identify this request in callbacks. Pass an empty string if unused.
* @return An error code from the @ref Ts3ErrorType enum indicating either success or the failure reason
*/
EXPORTDLL unsigned int ts_client_request_client_set_whisper_list(uint64 server_connection_handler_id, anyID client_id,
const uint64* channel_ids,
int channel_ids_size,
const anyID* client_ids,
int client_ids_size, int impersonate,
const char* return_code);
/**
* @brief Send a binary-serialized ClientCommandRequest protobuf to the client library.
*
* The response will be delivered asynchronously via the onProtoResponse callback
* as a serialized ClientCommandResponse protobuf.
*
* @param data Pointer to serialized ClientCommandRequest protobuf bytes
* @param size Size of the serialized data in bytes
* @param return_code Caller-provided string to correlate the response in onProtoResponse. May be NULL.
* @return An error code: ERROR_ok on successful dispatch, ERROR_parameter_invalid on parse failure
*/
EXPORTDLL unsigned int ts3client_postProtoCommand(const void* data, size_t size, const char* return_code);
#ifdef __cplusplus
}
#endif
#endif // CLIENTLIB_SDK_H
@@ -1,635 +0,0 @@
#ifndef PUBLIC_DEFINITIONS_H
#define PUBLIC_DEFINITIONS_H
#include "teamlog/logtypes.h"
#define TS3_MAX_SIZE_CHANNEL_NAME 40 // channel name maximum length in characters
#define TS3_MAX_SIZE_VIRTUALSERVER_NAME 64 // virtual server name maximum length in characters
#define TS3_MAX_SIZE_CLIENT_NICKNAME 64 // client display name length limit in characters
#define TS3_MIN_SIZE_CLIENT_NICKNAME 3 // client display name minimum length in characters
#define TS3_MAX_SIZE_REASON_MESSAGE 80 // length limit in characters for kick, move, etc reasons
#define TS3_MAX_SIZE_TEXTMESSAGE 8192 // text message length limit, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_TOPIC 255 // channel topic lengt limith, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_DESCRIPTION 8192 // channel description length limit, measured in bytes (utf8 encoded)
// server welcome message length limit measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_VIRTUALSERVER_WELCOMEMESSAGE 1024
#define TS3_SIZE_MYTSID 44
// minimum amount of seconds before a clientID that was in use can be assigned to a new client
#define TS3_MIN_SECONDS_CLIENTID_REUSE 300
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32)
typedef unsigned __int16 anyID;
typedef unsigned __int64 uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __declspec(dllexport)
#else
#define EXPORTDLL
#endif
#endif
#else
#include <stdint.h>
typedef uint16_t anyID;
typedef uint64_t uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __attribute__((visibility("default")))
#else
#define EXPORTDLL
#endif
#endif
#endif
enum Visibility
{
ENTER_VISIBILITY = 0, ///< Client joined from an unsubscribed channel, or joined the server.
RETAIN_VISIBILITY, ///< Client switched from one subscribed channel to a different subscribed channel.
LEAVE_VISIBILITY ///< Client switches to an unsubscribed channel, or disconnected from server.
};
enum ConnectStatus
{
STATUS_DISCONNECTED = 0, ///< There is no activity to the server, this is the default value
STATUS_CONNECTING, ///< We are trying to connect, we haven't got a client id yet, we haven't been accepted by the server
STATUS_CONNECTED, ///< The server has accepted us, we can talk and hear and we have a client id, but we don't
///< have the channels and clients yet, we can get server infos (welcome msg etc.)
STATUS_CONNECTION_ESTABLISHING, ///< we are connected and we are visible
STATUS_CONNECTION_ESTABLISHED, ///< we are connected and we have the client and channels available
};
enum LocalTestMode
{
TEST_MODE_OFF = 0,
TEST_MODE_VOICE_LOCAL_ONLY,
TEST_MODE_VOICE_LOCAL_AND_REMOTE,
TEST_MODE_TALK_STATUS_CHANGES_ONLY
};
enum TalkStatus
{
STATUS_NOT_TALKING = 0, ///< client is not talking
STATUS_TALKING = 1, ///< client is talking
STATUS_TALKING_WHILE_DISABLED = 2, ///< client is talking while the microphone is muted (only valid for own client)
};
enum CodecType
{
CODEC_SPEEX_NARROWBAND = 0, ///< (deprecated) mono, 16bit, 8kHz, bitrate dependent on the quality setting
CODEC_SPEEX_WIDEBAND, ///< (deprecated) mono, 16bit, 16kHz, bitrate dependent on the quality setting
CODEC_SPEEX_ULTRAWIDEBAND, ///< (deprecated) mono, 16bit, 32kHz, bitrate dependent on the quality setting
CODEC_CELT_MONO, ///< (deprecated) mono, 16bit, 48kHz, bitrate dependent on the quality setting
CODEC_OPUS_VOICE, ///< mono, 16bit, 48khz, bitrate dependent on the quality setting, optimized for voice
CODEC_OPUS_MUSIC, ///< stereo, 16bit, 48khz, bitrate dependent on the quality setting, optimized for music
};
enum CodecEncryptionMode
{
CODEC_ENCRYPTION_PER_CHANNEL = 0, ///< voice data encryption decided per channel
CODEC_ENCRYPTION_FORCED_OFF, ///< voice data encryption disabled
CODEC_ENCRYPTION_FORCED_ON, ///< voice data encryption enabled
};
enum TextMessageTargetMode
{
TextMessageTarget_CLIENT = 1, ///< Message is a private message to another client
TextMessageTarget_CHANNEL, ///< Message is sent to a channel, received by all clients in that channel at the time
TextMessageTarget_SERVER, ///< Message is sent to every client on the server
TextMessageTarget_MAX
};
enum MuteInputStatus
{
MUTEINPUT_NONE = 0, ///< Microphone is not muted, audio is sent to the server
MUTEINPUT_MUTED, ///< Microphone is muted, no audio is transmitted to the server
};
enum MuteOutputStatus
{
MUTEOUTPUT_NONE = 0, ///< Speaker is active, server is sending us audio
MUTEOUTPUT_MUTED, ///< Speaker is muted, server is not sending audio to us
};
enum HardwareInputStatus
{
HARDWAREINPUT_DISABLED = 0, ///< no capture device opened
HARDWAREINPUT_ENABLED, ///< capture device open
};
enum HardwareOutputStatus
{
HARDWAREOUTPUT_DISABLED = 0, ///< no playback device opened
HARDWAREOUTPUT_ENABLED, ///< playback device open
};
enum InputDeactivationStatus
{
INPUT_ACTIVE = 0, ///< Audio is captured from the capture device.
INPUT_DEACTIVATED = 1, ///< No audio is captured from the capture device.
};
enum ReasonIdentifier
{
REASON_NONE = 0, ///< no reason data
REASON_MOVED = 1, ///< client was moved
REASON_SUBSCRIPTION = 2, // no reason data
REASON_LOST_CONNECTION = 3, // reasonmsg=reason
REASON_KICK_CHANNEL = 4, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER = 5, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER_BAN = 6, //{SectionInvoker} reasonmsg=reason bantime=time //{SectionInvoker} is only added server->client
REASON_SERVERSTOP = 7, // reasonmsg=reason
REASON_CLIENTDISCONNECT = 8, // reasonmsg=reason
REASON_CHANNELUPDATE = 9, // no reason data
REASON_CHANNELEDIT = 10, //{SectionInvoker}
REASON_CLIENTDISCONNECT_SERVER_SHUTDOWN = 11, // reasonmsg=reason
};
enum Protocol_Encryption_Cipher
{
AES_128 = 0b00000000,
AES_256 = 0b00000001,
PROTOCOL_ENCRYPTION_CIPHER_END_MARKER,
RESERVED = 0b00010000, // reserved until puzzle v2 is fully released, then can be reused
PUZZLE_2 = 0b00100000,
};
enum ChannelProperties
{
CHANNEL_NAME = 0, ///< String. Read/Write. Name of the channel. Always available.
CHANNEL_TOPIC, ///< String. Read/Write. Short single line text describing what the channel is about. Always available.
CHANNEL_DESCRIPTION, ///< String. Read/Write. Arbitrary text (up to 8k bytes) with information about the channel.
///< Must be requested (\ref ts3client_requestChannelDescription)
CHANNEL_PASSWORD, ///< String. Read/Write. Password of the channel. Read access is limited to the server. Clients
///< will only ever see the last password they attempted to use when joining the channel. Always available.
CHANNEL_CODEC, ///< Integer. Read/Write. The codec this channel is using. One of the values from the \ref CodecType
///< enum. Always available.
CHANNEL_CODEC_QUALITY, ///< Integer. Read/Write. The quality setting of the channel. Valid values are 0 to 10 inclusive.
///< Higher value means better voice quality but also more bandwidth usage. Always available.
CHANNEL_MAXCLIENTS, ///< Integer. Read/Write. The number of clients that can be in the channel simultaneously.
///< Always available.
CHANNEL_MAXFAMILYCLIENTS, ///< Integer. Read/Write. The total number of clients that can be in this channel and all
///< sub channels of this channel. Always available.
CHANNEL_ORDER, ///< UInt64. Read/Write. The ID of the channel below which this channel should be displayed. If 0
///< the channel is sorted at the top of the current level. Always available.
CHANNEL_FLAG_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when empty.
///< Permanent channels are stored to the database and available after server restart. SDK
///< users will need to take care of restoring channel at server start on their own.
///< Mutually exclusive with \ref CHANNEL_FLAG_SEMI_PERMANENT. Always available.
CHANNEL_FLAG_SEMI_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when
///< empty. Semi permanent channels are not stored to disk and gone after server
///< restart but remain while empty. Mutually exclusive with \ref
///< CHANNEL_FLAG_PERMANENT. Always available.
CHANNEL_FLAG_DEFAULT, ///< Integer. Read/Write. Boolean (1/0). The default channel is the channel that all clients
///< are located in when they join the server, unless the client explicitly specified a
///< different channel when connecting and is allowed to join their preferred channel. Only
///< one channel on the server can have this flag set. The default channel must have \ref
///< CHANNEL_FLAG_PERMANENT set. Always available.
CHANNEL_FLAG_PASSWORD, ///< Integer. Read/Write. Boolean (1/0) indicating whether this channel is password protected.
///< When removing or setting \ref CHANNEL_PASSWORD you also need to adjust this flag.
CHANNEL_CODEC_LATENCY_FACTOR, ///< (deprecated) Integer. Read/Write. Allows to increase packet size, reducing
///< bandwith at the cost of higher latency of voice transmission. Valid values are
///< 1-10 inclusive. 1 is the default and offers the lowest latency. Always available.
CHANNEL_CODEC_IS_UNENCRYPTED, ///< Integer. Read/Write. Boolean (1/0). If 0 voice data is encrypted, if 1 the voice
///< data is not encrypted. Only used if the server \ref
///< VIRTUALSERVER_CODEC_ENCRYPTION_MODE is set to \ref CODEC_ENCRYPTION_PER_CHANNEL.
///< Always available.
CHANNEL_SECURITY_SALT, ///< String. Read/Write. SDK Only, not used by TeamSpeak. This channels security hash. When
///< a client joins their \ref CLIENT_SECURITY_HASH is compared to this value, to allow or
///< deny the client access to the channel. Used to enforce clients joining the server with
///< specific identity and \ref CLIENT_META_DATA. See SDK Documentation about this feature
///< for further details. Always available.
CHANNEL_DELETE_DELAY, ///< UInt64. Read/Write. Number of seconds deletion of temporary channels is delayed after
///< the last client leaves the channel. Channel is only deleted if empty when the delete
///< delay expired. Always available.
CHANNEL_UNIQUE_IDENTIFIER, ///< String. Read only. An identifier that uniquely identifies a channel. Available in
///< Server >= 3.10.0
CHANNEL_ENDMARKER,
};
enum ClientProperties
{
CLIENT_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Public Identity, can be used to identify a client
///< installation. Remains identical as long as the client keeps using the same
///< identity. Available for visible clients.
CLIENT_NICKNAME, ///< String. Read/Write. Display name of the client. Available for visible clients.
CLIENT_VERSION, ///< String. Read only. Version String of the client used. For clients other than ourself this
///< needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_PLATFORM, ///< String. Read only. Operating system used by the client. For other clients other than ourself
///< this needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_FLAG_TALKING, ///< Integer. Read only. Whether the client is talking. Available on clients that are either
///< whispering to us, or in our channel.
CLIENT_INPUT_MUTED, ///< Integer. Read/Write. Microphone mute status. Available for visible clients. One of the
///< values from the \ref MuteInputStatus enum.
CLIENT_OUTPUT_MUTED, ///< Integer. Read/Write. Speaker mute status. Speaker mute implies microphone mute. Available
///< for visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_OUTPUTONLY_MUTED, ///< Integer. Read/Write. Speaker mute status. Microphone may be active. Available for
///< visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_INPUT_HARDWARE, ///< Integer. Read only. Indicates whether a capture device is open. Available for visible
///< clients. One of the values from the \ref HardwareInputStatus enum.
CLIENT_OUTPUT_HARDWARE, ///< Integer. Read only. Indicates whether a playback device is open. Available for visible
///< clients. One of the values from the \ref HardwareOutputStatus enum.
CLIENT_INPUT_DEACTIVATED, ///< Integer. Read/Write. Not available server side. Local microphone mute status.
///< Available only for own client. Used to implement Push To Talk. One of the values from
///< the \ref InputDeactivationStatus enum.
CLIENT_IDLE_TIME, ///< UInt64. Read only. Seconds since last activity. Available only for own client.
CLIENT_DEFAULT_CHANNEL, ///< String. Read only. User specified channel they joined when connecting to the server.
///< Available only for own client.
CLIENT_DEFAULT_CHANNEL_PASSWORD, ///< String. Read only. User specified channel password for the channel they
///< attempted to join when connecting to the server. Available only for own
///< client.
CLIENT_SERVER_PASSWORD, ///< String. Read only. User specified server password. Available only for own client.
CLIENT_META_DATA, ///< String. Read/Write. Can be used to store up to 4096 bytes of information on clients. Not
///< used by TeamSpeak. Available for visible clients.
CLIENT_IS_MUTED, ///< Integer. Read only. Not available server side. Indicates whether we have muted the client
///< using \ref ts3client_requestMuteClients. Available for visible clients other than ourselves.
CLIENT_IS_RECORDING, ///< Integer. Read only. Indicates whether the client is recording incoming audio. Available
///< for visible clients.
CLIENT_VOLUME_MODIFICATOR, ///< Integer. Read only. Volume adjustment for this client as set by \ref
///< ts3client_setClientVolumeModifier. Available for visible clients.
CLIENT_VERSION_SIGN, ///< String. Read only. TeamSpeak internal signature.
CLIENT_SECURITY_HASH, ///< String. Read/Write. This clients security hash. Not used by TeamSpeak, SDK only. Hash is
///< provided by an outside source. A channel will use the security salt + other client data
///< to calculate a hash, which must be the same as the one provided here. See SDK
///< documentation about Client / Channel Security Hashes for more details.
CLIENT_ENCRYPTION_CIPHERS, ///< String. Read only. SDK only. List of available ciphers this client can use.
CLIENT_IS_STREAMING, ///< bool. Read only, Is currently streaming.
CLIENT_ENDMARKER,
};
enum VirtualServerProperties
{
VIRTUALSERVER_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Unique identifier for a virtual server, does not
///< change on server restart. Available if \ref ts3client_getConnectionStatus
///< is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_NAME, ///< String. Read/Write. The virtual server display name. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_WELCOMEMESSAGE, ///< String. Read/Write. The welcome message displayed to clients on connect.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED. Not
///< updated automatically when changed, updates need to be requested (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_PLATFORM, ///< String. Read only. The operating system the server is running on. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_VERSION, ///< String. Read only. The server software version string. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_MAXCLIENTS, ///< UInt64. Read/Write. The maximum number of clients that can be connected
///< simultaneously. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_PASSWORD, ///< String. Read/Write. The server password. Read access is limited to the server. Clients
///< will only get the password they supplied when connecting. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_CLIENTS_ONLINE, ///< UInt64. Read only. The current number of clients connected to the server,
///< including query connections. Only available on request (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_CHANNELS_ONLINE, ///< UInt64. Read only. The current number of channels on the server. Only
///< available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CREATED, ///< Integer. Read only. The time this virtual server was created as unix timestamp.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_UPTIME, ///< UInt64. Read only. Number of seconds that have passed since the virtual server was
///< started. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CODEC_ENCRYPTION_MODE, ///< Integer. Read/Write. Boolean (1/0) that specifies if voice data is encrypted
///< during transfer. One of the values from the \ref CodecEncryptionMode enum.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_ENCRYPTION_CIPHERS, ///< String. Read/Write. Comma separated list of available ciphers to encrypt the
///< connection. The server will use the first cipher in the list that is also
///< listed in the \ref CLIENT_ENCRYPTION_CIPHERS of the connecting client.
///< Clients will fail to connect if no match is found. Always available.
VIRTUALSERVER_ADDRESS, ///< Any resolvable address for the specific virtual server
VIRTUALSERVER_VERSION_SIGN, ///< String. Read only. Signature of Platform and Version.
VIRTUALSERVER_ENDMARKER,
VIRTUALSERVER_FILEBASE = 24, ///< String. Read only. The path to the base directory used to store files
///< transferred using file transfer. Available only on the server. Is set by \ref
///< ts3server_enableFileManager
VIRTUALSERVER_MAX_DOWNLOAD_TOTAL_BANDWIDTH = 29, ///< UInt64. Read/Write. Maximum traffic in bytes the server can
///< use for file transfer downloads. Only available on request
///< (\ref ts3client_requestServerVariables).
VIRTUALSERVER_MAX_UPLOAD_TOTAL_BANDWIDTH = 30, ///< UInt64. Read/Write. Maximum traffic in bytes the server can use
///< for file transfer uploads. Only available on request (=>
///< requestServerVariables)
VIRTUALSERVER_LOG_FILETRANSFER = 64 ///< Integer. Read/Write. Boolean (1/0) indicating whether to include file
///< transfer activities (uploading or downloading of files) in the server log.
///< Always available.
};
/**
* Various connection properties.
* These are all read only, and except for your own client must be requested using \ref ts3client_requestConnectionInfo
*/
enum ConnectionProperties
{
CONNECTION_PING = 0, ///< UInt64. Round trip latency for the connection based on the last 5 seconds. On the server
///< this is the average across all connected clients for the last 5 seconds.
CONNECTION_PING_DEVIATION, ///< Double. Standard deviation for the round trip latency in \ref CONNECTION_PING
CONNECTION_CONNECTED_TIME, ///< UInt64. Seconds the client has been connected.
CONNECTION_IDLE_TIME, ///< UInt64. Time in seconds since the last activity (voice transmission, switching channels,
///< changing mic / speaker mute status) of the client.
CONNECTION_CLIENT_IP, ///< String. IP of this client (as seen from the server side)
CONNECTION_CLIENT_PORT, ///< UInt64. Client side port of this client (as seen from the server side)
CONNECTION_SERVER_IP, ///< String. The IP or hostname used to connect to the server. Only available on yourself.
CONNECTION_SERVER_PORT, ///< UInt64. The server port connected to. Only available on yourself.
CONNECTION_PACKETS_SENT_SPEECH, ///< UInt64. The number of voice packets transmitted by the client.
CONNECTION_PACKETS_SENT_KEEPALIVE, ///< UInt64. The number of keep alive packets transmitted by the client.
CONNECTION_PACKETS_SENT_CONTROL, ///< UInt64. The number of command & control packets transmitted by the client.
CONNECTION_PACKETS_SENT_TOTAL, ///< UInt64. Total number of packets transmitted by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_SENT_SPEECH, \ref CONNECTION_PACKETS_SENT_KEEPALIVE and
///< \ref CONNECTION_PACKETS_SENT_CONTROL
CONNECTION_BYTES_SENT_SPEECH, ///< UInt64. Outgoing traffic used for voice data by the client.
CONNECTION_BYTES_SENT_KEEPALIVE, ///< UInt64. Outgoing traffic used for keeping the connection alive by the client.
CONNECTION_BYTES_SENT_CONTROL, ///< UInt64. Outgoing traffic used for command & control data by the client.
CONNECTION_BYTES_SENT_TOTAL, ///< UInt64. Total outgoing traffic to the server by this client. Equal to the sum of
///< \ref CONNECTION_BYTES_SENT_SPEECH, \ref CONNECTION_BYTES_SENT_KEEPALIVE and \ref
///< CONNECTION_BYTES_SENT_CONTROL
CONNECTION_PACKETS_RECEIVED_SPEECH, ///< UInt64. Number of voice packets received by the client.
CONNECTION_PACKETS_RECEIVED_KEEPALIVE, ///< UInt64. Number of keep alive packets received by the client.
CONNECTION_PACKETS_RECEIVED_CONTROL, ///< UInt64. Number of command & control packets received by the client.
CONNECTION_PACKETS_RECEIVED_TOTAL, ///< UInt64. Total number of packets received by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_RECEIVED_SPEECH, \ref
///< CONNECTION_PACKETS_RECEIVED_KEEPALIVE and \ref
///< CONNECTION_PACKETS_RECEIVED_CONTROL
CONNECTION_BYTES_RECEIVED_SPEECH, ///< UInt64. Incoming traffic used by the client for voice data.
CONNECTION_BYTES_RECEIVED_KEEPALIVE, ///< UInt64. Incoming traffic used by the client to keep the connection alive.
CONNECTION_BYTES_RECEIVED_CONTROL, ///< UInt64. Incoming traffic used by the client for command & control data.
CONNECTION_BYTES_RECEIVED_TOTAL, ///< UInt64. Total incoming traffic used by the client. Equal to the sum of \ref
///< CONNECTION_BYTES_RECEIVED_SPEECH, \ref CONNECTION_BYTES_RECEIVED_KEEPALIVE and
///< \ref CONNECTION_BYTES_RECEIVED_CONTROL
CONNECTION_PACKETLOSS_SPEECH, ///< Double. Percentage points of voice packets for the client that did not arrive at
///< the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_KEEPALIVE, ///< Double. Percentage points of keep alive packets for the client that did not
///< arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_CONTROL, ///< Double. Percentage points of command & control packets for the client that did
///< not arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_TOTAL, ///< Double. Cumulative chance in percentage points with which a packet round trip
///< failed because a packet was lost
CONNECTION_SERVER2CLIENT_PACKETLOSS_SPEECH, ///< Double. Probability with which a voice packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< server was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the server was not
///< received by the client.
CONNECTION_CLIENT2SERVER_PACKETLOSS_SPEECH, ///< Double. Probability with which a speech packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< client was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the client was not
///< received by the server.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes sent for speech data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes sent for keepalive data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes sent for control data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes sent in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second sent for speech data, averaged over the
///< last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second sent for keepalive data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second sent for control data, averaged over
///< the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second sent, averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes received for speech data in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes received for keepalive data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes received for control data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes received in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second received for speech data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second received for keepalive data,
///< averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second received for control data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second received, averaged over the last minute.
CONNECTION_DUMMY_0,
CONNECTION_DUMMY_1,
CONNECTION_DUMMY_2,
CONNECTION_DUMMY_3,
CONNECTION_DUMMY_4,
CONNECTION_DUMMY_5,
CONNECTION_DUMMY_6,
CONNECTION_DUMMY_7,
CONNECTION_DUMMY_8,
CONNECTION_DUMMY_9,
CONNECTION_FILETRANSFER_BANDWIDTH_SENT, ///< UInt64. Current file transfer upstream activity in bytes per second.
///< Only available on request (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BANDWIDTH_RECEIVED, ///< UInt64. Current file transfer downstream activity in bytes per
///< second. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_RECEIVED_TOTAL, ///< UInt64. Total downstream traffic, in bytes, used for file
///< transfer since the server was started. Only available on request
///< (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_SENT_TOTAL, ///< UInt64. Total upstream traffic, in bytes, used for file transfer
///< since the server was started. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_ENDMARKER
};
/**
* Describes a client position in 3 dimensional space, used for 3D Sound.
*/
typedef struct
{
float x; ///< X co-ordinate in 3D space.
float y; ///< Y co-ordinate in 3D space.
float z; ///< Z co-ordinate in 3D space.
} TS3_VECTOR;
enum GroupWhisperType
{
GROUPWHISPERTYPE_SERVERGROUP = 0, ///< Whisper list consists of server groups
GROUPWHISPERTYPE_CHANNELGROUP = 1, ///< Whisper list consists of channel groups
GROUPWHISPERTYPE_CHANNELCOMMANDER = 2, ///< whisper to channel commanders
GROUPWHISPERTYPE_ALLCLIENTS = 3, ///< whisper to all clients
GROUPWHISPERTYPE_ENDMARKER,
};
enum GroupWhisperTargetMode
{
GROUPWHISPERTARGETMODE_ALL = 0,
GROUPWHISPERTARGETMODE_CURRENTCHANNEL = 1, ///< Whisper the current channel of the client
GROUPWHISPERTARGETMODE_PARENTCHANNEL = 2, ///< Whisper the parent channel of whatever channel the client is currently in
GROUPWHISPERTARGETMODE_ALLPARENTCHANNELS = 3, ///< Whipser to the parent channel and all their parent channels as well
GROUPWHISPERTARGETMODE_CHANNELFAMILY = 4, ///< Whisper to the current channel and all its sub channels
GROUPWHISPERTARGETMODE_ANCESTORCHANNELFAMILY = 5, ///< Whisper to the current channel, all its parent and sub channels.
GROUPWHISPERTARGETMODE_SUBCHANNELS = 6, ///< Whisper to all sub channels of the current channel of the client
GROUPWHISPERTARGETMODE_ENDMARKER,
};
enum MonoSoundDestination
{
MONO_SOUND_DESTINATION_ALL = 0, ///< Send mono sound to all available speakers
MONO_SOUND_DESTINATION_FRONT_CENTER = 1, ///< Send mono sound to front center speaker if available
MONO_SOUND_DESTINATION_FRONT_LEFT_AND_RIGHT = 2 ///< Send mono sound to front left/right speakers if available
};
enum SecuritySaltOptions
{
SECURITY_SALT_CHECK_NICKNAME = 1, ///< put nickname into security hash
SECURITY_SALT_CHECK_META_DATA = 2 ///< put meta data into security hash
};
/*this enum is used to disable client commands on the server*/
enum ClientCommand
{
CLIENT_COMMAND_requestConnectionInfo = 0, ///< disable client connection info request (client bandwidth usage, ip,
///< port, ping)
CLIENT_COMMAND_requestClientMove = 1, ///< disable moving clients
CLIENT_COMMAND_requestXXMuteClients = 2, ///< disable muting other clients
CLIENT_COMMAND_requestClientKickFromXXX = 3, ///< disable kicking clients
CLIENT_COMMAND_flushChannelCreation = 4, ///< disable creating channels
CLIENT_COMMAND_flushChannelUpdates = 5, ///< disable editing channels
CLIENT_COMMAND_requestChannelMove = 6, ///< disable moving channels
CLIENT_COMMAND_requestChannelDelete = 7, ///< disable deleting channels
CLIENT_COMMAND_requestChannelDescription = 8, ///< disable channel descriptions
CLIENT_COMMAND_requestChannelXXSubscribeXXX = 9, ///< disable being able to see clients in channels other than the
///< current channel the client is in
CLIENT_COMMAND_requestServerConnectionInfo = 10, ///< disable server connection info request (server bandwidth
///< usage, ip, port, ping)
CLIENT_COMMAND_requestSendXXXTextMsg = 11, ///< disable text messaging
CLIENT_COMMAND_filetransfers = 12, ///< disable file transfer
CLIENT_COMMAND_ENDMARKER
};
/* Access Control List*/
enum ACLType
{
ACL_NONE = 0,
ACL_WHITE_LIST = 1,
ACL_BLACK_LIST = 2
};
/* file transfer actions*/
enum FTAction
{
FT_INIT_SERVER = 0, ///< The virtual server is created. result->channelPath can be changed to create a different
///< directory than the default 'virtualserver_x' where x is the virtual server.
FT_INIT_CHANNEL = 1, ///< A channel is created. result->channelPath can be changed to create a different directory
///< then the default 'channel_x' where x is the channel id.
FT_UPLOAD = 2, ///< A file is being uploaded. All values in the result struct can be modified.
FT_DOWNLOAD = 3, ///< A file is being downloaded. All values in the result struct can be modified.
FT_DELETE = 4, ///< A file is being deleted. All values in the result struct can be modified.
FT_CREATEDIR = 5, ///< A directory is being created in a channel. All values in the result struct can be modified.
FT_RENAME = 6, ///< A file or folder is being renamed. The callback will be called twice! Once for the old and then
///< for the new name. All values in the result struct can be modified.
FT_FILELIST = 7, ///< A directory listing is requested. All values in the result struct can be modified.
FT_FILEINFO = 8 ///< Information of a file is requested. All values in the result struct can be modified.
};
/* file transfer status */
enum FileTransferState
{
FILETRANSFER_INITIALISING = 0, ///< File transfer is establishing connection.
FILETRANSFER_ACTIVE, ///< File transfer is in progress
FILETRANSFER_FINISHED, ///< File transfer has finished
};
/* file transfer types */
enum FileTransferType
{
FileListType_Directory = 0, ///< The file entry is a directory
FileListType_File, ///< The file entry is a regular file
};
/* some structs to handle variables in callbacks */
#define MAX_VARIABLES_EXPORT_COUNT 64
struct VariablesExportItem
{
unsigned char itemIsValid; ///< Whether or not there is any data in this item. Ignore this item if this is 0.
unsigned char proposedIsSet; ///< The value in proposed is set. If 0 ignore proposed
const char* current; ///< current value (stored in memory)
const char* proposed; ///< New value to change to (const, so no updates please)
};
struct VariablesExport
{
struct VariablesExportItem items[MAX_VARIABLES_EXPORT_COUNT];
};
struct ClientMiniExport
{
anyID ID; ///< id of the client
uint64 channel; ///< the channel the client is in
const char* ident; ///< client public identity
const char* nickname; ///< client display name
};
/**
* Structure used to describe a file transfer in the \ref ServerLibFunctions.onTransformFilePath callback.
* This describes the original values, and also contains hints for length limitations of the result parameter
* of the callback.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExport
{
uint64 channel; ///< The channel id of the file. 0 if action is \ref FT_INIT_SERVER
const char* filename; ///< utf8 encoded c string containing the original file name as intended by the client.
int action; ///< The action to be performed. One of the values from the \ref FTAction enum. Defines which values of
///< the result struct can be modified.
int transformedFileNameMaxSize; ///< The maximum length the file name can be rewritten to.
int channelPathMaxSize; ///< The maximum length the path can be rewritten to.
};
/**
* Structure to rewrite the file transfer file name and path in the \ref ServerLibFunctions.onTransformFilePath callback.
* The lengths are limited as described in the original parameter.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExportReturns
{
char* transformedFileName; ///< pointer to target file name. Fill the memory pointed to with an utf8 encoded c string
///< containing the new file name. Limited to original->transformedFileNameMaxSize bytes.
char* channelPath; ///< pointer to memory for new path. Fill the memory pointed to with an utf8 encoded c string
///< containing the new path. Limited to original->channelPathMaxSize bytes.
int logFileAction; ///< boolean (1/0). Whether to log this file transfer to the log. Action is not logged regardless
///< of this value if the servers \ref VIRTUALSERVER_LOG_FILETRANSFER property is 0.
};
struct FileTransferCallbackExport
{
anyID clientID; ///< the client who started the file transfer
anyID transferID; ///< local identifier of the transfer that has completed
anyID remoteTransferID; ///< remote identifier of the transfer that has completed
unsigned int status; ///< status of the transfer. One of the values from the \ref FileTransferState enum
const char* statusMessage; ///< utf8 encoded c string containing a human readable description of the status
uint64 remotefileSize; ///< size in bytes of the complete file to be transferred
uint64 bytes; ///< number of bytes transferred. Same as remotefileSize when the transfer completed entirely.
int isSender; ///< boolean. 1 if the server is sending the file. 0 if the server is receiving the file.
};
/*define for file transfer bandwith limits*/
#define BANDWIDTH_LIMIT_UNLIMITED 0xFFFFFFFFFFFFFFFFll
/*defines for speaker locations used by some sound callbacks*/
#ifndef SPEAKER_FRONT_LEFT
#define SPEAKER_FRONT_LEFT 0x1
#define SPEAKER_FRONT_RIGHT 0x2
#define SPEAKER_FRONT_CENTER 0x4
#define SPEAKER_LOW_FREQUENCY 0x8
#define SPEAKER_BACK_LEFT 0x10
#define SPEAKER_BACK_RIGHT 0x20
#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
#define SPEAKER_BACK_CENTER 0x100
#define SPEAKER_SIDE_LEFT 0x200
#define SPEAKER_SIDE_RIGHT 0x400
#define SPEAKER_TOP_CENTER 0x800
#define SPEAKER_TOP_FRONT_LEFT 0x1000
#define SPEAKER_TOP_FRONT_CENTER 0x2000
#define SPEAKER_TOP_FRONT_RIGHT 0x4000
#define SPEAKER_TOP_BACK_LEFT 0x8000
#define SPEAKER_TOP_BACK_CENTER 0x10000
#define SPEAKER_TOP_BACK_RIGHT 0x20000
#endif
#define SPEAKER_HEADPHONES_LEFT 0x10000000
#define SPEAKER_HEADPHONES_RIGHT 0x20000000
#define SPEAKER_MONO 0x40000000
#endif /*PUBLIC_DEFINITIONS_H*/
@@ -1,217 +0,0 @@
#ifndef PUBLIC_ERRORS_H
#define PUBLIC_ERRORS_H
//The idea here is: the values are 2 bytes wide, the first byte identifies the group, the second the count within that group
enum Ts3ErrorType {
//general
ERROR_ok = 0x0000, ///< Indicates success.
ERROR_undefined = 0x0001,
ERROR_not_implemented = 0x0002, ///< The attempted operation is not available in this context
ERROR_ok_no_update = 0x0003, ///< Indicates success, but no change occurred. Returned for example upon flushing (e.g. using \ref ts3client_flushChannelUpdates) when all indicated changes already matched the current state.
ERROR_dont_notify = 0x0004,
ERROR_lib_time_limit_reached = 0x0005,
ERROR_out_of_memory = 0x0006, ///< Not enough system memory to perform operation
ERROR_canceled = 0x0007,
ERROR_ok_no_error_event = 0x0008, ///< Indicates success, but no error event was generated. This is used because of the return code management and reduce packets.
//dunno
ERROR_command_not_found = 0x0100,
ERROR_unable_to_bind_network_port = 0x0101, ///< Unspecified failure to create a listening port
ERROR_no_network_port_available = 0x0102, ///< Failure to initialize a listening port for FileTransfer
ERROR_port_already_in_use = 0x0103, ///< Specified port is already in use by a different application
ERROR_command_line_parse_failed = 0x0104, ///< Command line arguments are invalid
ERROR_command_line_exit_version = 0x0105, ///< Command line specified version. The process should exit with code 0 after printing the version.
ERROR_command_line_exit_help = 0x0106, ///< Command line specified help. The process should exit with code 0 after priting the help.
//client
ERROR_client_invalid_id = 0x0200, ///< Client no longer connected
ERROR_client_nickname_inuse = 0x0201, ///< Client name is already in use. Client names must be unique
ERROR_client_protocol_limit_reached = 0x0203, ///< Too many clients on the server
ERROR_client_invalid_type = 0x0204, ///< Function called for normal clients that is only available for query clients or vice versa
ERROR_client_already_subscribed = 0x0205, ///< Attempting to subscribe to a channel already subscribed to
ERROR_client_not_logged_in = 0x0206,
ERROR_client_could_not_validate_identity = 0x0207, ///< Identity not valid or insufficient security level
ERROR_client_invalid_password = 0x0208,
ERROR_client_version_outdated = 0x020a, ///< Server requires newer client version as determined by the min_client_version properties
ERROR_client_is_flooding = 0x020c, ///< Triggered flood protection. Further information is supplied in the extra message if applicable.
ERROR_client_hacked = 0x020d,
ERROR_client_cannot_verify_now = 0x020e,
ERROR_client_login_not_permitted = 0x020f,
ERROR_client_not_subscribed = 0x0210, ///< Action is only available on subscribed channels
//channel
ERROR_channel_invalid_id = 0x0300, ///< Channel does not exist on the server (any longer)
ERROR_channel_protocol_limit_reached = 0x0301, ///< Too many channels on the server
ERROR_channel_already_in = 0x0302, ///< Attempting to move a client or channel to its current channel
ERROR_channel_name_inuse = 0x0303, ///< Channel name is already taken by another channel. Channel names must be unique
ERROR_channel_not_empty = 0x0304, ///< Attempting to delete a channel with clients or sub channels in it
ERROR_channel_can_not_delete_default = 0x0305, ///< Default channel cannot be deleted. Set a new default channel first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_default_require_permanent = 0x0306, ///< Attempt to set a non permanent channel as default channel. Set channel to permanent first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_invalid_flags = 0x0307, ///< Invalid combination of \ref ChannelProperties, trying to remove \ref CHANNEL_FLAG_DEFAULT or set a password on the default channel
ERROR_channel_parent_not_permanent = 0x0308, ///< Attempt to move a permanent channel into a non-permanent one, or set a channel to be permanent that is a sub channel of a non-permanent one
ERROR_channel_maxclients_reached = 0x0309, ///< Channel is full as determined by its \ref CHANNEL_MAXCLIENTS setting
ERROR_channel_maxfamily_reached = 0x030a, ///< Channel tree is full as determined by its \ref CHANNEL_MAXFAMILYCLIENTS setting
ERROR_channel_invalid_order = 0x030b, ///< Invalid value for the \ref CHANNEL_ORDER property. The specified channel must exist on the server and be on the same level.
ERROR_channel_no_filetransfer_supported = 0x030c, ///< Invalid \ref CHANNEL_FILEPATH set for the channel
ERROR_channel_invalid_password = 0x030d, ///< Channel has a password not matching the password supplied in the call
// used in public_rare_errors = 0x030e,
ERROR_channel_invalid_security_hash = 0x030f,
//server
ERROR_server_invalid_id = 0x0400, ///< Chosen virtual server does not exist or is offline
ERROR_server_running = 0x0401, ///< attempting to delete a server that is running. Stop the server before deleting it.
ERROR_server_is_shutting_down = 0x0402, ///< Client disconnected because the server is going offline
ERROR_server_maxclients_reached = 0x0403, ///< Given in the onConnectStatusChange event when the server has reached its maximum number of clients as defined by the \ref VIRTUALSERVER_MAXCLIENTS property
ERROR_server_invalid_password = 0x0404, ///< Specified server password is wrong. Provide the correct password in the \ref ts3client_startConnection / \ref ts3client_startConnectionWithChannelID call.
ERROR_server_is_virtual = 0x0407, ///< Server is in virtual status. The attempted action is not possible in this state. Start the virtual server first.
ERROR_server_is_not_running = 0x0409, ///< Attempting to stop a server that is not online.
ERROR_server_is_booting = 0x040a, // Not used
ERROR_server_status_invalid = 0x040b,
ERROR_server_version_outdated = 0x040d, ///< Attempt to connect to an outdated server version. The server needs to be updated.
ERROR_server_duplicate_running = 0x040e, ///< This server is already running within the instance. Each virtual server may only exist once.
//parameter
ERROR_parameter_quote = 0x0600, // Not used
ERROR_parameter_invalid_count = 0x0601, ///< Attempt to flush changes without previously calling set*VariableAs* since the last flush
ERROR_parameter_invalid = 0x0602, ///< At least one of the supplied parameters did not meet the criteria for that parameter
ERROR_parameter_not_found = 0x0603, ///< Failure to supply all the necessary parameters
ERROR_parameter_convert = 0x0604, ///< Invalid type supplied for a parameter, such as passing a string (ie. "five") that expects a number.
ERROR_parameter_invalid_size = 0x0605, ///< Value out of allowed range. Such as strings are too long/short or numeric values outside allowed range
ERROR_parameter_missing = 0x0606, ///< Neglecting to specify a required parameter
ERROR_parameter_checksum = 0x0607, ///< Attempting to deploy a modified snapshot
//unsorted, need further investigation
ERROR_vs_critical = 0x0700, ///< Failure to create default channel
ERROR_connection_lost = 0x0701, ///< Generic error with the connection.
ERROR_not_connected = 0x0702, ///< Attempting to call functions with a serverConnectionHandler that is not connected. You can use \ref ts3client_getConnectionStatus to check whether the connection handler is connected to a server
ERROR_no_cached_connection_info = 0x0703, ///< Attempting to query connection information (bandwidth usage, ping, etc) without requesting them first using \ref ts3client_requestConnectionInfo
ERROR_currently_not_possible = 0x0704, ///< Requested information is not currently available. You may have to call \ref ts3client_requestClientVariables or \ref ts3client_requestServerVariables
ERROR_failed_connection_initialisation = 0x0705, ///< No TeamSpeak server running on the specified IP address and port
ERROR_could_not_resolve_hostname = 0x0706, ///< Failure to resolve the specified hostname to an IP address
ERROR_invalid_server_connection_handler_id = 0x0707, ///< Attempting to perform actions on a non-existent server connection handler
ERROR_could_not_initialise_input_manager = 0x0708, // Not used
ERROR_clientlibrary_not_initialised = 0x0709, ///< Calling client library functions without successfully calling \ref ts3client_initClientLib before
ERROR_serverlibrary_not_initialised = 0x070a, ///< Calling server library functions without successfully calling \ref ts3server_initServerLib before
ERROR_whisper_too_many_targets = 0x070b, ///< Using a whisper list that contain more clients than the servers \ref VIRTUALSERVER_MIN_CLIENTS_IN_CHANNEL_BEFORE_FORCED_SILENCE property
ERROR_whisper_no_targets = 0x070c, ///< The active whisper list is empty or no clients matched the whisper list (e.g. all channels in the list are empty)
ERROR_connection_ip_protocol_missing = 0x070d, ///< Invalid or unsupported protocol (e.g. attempting an IPv6 connection on an IPv4 only machine)
ERROR_handshake_failed = 0x070e,
ERROR_illegal_server_license = 0x070f,
//file transfer
ERROR_file_invalid_name = 0x0800, ///< Invalid UTF8 string or not a valid file
ERROR_file_invalid_permissions = 0x0801, ///< Permissions prevent opening the file
ERROR_file_already_exists = 0x0802, ///< Target path already exists as a directory
ERROR_file_not_found = 0x0803, ///< Attempt to access or move non existing file
ERROR_file_io_error = 0x0804, ///< Generic file input / output error
ERROR_file_invalid_transfer_id = 0x0805, ///< Attempt to get information about a file transfer after it has already been cleaned up. File transfer information is not available indefinitely after the transfer completed
ERROR_file_invalid_path = 0x0806, ///< specified path contains invalid characters or does not start with "/"
ERROR_file_no_files_available = 0x0807, // Not used
ERROR_file_overwrite_excludes_resume = 0x0808, ///< File overwrite and resume are mutually exclusive. Only one or neither can be 1.
ERROR_file_invalid_size = 0x0809, ///< Attempt to write more bytes than claimed file size.
ERROR_file_already_in_use = 0x080a, ///< File is currently not available, try again later.
ERROR_file_could_not_open_connection = 0x080b, ///< Generic failure in file transfer connection / other party did not conform to file transfer protocol
ERROR_file_no_space_left_on_device = 0x080c, ///< Operating system reports hard disk is full. May be caused by quota limitations.
ERROR_file_exceeds_file_system_maximum_size = 0x080d, ///< File is too large for the file system of the target device.
ERROR_file_transfer_connection_timeout = 0x080e, // Not used
ERROR_file_connection_lost = 0x080f, ///< File input / output timeout or connection failure
ERROR_file_exceeds_supplied_size = 0x0810, // Not used
ERROR_file_transfer_complete = 0x0811, ///< Indicates successful completion
ERROR_file_transfer_canceled = 0x0812, ///< Transfer was cancelled through @ref ts3client_haltTransfer
ERROR_file_transfer_interrupted = 0x0813, ///< Transfer failed because the server is shutting down, or network connection issues
ERROR_file_transfer_server_quota_exceeded = 0x0814, ///< Transfer terminated due to server bandwidth quota being exceeded. No client can transfer files.
ERROR_file_transfer_client_quota_exceeded = 0x0815, ///< Attempt to transfer more data than allowed by this clients' bandwidth quota. Other clients may continue to transfer files.
ERROR_file_transfer_reset = 0x0816, // Not used
ERROR_file_transfer_limit_reached = 0x0817, ///< Too many file transfers are in progress. Try again later
ERROR_file_invalid_storage_class = 0x0818, // TODO: Invalid storage class for HTTP FileTransfer (what is a storage class?)
ERROR_file_invalid_dimension = 0x0819, ///< Avatar image exceeds maximum width or height accepted by the server.
ERROR_file_transfer_channel_quota_exceeded = 0x081a, ///< Transfer failed because the channel quota was exceeded. Uploading to this channel is not possible, but other channels may be fine.
//sound
ERROR_sound_preprocessor_disabled = 0x0900, ///< Cannot set or query pre processor variables with preprocessing disabled
ERROR_sound_internal_preprocessor = 0x0901,
ERROR_sound_internal_encoder = 0x0902,
ERROR_sound_internal_playback = 0x0903,
ERROR_sound_no_capture_device_available = 0x0904, ///< No audio capture devices are available
ERROR_sound_no_playback_device_available = 0x0905, ///< No audio playback devices are available
ERROR_sound_could_not_open_capture_device = 0x0906, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_could_not_open_playback_device = 0x0907, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_handler_has_device = 0x0908, ///< Attempt to open a sound device on a connection handler which already has an open device. Close the already open device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_invalid_capture_device = 0x0909, ///< Attempt to use a device for capture that does not support capturing audio
ERROR_sound_invalid_playback_device = 0x090a, ///< Attempt to use a device for playback that does not support playback of audio
ERROR_sound_invalid_wave = 0x090b, ///< Attempt to use a non WAV file in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle
ERROR_sound_unsupported_wave = 0x090c, ///< Unsupported wave file used in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle.
ERROR_sound_open_wave = 0x090d, ///< Failure to open the specified sound file
ERROR_sound_internal_capture = 0x090e,
ERROR_sound_device_in_use = 0x090f, ///< Attempt to unregister a custom device that is being used. Close the device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_device_already_registerred = 0x0910, ///< Attempt to register a custom device with a device id that has already been used in a previous call. Device ids must be unique.
ERROR_sound_unknown_device = 0x0911, ///< Attempt to open, close, unregister or use a device which is not known. Custom devices must be registered before being used (see \ref ts3client_registerCustomDevice)
ERROR_sound_unsupported_frequency = 0x0912,
ERROR_sound_invalid_channel_count = 0x0913, ///< Invalid device audio channel count, must be > 0
ERROR_sound_read_wave = 0x0914, ///< Failure to read sound samples from an opened wave file. Is this a valid wave file?
ERROR_sound_need_more_data = 0x0915, // for internal purposes only
ERROR_sound_device_busy = 0x0916, // for internal purposes only
ERROR_sound_no_data = 0x0917, ///< Indicates there is currently no data for playback, e.g. nobody is speaking right now.
ERROR_sound_channel_mask_mismatch = 0x0918, ///< Opening a device with an unsupported channel count
//permissions
ERROR_permissions_client_insufficient = 0x0a08, ///< Not enough permissions to perform the requested activity
ERROR_permissions = 0x0a0c, ///< Permissions to use sound device not granted by operating system, e.g. Windows denied microphone access.
//accounting
ERROR_accounting_virtualserver_limit_reached = 0x0b00, ///< Attempt to use more virtual servers than allowed by the license
ERROR_accounting_slot_limit_reached = 0x0b01, ///< Attempt to set more slots than allowed by the license
ERROR_accounting_license_file_not_found = 0x0b02, // Not used
ERROR_accounting_license_date_not_ok = 0x0b03, ///< License expired or not valid yet
ERROR_accounting_unable_to_connect_to_server = 0x0b04, ///< Failure to communicate with accounting backend
ERROR_accounting_unknown_error = 0x0b05, ///< Failure to write update license file
ERROR_accounting_server_error = 0x0b06, // Not used
ERROR_accounting_instance_limit_reached = 0x0b07, ///< More than one process of the server is running
ERROR_accounting_instance_check_error = 0x0b08, ///< Shared memory access failure.
ERROR_accounting_license_file_invalid = 0x0b09, ///< License is not a TeamSpeak license
ERROR_accounting_running_elsewhere = 0x0b0a, ///< A copy of this server is already running in another instance. Each server may only exist once.
ERROR_accounting_instance_duplicated = 0x0b0b, ///< A copy of this server is running already in this process. Each server may only exist once.
ERROR_accounting_already_started = 0x0b0c, ///< Attempt to start a server that is already running
ERROR_accounting_not_started = 0x0b0d,
ERROR_accounting_to_many_starts = 0x0b0e, ///< Starting instance / virtual servers too often in too short a time period
//provisioning server
/// @cond HAS_PROVISIONING
ERROR_provisioning_invalid_password = 0x1100,
ERROR_provisioning_invalid_request = 0x1101,
ERROR_provisioning_no_slots_available = 0x1102,
ERROR_provisioning_pool_missing = 0x1103,
ERROR_provisioning_pool_unknown = 0x1104,
ERROR_provisioning_unknown_ip_location = 0x1105,
ERROR_provisioning_internal_tries_exceeded = 0x1106,
ERROR_provisioning_too_many_slots_requested = 0x1107,
ERROR_provisioning_too_many_reserved = 0x1108,
ERROR_provisioning_could_not_connect = 0x1109,
ERROR_provisioning_auth_server_not_connected = 0x1110,
ERROR_provisioning_auth_data_too_large = 0x1111,
ERROR_provisioning_already_initialized = 0x1112,
ERROR_provisioning_not_initialized = 0x1113,
ERROR_provisioning_connecting = 0x1114,
ERROR_provisioning_already_connected = 0x1115,
ERROR_provisioning_not_connected = 0x1116,
ERROR_provisioning_io_error = 0x1117,
ERROR_provisioning_invalid_timeout = 0x1118,
ERROR_provisioning_ts3server_not_found = 0x1119,
ERROR_provisioning_no_permission = 0x111A,
/// @endcond
// 0x12 - 0x15 are reserved in rare
// screen share
ERROR_already_registered = 0x1600,
ERROR_stream_session_limit_reached = 0x1601,
ERROR_stream_session_not_found = 0x1602,
ERROR_stream_unknown = 0x1603,
ERROR_stream_not_participating = 0x1604,
ERROR_not_streamer = 0x1605,
ERROR_already_joined = 0x1606,
ERROR_join_request_not_found = 0x1607,
ERROR_sfu_failed_to_start = 0x1608,
};
#endif
@@ -1,236 +0,0 @@
#ifndef TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#define TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Version definitions.
#define TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1 1
// Protocol used for communication between the session subscriber and the session (a single stream).
// Commands are sent bidirectionally or unidirectionally between the parties.
// e.g. SESSION => SUBSCRIBER: ON_FRAME, ON_PAUSED_CHANGED
// e.g. SUBSCRIBER => SESSION: ON_FRAME_ACK, ON_RESIZE
// Command type enum with a lowercase type name.
typedef enum
{
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME = 0,
TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE,
TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED,
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK,
TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP,
TS_SESSION_SUBSCRIBER_CMD_REMOVE_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED,
} ts_session_subscriber_command_type_t;
// Pixel format enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_I420 = 0,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_NV12,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ABGR,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ARGB,
} ts_session_subscriber_pixel_format_t;
// Buffer location enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_CPU = 0,
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_GPU
} ts_session_subscriber_buffer_location_t;
// Buffer type enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_SINGLE = 0,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_MAIN,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_SUB
} ts_session_subscriber_buffer_type_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(push, 4)
#endif
// Main buffer header for shared CPU Memory Front/Back Buffers.
// The Main Buffer contains metadata about the current front/back buffer and the versioning for both the main and sub buffer.
// The information from the main buffer can be used to always read the front buffer.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t front_buffer_index; // index of the front buffer. (0: main buffer, 1: sub buffer)
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_main_buffer_header_t;
// Sub buffer header.
typedef struct
{
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
} ts_session_subscriber_sub_buffer_header_t;
// Single frame buffer header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_single_frame_buffer_header_t;
// Command header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // Total message length (header + payload).
ts_session_subscriber_command_type_t type;
uint64_t target_session_id; // always set to the target session id this command is for or is originating from.
uint64_t target_subscriber_id; // 0 if broadcast.
} ts_session_subscriber_command_header_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME.
// The frame data is not included in the message, but is attached seperately or was sent beforehand. The buffer is identified by it's id.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_id; // buffer id, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_frame_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t frame_id;
} ts_session_subscriber_on_frame_ack_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE.
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t width;
uint32_t height;
} ts_session_subscriber_on_resize_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t paused; // 0 or 1.
} ts_session_subscriber_on_paused_changed_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE.
// Contains a single frame buffer. The header is of format |ts_session_subscriber_single_frame_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
ts_session_subscriber_buffer_type_t buffer_type;
} ts_session_subscriber_on_buffer_single_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK.
// Contains a main buffer and a sub buffer. The main buffer header
// contains metadata about the current front/back buffer and
// is of type |ts_session_subscriber_main_buffer_header_t|.
// The sub buffer's header is of type |ts_session_subscriber_sub_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t main_buffer_ptr; // main buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t main_buffer_length;
uint64_t sub_buffer_ptr; // sub buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t sub_buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
} ts_session_subscriber_on_buffer_front_back_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER.
// SUBSCRIBER => SESSION.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_resp_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_release_buffer_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr;
int bits_per_sample;
int sample_rate;
uint32_t number_of_channels;
uint32_t number_of_frames;
int64_t absolute_capture_timestamp_ms;
float volume;
} ts_session_subscriber_on_audio_frames_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t audio_enabled;
} ts_session_subscriber_on_audio_enabled_changed_payload_t;
// Overall Command structure.
typedef struct
{
ts_session_subscriber_command_header_t header;
union
{
ts_session_subscriber_on_frame_payload_t frame;
ts_session_subscriber_on_resize_payload_t resize;
ts_session_subscriber_on_paused_changed_payload_t paused;
ts_session_subscriber_on_frame_ack_payload_t frame_ack;
ts_session_subscriber_on_buffer_single_payload_t buffer_single;
ts_session_subscriber_on_buffer_front_back_payload_t buffer_front_back;
ts_session_subscriber_on_release_buffer_payload_t release_buffer;
ts_session_subscriber_add_subscriber_payload_t add_subscriber;
ts_session_subscriber_add_subscriber_resp_payload_t add_subscriber_resp;
ts_session_subscriber_on_audio_frames_payload_t audio_frames;
ts_session_subscriber_on_audio_enabled_changed_payload_t audio_enabled_changed;
} payload;
} ts_session_subscriber_command_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif // TS_SESSION_SUBSCRIBER_PROTOCOL_H_
@@ -1,29 +0,0 @@
####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
####### Any changes to this file will be overwritten by the next CMake run ####
####### The input file was team_clientConfig.cmake.in ########
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
macro(set_and_check _var _file)
set(${_var} "${_file}")
if(NOT EXISTS "${_file}")
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
endif()
endmacro()
macro(check_required_components _NAME)
foreach(comp ${${_NAME}_FIND_COMPONENTS})
if(NOT ${_NAME}_${comp}_FOUND)
if(${_NAME}_FIND_REQUIRED_${comp})
set(${_NAME}_FOUND FALSE)
endif()
endif()
endforeach()
endmacro()
####################################################################################
include("${CMAKE_CURRENT_LIST_DIR}/team_clientTargets.cmake")
check_required_components(team_client)
@@ -1,19 +0,0 @@
#----------------------------------------------------------------
# Generated CMake target import file for configuration "Release".
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Import target "teamspeak::client" for configuration "Release"
set_property(TARGET teamspeak::client APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(teamspeak::client PROPERTIES
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.dylib"
IMPORTED_SONAME_RELEASE "@rpath/libteamspeak_sdk_client.dylib"
)
list(APPEND _cmake_import_check_targets teamspeak::client )
list(APPEND _cmake_import_check_files_for_teamspeak::client "${_IMPORT_PREFIX}/lib/libteamspeak_sdk_client.dylib" )
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
@@ -1,121 +0,0 @@
# Generated by CMake
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
if(CMAKE_VERSION VERSION_LESS "2.8.3")
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
cmake_policy(PUSH)
cmake_policy(VERSION 2.8.3...4.0)
#----------------------------------------------------------------
# Generated CMake target import file.
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
set(_cmake_targets_defined "")
set(_cmake_targets_not_defined "")
set(_cmake_expected_targets "")
foreach(_cmake_expected_target IN ITEMS teamspeak::client)
list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
if(TARGET "${_cmake_expected_target}")
list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
else()
list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
endif()
endforeach()
unset(_cmake_expected_target)
if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
unset(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
return()
endif()
if(NOT _cmake_targets_defined STREQUAL "")
string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
endif()
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
# Compute the installation prefix relative to this file.
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
set(_IMPORT_PREFIX "")
endif()
# Create imported target teamspeak::client
add_library(teamspeak::client SHARED IMPORTED)
set_target_properties(teamspeak::client PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
)
if(NOT CMAKE_VERSION VERSION_LESS "3.23.0")
target_sources(teamspeak::client
INTERFACE
FILE_SET "public_headers"
TYPE "HEADERS"
BASE_DIRS "${_IMPORT_PREFIX}/include"
FILES "${_IMPORT_PREFIX}/include/teamspeak/clientlib.h" "${_IMPORT_PREFIX}/include/teamspeak/clientlib_sdk.h" "${_IMPORT_PREFIX}/include/teamspeak/video/session_subscriber_protocol.h"
)
else()
set_property(TARGET teamspeak::client
APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
"${_IMPORT_PREFIX}/include"
)
endif()
# Load information for each installed configuration.
file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/team_clientTargets-*.cmake")
foreach(_cmake_config_file IN LISTS _cmake_config_files)
include("${_cmake_config_file}")
endforeach()
unset(_cmake_config_file)
unset(_cmake_config_files)
# Cleanup temporary variables.
set(_IMPORT_PREFIX)
# Loop over all imported files and verify that they actually exist
foreach(_cmake_target IN LISTS _cmake_import_check_targets)
if(CMAKE_VERSION VERSION_LESS "3.28"
OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
if(NOT EXISTS "${_cmake_file}")
message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
\"${_cmake_file}\"
but this file does not exist. Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
\"${CMAKE_CURRENT_LIST_FILE}\"
but not all the files it references.
")
endif()
endforeach()
endif()
unset(_cmake_file)
unset("_cmake_import_check_files_for_${_cmake_target}")
endforeach()
unset(_cmake_target)
unset(_cmake_import_check_targets)
# This file does not depend on other imported targets which have
# been exported from the same project but in a separate export set.
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
@@ -1,23 +0,0 @@
#ifndef TEAMLOG_LOGTYPES_H
#define TEAMLOG_LOGTYPES_H
enum LogTypes {
LogType_NONE = 0x0000, ///< Logging is disabled
LogType_FILE = 0x0001, ///< Log to regular log file
LogType_CONSOLE = 0x0002, ///< Log to standard output / error
LogType_USERLOGGING = 0x0004, ///< User defined logging. Will call the \ref ServerLibFunctions.onUserLoggingMessageEvent callback for every message to be logged
LogType_NO_NETLOGGING = 0x0008, ///< Not used
LogType_DATABASE = 0x0010, ///< Log to database (deprecated, server only, no effect in SDK)
LogType_SYSLOG = 0x0020, ///< Log to syslog (only available on Linux)
};
enum LogLevel {
LogLevel_CRITICAL = 0, ///< these messages stop the program
LogLevel_ERROR, ///< everything that is really bad, but not so bad we need to shut down
LogLevel_WARNING, ///< everything that *might* be bad
LogLevel_DEBUG, ///< output that might help find a problem
LogLevel_INFO, ///< informational output, like "starting database version x.y.z"
LogLevel_DEVEL ///< developer only output (will not be displayed in release mode)
};
#endif //TEAMLOG_LOGTYPES_H
File diff suppressed because it is too large Load Diff
@@ -1,58 +0,0 @@
#ifndef CLIENTLIB_SDK_H
#define CLIENTLIB_SDK_H
// system
#include <stdlib.h>
// own
#include "teamspeak/public_definitions.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Sets the client to which to transmit voice. Stops standard channel voice transmission.
*
* The client will still receive voice from their current channel, however their voice will not be transmitted to their
* current channel anymore. If this call is successful (check onServerErrorEvent) then voice of the specified client
* will be transmitted to all specified channels and all the specified clients. Pass 0 to both target parameter arrays
* to restore default behavior of transmitting voice to current channel. You will receive an onServerErrorEvent with the
* passed returnCode indicating whether or not the operation was successful.
*
* @param server_connection_handler_id the connection handler on which to set the whisper list
* @param client_id the client to set the whisper list for. Set to 0 or your own client ID to set your own whisper list.
* @param channel_ids an array of channel ids to transmit voice to.
* @param channel_ids_size number of elements in aforementioned array.
* @param client_ids a zero terminated array of client ids to transmit voice to.
* @param client_ids_size number of elements in aforementioned array.
* @param impersonate if the target client is a webrtc client, the voice packets will look like as if they have been
* send by the invoking client id
* @param return_code a c string to identify this request in callbacks. Pass an empty string if unused.
* @return An error code from the @ref Ts3ErrorType enum indicating either success or the failure reason
*/
EXPORTDLL unsigned int ts_client_request_client_set_whisper_list(uint64 server_connection_handler_id, anyID client_id,
const uint64* channel_ids,
int channel_ids_size,
const anyID* client_ids,
int client_ids_size, int impersonate,
const char* return_code);
/**
* @brief Send a binary-serialized ClientCommandRequest protobuf to the client library.
*
* The response will be delivered asynchronously via the onProtoResponse callback
* as a serialized ClientCommandResponse protobuf.
*
* @param data Pointer to serialized ClientCommandRequest protobuf bytes
* @param size Size of the serialized data in bytes
* @param return_code Caller-provided string to correlate the response in onProtoResponse. May be NULL.
* @return An error code: ERROR_ok on successful dispatch, ERROR_parameter_invalid on parse failure
*/
EXPORTDLL unsigned int ts3client_postProtoCommand(const void* data, size_t size, const char* return_code);
#ifdef __cplusplus
}
#endif
#endif // CLIENTLIB_SDK_H
@@ -1,635 +0,0 @@
#ifndef PUBLIC_DEFINITIONS_H
#define PUBLIC_DEFINITIONS_H
#include "teamlog/logtypes.h"
#define TS3_MAX_SIZE_CHANNEL_NAME 40 // channel name maximum length in characters
#define TS3_MAX_SIZE_VIRTUALSERVER_NAME 64 // virtual server name maximum length in characters
#define TS3_MAX_SIZE_CLIENT_NICKNAME 64 // client display name length limit in characters
#define TS3_MIN_SIZE_CLIENT_NICKNAME 3 // client display name minimum length in characters
#define TS3_MAX_SIZE_REASON_MESSAGE 80 // length limit in characters for kick, move, etc reasons
#define TS3_MAX_SIZE_TEXTMESSAGE 8192 // text message length limit, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_TOPIC 255 // channel topic lengt limith, measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_CHANNEL_DESCRIPTION 8192 // channel description length limit, measured in bytes (utf8 encoded)
// server welcome message length limit measured in bytes (utf8 encoded)
#define TS3_MAX_SIZE_VIRTUALSERVER_WELCOMEMESSAGE 1024
#define TS3_SIZE_MYTSID 44
// minimum amount of seconds before a clientID that was in use can be assigned to a new client
#define TS3_MIN_SECONDS_CLIENTID_REUSE 300
#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32)
typedef unsigned __int16 anyID;
typedef unsigned __int64 uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __declspec(dllexport)
#else
#define EXPORTDLL
#endif
#endif
#else
#include <stdint.h>
typedef uint16_t anyID;
typedef uint64_t uint64;
#ifndef EXPORTDLL
#ifdef BUILDING_DLL
#define EXPORTDLL __attribute__((visibility("default")))
#else
#define EXPORTDLL
#endif
#endif
#endif
enum Visibility
{
ENTER_VISIBILITY = 0, ///< Client joined from an unsubscribed channel, or joined the server.
RETAIN_VISIBILITY, ///< Client switched from one subscribed channel to a different subscribed channel.
LEAVE_VISIBILITY ///< Client switches to an unsubscribed channel, or disconnected from server.
};
enum ConnectStatus
{
STATUS_DISCONNECTED = 0, ///< There is no activity to the server, this is the default value
STATUS_CONNECTING, ///< We are trying to connect, we haven't got a client id yet, we haven't been accepted by the server
STATUS_CONNECTED, ///< The server has accepted us, we can talk and hear and we have a client id, but we don't
///< have the channels and clients yet, we can get server infos (welcome msg etc.)
STATUS_CONNECTION_ESTABLISHING, ///< we are connected and we are visible
STATUS_CONNECTION_ESTABLISHED, ///< we are connected and we have the client and channels available
};
enum LocalTestMode
{
TEST_MODE_OFF = 0,
TEST_MODE_VOICE_LOCAL_ONLY,
TEST_MODE_VOICE_LOCAL_AND_REMOTE,
TEST_MODE_TALK_STATUS_CHANGES_ONLY
};
enum TalkStatus
{
STATUS_NOT_TALKING = 0, ///< client is not talking
STATUS_TALKING = 1, ///< client is talking
STATUS_TALKING_WHILE_DISABLED = 2, ///< client is talking while the microphone is muted (only valid for own client)
};
enum CodecType
{
CODEC_SPEEX_NARROWBAND = 0, ///< (deprecated) mono, 16bit, 8kHz, bitrate dependent on the quality setting
CODEC_SPEEX_WIDEBAND, ///< (deprecated) mono, 16bit, 16kHz, bitrate dependent on the quality setting
CODEC_SPEEX_ULTRAWIDEBAND, ///< (deprecated) mono, 16bit, 32kHz, bitrate dependent on the quality setting
CODEC_CELT_MONO, ///< (deprecated) mono, 16bit, 48kHz, bitrate dependent on the quality setting
CODEC_OPUS_VOICE, ///< mono, 16bit, 48khz, bitrate dependent on the quality setting, optimized for voice
CODEC_OPUS_MUSIC, ///< stereo, 16bit, 48khz, bitrate dependent on the quality setting, optimized for music
};
enum CodecEncryptionMode
{
CODEC_ENCRYPTION_PER_CHANNEL = 0, ///< voice data encryption decided per channel
CODEC_ENCRYPTION_FORCED_OFF, ///< voice data encryption disabled
CODEC_ENCRYPTION_FORCED_ON, ///< voice data encryption enabled
};
enum TextMessageTargetMode
{
TextMessageTarget_CLIENT = 1, ///< Message is a private message to another client
TextMessageTarget_CHANNEL, ///< Message is sent to a channel, received by all clients in that channel at the time
TextMessageTarget_SERVER, ///< Message is sent to every client on the server
TextMessageTarget_MAX
};
enum MuteInputStatus
{
MUTEINPUT_NONE = 0, ///< Microphone is not muted, audio is sent to the server
MUTEINPUT_MUTED, ///< Microphone is muted, no audio is transmitted to the server
};
enum MuteOutputStatus
{
MUTEOUTPUT_NONE = 0, ///< Speaker is active, server is sending us audio
MUTEOUTPUT_MUTED, ///< Speaker is muted, server is not sending audio to us
};
enum HardwareInputStatus
{
HARDWAREINPUT_DISABLED = 0, ///< no capture device opened
HARDWAREINPUT_ENABLED, ///< capture device open
};
enum HardwareOutputStatus
{
HARDWAREOUTPUT_DISABLED = 0, ///< no playback device opened
HARDWAREOUTPUT_ENABLED, ///< playback device open
};
enum InputDeactivationStatus
{
INPUT_ACTIVE = 0, ///< Audio is captured from the capture device.
INPUT_DEACTIVATED = 1, ///< No audio is captured from the capture device.
};
enum ReasonIdentifier
{
REASON_NONE = 0, ///< no reason data
REASON_MOVED = 1, ///< client was moved
REASON_SUBSCRIPTION = 2, // no reason data
REASON_LOST_CONNECTION = 3, // reasonmsg=reason
REASON_KICK_CHANNEL = 4, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER = 5, //{SectionInvoker} reasonmsg=reason //{SectionInvoker} is only added server->client
REASON_KICK_SERVER_BAN = 6, //{SectionInvoker} reasonmsg=reason bantime=time //{SectionInvoker} is only added server->client
REASON_SERVERSTOP = 7, // reasonmsg=reason
REASON_CLIENTDISCONNECT = 8, // reasonmsg=reason
REASON_CHANNELUPDATE = 9, // no reason data
REASON_CHANNELEDIT = 10, //{SectionInvoker}
REASON_CLIENTDISCONNECT_SERVER_SHUTDOWN = 11, // reasonmsg=reason
};
enum Protocol_Encryption_Cipher
{
AES_128 = 0b00000000,
AES_256 = 0b00000001,
PROTOCOL_ENCRYPTION_CIPHER_END_MARKER,
RESERVED = 0b00010000, // reserved until puzzle v2 is fully released, then can be reused
PUZZLE_2 = 0b00100000,
};
enum ChannelProperties
{
CHANNEL_NAME = 0, ///< String. Read/Write. Name of the channel. Always available.
CHANNEL_TOPIC, ///< String. Read/Write. Short single line text describing what the channel is about. Always available.
CHANNEL_DESCRIPTION, ///< String. Read/Write. Arbitrary text (up to 8k bytes) with information about the channel.
///< Must be requested (\ref ts3client_requestChannelDescription)
CHANNEL_PASSWORD, ///< String. Read/Write. Password of the channel. Read access is limited to the server. Clients
///< will only ever see the last password they attempted to use when joining the channel. Always available.
CHANNEL_CODEC, ///< Integer. Read/Write. The codec this channel is using. One of the values from the \ref CodecType
///< enum. Always available.
CHANNEL_CODEC_QUALITY, ///< Integer. Read/Write. The quality setting of the channel. Valid values are 0 to 10 inclusive.
///< Higher value means better voice quality but also more bandwidth usage. Always available.
CHANNEL_MAXCLIENTS, ///< Integer. Read/Write. The number of clients that can be in the channel simultaneously.
///< Always available.
CHANNEL_MAXFAMILYCLIENTS, ///< Integer. Read/Write. The total number of clients that can be in this channel and all
///< sub channels of this channel. Always available.
CHANNEL_ORDER, ///< UInt64. Read/Write. The ID of the channel below which this channel should be displayed. If 0
///< the channel is sorted at the top of the current level. Always available.
CHANNEL_FLAG_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when empty.
///< Permanent channels are stored to the database and available after server restart. SDK
///< users will need to take care of restoring channel at server start on their own.
///< Mutually exclusive with \ref CHANNEL_FLAG_SEMI_PERMANENT. Always available.
CHANNEL_FLAG_SEMI_PERMANENT, ///< Integer. Read/Write. Boolean (1/0) indicating whether the channel remains when
///< empty. Semi permanent channels are not stored to disk and gone after server
///< restart but remain while empty. Mutually exclusive with \ref
///< CHANNEL_FLAG_PERMANENT. Always available.
CHANNEL_FLAG_DEFAULT, ///< Integer. Read/Write. Boolean (1/0). The default channel is the channel that all clients
///< are located in when they join the server, unless the client explicitly specified a
///< different channel when connecting and is allowed to join their preferred channel. Only
///< one channel on the server can have this flag set. The default channel must have \ref
///< CHANNEL_FLAG_PERMANENT set. Always available.
CHANNEL_FLAG_PASSWORD, ///< Integer. Read/Write. Boolean (1/0) indicating whether this channel is password protected.
///< When removing or setting \ref CHANNEL_PASSWORD you also need to adjust this flag.
CHANNEL_CODEC_LATENCY_FACTOR, ///< (deprecated) Integer. Read/Write. Allows to increase packet size, reducing
///< bandwith at the cost of higher latency of voice transmission. Valid values are
///< 1-10 inclusive. 1 is the default and offers the lowest latency. Always available.
CHANNEL_CODEC_IS_UNENCRYPTED, ///< Integer. Read/Write. Boolean (1/0). If 0 voice data is encrypted, if 1 the voice
///< data is not encrypted. Only used if the server \ref
///< VIRTUALSERVER_CODEC_ENCRYPTION_MODE is set to \ref CODEC_ENCRYPTION_PER_CHANNEL.
///< Always available.
CHANNEL_SECURITY_SALT, ///< String. Read/Write. SDK Only, not used by TeamSpeak. This channels security hash. When
///< a client joins their \ref CLIENT_SECURITY_HASH is compared to this value, to allow or
///< deny the client access to the channel. Used to enforce clients joining the server with
///< specific identity and \ref CLIENT_META_DATA. See SDK Documentation about this feature
///< for further details. Always available.
CHANNEL_DELETE_DELAY, ///< UInt64. Read/Write. Number of seconds deletion of temporary channels is delayed after
///< the last client leaves the channel. Channel is only deleted if empty when the delete
///< delay expired. Always available.
CHANNEL_UNIQUE_IDENTIFIER, ///< String. Read only. An identifier that uniquely identifies a channel. Available in
///< Server >= 3.10.0
CHANNEL_ENDMARKER,
};
enum ClientProperties
{
CLIENT_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Public Identity, can be used to identify a client
///< installation. Remains identical as long as the client keeps using the same
///< identity. Available for visible clients.
CLIENT_NICKNAME, ///< String. Read/Write. Display name of the client. Available for visible clients.
CLIENT_VERSION, ///< String. Read only. Version String of the client used. For clients other than ourself this
///< needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_PLATFORM, ///< String. Read only. Operating system used by the client. For other clients other than ourself
///< this needs to be requested (\ref ts3client_requestClientVariables).
CLIENT_FLAG_TALKING, ///< Integer. Read only. Whether the client is talking. Available on clients that are either
///< whispering to us, or in our channel.
CLIENT_INPUT_MUTED, ///< Integer. Read/Write. Microphone mute status. Available for visible clients. One of the
///< values from the \ref MuteInputStatus enum.
CLIENT_OUTPUT_MUTED, ///< Integer. Read/Write. Speaker mute status. Speaker mute implies microphone mute. Available
///< for visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_OUTPUTONLY_MUTED, ///< Integer. Read/Write. Speaker mute status. Microphone may be active. Available for
///< visible clients. One of the values from the \ref MuteOutputStatus enum.
CLIENT_INPUT_HARDWARE, ///< Integer. Read only. Indicates whether a capture device is open. Available for visible
///< clients. One of the values from the \ref HardwareInputStatus enum.
CLIENT_OUTPUT_HARDWARE, ///< Integer. Read only. Indicates whether a playback device is open. Available for visible
///< clients. One of the values from the \ref HardwareOutputStatus enum.
CLIENT_INPUT_DEACTIVATED, ///< Integer. Read/Write. Not available server side. Local microphone mute status.
///< Available only for own client. Used to implement Push To Talk. One of the values from
///< the \ref InputDeactivationStatus enum.
CLIENT_IDLE_TIME, ///< UInt64. Read only. Seconds since last activity. Available only for own client.
CLIENT_DEFAULT_CHANNEL, ///< String. Read only. User specified channel they joined when connecting to the server.
///< Available only for own client.
CLIENT_DEFAULT_CHANNEL_PASSWORD, ///< String. Read only. User specified channel password for the channel they
///< attempted to join when connecting to the server. Available only for own
///< client.
CLIENT_SERVER_PASSWORD, ///< String. Read only. User specified server password. Available only for own client.
CLIENT_META_DATA, ///< String. Read/Write. Can be used to store up to 4096 bytes of information on clients. Not
///< used by TeamSpeak. Available for visible clients.
CLIENT_IS_MUTED, ///< Integer. Read only. Not available server side. Indicates whether we have muted the client
///< using \ref ts3client_requestMuteClients. Available for visible clients other than ourselves.
CLIENT_IS_RECORDING, ///< Integer. Read only. Indicates whether the client is recording incoming audio. Available
///< for visible clients.
CLIENT_VOLUME_MODIFICATOR, ///< Integer. Read only. Volume adjustment for this client as set by \ref
///< ts3client_setClientVolumeModifier. Available for visible clients.
CLIENT_VERSION_SIGN, ///< String. Read only. TeamSpeak internal signature.
CLIENT_SECURITY_HASH, ///< String. Read/Write. This clients security hash. Not used by TeamSpeak, SDK only. Hash is
///< provided by an outside source. A channel will use the security salt + other client data
///< to calculate a hash, which must be the same as the one provided here. See SDK
///< documentation about Client / Channel Security Hashes for more details.
CLIENT_ENCRYPTION_CIPHERS, ///< String. Read only. SDK only. List of available ciphers this client can use.
CLIENT_IS_STREAMING, ///< bool. Read only, Is currently streaming.
CLIENT_ENDMARKER,
};
enum VirtualServerProperties
{
VIRTUALSERVER_UNIQUE_IDENTIFIER = 0, ///< String. Read only. Unique identifier for a virtual server, does not
///< change on server restart. Available if \ref ts3client_getConnectionStatus
///< is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_NAME, ///< String. Read/Write. The virtual server display name. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_WELCOMEMESSAGE, ///< String. Read/Write. The welcome message displayed to clients on connect.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED. Not
///< updated automatically when changed, updates need to be requested (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_PLATFORM, ///< String. Read only. The operating system the server is running on. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_VERSION, ///< String. Read only. The server software version string. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_MAXCLIENTS, ///< UInt64. Read/Write. The maximum number of clients that can be connected
///< simultaneously. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_PASSWORD, ///< String. Read/Write. The server password. Read access is limited to the server. Clients
///< will only get the password they supplied when connecting. Available if \ref
///< ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_CLIENTS_ONLINE, ///< UInt64. Read only. The current number of clients connected to the server,
///< including query connections. Only available on request (\ref
///< ts3client_requestServerVariables).
VIRTUALSERVER_CHANNELS_ONLINE, ///< UInt64. Read only. The current number of channels on the server. Only
///< available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CREATED, ///< Integer. Read only. The time this virtual server was created as unix timestamp.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_UPTIME, ///< UInt64. Read only. Number of seconds that have passed since the virtual server was
///< started. Only available on request (\ref ts3client_requestServerVariables).
VIRTUALSERVER_CODEC_ENCRYPTION_MODE, ///< Integer. Read/Write. Boolean (1/0) that specifies if voice data is encrypted
///< during transfer. One of the values from the \ref CodecEncryptionMode enum.
///< Available if \ref ts3client_getConnectionStatus is >= \ref STATUS_CONNECTED.
VIRTUALSERVER_ENCRYPTION_CIPHERS, ///< String. Read/Write. Comma separated list of available ciphers to encrypt the
///< connection. The server will use the first cipher in the list that is also
///< listed in the \ref CLIENT_ENCRYPTION_CIPHERS of the connecting client.
///< Clients will fail to connect if no match is found. Always available.
VIRTUALSERVER_ADDRESS, ///< Any resolvable address for the specific virtual server
VIRTUALSERVER_VERSION_SIGN, ///< String. Read only. Signature of Platform and Version.
VIRTUALSERVER_ENDMARKER,
VIRTUALSERVER_FILEBASE = 24, ///< String. Read only. The path to the base directory used to store files
///< transferred using file transfer. Available only on the server. Is set by \ref
///< ts3server_enableFileManager
VIRTUALSERVER_MAX_DOWNLOAD_TOTAL_BANDWIDTH = 29, ///< UInt64. Read/Write. Maximum traffic in bytes the server can
///< use for file transfer downloads. Only available on request
///< (\ref ts3client_requestServerVariables).
VIRTUALSERVER_MAX_UPLOAD_TOTAL_BANDWIDTH = 30, ///< UInt64. Read/Write. Maximum traffic in bytes the server can use
///< for file transfer uploads. Only available on request (=>
///< requestServerVariables)
VIRTUALSERVER_LOG_FILETRANSFER = 64 ///< Integer. Read/Write. Boolean (1/0) indicating whether to include file
///< transfer activities (uploading or downloading of files) in the server log.
///< Always available.
};
/**
* Various connection properties.
* These are all read only, and except for your own client must be requested using \ref ts3client_requestConnectionInfo
*/
enum ConnectionProperties
{
CONNECTION_PING = 0, ///< UInt64. Round trip latency for the connection based on the last 5 seconds. On the server
///< this is the average across all connected clients for the last 5 seconds.
CONNECTION_PING_DEVIATION, ///< Double. Standard deviation for the round trip latency in \ref CONNECTION_PING
CONNECTION_CONNECTED_TIME, ///< UInt64. Seconds the client has been connected.
CONNECTION_IDLE_TIME, ///< UInt64. Time in seconds since the last activity (voice transmission, switching channels,
///< changing mic / speaker mute status) of the client.
CONNECTION_CLIENT_IP, ///< String. IP of this client (as seen from the server side)
CONNECTION_CLIENT_PORT, ///< UInt64. Client side port of this client (as seen from the server side)
CONNECTION_SERVER_IP, ///< String. The IP or hostname used to connect to the server. Only available on yourself.
CONNECTION_SERVER_PORT, ///< UInt64. The server port connected to. Only available on yourself.
CONNECTION_PACKETS_SENT_SPEECH, ///< UInt64. The number of voice packets transmitted by the client.
CONNECTION_PACKETS_SENT_KEEPALIVE, ///< UInt64. The number of keep alive packets transmitted by the client.
CONNECTION_PACKETS_SENT_CONTROL, ///< UInt64. The number of command & control packets transmitted by the client.
CONNECTION_PACKETS_SENT_TOTAL, ///< UInt64. Total number of packets transmitted by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_SENT_SPEECH, \ref CONNECTION_PACKETS_SENT_KEEPALIVE and
///< \ref CONNECTION_PACKETS_SENT_CONTROL
CONNECTION_BYTES_SENT_SPEECH, ///< UInt64. Outgoing traffic used for voice data by the client.
CONNECTION_BYTES_SENT_KEEPALIVE, ///< UInt64. Outgoing traffic used for keeping the connection alive by the client.
CONNECTION_BYTES_SENT_CONTROL, ///< UInt64. Outgoing traffic used for command & control data by the client.
CONNECTION_BYTES_SENT_TOTAL, ///< UInt64. Total outgoing traffic to the server by this client. Equal to the sum of
///< \ref CONNECTION_BYTES_SENT_SPEECH, \ref CONNECTION_BYTES_SENT_KEEPALIVE and \ref
///< CONNECTION_BYTES_SENT_CONTROL
CONNECTION_PACKETS_RECEIVED_SPEECH, ///< UInt64. Number of voice packets received by the client.
CONNECTION_PACKETS_RECEIVED_KEEPALIVE, ///< UInt64. Number of keep alive packets received by the client.
CONNECTION_PACKETS_RECEIVED_CONTROL, ///< UInt64. Number of command & control packets received by the client.
CONNECTION_PACKETS_RECEIVED_TOTAL, ///< UInt64. Total number of packets received by the client. Equal to the sum of
///< \ref CONNECTION_PACKETS_RECEIVED_SPEECH, \ref
///< CONNECTION_PACKETS_RECEIVED_KEEPALIVE and \ref
///< CONNECTION_PACKETS_RECEIVED_CONTROL
CONNECTION_BYTES_RECEIVED_SPEECH, ///< UInt64. Incoming traffic used by the client for voice data.
CONNECTION_BYTES_RECEIVED_KEEPALIVE, ///< UInt64. Incoming traffic used by the client to keep the connection alive.
CONNECTION_BYTES_RECEIVED_CONTROL, ///< UInt64. Incoming traffic used by the client for command & control data.
CONNECTION_BYTES_RECEIVED_TOTAL, ///< UInt64. Total incoming traffic used by the client. Equal to the sum of \ref
///< CONNECTION_BYTES_RECEIVED_SPEECH, \ref CONNECTION_BYTES_RECEIVED_KEEPALIVE and
///< \ref CONNECTION_BYTES_RECEIVED_CONTROL
CONNECTION_PACKETLOSS_SPEECH, ///< Double. Percentage points of voice packets for the client that did not arrive at
///< the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_KEEPALIVE, ///< Double. Percentage points of keep alive packets for the client that did not
///< arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_CONTROL, ///< Double. Percentage points of command & control packets for the client that did
///< not arrive at the client or server averaged across the last 5 seconds.
CONNECTION_PACKETLOSS_TOTAL, ///< Double. Cumulative chance in percentage points with which a packet round trip
///< failed because a packet was lost
CONNECTION_SERVER2CLIENT_PACKETLOSS_SPEECH, ///< Double. Probability with which a voice packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< server was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the server
///< was not received by the client.
CONNECTION_SERVER2CLIENT_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the server was not
///< received by the client.
CONNECTION_CLIENT2SERVER_PACKETLOSS_SPEECH, ///< Double. Probability with which a speech packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_KEEPALIVE, ///< Double. Probability with which a keepalive packet sent by the
///< client was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_CONTROL, ///< Double. Probability with which a control packet sent by the client
///< was not received by the server.
CONNECTION_CLIENT2SERVER_PACKETLOSS_TOTAL, ///< Double. Probability with which a packet sent by the client was not
///< received by the server.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes sent for speech data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes sent for keepalive data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes sent for control data in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes sent in the last second.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second sent for speech data, averaged over the
///< last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second sent for keepalive data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second sent for control data, averaged over
///< the last minute.
CONNECTION_BANDWIDTH_SENT_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second sent, averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_SPEECH, ///< UInt64. Number of bytes received for speech data in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_KEEPALIVE, ///< UInt64. Number of bytes received for keepalive data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_CONTROL, ///< UInt64. Number of bytes received for control data in the
///< last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_SECOND_TOTAL, ///< UInt64. Number of bytes received in the last second.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_SPEECH, ///< UInt64. Bytes per second received for speech data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_KEEPALIVE, ///< UInt64. Bytes per second received for keepalive data,
///< averaged over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_CONTROL, ///< UInt64. Bytes per second received for control data, averaged
///< over the last minute.
CONNECTION_BANDWIDTH_RECEIVED_LAST_MINUTE_TOTAL, ///< UInt64. Bytes per second received, averaged over the last minute.
CONNECTION_DUMMY_0,
CONNECTION_DUMMY_1,
CONNECTION_DUMMY_2,
CONNECTION_DUMMY_3,
CONNECTION_DUMMY_4,
CONNECTION_DUMMY_5,
CONNECTION_DUMMY_6,
CONNECTION_DUMMY_7,
CONNECTION_DUMMY_8,
CONNECTION_DUMMY_9,
CONNECTION_FILETRANSFER_BANDWIDTH_SENT, ///< UInt64. Current file transfer upstream activity in bytes per second.
///< Only available on request (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BANDWIDTH_RECEIVED, ///< UInt64. Current file transfer downstream activity in bytes per
///< second. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_RECEIVED_TOTAL, ///< UInt64. Total downstream traffic, in bytes, used for file
///< transfer since the server was started. Only available on request
///< (\ref ts3client_requestServerConnectionInfo).
CONNECTION_FILETRANSFER_BYTES_SENT_TOTAL, ///< UInt64. Total upstream traffic, in bytes, used for file transfer
///< since the server was started. Only available on request (\ref
///< ts3client_requestServerConnectionInfo).
CONNECTION_ENDMARKER
};
/**
* Describes a client position in 3 dimensional space, used for 3D Sound.
*/
typedef struct
{
float x; ///< X co-ordinate in 3D space.
float y; ///< Y co-ordinate in 3D space.
float z; ///< Z co-ordinate in 3D space.
} TS3_VECTOR;
enum GroupWhisperType
{
GROUPWHISPERTYPE_SERVERGROUP = 0, ///< Whisper list consists of server groups
GROUPWHISPERTYPE_CHANNELGROUP = 1, ///< Whisper list consists of channel groups
GROUPWHISPERTYPE_CHANNELCOMMANDER = 2, ///< whisper to channel commanders
GROUPWHISPERTYPE_ALLCLIENTS = 3, ///< whisper to all clients
GROUPWHISPERTYPE_ENDMARKER,
};
enum GroupWhisperTargetMode
{
GROUPWHISPERTARGETMODE_ALL = 0,
GROUPWHISPERTARGETMODE_CURRENTCHANNEL = 1, ///< Whisper the current channel of the client
GROUPWHISPERTARGETMODE_PARENTCHANNEL = 2, ///< Whisper the parent channel of whatever channel the client is currently in
GROUPWHISPERTARGETMODE_ALLPARENTCHANNELS = 3, ///< Whipser to the parent channel and all their parent channels as well
GROUPWHISPERTARGETMODE_CHANNELFAMILY = 4, ///< Whisper to the current channel and all its sub channels
GROUPWHISPERTARGETMODE_ANCESTORCHANNELFAMILY = 5, ///< Whisper to the current channel, all its parent and sub channels.
GROUPWHISPERTARGETMODE_SUBCHANNELS = 6, ///< Whisper to all sub channels of the current channel of the client
GROUPWHISPERTARGETMODE_ENDMARKER,
};
enum MonoSoundDestination
{
MONO_SOUND_DESTINATION_ALL = 0, ///< Send mono sound to all available speakers
MONO_SOUND_DESTINATION_FRONT_CENTER = 1, ///< Send mono sound to front center speaker if available
MONO_SOUND_DESTINATION_FRONT_LEFT_AND_RIGHT = 2 ///< Send mono sound to front left/right speakers if available
};
enum SecuritySaltOptions
{
SECURITY_SALT_CHECK_NICKNAME = 1, ///< put nickname into security hash
SECURITY_SALT_CHECK_META_DATA = 2 ///< put meta data into security hash
};
/*this enum is used to disable client commands on the server*/
enum ClientCommand
{
CLIENT_COMMAND_requestConnectionInfo = 0, ///< disable client connection info request (client bandwidth usage, ip,
///< port, ping)
CLIENT_COMMAND_requestClientMove = 1, ///< disable moving clients
CLIENT_COMMAND_requestXXMuteClients = 2, ///< disable muting other clients
CLIENT_COMMAND_requestClientKickFromXXX = 3, ///< disable kicking clients
CLIENT_COMMAND_flushChannelCreation = 4, ///< disable creating channels
CLIENT_COMMAND_flushChannelUpdates = 5, ///< disable editing channels
CLIENT_COMMAND_requestChannelMove = 6, ///< disable moving channels
CLIENT_COMMAND_requestChannelDelete = 7, ///< disable deleting channels
CLIENT_COMMAND_requestChannelDescription = 8, ///< disable channel descriptions
CLIENT_COMMAND_requestChannelXXSubscribeXXX = 9, ///< disable being able to see clients in channels other than the
///< current channel the client is in
CLIENT_COMMAND_requestServerConnectionInfo = 10, ///< disable server connection info request (server bandwidth
///< usage, ip, port, ping)
CLIENT_COMMAND_requestSendXXXTextMsg = 11, ///< disable text messaging
CLIENT_COMMAND_filetransfers = 12, ///< disable file transfer
CLIENT_COMMAND_ENDMARKER
};
/* Access Control List*/
enum ACLType
{
ACL_NONE = 0,
ACL_WHITE_LIST = 1,
ACL_BLACK_LIST = 2
};
/* file transfer actions*/
enum FTAction
{
FT_INIT_SERVER = 0, ///< The virtual server is created. result->channelPath can be changed to create a different
///< directory than the default 'virtualserver_x' where x is the virtual server.
FT_INIT_CHANNEL = 1, ///< A channel is created. result->channelPath can be changed to create a different directory
///< then the default 'channel_x' where x is the channel id.
FT_UPLOAD = 2, ///< A file is being uploaded. All values in the result struct can be modified.
FT_DOWNLOAD = 3, ///< A file is being downloaded. All values in the result struct can be modified.
FT_DELETE = 4, ///< A file is being deleted. All values in the result struct can be modified.
FT_CREATEDIR = 5, ///< A directory is being created in a channel. All values in the result struct can be modified.
FT_RENAME = 6, ///< A file or folder is being renamed. The callback will be called twice! Once for the old and then
///< for the new name. All values in the result struct can be modified.
FT_FILELIST = 7, ///< A directory listing is requested. All values in the result struct can be modified.
FT_FILEINFO = 8 ///< Information of a file is requested. All values in the result struct can be modified.
};
/* file transfer status */
enum FileTransferState
{
FILETRANSFER_INITIALISING = 0, ///< File transfer is establishing connection.
FILETRANSFER_ACTIVE, ///< File transfer is in progress
FILETRANSFER_FINISHED, ///< File transfer has finished
};
/* file transfer types */
enum FileTransferType
{
FileListType_Directory = 0, ///< The file entry is a directory
FileListType_File, ///< The file entry is a regular file
};
/* some structs to handle variables in callbacks */
#define MAX_VARIABLES_EXPORT_COUNT 64
struct VariablesExportItem
{
unsigned char itemIsValid; ///< Whether or not there is any data in this item. Ignore this item if this is 0.
unsigned char proposedIsSet; ///< The value in proposed is set. If 0 ignore proposed
const char* current; ///< current value (stored in memory)
const char* proposed; ///< New value to change to (const, so no updates please)
};
struct VariablesExport
{
struct VariablesExportItem items[MAX_VARIABLES_EXPORT_COUNT];
};
struct ClientMiniExport
{
anyID ID; ///< id of the client
uint64 channel; ///< the channel the client is in
const char* ident; ///< client public identity
const char* nickname; ///< client display name
};
/**
* Structure used to describe a file transfer in the \ref ServerLibFunctions.onTransformFilePath callback.
* This describes the original values, and also contains hints for length limitations of the result parameter
* of the callback.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExport
{
uint64 channel; ///< The channel id of the file. 0 if action is \ref FT_INIT_SERVER
const char* filename; ///< utf8 encoded c string containing the original file name as intended by the client.
int action; ///< The action to be performed. One of the values from the \ref FTAction enum. Defines which values of
///< the result struct can be modified.
int transformedFileNameMaxSize; ///< The maximum length the file name can be rewritten to.
int channelPathMaxSize; ///< The maximum length the path can be rewritten to.
};
/**
* Structure to rewrite the file transfer file name and path in the \ref ServerLibFunctions.onTransformFilePath callback.
* The lengths are limited as described in the original parameter.
* \verbatim embed:rst
.. important::
Which values of the struct can be modified is defined by the action value of the original parameter.
\endverbatim
*/
struct TransformFilePathExportReturns
{
char* transformedFileName; ///< pointer to target file name. Fill the memory pointed to with an utf8 encoded c string
///< containing the new file name. Limited to original->transformedFileNameMaxSize bytes.
char* channelPath; ///< pointer to memory for new path. Fill the memory pointed to with an utf8 encoded c string
///< containing the new path. Limited to original->channelPathMaxSize bytes.
int logFileAction; ///< boolean (1/0). Whether to log this file transfer to the log. Action is not logged regardless
///< of this value if the servers \ref VIRTUALSERVER_LOG_FILETRANSFER property is 0.
};
struct FileTransferCallbackExport
{
anyID clientID; ///< the client who started the file transfer
anyID transferID; ///< local identifier of the transfer that has completed
anyID remoteTransferID; ///< remote identifier of the transfer that has completed
unsigned int status; ///< status of the transfer. One of the values from the \ref FileTransferState enum
const char* statusMessage; ///< utf8 encoded c string containing a human readable description of the status
uint64 remotefileSize; ///< size in bytes of the complete file to be transferred
uint64 bytes; ///< number of bytes transferred. Same as remotefileSize when the transfer completed entirely.
int isSender; ///< boolean. 1 if the server is sending the file. 0 if the server is receiving the file.
};
/*define for file transfer bandwith limits*/
#define BANDWIDTH_LIMIT_UNLIMITED 0xFFFFFFFFFFFFFFFFll
/*defines for speaker locations used by some sound callbacks*/
#ifndef SPEAKER_FRONT_LEFT
#define SPEAKER_FRONT_LEFT 0x1
#define SPEAKER_FRONT_RIGHT 0x2
#define SPEAKER_FRONT_CENTER 0x4
#define SPEAKER_LOW_FREQUENCY 0x8
#define SPEAKER_BACK_LEFT 0x10
#define SPEAKER_BACK_RIGHT 0x20
#define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
#define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
#define SPEAKER_BACK_CENTER 0x100
#define SPEAKER_SIDE_LEFT 0x200
#define SPEAKER_SIDE_RIGHT 0x400
#define SPEAKER_TOP_CENTER 0x800
#define SPEAKER_TOP_FRONT_LEFT 0x1000
#define SPEAKER_TOP_FRONT_CENTER 0x2000
#define SPEAKER_TOP_FRONT_RIGHT 0x4000
#define SPEAKER_TOP_BACK_LEFT 0x8000
#define SPEAKER_TOP_BACK_CENTER 0x10000
#define SPEAKER_TOP_BACK_RIGHT 0x20000
#endif
#define SPEAKER_HEADPHONES_LEFT 0x10000000
#define SPEAKER_HEADPHONES_RIGHT 0x20000000
#define SPEAKER_MONO 0x40000000
#endif /*PUBLIC_DEFINITIONS_H*/
@@ -1,217 +0,0 @@
#ifndef PUBLIC_ERRORS_H
#define PUBLIC_ERRORS_H
//The idea here is: the values are 2 bytes wide, the first byte identifies the group, the second the count within that group
enum Ts3ErrorType {
//general
ERROR_ok = 0x0000, ///< Indicates success.
ERROR_undefined = 0x0001,
ERROR_not_implemented = 0x0002, ///< The attempted operation is not available in this context
ERROR_ok_no_update = 0x0003, ///< Indicates success, but no change occurred. Returned for example upon flushing (e.g. using \ref ts3client_flushChannelUpdates) when all indicated changes already matched the current state.
ERROR_dont_notify = 0x0004,
ERROR_lib_time_limit_reached = 0x0005,
ERROR_out_of_memory = 0x0006, ///< Not enough system memory to perform operation
ERROR_canceled = 0x0007,
ERROR_ok_no_error_event = 0x0008, ///< Indicates success, but no error event was generated. This is used because of the return code management and reduce packets.
//dunno
ERROR_command_not_found = 0x0100,
ERROR_unable_to_bind_network_port = 0x0101, ///< Unspecified failure to create a listening port
ERROR_no_network_port_available = 0x0102, ///< Failure to initialize a listening port for FileTransfer
ERROR_port_already_in_use = 0x0103, ///< Specified port is already in use by a different application
ERROR_command_line_parse_failed = 0x0104, ///< Command line arguments are invalid
ERROR_command_line_exit_version = 0x0105, ///< Command line specified version. The process should exit with code 0 after printing the version.
ERROR_command_line_exit_help = 0x0106, ///< Command line specified help. The process should exit with code 0 after priting the help.
//client
ERROR_client_invalid_id = 0x0200, ///< Client no longer connected
ERROR_client_nickname_inuse = 0x0201, ///< Client name is already in use. Client names must be unique
ERROR_client_protocol_limit_reached = 0x0203, ///< Too many clients on the server
ERROR_client_invalid_type = 0x0204, ///< Function called for normal clients that is only available for query clients or vice versa
ERROR_client_already_subscribed = 0x0205, ///< Attempting to subscribe to a channel already subscribed to
ERROR_client_not_logged_in = 0x0206,
ERROR_client_could_not_validate_identity = 0x0207, ///< Identity not valid or insufficient security level
ERROR_client_invalid_password = 0x0208,
ERROR_client_version_outdated = 0x020a, ///< Server requires newer client version as determined by the min_client_version properties
ERROR_client_is_flooding = 0x020c, ///< Triggered flood protection. Further information is supplied in the extra message if applicable.
ERROR_client_hacked = 0x020d,
ERROR_client_cannot_verify_now = 0x020e,
ERROR_client_login_not_permitted = 0x020f,
ERROR_client_not_subscribed = 0x0210, ///< Action is only available on subscribed channels
//channel
ERROR_channel_invalid_id = 0x0300, ///< Channel does not exist on the server (any longer)
ERROR_channel_protocol_limit_reached = 0x0301, ///< Too many channels on the server
ERROR_channel_already_in = 0x0302, ///< Attempting to move a client or channel to its current channel
ERROR_channel_name_inuse = 0x0303, ///< Channel name is already taken by another channel. Channel names must be unique
ERROR_channel_not_empty = 0x0304, ///< Attempting to delete a channel with clients or sub channels in it
ERROR_channel_can_not_delete_default = 0x0305, ///< Default channel cannot be deleted. Set a new default channel first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_default_require_permanent = 0x0306, ///< Attempt to set a non permanent channel as default channel. Set channel to permanent first (see \ref ts3client_setChannelVariableAsInt or \ref ts3server_setChannelVariableAsInt )
ERROR_channel_invalid_flags = 0x0307, ///< Invalid combination of \ref ChannelProperties, trying to remove \ref CHANNEL_FLAG_DEFAULT or set a password on the default channel
ERROR_channel_parent_not_permanent = 0x0308, ///< Attempt to move a permanent channel into a non-permanent one, or set a channel to be permanent that is a sub channel of a non-permanent one
ERROR_channel_maxclients_reached = 0x0309, ///< Channel is full as determined by its \ref CHANNEL_MAXCLIENTS setting
ERROR_channel_maxfamily_reached = 0x030a, ///< Channel tree is full as determined by its \ref CHANNEL_MAXFAMILYCLIENTS setting
ERROR_channel_invalid_order = 0x030b, ///< Invalid value for the \ref CHANNEL_ORDER property. The specified channel must exist on the server and be on the same level.
ERROR_channel_no_filetransfer_supported = 0x030c, ///< Invalid \ref CHANNEL_FILEPATH set for the channel
ERROR_channel_invalid_password = 0x030d, ///< Channel has a password not matching the password supplied in the call
// used in public_rare_errors = 0x030e,
ERROR_channel_invalid_security_hash = 0x030f,
//server
ERROR_server_invalid_id = 0x0400, ///< Chosen virtual server does not exist or is offline
ERROR_server_running = 0x0401, ///< attempting to delete a server that is running. Stop the server before deleting it.
ERROR_server_is_shutting_down = 0x0402, ///< Client disconnected because the server is going offline
ERROR_server_maxclients_reached = 0x0403, ///< Given in the onConnectStatusChange event when the server has reached its maximum number of clients as defined by the \ref VIRTUALSERVER_MAXCLIENTS property
ERROR_server_invalid_password = 0x0404, ///< Specified server password is wrong. Provide the correct password in the \ref ts3client_startConnection / \ref ts3client_startConnectionWithChannelID call.
ERROR_server_is_virtual = 0x0407, ///< Server is in virtual status. The attempted action is not possible in this state. Start the virtual server first.
ERROR_server_is_not_running = 0x0409, ///< Attempting to stop a server that is not online.
ERROR_server_is_booting = 0x040a, // Not used
ERROR_server_status_invalid = 0x040b,
ERROR_server_version_outdated = 0x040d, ///< Attempt to connect to an outdated server version. The server needs to be updated.
ERROR_server_duplicate_running = 0x040e, ///< This server is already running within the instance. Each virtual server may only exist once.
//parameter
ERROR_parameter_quote = 0x0600, // Not used
ERROR_parameter_invalid_count = 0x0601, ///< Attempt to flush changes without previously calling set*VariableAs* since the last flush
ERROR_parameter_invalid = 0x0602, ///< At least one of the supplied parameters did not meet the criteria for that parameter
ERROR_parameter_not_found = 0x0603, ///< Failure to supply all the necessary parameters
ERROR_parameter_convert = 0x0604, ///< Invalid type supplied for a parameter, such as passing a string (ie. "five") that expects a number.
ERROR_parameter_invalid_size = 0x0605, ///< Value out of allowed range. Such as strings are too long/short or numeric values outside allowed range
ERROR_parameter_missing = 0x0606, ///< Neglecting to specify a required parameter
ERROR_parameter_checksum = 0x0607, ///< Attempting to deploy a modified snapshot
//unsorted, need further investigation
ERROR_vs_critical = 0x0700, ///< Failure to create default channel
ERROR_connection_lost = 0x0701, ///< Generic error with the connection.
ERROR_not_connected = 0x0702, ///< Attempting to call functions with a serverConnectionHandler that is not connected. You can use \ref ts3client_getConnectionStatus to check whether the connection handler is connected to a server
ERROR_no_cached_connection_info = 0x0703, ///< Attempting to query connection information (bandwidth usage, ping, etc) without requesting them first using \ref ts3client_requestConnectionInfo
ERROR_currently_not_possible = 0x0704, ///< Requested information is not currently available. You may have to call \ref ts3client_requestClientVariables or \ref ts3client_requestServerVariables
ERROR_failed_connection_initialisation = 0x0705, ///< No TeamSpeak server running on the specified IP address and port
ERROR_could_not_resolve_hostname = 0x0706, ///< Failure to resolve the specified hostname to an IP address
ERROR_invalid_server_connection_handler_id = 0x0707, ///< Attempting to perform actions on a non-existent server connection handler
ERROR_could_not_initialise_input_manager = 0x0708, // Not used
ERROR_clientlibrary_not_initialised = 0x0709, ///< Calling client library functions without successfully calling \ref ts3client_initClientLib before
ERROR_serverlibrary_not_initialised = 0x070a, ///< Calling server library functions without successfully calling \ref ts3server_initServerLib before
ERROR_whisper_too_many_targets = 0x070b, ///< Using a whisper list that contain more clients than the servers \ref VIRTUALSERVER_MIN_CLIENTS_IN_CHANNEL_BEFORE_FORCED_SILENCE property
ERROR_whisper_no_targets = 0x070c, ///< The active whisper list is empty or no clients matched the whisper list (e.g. all channels in the list are empty)
ERROR_connection_ip_protocol_missing = 0x070d, ///< Invalid or unsupported protocol (e.g. attempting an IPv6 connection on an IPv4 only machine)
ERROR_handshake_failed = 0x070e,
ERROR_illegal_server_license = 0x070f,
//file transfer
ERROR_file_invalid_name = 0x0800, ///< Invalid UTF8 string or not a valid file
ERROR_file_invalid_permissions = 0x0801, ///< Permissions prevent opening the file
ERROR_file_already_exists = 0x0802, ///< Target path already exists as a directory
ERROR_file_not_found = 0x0803, ///< Attempt to access or move non existing file
ERROR_file_io_error = 0x0804, ///< Generic file input / output error
ERROR_file_invalid_transfer_id = 0x0805, ///< Attempt to get information about a file transfer after it has already been cleaned up. File transfer information is not available indefinitely after the transfer completed
ERROR_file_invalid_path = 0x0806, ///< specified path contains invalid characters or does not start with "/"
ERROR_file_no_files_available = 0x0807, // Not used
ERROR_file_overwrite_excludes_resume = 0x0808, ///< File overwrite and resume are mutually exclusive. Only one or neither can be 1.
ERROR_file_invalid_size = 0x0809, ///< Attempt to write more bytes than claimed file size.
ERROR_file_already_in_use = 0x080a, ///< File is currently not available, try again later.
ERROR_file_could_not_open_connection = 0x080b, ///< Generic failure in file transfer connection / other party did not conform to file transfer protocol
ERROR_file_no_space_left_on_device = 0x080c, ///< Operating system reports hard disk is full. May be caused by quota limitations.
ERROR_file_exceeds_file_system_maximum_size = 0x080d, ///< File is too large for the file system of the target device.
ERROR_file_transfer_connection_timeout = 0x080e, // Not used
ERROR_file_connection_lost = 0x080f, ///< File input / output timeout or connection failure
ERROR_file_exceeds_supplied_size = 0x0810, // Not used
ERROR_file_transfer_complete = 0x0811, ///< Indicates successful completion
ERROR_file_transfer_canceled = 0x0812, ///< Transfer was cancelled through @ref ts3client_haltTransfer
ERROR_file_transfer_interrupted = 0x0813, ///< Transfer failed because the server is shutting down, or network connection issues
ERROR_file_transfer_server_quota_exceeded = 0x0814, ///< Transfer terminated due to server bandwidth quota being exceeded. No client can transfer files.
ERROR_file_transfer_client_quota_exceeded = 0x0815, ///< Attempt to transfer more data than allowed by this clients' bandwidth quota. Other clients may continue to transfer files.
ERROR_file_transfer_reset = 0x0816, // Not used
ERROR_file_transfer_limit_reached = 0x0817, ///< Too many file transfers are in progress. Try again later
ERROR_file_invalid_storage_class = 0x0818, // TODO: Invalid storage class for HTTP FileTransfer (what is a storage class?)
ERROR_file_invalid_dimension = 0x0819, ///< Avatar image exceeds maximum width or height accepted by the server.
ERROR_file_transfer_channel_quota_exceeded = 0x081a, ///< Transfer failed because the channel quota was exceeded. Uploading to this channel is not possible, but other channels may be fine.
//sound
ERROR_sound_preprocessor_disabled = 0x0900, ///< Cannot set or query pre processor variables with preprocessing disabled
ERROR_sound_internal_preprocessor = 0x0901,
ERROR_sound_internal_encoder = 0x0902,
ERROR_sound_internal_playback = 0x0903,
ERROR_sound_no_capture_device_available = 0x0904, ///< No audio capture devices are available
ERROR_sound_no_playback_device_available = 0x0905, ///< No audio playback devices are available
ERROR_sound_could_not_open_capture_device = 0x0906, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_could_not_open_playback_device = 0x0907, ///< Error accessing audio device, or audio device does not support the requested mode
ERROR_sound_handler_has_device = 0x0908, ///< Attempt to open a sound device on a connection handler which already has an open device. Close the already open device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_invalid_capture_device = 0x0909, ///< Attempt to use a device for capture that does not support capturing audio
ERROR_sound_invalid_playback_device = 0x090a, ///< Attempt to use a device for playback that does not support playback of audio
ERROR_sound_invalid_wave = 0x090b, ///< Attempt to use a non WAV file in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle
ERROR_sound_unsupported_wave = 0x090c, ///< Unsupported wave file used in \ref ts3client_playWaveFile or \ref ts3client_playWaveFileHandle.
ERROR_sound_open_wave = 0x090d, ///< Failure to open the specified sound file
ERROR_sound_internal_capture = 0x090e,
ERROR_sound_device_in_use = 0x090f, ///< Attempt to unregister a custom device that is being used. Close the device first using \ref ts3client_closeCaptureDevice or \ref ts3client_closePlaybackDevice
ERROR_sound_device_already_registerred = 0x0910, ///< Attempt to register a custom device with a device id that has already been used in a previous call. Device ids must be unique.
ERROR_sound_unknown_device = 0x0911, ///< Attempt to open, close, unregister or use a device which is not known. Custom devices must be registered before being used (see \ref ts3client_registerCustomDevice)
ERROR_sound_unsupported_frequency = 0x0912,
ERROR_sound_invalid_channel_count = 0x0913, ///< Invalid device audio channel count, must be > 0
ERROR_sound_read_wave = 0x0914, ///< Failure to read sound samples from an opened wave file. Is this a valid wave file?
ERROR_sound_need_more_data = 0x0915, // for internal purposes only
ERROR_sound_device_busy = 0x0916, // for internal purposes only
ERROR_sound_no_data = 0x0917, ///< Indicates there is currently no data for playback, e.g. nobody is speaking right now.
ERROR_sound_channel_mask_mismatch = 0x0918, ///< Opening a device with an unsupported channel count
//permissions
ERROR_permissions_client_insufficient = 0x0a08, ///< Not enough permissions to perform the requested activity
ERROR_permissions = 0x0a0c, ///< Permissions to use sound device not granted by operating system, e.g. Windows denied microphone access.
//accounting
ERROR_accounting_virtualserver_limit_reached = 0x0b00, ///< Attempt to use more virtual servers than allowed by the license
ERROR_accounting_slot_limit_reached = 0x0b01, ///< Attempt to set more slots than allowed by the license
ERROR_accounting_license_file_not_found = 0x0b02, // Not used
ERROR_accounting_license_date_not_ok = 0x0b03, ///< License expired or not valid yet
ERROR_accounting_unable_to_connect_to_server = 0x0b04, ///< Failure to communicate with accounting backend
ERROR_accounting_unknown_error = 0x0b05, ///< Failure to write update license file
ERROR_accounting_server_error = 0x0b06, // Not used
ERROR_accounting_instance_limit_reached = 0x0b07, ///< More than one process of the server is running
ERROR_accounting_instance_check_error = 0x0b08, ///< Shared memory access failure.
ERROR_accounting_license_file_invalid = 0x0b09, ///< License is not a TeamSpeak license
ERROR_accounting_running_elsewhere = 0x0b0a, ///< A copy of this server is already running in another instance. Each server may only exist once.
ERROR_accounting_instance_duplicated = 0x0b0b, ///< A copy of this server is running already in this process. Each server may only exist once.
ERROR_accounting_already_started = 0x0b0c, ///< Attempt to start a server that is already running
ERROR_accounting_not_started = 0x0b0d,
ERROR_accounting_to_many_starts = 0x0b0e, ///< Starting instance / virtual servers too often in too short a time period
//provisioning server
/// @cond HAS_PROVISIONING
ERROR_provisioning_invalid_password = 0x1100,
ERROR_provisioning_invalid_request = 0x1101,
ERROR_provisioning_no_slots_available = 0x1102,
ERROR_provisioning_pool_missing = 0x1103,
ERROR_provisioning_pool_unknown = 0x1104,
ERROR_provisioning_unknown_ip_location = 0x1105,
ERROR_provisioning_internal_tries_exceeded = 0x1106,
ERROR_provisioning_too_many_slots_requested = 0x1107,
ERROR_provisioning_too_many_reserved = 0x1108,
ERROR_provisioning_could_not_connect = 0x1109,
ERROR_provisioning_auth_server_not_connected = 0x1110,
ERROR_provisioning_auth_data_too_large = 0x1111,
ERROR_provisioning_already_initialized = 0x1112,
ERROR_provisioning_not_initialized = 0x1113,
ERROR_provisioning_connecting = 0x1114,
ERROR_provisioning_already_connected = 0x1115,
ERROR_provisioning_not_connected = 0x1116,
ERROR_provisioning_io_error = 0x1117,
ERROR_provisioning_invalid_timeout = 0x1118,
ERROR_provisioning_ts3server_not_found = 0x1119,
ERROR_provisioning_no_permission = 0x111A,
/// @endcond
// 0x12 - 0x15 are reserved in rare
// screen share
ERROR_already_registered = 0x1600,
ERROR_stream_session_limit_reached = 0x1601,
ERROR_stream_session_not_found = 0x1602,
ERROR_stream_unknown = 0x1603,
ERROR_stream_not_participating = 0x1604,
ERROR_not_streamer = 0x1605,
ERROR_already_joined = 0x1606,
ERROR_join_request_not_found = 0x1607,
ERROR_sfu_failed_to_start = 0x1608,
};
#endif
@@ -1,236 +0,0 @@
#ifndef TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#define TS_SESSION_SUBSCRIBER_PROTOCOL_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// Version definitions.
#define TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1 1
// Protocol used for communication between the session subscriber and the session (a single stream).
// Commands are sent bidirectionally or unidirectionally between the parties.
// e.g. SESSION => SUBSCRIBER: ON_FRAME, ON_PAUSED_CHANGED
// e.g. SUBSCRIBER => SESSION: ON_FRAME_ACK, ON_RESIZE
// Command type enum with a lowercase type name.
typedef enum
{
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME = 0,
TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE,
TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED,
TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE,
TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK,
TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP,
TS_SESSION_SUBSCRIBER_CMD_REMOVE_SUBSCRIBER,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES,
TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED,
} ts_session_subscriber_command_type_t;
// Pixel format enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_I420 = 0,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_NV12,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ABGR,
TS_SESSION_SUBSCRIBER_PIXEL_FORMAT_ARGB,
} ts_session_subscriber_pixel_format_t;
// Buffer location enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_CPU = 0,
TS_SESSION_SUBSCRIBER_BUFFER_LOCATION_GPU
} ts_session_subscriber_buffer_location_t;
// Buffer type enum.
typedef enum
{
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_SINGLE = 0,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_MAIN,
TS_SESSION_SUBSCRIBER_BUFFER_TYPE_FRONT_BACK_SUB
} ts_session_subscriber_buffer_type_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(push, 4)
#endif
// Main buffer header for shared CPU Memory Front/Back Buffers.
// The Main Buffer contains metadata about the current front/back buffer and the versioning for both the main and sub buffer.
// The information from the main buffer can be used to always read the front buffer.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t front_buffer_index; // index of the front buffer. (0: main buffer, 1: sub buffer)
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_main_buffer_header_t;
// Sub buffer header.
typedef struct
{
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
} ts_session_subscriber_sub_buffer_header_t;
// Single frame buffer header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // length of valid data of this buffer.
uint32_t pixel_data_offset; // offset of pixel data from the beginning of this buffer. (in bytes, total length of pixel data = length - pixel_data_offset)
uint32_t frame_id; // frame id. (used to skip duplicated frames)
uint32_t width; // width of the frame.
uint32_t height; // height of the frame.
ts_session_subscriber_pixel_format_t pixel_format; // pixel format.
} ts_session_subscriber_single_frame_buffer_header_t;
// Command header.
typedef struct
{
uint32_t version; // E.g., TS_SESSION_SUBSCRIBER_COMMAND_VERSION_1.
uint32_t length; // Total message length (header + payload).
ts_session_subscriber_command_type_t type;
uint64_t target_session_id; // always set to the target session id this command is for or is originating from.
uint64_t target_subscriber_id; // 0 if broadcast.
} ts_session_subscriber_command_header_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME.
// The frame data is not included in the message, but is attached seperately or was sent beforehand. The buffer is identified by it's id.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_id; // buffer id, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_frame_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_FRAME_ACK
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t frame_id;
} ts_session_subscriber_on_frame_ack_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RESIZE.
// SUBSCRIBER => SESSION.
typedef struct
{
uint32_t width;
uint32_t height;
} ts_session_subscriber_on_resize_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_PAUSED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t paused; // 0 or 1.
} ts_session_subscriber_on_paused_changed_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_SINGLE.
// Contains a single frame buffer. The header is of format |ts_session_subscriber_single_frame_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
ts_session_subscriber_buffer_type_t buffer_type;
} ts_session_subscriber_on_buffer_single_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_BUFFER_FRONT_BACK.
// Contains a main buffer and a sub buffer. The main buffer header
// contains metadata about the current front/back buffer and
// is of type |ts_session_subscriber_main_buffer_header_t|.
// The sub buffer's header is of type |ts_session_subscriber_sub_buffer_header_t|.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t main_buffer_ptr; // main buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t main_buffer_length;
uint64_t sub_buffer_ptr; // sub buffer pointer, in general the memory address of the buffer in the client lib process.
uint32_t sub_buffer_length;
ts_session_subscriber_buffer_location_t buffer_location;
} ts_session_subscriber_on_buffer_front_back_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER.
// SUBSCRIBER => SESSION.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ADD_SUBSCRIBER_RESP.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t request_id;
} ts_session_subscriber_add_subscriber_resp_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_RELEASE_BUFFER.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr; // buffer pointer, in general the memory address of the buffer in the client lib process.
} ts_session_subscriber_on_release_buffer_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_FRAMES.
// SESSION => SUBSCRIBER.
typedef struct
{
uint64_t buffer_ptr;
int bits_per_sample;
int sample_rate;
uint32_t number_of_channels;
uint32_t number_of_frames;
int64_t absolute_capture_timestamp_ms;
float volume;
} ts_session_subscriber_on_audio_frames_payload_t;
// Payload for TS_SESSION_SUBSCRIBER_CMD_ON_AUDIO_ENABLED_CHANGED.
// SESSION => SUBSCRIBER.
typedef struct
{
uint32_t audio_enabled;
} ts_session_subscriber_on_audio_enabled_changed_payload_t;
// Overall Command structure.
typedef struct
{
ts_session_subscriber_command_header_t header;
union
{
ts_session_subscriber_on_frame_payload_t frame;
ts_session_subscriber_on_resize_payload_t resize;
ts_session_subscriber_on_paused_changed_payload_t paused;
ts_session_subscriber_on_frame_ack_payload_t frame_ack;
ts_session_subscriber_on_buffer_single_payload_t buffer_single;
ts_session_subscriber_on_buffer_front_back_payload_t buffer_front_back;
ts_session_subscriber_on_release_buffer_payload_t release_buffer;
ts_session_subscriber_add_subscriber_payload_t add_subscriber;
ts_session_subscriber_add_subscriber_resp_payload_t add_subscriber_resp;
ts_session_subscriber_on_audio_frames_payload_t audio_frames;
ts_session_subscriber_on_audio_enabled_changed_payload_t audio_enabled_changed;
} payload;
} ts_session_subscriber_command_t;
#if defined(__clang__) || defined(__GNUC__) || defined(_MSC_VER)
#pragma pack(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif // TS_SESSION_SUBSCRIBER_PROTOCOL_H_
@@ -1,29 +0,0 @@
####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
####### Any changes to this file will be overwritten by the next CMake run ####
####### The input file was team_clientConfig.cmake.in ########
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
macro(set_and_check _var _file)
set(${_var} "${_file}")
if(NOT EXISTS "${_file}")
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
endif()
endmacro()
macro(check_required_components _NAME)
foreach(comp ${${_NAME}_FIND_COMPONENTS})
if(NOT ${_NAME}_${comp}_FOUND)
if(${_NAME}_FIND_REQUIRED_${comp})
set(${_NAME}_FOUND FALSE)
endif()
endif()
endforeach()
endmacro()
####################################################################################
include("${CMAKE_CURRENT_LIST_DIR}/team_clientTargets.cmake")
check_required_components(team_client)
@@ -1,19 +0,0 @@
#----------------------------------------------------------------
# Generated CMake target import file for configuration "Release".
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Import target "teamspeak::client" for configuration "Release"
set_property(TARGET teamspeak::client APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(teamspeak::client PROPERTIES
IMPORTED_IMPLIB_RELEASE "${_IMPORT_PREFIX}/lib/teamspeak_sdk_client.lib"
IMPORTED_LOCATION_RELEASE "${_IMPORT_PREFIX}/bin/teamspeak_sdk_client.dll"
)
list(APPEND _cmake_import_check_targets teamspeak::client )
list(APPEND _cmake_import_check_files_for_teamspeak::client "${_IMPORT_PREFIX}/lib/teamspeak_sdk_client.lib" "${_IMPORT_PREFIX}/bin/teamspeak_sdk_client.dll" )
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
@@ -1,121 +0,0 @@
# Generated by CMake
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
if(CMAKE_VERSION VERSION_LESS "2.8.3")
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
cmake_policy(PUSH)
cmake_policy(VERSION 2.8.3...4.0)
#----------------------------------------------------------------
# Generated CMake target import file.
#----------------------------------------------------------------
# Commands may need to know the format version.
set(CMAKE_IMPORT_FILE_VERSION 1)
# Protect against multiple inclusion, which would fail when already imported targets are added once more.
set(_cmake_targets_defined "")
set(_cmake_targets_not_defined "")
set(_cmake_expected_targets "")
foreach(_cmake_expected_target IN ITEMS teamspeak::client)
list(APPEND _cmake_expected_targets "${_cmake_expected_target}")
if(TARGET "${_cmake_expected_target}")
list(APPEND _cmake_targets_defined "${_cmake_expected_target}")
else()
list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}")
endif()
endforeach()
unset(_cmake_expected_target)
if(_cmake_targets_defined STREQUAL _cmake_expected_targets)
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
unset(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
return()
endif()
if(NOT _cmake_targets_defined STREQUAL "")
string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}")
string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}")
message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n")
endif()
unset(_cmake_targets_defined)
unset(_cmake_targets_not_defined)
unset(_cmake_expected_targets)
# Compute the installation prefix relative to this file.
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
set(_IMPORT_PREFIX "")
endif()
# Create imported target teamspeak::client
add_library(teamspeak::client SHARED IMPORTED)
set_target_properties(teamspeak::client PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include"
)
if(NOT CMAKE_VERSION VERSION_LESS "3.23.0")
target_sources(teamspeak::client
INTERFACE
FILE_SET "public_headers"
TYPE "HEADERS"
BASE_DIRS "${_IMPORT_PREFIX}/include"
FILES "${_IMPORT_PREFIX}/include/teamspeak/clientlib.h" "${_IMPORT_PREFIX}/include/teamspeak/clientlib_sdk.h" "${_IMPORT_PREFIX}/include/teamspeak/video/session_subscriber_protocol.h"
)
else()
set_property(TARGET teamspeak::client
APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
"${_IMPORT_PREFIX}/include"
)
endif()
# Load information for each installed configuration.
file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/team_clientTargets-*.cmake")
foreach(_cmake_config_file IN LISTS _cmake_config_files)
include("${_cmake_config_file}")
endforeach()
unset(_cmake_config_file)
unset(_cmake_config_files)
# Cleanup temporary variables.
set(_IMPORT_PREFIX)
# Loop over all imported files and verify that they actually exist
foreach(_cmake_target IN LISTS _cmake_import_check_targets)
if(CMAKE_VERSION VERSION_LESS "3.28"
OR NOT DEFINED _cmake_import_check_xcframework_for_${_cmake_target}
OR NOT IS_DIRECTORY "${_cmake_import_check_xcframework_for_${_cmake_target}}")
foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}")
if(NOT EXISTS "${_cmake_file}")
message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file
\"${_cmake_file}\"
but this file does not exist. Possible reasons include:
* The file was deleted, renamed, or moved to another location.
* An install or uninstall procedure did not complete successfully.
* The installation package was faulty and contained
\"${CMAKE_CURRENT_LIST_FILE}\"
but not all the files it references.
")
endif()
endforeach()
endif()
unset(_cmake_file)
unset("_cmake_import_check_files_for_${_cmake_target}")
endforeach()
unset(_cmake_target)
unset(_cmake_import_check_targets)
# This file does not depend on other imported targets which have
# been exported from the same project but in a separate export set.
# Commands beyond this point should not need to know the version.
set(CMAKE_IMPORT_FILE_VERSION)
cmake_policy(POP)
@@ -1,123 +0,0 @@
/* Compatability shim for jQuery and underscores.js.
*
* Copyright Sphinx contributors
* Released under the two clause BSD licence
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
-914
View File
@@ -1,914 +0,0 @@
/*
* Sphinx stylesheet -- basic theme.
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
div.section::after {
display: block;
content: '';
clear: left;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox form.search {
overflow: hidden;
}
div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
padding: 0.25em;
box-sizing: border-box;
}
div.sphinxsidebar #searchbox input[type="submit"] {
float: left;
width: 20%;
border-left: none;
padding: 0.25em;
box-sizing: border-box;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin-top: 10px;
}
ul.search li {
padding: 5px 0;
}
ul.search li a {
font-weight: bold;
}
ul.search li p.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
margin-left: auto;
margin-right: auto;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}
table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- domain module index --------------------------------------------------- */
table.modindextable td {
padding: 2px;
border-collapse: collapse;
}
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
max-width: 800px;
}
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
a:visited {
color: #551A8B;
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, figure.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, figure.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, figure.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
img.align-default, figure.align-default, .figure.align-default {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-default {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar,
aside.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px;
background-color: #ffe;
width: 40%;
float: right;
clear: right;
overflow-x: auto;
}
p.sidebar-title {
font-weight: bold;
}
nav.contents,
aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
nav.contents,
aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- content of sidebars/topics/admonitions -------------------------------- */
div.sidebar > :last-child,
aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
aside.sidebar::after,
nav.contents::after,
aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
display: block;
content: '';
clear: both;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
margin-top: 10px;
margin-bottom: 10px;
border: 0;
border-collapse: collapse;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
table.align-default {
margin-left: auto;
margin-right: auto;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
th > :first-child,
td > :first-child {
margin-top: 0px;
}
th > :last-child,
td > :last-child {
margin-bottom: 0px;
}
/* -- figures --------------------------------------------------------------- */
div.figure, figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption, figcaption {
padding: 0.3em;
}
div.figure p.caption span.caption-number,
figcaption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text,
figcaption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
table.field-list td, table.field-list th {
border: 0 !important;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
/* -- hlist styles ---------------------------------------------------------- */
table.hlist {
margin: 1em 0;
}
table.hlist td {
vertical-align: top;
}
/* -- object description styles --------------------------------------------- */
.sig {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
}
.sig-name, code.descname {
background-color: transparent;
font-weight: bold;
}
.sig-name {
font-size: 1.1em;
}
code.descname {
font-size: 1.2em;
}
.sig-prename, code.descclassname {
background-color: transparent;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.sig-param.n {
font-style: italic;
}
/* C++ specific styling */
.sig-inline.c-texpr,
.sig-inline.cpp-texpr {
font-family: unset;
}
.sig.c .k, .sig.c .kt,
.sig.cpp .k, .sig.cpp .kt {
color: #0033B3;
}
.sig.c .m,
.sig.cpp .m {
color: #1750EB;
}
.sig.c .s, .sig.c .sc,
.sig.cpp .s, .sig.cpp .sc {
color: #067D17;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
:not(li) > ol > li:first-child > :first-child,
:not(li) > ul > li:first-child > :first-child {
margin-top: 0px;
}
:not(li) > ol > li:last-child > :last-child,
:not(li) > ul > li:last-child > :last-child {
margin-bottom: 0px;
}
ol.simple ol p,
ol.simple ul p,
ul.simple ol p,
ul.simple ul p {
margin-top: 0;
}
ol.simple > li:not(:first-child) > p,
ul.simple > li:not(:first-child) > p {
margin-top: 0;
}
ol.simple p,
ul.simple p {
margin-bottom: 0;
}
aside.footnote > span,
div.citation > span {
float: left;
}
aside.footnote > span:last-of-type,
div.citation > span:last-of-type {
padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
margin-bottom: 0em;
}
aside.footnote > p:last-of-type:after,
div.citation > p:last-of-type:after {
content: "";
clear: both;
}
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
}
dl.field-list > dt {
font-weight: bold;
word-break: break-word;
padding-left: 0.5em;
padding-right: 5px;
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
margin-left: 0em;
margin-bottom: 0em;
}
dl {
margin-bottom: 15px;
}
dd > :first-child {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
.sig dd {
margin-top: 0px;
margin-bottom: 0px;
}
.sig dl {
margin-top: 0px;
margin-bottom: 0px;
}
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
}
dt:target, span.highlighted {
background-color: #fbe54e;
}
rect.highlighted {
fill: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
.classifier:before {
font-style: normal;
margin: 0 0.5em;
content: ":";
display: inline-block;
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
.translated {
background-color: rgba(207, 255, 207, 0.2)
}
.untranslated {
background-color: rgba(255, 207, 207, 0.2)
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
pre, div[class*="highlight-"] {
clear: both;
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
white-space: nowrap;
}
div[class*="highlight-"] {
margin: 1em 0;
}
td.linenos pre {
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
display: block;
}
table.highlighttable tbody {
display: block;
}
table.highlighttable tr {
display: flex;
}
table.highlighttable td {
margin: 0;
padding: 0;
}
table.highlighttable td.linenos {
padding-right: 0.5em;
}
table.highlighttable td.code {
flex: 1;
overflow: hidden;
}
.highlight .hll {
display: block;
}
div.highlight pre,
table.highlighttable pre {
margin: 0;
}
div.code-block-caption + div {
margin-top: 0;
}
div.code-block-caption {
margin-top: 1em;
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
table.highlighttable td.linenos,
span.linenos,
div.highlight span.gp { /* gp: Generic.Prompt */
user-select: none;
-webkit-user-select: text; /* Safari fallback only */
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
margin: 1em 0;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
span.eqno a.headerlink {
position: absolute;
z-index: 1;
}
div.math:hover a.headerlink {
visibility: visible;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}
@@ -1 +0,0 @@
.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px}
File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 434 KiB

Some files were not shown because too many files have changed in this diff Show More