ts3plugin-sys 0.5.0

FFI bindings to the TeamSpeak3 plugin API
Documentation
// Uses lots of alignment which rustfmt destroys
#![cfg_attr(rustfmt, rustfmt::skip)]

use std::os::raw::*;

use crate::public_definitions::*;
use crate::plugin_definitions::*;

/// Functions exported to plugin from main binary
#[repr(C)]
pub struct Ts3Functions {
	pub get_client_lib_version:                         extern fn(result: *mut *mut c_char) -> c_uint,
	pub get_client_lib_version_number:                  extern fn(result: *mut u64) -> c_uint,
	pub spawn_new_server_connection_handler:            extern fn(port: c_int, result: *mut u64) -> c_uint,
	pub destroy_server_connection_handler:              extern fn(server_connection_handler_id: u64) -> c_uint,

	/// Error handling
	pub get_error_message:                              extern fn(error_code: c_uint, error: *mut *mut c_char) -> c_uint,

	/// Memory management
	pub free_memory:                                    extern fn(pointer: *mut c_void) -> c_uint,

	/// Logging
	pub log_message:                                    extern fn(log_message: *const c_char, severity: LogLevel, channel: *const c_char, log_id: u64) -> c_uint,

	/// Sound
	pub get_playback_device_list:                       extern fn(mode_id: *const c_char, result: *mut *mut *mut *mut c_char) -> c_uint,
	pub get_playback_mode_list:                         extern fn(result: *mut *mut *mut c_char) -> c_uint,
	pub get_capture_device_list:                        extern fn(mode_id: *const c_char, result: *mut *mut *mut *mut c_char) -> c_uint,
	pub get_capture_mode_list:                          extern fn(result: *mut *mut *mut c_char) -> c_uint,
	pub get_default_playback_device:                    extern fn(mode_id: *const c_char, result: *mut *mut *mut c_char) -> c_uint,
	pub get_default_playback_mode:                      extern fn(result: *mut *mut c_char) -> c_uint,
	pub get_default_capture_device:                     extern fn(mode_id: *const c_char, result: *mut *mut *mut c_char) -> c_uint,
	pub get_default_capture_mode:                       extern fn(result: *mut *mut c_char) -> c_uint,
	pub open_playback_device:                           extern fn(server_connection_handler_id: u64, mode_id: *const c_char, playback_device: *const c_char) -> c_uint,
	pub open_capture_device:                            extern fn(server_connection_handler_id: u64, mode_id: *const c_char, capture_device: *const c_char) -> c_uint,
	pub get_current_playback_device_name:               extern fn(server_connection_handler_id: u64, result: *mut *mut c_char, is_default: *mut c_int) -> c_uint,
	pub get_current_play_back_mode:                     extern fn(server_connection_handler_id: u64, result: *mut *mut c_char) -> c_uint,
	pub get_current_capture_device_name:                extern fn(server_connection_handler_id: u64, result: *mut *mut c_char, is_default: *mut c_int) -> c_uint,
	pub get_current_capture_mode:                       extern fn(server_connection_handler_id: u64, result: *mut *mut c_char) -> c_uint,
	pub initiate_graceful_playback_shutdown:            extern fn(server_connection_handler_id: u64) -> c_uint,
	pub close_playback_device:                          extern fn(server_connection_handler_id: u64) -> c_uint,
	pub close_capture_device:                           extern fn(server_connection_handler_id: u64) -> c_uint,
	pub activate_capture_device:                        extern fn(server_connection_handler_id: u64) -> c_uint,
	pub play_wave_file_handle:                          extern fn(server_connection_handler_id: u64, path: *const c_char, play_loop: c_int, wave_handle: *mut u64) -> c_uint,
	pub pause_wave_file_handle:                         extern fn(server_connection_handler_id: u64, wave_handle: u64, pause: c_int) -> c_uint,
	pub close_wave_file_handle:                         extern fn(server_connection_handler_id: u64, wave_handle: u64) -> c_uint,
	pub play_wave_file:                                 extern fn(server_connection_handler_id: u64, path: *const c_char) -> c_uint,
	pub register_custom_device:                         extern fn(device_id: *const c_char, device_display_name: *const c_char, cap_frequency: c_int, cap_channels: c_int, play_frequency: c_int, play_channels: c_int) -> c_uint,
	pub unregister_custom_device:                       extern fn(device_id: *const c_char) -> c_uint,
	pub process_custom_capture_data:                    extern fn(device_name: *const c_char, buffer: *const c_short, samples: c_int) -> c_uint,
	pub acquire_custom_playback_data:                   extern fn(device_name: *const c_char, buffer: *mut c_short, samples: c_int) -> c_uint,

	/// Preprocessor
	pub get_pre_processor_info_value_float:             extern fn(server_connection_handler_id: u64, ident: *const c_char, result: *mut c_float) -> c_uint,
	pub get_pre_processor_config_value:                 extern fn(server_connection_handler_id: u64, ident: *const c_char, result: *mut *mut c_char) -> c_uint,
	pub set_pre_processor_config_value:                 extern fn(server_connection_handler_id: u64, ident: *const c_char, value: *const c_char) -> c_uint,

	/// Encoder
	pub get_encode_config_value:                        extern fn(server_connection_handler_id: u64, ident: *const c_char, result: *mut *mut c_char) -> c_uint,

	/// Playback
	pub get_playback_config_value_as_float:             extern fn(server_connection_handler_id: u64, ident: *const c_char, result: *mut c_float) -> c_uint,
	pub set_playback_config_value:                      extern fn(server_connection_handler_id: u64, ident: *const c_char, value: *const c_char) -> c_uint,
	pub set_client_volume_modifier:                     extern fn(server_connection_handler_id: u64, client_id: u16, value: c_float) -> c_uint,

	/// Recording
	pub start_voice_recording:                          extern fn(server_connection_handler_id: u64) -> c_uint,
	pub stop_voice_recording:                           extern fn(server_connection_handler_id: u64) -> c_uint,

	/// 3D sound positioning
	pub systemset3d_listener_attributes:                extern fn(server_connection_handler_id: u64, position: *const Ts3Vector, forward: *const Ts3Vector, up: *const Ts3Vector) -> c_uint,
	pub set3d_wave_attributes:                          extern fn(server_connection_handler_id: u64, wave_handle: u64, position: *const Ts3Vector) -> c_uint,
	pub systemset3d_settings:                           extern fn(server_connection_handler_id: u64, distance_factor: c_float, rolloff_scale: c_float) -> c_uint,
	pub channelset3d_attributes:                        extern fn(server_connection_handler_id: u64, client_id: u16, position: *const Ts3Vector) -> c_uint,

	/// Interaction with the server
	pub start_connection:                               extern fn(server_connection_handler_id: u64, identity: *const c_char, ip: *const c_char, port: c_uint, nickname: *const c_char, default_channel_array: *const *const c_char, default_channel_password: *const c_char, server_password: *const c_char) -> c_uint,
	pub stop_connection:                                extern fn(server_connection_handler_id: u64, quit_message: *const c_char) -> c_uint,
	pub request_client_move:                            extern fn(server_connection_handler_id: u64, client_id: u16, new_channel_id: u64, password: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_client_variables:                       extern fn(server_connection_handler_id: u64, client_id: u16, return_code: *const c_char) -> c_uint,
	pub request_client_kick_from_channel:               extern fn(server_connection_handler_id: u64, client_id: u16, kick_reason: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_client_kick_from_server:                extern fn(server_connection_handler_id: u64, client_id: u16, kick_reason: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_channel_delete:                         extern fn(server_connection_handler_id: u64, channel_id: u64, force: c_int, return_code: *const c_char) -> c_uint,
	pub request_channel_move:                           extern fn(server_connection_handler_id: u64, channel_id: u64, new_channel_parent_id: u64, new_channel_order: u64, return_code: *const c_char) -> c_uint,
	pub request_send_private_text_msg:                  extern fn(server_connection_handler_id: u64, message: *const c_char, target_client_id: u16, return_code: *const c_char) -> c_uint,
	pub request_send_channel_text_msg:                  extern fn(server_connection_handler_id: u64, message: *const c_char, target_channel_id: u64, return_code: *const c_char) -> c_uint,
	pub request_send_server_text_msg:                   extern fn(server_connection_handler_id: u64, message: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_connection_info:                        extern fn(server_connection_handler_id: u64, client_id: u16, return_code: *const c_char) -> c_uint,
	pub request_client_set_whisper_list:                extern fn(server_connection_handler_id: u64, client_id: u16, target_channel_id_array: *const u64, target_client_id_array: *const u16, return_code: *const c_char) -> c_uint,
	pub request_channel_subscribe:                      extern fn(server_connection_handler_id: u64, channel_id_array: *const u64, return_code: *const c_char) -> c_uint,
	pub request_channel_subscribe_all:                  extern fn(server_connection_handler_id: u64, return_code: *const c_char) -> c_uint,
	pub request_channel_unsubscribe:                    extern fn(server_connection_handler_id: u64, channel_id_array: *const u64, return_code: *const c_char) -> c_uint,
	pub request_channel_unsubscribe_all:                extern fn(server_connection_handler_id: u64, return_code: *const c_char) -> c_uint,
	pub request_channel_description:                    extern fn(server_connection_handler_id: u64, channel_id: u64, return_code: *const c_char) -> c_uint,
	pub request_mute_clients:                           extern fn(server_connection_handler_id: u64, client_id_array: *const u16, return_code: *const c_char) -> c_uint,
	pub requset_unmute_clients:                         extern fn(server_connection_handler_id: u64, client_id_array: *const u16, return_code: *const c_char) -> c_uint,
	pub request_client_poke:                            extern fn(server_connection_handler_id: u64, client_id: u16, message: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_client_ids:                             extern fn(server_connection_handler_id: u64, client_unique_identifier: *const c_char, return_code: *const c_char) -> c_uint,
	pub client_chat_closed:                             extern fn(server_connection_handler_id: u64, client_unique_identifier: *const c_char, client_id: u16, return_code: *const c_char) -> c_uint,
	pub client_chat_composing:                          extern fn(server_connection_handler_id: u64, client_id: u16, return_code: *const c_char) -> c_uint,
	pub request_server_temporary_password_add:          extern fn(server_connection_handler_id: u64, password: *const c_char, description: *const c_char, duration: u64, target_channel_id: u64, target_channel_pw: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_server_temporary_password_del:          extern fn(server_connection_handler_id: u64, password: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_server_temporary_password_list:         extern fn(server_connection_handler_id: u64, return_code: *const c_char) -> c_uint,

	/// Access clientlib information

	/// Query own client id
	pub get_client_id:                                  extern fn(server_connection_handler_id: u64, result: *mut u16) -> c_uint,

	/// Client info
	pub get_client_self_variable_as_int:                extern fn(server_connection_handler_id: u64, flag: usize, result: *mut c_int) -> c_uint,
	pub get_client_self_variable_as_string:             extern fn(server_connection_handler_id: u64, flag: usize, result: *mut *mut c_char) -> c_uint,
	pub set_client_self_variable_as_int:                extern fn(server_connection_handler_id: u64, flag: usize, value: c_int) -> c_uint,
	pub set_client_self_variable_as_string:             extern fn(server_connection_handler_id: u64, flag: usize, value: *const c_char) -> c_uint,
	pub flush_client_self_updates:                      extern fn(server_connection_handler_id: u64, return_code: *const c_char) -> c_uint,
	pub get_client_variable_as_int:                     extern fn(server_connection_handler_id: u64, client_id: u16, flag: usize, result: *mut c_int) -> c_uint,
	pub get_client_variable_as_uint64:                  extern fn(server_connection_handler_id: u64, client_id: u16, flag: usize, result: *mut u64) -> c_uint,
	pub get_client_variable_as_string:                  extern fn(server_connection_handler_id: u64, client_id: u16, flag: usize, result: *mut *mut c_char) -> c_uint,
	pub get_client_list:                                extern fn(server_connection_handler_id: u64, result: *mut *mut u16) -> c_uint,
	pub get_channel_of_client:                          extern fn(server_connection_handler_id: u64, client_id: u16, result: *mut u64) -> c_uint,

	/// Channel info
	pub get_channel_variable_as_int:                    extern fn(server_connection_handler_id: u64, channel_id: u64, flag: usize, result: *mut c_int) -> c_uint,
	pub get_channel_variable_as_uint64:                 extern fn(server_connection_handler_id: u64, channel_id: u64, flag: usize, result: *mut u64) -> c_uint,
	pub get_channel_variable_as_string:                 extern fn(server_connection_handler_id: u64, channel_id: u64, flag: usize, result: *mut *mut c_char) -> c_uint,
	pub get_channel_id_from_channel_names:              extern fn(server_connection_handler_id: u64, channel_name_array: *mut *mut c_char, result: *mut u64) -> c_uint,
	pub set_channel_variable_as_int:                    extern fn(server_connection_handler_id: u64, channel_id: u64, flag: usize, value: c_int) -> c_uint,
	pub set_channel_variable_as_uint64:                 extern fn(server_connection_handler_id: u64, channel_id: u64, flag: usize, value: u64) -> c_uint,
	pub set_channel_variable_as_string:                 extern fn(server_connection_handler_id: u64, channel_id: u64, flag: usize, value: *const c_char) -> c_uint,
	pub flush_channel_updates:                          extern fn(server_connection_handler_id: u64, channel_id: u64, return_code: *const c_char) -> c_uint,
	pub flush_channel_creation:                         extern fn(server_connection_handler_id: u64, channel_id: u64, return_code: *const c_char) -> c_uint,
	pub get_channel_list:                               extern fn(server_connection_handler_id: u64, result: *mut *mut u64) -> c_uint,
	pub get_channel_client_list:                        extern fn(server_connection_handler_id: u64, channel_id: u64, result: *mut *mut u16) -> c_uint,
	pub get_parent_channel_of_channel:                  extern fn(server_connection_handler_id: u64, channel_id: u64, result: *mut u64) -> c_uint,

	/// Server info
	pub get_server_connection_handler_list:             extern fn(result: *mut *mut u64) -> c_uint,
	pub get_server_variable_as_int:                     extern fn(server_connection_handler_id: u64, flag: usize, result: *mut c_int) -> c_uint,
	pub get_server_variable_as_uint64:                  extern fn(server_connection_handler_id: u64, flag: usize, result: *mut u64) -> c_uint,
	pub get_server_variable_as_string:                  extern fn(server_connection_handler_id: u64, flag: usize, result: *mut *mut c_char) -> c_uint,
	pub request_server_variables:                       extern fn(server_connection_handler_id: u64) -> c_uint,

	/// Connection info
	pub get_connection_status:                          extern fn(server_connection_handler_id: u64, result: *mut c_int) -> c_uint,
	pub get_connection_variable_as_uint64:              extern fn(server_connection_handler_id: u64, client_id: u16, flag: usize, result: *mut u64) -> c_uint,
	pub get_connection_variable_as_double:              extern fn(server_connection_handler_id: u64, client_id: u16, flag: usize, result: *mut c_double) -> c_uint,
	pub get_connection_variable_as_string:              extern fn(server_connection_handler_id: u64, client_id: u16, flag: usize, result: *mut *mut c_char) -> c_uint,
	pub clean_up_connection_info:                       extern fn(server_connection_handler_id: u64, client_id: u16) -> c_uint,

	/// Client related
	pub request_client_dbid_from_uid:                   extern fn(server_connection_handler_id: u64, client_unique_identifier: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_client_name_from_uid:                   extern fn(server_connection_handler_id: u64, client_unique_identifier: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_client_name_from_dbid:                  extern fn(server_connection_handler_id: u64, client_database_id: u64, return_code: *const c_char) -> c_uint,
	pub request_client_edit_description:                extern fn(server_connection_handler_id: u64, client_id: u16, client_description: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_client_set_is_talker:                   extern fn(server_connection_handler_id: u64, client_id: u16, is_talker: c_int, return_code: *const c_char) -> c_uint,
	pub request_is_talker:                              extern fn(server_connection_handler_id: u64, is_talker_request: c_int, is_talker_request_message: *const c_char, return_code: *const c_char) -> c_uint,

	/// Plugin related
	pub request_send_client_query_command:              extern fn(server_connection_handler_id: u64, command: *const c_char, return_code: *const c_char) -> c_uint,

	/// Filetransfer
	pub get_transfer_file_name:                         extern fn(transfer_id: u16, result: *mut *mut c_char) -> c_uint,
	pub get_transfer_file_path:                         extern fn(transfer_id: u16, result: *mut *mut c_char) -> c_uint,
	pub get_transfer_file_size:                         extern fn(transfer_id: u16, result: *mut u64) -> c_uint,
	pub get_transfer_file_size_done:                    extern fn(transfer_id: u16, result: *mut u64) -> c_uint,
	/// 1 == upload, 0 == download
	pub is_transfer_sender:                             extern fn(transfer_id: u16, result: *mut c_int) -> c_uint,
	pub get_transfer_status:                            extern fn(transfer_id: u16, result: *mut c_int) -> c_uint,
	pub get_current_transfer_speed:                     extern fn(transfer_id: u16, result: *mut c_float) -> c_uint,
	pub get_average_transfer_speed:                     extern fn(transfer_id: u16, result: *mut c_float) -> c_uint,
	pub get_transfer_run_time:                          extern fn(transfer_id: u16, result: *mut u64) -> c_uint,
	pub send_file:                                      extern fn(server_connection_handler_id: u64, channel_id: u64, channel_pw: *const c_char, file: *const c_char, overwrite: c_int, resume: c_int, source_directory: *const c_char, result: *mut u16, return_code: *const c_char) -> c_uint,
	pub request_file:                                   extern fn(server_connection_handler_id: u64, channel_id: u64, channel_pw: *const c_char, file: *const c_char, overwrite: c_int, resume: c_int, destination_directory: *const c_char, result: *mut u16, return_code: *const c_char) -> c_uint,
	pub halt_transfer:                                  extern fn(server_connection_handler_id: u64, transfer_id: u16, delete_unfinished_file: c_int, return_code: *const c_char) -> c_uint,
	pub request_file_list:                              extern fn(server_connection_handler_id: u64, channel_id: u64, channel_pw: *const c_char, path: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_file_info:                              extern fn(server_connection_handler_id: u64, channel_id: u64, channel_pw: *const c_char, file: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_delete_file:                            extern fn(server_connection_handler_id: u64, channel_id: u64, channel_pw: *const c_char, file: *mut *const c_char, return_code: *const c_char) -> c_uint,
	pub request_create_directory:                       extern fn(server_connection_handler_id: u64, channel_id: u64, channel_pw: *const c_char, directory_path: *const char, return_code: *const char) -> c_uint,
	pub requset_rename_file:                            extern fn(server_connection_handler_id: u64, from_channel_id: u64, channel_pw: *const c_char, to_channel_id: u64, to_channel_pw: *const c_char, old_file: *const c_char, new_file: *const c_char, return_code: *const c_char) -> c_uint,

	/// Offline message management
	pub request_message_add:                            extern fn(server_connection_handler_id: u64, to_client_uid: *const c_char, subject: *const c_char, message: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_message_del:                            extern fn(server_connection_handler_id: u64, message_id: u64, return_code: *const c_char) -> c_uint,
	pub request_message_get:                            extern fn(server_connection_handler_id: u64, message_id: u64, return_code: *const c_char) -> c_uint,
	pub request_message_list:                           extern fn(server_connection_handler_id: u64, return_code: *const c_char) -> c_uint,
	pub request_message_update_flag:                    extern fn(server_connection_handler_id: u64, message_id: u64, flag: c_int, return_code: *const c_char) -> c_uint,

	/// Interacting with the server - confirming passwords
	pub verify_server_password:                         extern fn(server_connection_handler_id: u64, server_password: *const c_char, return_code: *const c_char) -> c_uint,
	pub verify_channel_password:                        extern fn(server_connection_handler_id: u64, channel_id: u64, channel_password: *const c_char, return_code: *const c_char) -> c_uint,

	/// Interacting with the server - banning
	pub banclient:                                      extern fn(server_connection_handler_id: u64, client_id: u16, time_in_seconds: u64, ban_reason: *const c_char, return_code: *const c_char) -> c_uint,
	pub banadd:                                         extern fn(server_connection_handler_id: u64, ip_reg_exp: *const c_char, name_regexp: *const c_char, unique_identity: *const c_char, myts_id: *const c_char, time_in_seconds: u64, ban_reason: *const c_char, return_code: *const c_char) -> c_uint,
	pub banclient_dbid:                                 extern fn(server_connection_handler_id: u64, client_dbid: u64, time_in_seconds: u64, ban_reason: *const c_char, return_code: *const c_char) -> c_uint,
	pub bandel:                                         extern fn(server_connection_handler_id: u64, ban_id: u64, return_code: *const c_char) -> c_uint,
	pub bandelall:                                      extern fn(server_connection_handler_id: u64, return_code: *const c_char) -> c_uint,
	pub request_ban_list:                               extern fn(server_connection_handler_id: u64, start: u64, duration: c_uint, return_code: *const c_char) -> c_uint,

	/// Interacting with the server - complain
	pub request_complain_add:                           extern fn(server_connection_handler_id: u64, target_client_database_id: u64, complain_reason: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_complain_del:                           extern fn(server_connection_handler_id: u64, target_client_database_id: u64, from_client_database_id: u64, return_code: *const c_char) -> c_uint,
	pub request_complain_del_all:                       extern fn(server_connection_handler_id: u64, target_client_database_id: u64, return_code: *const c_char) -> c_uint,
	pub request_complain_list:                          extern fn(server_connection_handler_id: u64, target_client_database_id: u64, return_code: *const c_char) -> c_uint,

	/// Permissions
	pub request_server_group_list:                      extern fn(server_connection_handler_id: u64, return_code: *const c_char) -> c_uint,
	pub request_server_group_add:                       extern fn(server_connection_handler_id: u64, group_name: *const c_char, group_type: c_int, return_code: *const c_char) -> c_uint,
	pub request_server_group_del:                       extern fn(server_connection_handler_id: u64, server_group_id: u64, force: c_int, return_code: *const c_char) -> c_uint,
	pub request_server_group_add_client:                extern fn(server_connection_handler_id: u64, server_group_id: u64, client_database_id: u64, return_code: *const c_char) -> c_uint,
	pub request_server_group_del_client:                extern fn(server_connection_handler_id: u64, server_group_id: u64, client_database_id: u64, return_code: *const c_char) -> c_uint,
	pub request_server_groups_by_client_id:             extern fn(server_connection_handler_id: u64, client_database_id: u64, return_code: *const c_char) -> c_uint,
	pub request_server_group_add_perm:                  extern fn(server_connection_handler_id: u64, server_group_id: u64, continue_on_error: c_int, permission_id_array: *const c_uint, permission_value_array: *const c_int, permission_negated_array: *const c_int, permission_skip_array: *const c_int, array_size: c_int, return_code: *const c_char) -> c_uint,
	pub request_server_group_del_perm:                  extern fn(server_connection_handler_id: u64, server_group_id: u64, continue_on_error: c_int, permission_id_array: *const c_uint, array_size: c_int, return_code: *const c_char) -> c_uint,
	pub request_server_group_perm_list:                 extern fn(server_connection_handler_id: u64, server_group_id: u64, return_code: *const c_char) -> c_uint,
	pub request_server_group_client_list:               extern fn(server_connection_handler_id: u64, server_group_id: u64, with_names: c_int, return_code: *const c_char) -> c_uint,
	pub request_channel_group_list:                     extern fn(server_connection_handler_id: u64, return_code: *const c_char) -> c_uint,
	pub request_channel_group_add:                      extern fn(server_connection_handler_id: u64, group_name: *const c_char, group_type: c_int, return_code: *const c_char) -> c_uint,
	pub request_channel_group_del:                      extern fn(server_connection_handler_id: u64, channel_group_id: u64, force: c_int, return_code: *const c_char) -> c_uint,
	pub request_channel_group_add_perm:                 extern fn(server_connection_handler_id: u64, channel_group_id: u64, continue_on_error: c_int, permission_id_array: *const c_uint, permission_value_array: *const c_int, array_size: c_int, return_code: *const c_char) -> c_uint,
	pub request_channel_group_del_perm:                 extern fn(server_connection_handler_id: u64, channel_group_id: u64, continue_on_error: c_int, permission_id_array: *const c_uint, array_size: c_int, return_code: *const c_char) -> c_uint,
	pub request_channel_group_perm_list:                extern fn(server_connection_handler_id: u64, channel_group_id: u64, return_code: *const c_char) -> c_uint,
	pub request_set_client_channel_group:               extern fn(server_connection_handler_id: u64, channel_group_id_array: *const u64, channel_id_array: *const u64, client_database_id_array: *const u64, array_size: c_int, return_code: *const c_char) -> c_uint,
	pub request_channel_add_perm:                       extern fn(server_connection_handler_id: u64, channel_id: u64, permission_id_array: *const c_uint, permission_value_array: *const c_int, array_size: c_int, return_code: *const c_char) -> c_uint,
	pub request_channel_del_perm:                       extern fn(server_connection_handler_id: u64, channel_id: u64, permission_id_array: *const c_uint, array_size: c_int, return_code: *const c_char) -> c_uint,
	pub request_channel_perm_list:                      extern fn(server_connection_handler_id: u64, channel_id: u64, return_code: *const c_char) -> c_uint,
	pub request_client_add_perm:                        extern fn(server_connection_handler_id: u64, client_database_id: u64, permission_id_array: *const c_uint, permission_value_array: *const c_int, permission_skip_array: *const c_int, array_size: c_int, return_code: *const c_char) -> c_uint,
	pub request_client_del_perm:                        extern fn(server_connection_handler_id: u64, client_database_id: u64, permission_id_array: *const c_uint, array_size: c_int, return_code: *const c_char) -> c_uint,
	pub request_client_perm_list:                       extern fn(server_connection_handler_id: u64, client_database_id: u64, return_code: *const c_char) -> c_uint,
	pub request_channel_client_add_perm:                extern fn(server_connection_handler_id: u64, channel_id: u64, client_database_id: u64, permission_id_array: *const c_uint, permission_value_array: *const c_int, array_size: c_int, return_code: *const c_char) -> c_uint,
	pub request_channel_client_del_perm:                extern fn(server_connection_handler_id: u64, channel_id: u64, client_database_id: u64, permission_id_array: *const c_uint, array_size: c_int, return_code: *const c_char) -> c_uint,
	pub request_channel_client_perm_list:               extern fn(server_connection_handler_id: u64, channel_id: u64, client_database_id: u64, return_code: *const c_char) -> c_uint,
	pub priviledge_key_use:                             extern fn(server_connection_handler_id: u64, token_key: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_permission_list:                        extern fn(server_connection_handler_id: u64, return_code: *const c_char) -> c_uint,
	pub request_permission_overview:                    extern fn(server_connection_handler_id: u64, client_dbid: u64, channel_id: u64, return_code: *const c_char) -> c_uint,

	/// Helper functions
	pub client_property_string_to_flag:                 extern fn(client_property_string: *const c_char, result_flag: *mut usize) -> c_uint,
	pub channel_property_string_to_flag:                extern fn(channel_property_string: *const c_char, result_flag: *mut usize) -> c_uint,
	pub server_property_string_to_flag:                 extern fn(server_property_string: *const c_char, result_flag: *mut usize) -> c_uint,

	/// Client functions
	pub get_app_path:                                   extern fn(path: *mut c_char, max_len: usize),
	pub get_resources_path:                             extern fn(path: *mut c_char, max_len: usize),
	pub get_config_path:                                extern fn(path: *mut c_char, max_len: usize),
	pub get_plugin_path:                                extern fn(path: *mut c_char, max_len: usize, plugin_id: *const c_char),
	pub get_current_server_connection_handler_id:       extern fn() -> u64,
	pub print_message:                                  extern fn(server_connection_handler_id: u64, message: *const c_char, message_target: MessageTarget),
	pub print_message_to_current_tab:                   extern fn(message: *const c_char),
	pub urls_to_bb:                                     extern fn(text: *const c_char, result: *mut c_char, max_len: usize),
	pub send_plugin_command:                            extern fn(server_connection_handler_id: u64, plugin_id: *const c_char, command: *const c_char, target_mode: c_int, target_ids: *const u16, return_code: *const c_char),
	pub get_directories:                                extern fn(path: *const c_char, result: *mut c_char, max_len: usize),
	pub get_server_connect_info:                        extern fn(sc_handler_id: u64, host: *mut c_char, port: *mut c_ushort, password: *mut c_char, max_len: usize) -> c_uint,
	pub get_channel_connection_info:                    extern fn(sc_handler_id: u64, channel_id: u64, path: *mut c_char, password: *mut c_char, max_len: usize) -> c_uint,
	pub create_return_code:                             extern fn(plugin_id: *const c_char, return_code: *mut c_char, max_len: usize),
	pub request_info_update:                            extern fn(sc_handler_id: u64, item_type: ItemType, item_id: u64) -> c_uint,
	pub get_server_version:                             extern fn(sc_handler_id: u64) -> u64,
	pub is_whispering:                                  extern fn(sc_handler_id: u64, client_id: u16, result: *mut c_int) -> c_uint,
	pub is_receiving_whisper:                           extern fn(sc_handler_id: u64, client_id: u16, result: *mut c_int) -> c_uint,
	pub get_avatar:                                     extern fn(sc_handler_id: u64, client_id: u16, result: *mut c_char, max_len: usize) -> c_uint,
	pub set_plugin_menu_enabled:                        extern fn(plugin_id: *const c_char, menu_id: c_int, enabled: c_int),
	pub show_hotkey_setup:                              extern fn(),
	pub request_hotkey_input_dialog:                    extern fn(plugin_id: *const c_char, *const c_char, c_int, *mut c_void),
	pub get_hotkey_from_keyword:                        extern fn(plugin_id: *const c_char, keywords: *mut *const c_char, hotkeys: *mut *mut c_char, array_len: usize, hotkey_buf_size: usize) -> c_uint,
	pub get_client_display_name:                        extern fn(sc_handler_id: u64, client_id: u16, result: *mut c_char, max_len: usize) -> c_uint,
	pub get_bookmark_list:                              extern fn(list: *mut *mut BookmarkList) -> c_uint,
	pub get_profile_list:                               extern fn(profile: GuiProfile, default_profile_idx: *mut c_int, result: *mut *mut *mut c_char) -> c_uint,
	pub gui_connect:                                    extern fn(connect_tab: ConnectTab, server_label: *const c_char, server_address: *const c_char, server_password: *const c_char, nickname: *const c_char, channel: *const c_char, channel_password: *const c_char, capture_profile: *const c_char, playback_profile: *const c_char, hotkey_profile: *const c_char, sound_profile: *const c_char, user_identity: *const c_char, one_time_key: *const c_char, phonetic_name: *const c_char, sc_handler_id: *mut u64) -> c_uint,
	pub gui_connect_bookmark:                           extern fn(connect_tab: ConnectTab, bookmarkuuid: *const c_char, sc_handler_id: *mut u64) -> c_uint,
	pub create_bookmark:                                extern fn(bookmarkuuid: *const c_char, server_label: *const c_char, server_address: *const c_char, server_password: *const c_char, nickname: *const c_char, channel: *const c_char, channel_password: *const c_char, capture_profile: *const c_char, playback_profile: *const c_char, hotkey_profile: *const c_char, sound_profile: *const c_char, unique_user_id: *const c_char, one_time_key: *const c_char, phonetic_name: *const c_char) -> c_uint,
	pub get_permission_id_by_name:                      extern fn(server_connection_handler_id: u64, permission_name: *const c_char, result: *mut c_uint) -> c_uint,
	pub get_client_needed_permission:                   extern fn(server_connection_handler_id: u64, permission_name: *const c_char, result: *mut c_int) -> c_uint,
	pub notify_key_event:                               extern fn(plugin_id: *const c_char, key_identifier: *const c_char, up_down: c_int),

	/// Single-Track/Multi-Track recording
	pub start_recording:                                extern fn(server_connection_handler_id: u64, multitrack: c_int, no_file_selector: c_int, path: *const c_char) -> c_uint,
	pub stop_recording:                                 extern fn(server_connection_handler_id: u64) -> c_uint,

	/// Convenience functions
	pub request_clients_move:                           extern fn(server_connection_handler_id: u64, client_id_array: *const u16, new_channel_id: u64, password: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_clients_kick_from_channel:              extern fn(server_connection_handler_id: u64, client_id_array: *const u16, kick_reason: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_clients_kick_from_server:               extern fn(server_connection_handler_id: u64, client_id_array: *const u16, kick_reason: *const c_char, return_code: *const c_char) -> c_uint,
	pub request_mute_clients_temporary:                 extern fn(server_connection_handler_id: u64, client_id_array: *const u16, return_code: *const c_char) -> c_uint,
	pub request_unmute_clients_temporary:               extern fn(server_connection_handler_id: u64, client_id_array: *const u16, return_code: *const c_char) -> c_uint,
	pub get_permission_name_by_id:                      extern fn(sc_handler_id: u64, permission_id: c_uint, result: *mut c_char, max_len: usize) -> c_uint,
	pub client_property_flag_to_string:                 extern fn(client_property_flag: usize, result_string: *mut *mut c_char) -> c_uint,
	pub channel_property_flag_to_string:                extern fn(client_property_flag: usize, result_string: *mut *mut c_char) -> c_uint,
	pub server_property_flag_to_string:                 extern fn(client_property_flag: usize, result_string: *mut *mut c_char) -> c_uint,

	/// Server editing
	pub set_server_variable_as_int:                     extern fn(server_connection_handler_id: u64, flag: usize, value: c_int) -> c_uint,
	pub set_server_variable_as_uint64:                  extern fn(server_connection_handler_id: u64, flag: usize, value: u64) -> c_uint,
	pub set_server_variable_as_double:                  extern fn(server_connection_handler_id: u64, flag: usize, value: f64) -> c_uint,
	pub set_server_variable_as_string:                  extern fn(server_connection_handler_id: u64, flag: usize, value: *const c_char) -> c_uint,
	pub flush_server_updates:                           extern fn(server_connection_handler_id: u64, return_code: *const c_char) -> c_uint,

	/// Server/Channel group helper functions
	pub get_server_group_id_by_name:                    extern fn(server_connection_handler_id: u64, group_name: *const c_char, result: *mut c_uint) -> c_uint,
	pub get_server_group_name_by_id:                    extern fn(sc_handler_id: u64, group_id: c_uint, result: *mut c_char, max_len: usize) -> c_uint,
	pub get_channel_group_id_by_name:                   extern fn(server_connection_handler_id: u64, group_name: *const c_char, result: *mut c_uint) -> c_uint,
	pub get_channel_group_name_by_id:                   extern fn(sc_handler_id: u64, group_id: c_uint, result: *mut c_char, max_len: usize) -> c_uint,
}