/** * Returns the code needed to display a node in a TeamSpeak 3 viewer. * * @param TeamSpeak3_Node_Abstract $node * @param array $siblings * @return string */ public function fetchObject(TeamSpeak3_Node_Abstract $node, array $siblings = array()) { $this->currObj = $node; $this->currSib = $siblings; $args = array($this->getPrefix(), $this->getCorpusIcon(), $this->getCorpusName()); return TeamSpeak3_Helper_String::factory($this->pattern)->arg($args); }
/** * Connects to a remote server. * * @throws TeamSpeak3_Transport_Exception * @return void */ public function connect() { if ($this->stream !== null) { return; } $host = strval($this->config["host"]); $port = strval($this->config["port"]); $address = "udp://" . $host . ":" . $port; $timeout = intval($this->config["timeout"]); $this->stream = @stream_socket_client($address, $errno, $errstr, $timeout); if ($this->stream === FALSE) { throw new TeamSpeak3_Transport_Exception(TeamSpeak3_Helper_String::factory($errstr)->toUtf8()->toString(), $errno); } @stream_set_timeout($this->stream, $timeout); @stream_set_blocking($this->stream, $this->config["blocking"] ? 1 : 0); }
/** * Deploys snapshot data on the selected virtual server. If no virtual server is selected (ID 0), * the data will be used to create a new virtual server from scratch. * * @param string $data * @param string $mode * @return array */ public function snapshotDeploy($data, $mode = TeamSpeak3::SNAPSHOT_STRING) { switch ($mode) { case TeamSpeak3::SNAPSHOT_BASE64: $data = TeamSpeak3_Helper_String::fromBase64($data); break; case TeamSpeak3::SNAPSHOT_HEXDEC: $data = TeamSpeak3_Helper_String::fromHex($data); break; default: $data = TeamSpeak3_Helper_String::factory($data); break; } $detail = $this->request("serversnapshotdeploy " . $data)->toList(); if (array_key_exists("sid", $detail)) { TeamSpeak3_Helper_Signal::getInstance()->emit("notifyServercreated", $this->getParent(), $detail["sid"]); } return $detail; }
/** * Returns the code needed to display a node in a TeamSpeak 3 viewer. * * @param TeamSpeak3_Node_Abstract $node * @param array $siblings * @return string */ public function fetchObject(TeamSpeak3_Node_Abstract $node, array $siblings = array()) { $this->currObj = $node; $this->currSib = $siblings; $args = array($this->getContainerIdent(), $this->getContainerClass(), $this->getContainerSummary(), $this->getRowClass(), $this->getPrefixClass(), $this->getPrefix(), $this->getCorpusClass(), $this->getCorpusTitle(), $this->getCorpusIcon(), $this->getCorpusName(), $this->getSuffixClass(), $this->getSuffixIcon(), $this->getSuffixFlag()); return TeamSpeak3_Helper_String::factory($this->pattern)->arg($args); }
/** * Returns the adapter type. * * @return string */ public function getAdapterType() { if ($this->adapter instanceof TeamSpeak3_Adapter_Abstract) { $string = TeamSpeak3_Helper_String::factory(get_class($this->adapter)); return $string->substr($string->findLast("_"))->replace(array("_", " "), "")->toString(); } return "Unknown"; }
/** * Uses given parameters and returns a prepared ServerQuery command. * * @param string $cmd * @param array $params * @return string */ public function prepare($cmd, array $params = array()) { $args = array(); $cells = array(); foreach ($params as $ident => $value) { $ident = is_numeric($ident) ? "" : strtolower($ident) . TeamSpeak3::SEPARATOR_PAIR; if (is_array($value)) { $value = array_values($value); for ($i = 0; $i < count($value); $i++) { if ($value[$i] === null) { continue; } elseif ($value[$i] === FALSE) { $value[$i] = 0x0; } elseif ($value[$i] === TRUE) { $value[$i] = 0x1; } elseif ($value[$i] instanceof TeamSpeak3_Node_Abstract) { $value[$i] = $value[$i]->getId(); } $cells[$i][] = $ident . TeamSpeak3_Helper_String::factory($value[$i])->escape()->toUtf8(); } } else { if ($value === null) { continue; } elseif ($value === FALSE) { $value = 0x0; } elseif ($value === TRUE) { $value = 0x1; } elseif ($value instanceof TeamSpeak3_Node_Abstract) { $value = $value->getId(); } $args[] = $ident . TeamSpeak3_Helper_String::factory($value)->escape()->toUtf8(); } } foreach (array_keys($cells) as $ident) { $cells[$ident] = implode(TeamSpeak3::SEPARATOR_CELL, $cells[$ident]); } if (count($args)) { $cmd .= " " . implode(TeamSpeak3::SEPARATOR_CELL, $args); } if (count($cells)) { $cmd .= " " . implode(TeamSpeak3::SEPARATOR_LIST, $cells); } return trim($cmd); }
/** * Sets a single value in the current ServerQuery connection info. * * @param string $ident * @param mixed $value * @return mixed */ public function whoamiSet($ident, $value = null) { $this->whoami(); $this->whoami[$ident] = is_numeric($value) ? intval($value) : TeamSpeak3_Helper_String::factory($value); }
/** * Returns all information available on this node. If $convert is enabled, some property * values will be converted to human-readable values. * * @param boolean $extend * @param boolean $convert * @return array */ public function getInfo($extend = TRUE, $convert = FALSE) { if ($extend) { $this->fetchNodeInfo(); } if ($convert) { $info = $this->nodeInfo; foreach ($info as $key => $val) { $key = TeamSpeak3_Helper_String::factory($key); if ($key->contains("_bytes_")) { $info[$key->toString()] = TeamSpeak3_Helper_Convert::bytes($val); } elseif ($key->contains("_bandwidth_")) { $info[$key->toString()] = TeamSpeak3_Helper_Convert::bytes($val) . "/s"; } elseif ($key->contains("_packets_")) { $info[$key->toString()] = number_format($val, null, null, "."); } elseif ($key->contains("_packetloss_")) { $info[$key->toString()] = sprintf("%01.2f", floatval($val->toString()) * 100) . "%"; } elseif ($key->endsWith("_uptime")) { $info[$key->toString()] = TeamSpeak3_Helper_Convert::seconds($val); } elseif ($key->endsWith("_icon_id")) { $info[$key->toString()] = $this->iconGetName($key)->filterDigits(); } } return $info; } return $this->nodeInfo; }
/** * Converts a specified log entry string into an array containing the data. * * @param string $entry * @return array */ public static function logEntry($entry) { $parts = explode("|", $entry, 5); $array = array(); if (count($parts) != 5) { $array["timestamp"] = 0; $array["level"] = TeamSpeak3::LOGLEVEL_ERROR; $array["channel"] = "ParamParser"; $array["server_id"] = ""; $array["msg"] = TeamSpeak3_Helper_String::factory("convert error (" . trim($entry) . ")"); $array["msg_plain"] = $entry; $array["malformed"] = TRUE; } else { $array["timestamp"] = strtotime(trim($parts[0])); $array["level"] = self::logLevel(trim($parts[1])); $array["channel"] = trim($parts[2]); $array["server_id"] = trim($parts[3]); $array["msg"] = TeamSpeak3_Helper_String::factory(trim($parts[4])); $array["msg_plain"] = $entry; $array["malformed"] = FALSE; } return $array; }
/** * Returns the name of an adapter class by $name. * * @param string $name * @param string $namespace * @throws TeamSpeak3_Adapter_Exception * @return string */ protected static function getAdapterName($name, $namespace = "TeamSpeak3_Adapter_") { $path = self::getFilePath($namespace); $scan = scandir($path); foreach ($scan as $node) { $file = TeamSpeak3_Helper_String::factory($node)->toLower(); if ($file->startsWith($name) && $file->endsWith(".php")) { return $namespace . str_replace(".php", "", $node); } } throw new TeamSpeak3_Adapter_Exception("adapter '" . $name . "' does not exist"); }
/** * Reads a single line of data from the stream. * * @param string $token * @throws TeamSpeak3_Transport_Exception * @return TeamSpeak3_Helper_String */ public function readLine($token = "\n") { $this->connect(); $line = TeamSpeak3_Helper_String::factory(""); while (!$line->endsWith($token)) { $this->waitForReadyRead(); $data = @fgets($this->stream, 4096); TeamSpeak3_Helper_Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "DataRead", $data); if ($data === FALSE) { if ($line->count()) { $line->append($token); } else { throw new TeamSpeak3_Transport_Exception("connection to server '" . $this->config["host"] . ":" . $this->config["port"] . "' lost"); } } else { $line->append($data); } } return $line->trim(); }
/** * Returns a list of permissions available on the server instance. * * @return array */ public function permissionList() { if ($this->permissionList === null) { $this->fetchPermissionList(); } foreach ($this->permissionList as $permname => $permdata) { if (isset($permdata["permcatid"]) && $permdata["permgrant"]) { continue; } $this->permissionList[$permname]["permcatid"] = $this->permissionGetCategoryById($permdata["permid"]); $this->permissionList[$permname]["permgrant"] = $this->permissionGetGrantById($permdata["permid"]); $grantsid = "i_needed_modify_power_" . substr($permname, 2); if (!$permdata["permname"]->startsWith("i_needed_modify_power_") && !isset($this->permissionList[$grantsid])) { $this->permissionList[$grantsid]["permid"] = $this->permissionList[$permname]["permgrant"]; $this->permissionList[$grantsid]["permname"] = TeamSpeak3_Helper_String::factory($grantsid); $this->permissionList[$grantsid]["permdesc"] = null; $this->permissionList[$grantsid]["permcatid"] = 0xff; $this->permissionList[$grantsid]["permgrant"] = $this->permissionList[$permname]["permgrant"]; } } return $this->permissionList; }
/** * Returns an ordered array of regular server groups available based on a pre-defined * set of rules. * * @return array */ public function serverGroupGetProfiles() { $profiles = array(); foreach ($this->serverGroupList() as $sgid => $sgroup) { if ($sgroup["type"] != TeamSpeak3::GROUP_DBTYPE_REGULAR) { continue; } $profiles[$sgid] = array("b_permission_modify_power_ignore" => 0, "i_group_needed_member_add_power" => 0, "i_group_member_add_power" => 0, "i_group_needed_member_remove_power" => 0, "i_group_member_remove_power" => 0, "i_needed_modify_power_count" => 0, "i_needed_modify_power_total" => 0, "i_permission_modify_power" => 0, "i_group_needed_modify_power" => 0, "i_group_modify_power" => 0, "i_client_needed_modify_power" => 0, "i_client_modify_power" => 0, "b_virtualserver_servergroup_create" => 0, "b_virtualserver_servergroup_delete" => 0, "b_client_ignore_bans" => 0, "b_client_ignore_antiflood" => 0, "b_group_is_permanent" => 0, "i_client_needed_ban_power" => 0, "i_client_needed_kick_power" => 0, "i_client_needed_move_power" => 0, "i_client_talk_power" => 0, "__sgid" => $sgid, "__name" => $sgroup->toString(), "__node" => $sgroup); try { $perms = $this->serverGroupPermList($sgid, TRUE); $grant = isset($perms["i_permission_modify_power"]) ? $perms["i_permission_modify_power"]["permvalue"] : null; } catch (TeamSpeak3_Adapter_ServerQuery_Exception $e) { /* ERROR_database_empty_result */ if ($e->getCode() != 0x501) { throw $e; } $perms = array(); $grant = null; } foreach ($perms as $permsid => $perm) { if (in_array($permsid, array_keys($profiles[$sgid]))) { $profiles[$sgid][$permsid] = $perm["permvalue"]; } elseif (TeamSpeak3_Helper_String::factory($permsid)->startsWith("i_needed_modify_power_")) { if (!$grant || $perm["permvalue"] > $grant) { continue; } $profiles[$sgid]["i_needed_modify_power_total"] = $profiles[$sgid]["i_needed_modify_power_total"] + $perm["permvalue"]; $profiles[$sgid]["i_needed_modify_power_count"]++; } } } array_multisort($profiles, SORT_DESC); return $profiles; }
/** * Deploys snapshot data on the virtual server. * * @param string $data * @param string $mode * @return void */ public function snapshotDeploy($data, $mode = TeamSpeak3::SNAPSHOT_STRING) { switch ($mode) { case TeamSpeak3::SNAPSHOT_BASE64: $data = TeamSpeak3_Helper_String::fromBase64($data); break; case TeamSpeak3::SNAPSHOT_HEXDEC: $data = TeamSpeak3_Helper_String::fromHex($data); break; default: $data = TeamSpeak3_Helper_String::factory($data); break; } $this->request("serversnapshotdeploy " . $data); }
/** * @ignore */ protected function fetchPermissionCats() { $permcats = array(); $reflects = new ReflectionClass("TeamSpeak3"); foreach ($reflects->getConstants() as $key => $val) { if (!TeamSpeak3_Helper_String::factory($key)->startsWith("PERM_CAT") || $val == 0xff) { continue; } $permcats[$key] = $val; } $this->permissionCats = $permcats; }
public function getStartParams() { $params = array(); $params[] = 'create_default_virtualserver=0'; if ($this->firstStart) { $password = \TeamSpeak3_Helper_String::factory($this->queryPassword)->escape(); $params[] = 'serveradmin_password='******'"' . implode(' ', $params) . '"' . ($this->firstStart ? ' &' : ''); }