Пример #1
0
 /**
  * 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\TS3Abstract $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);
 }
Пример #2
0
 /**
  * Connects to a remote server.
  *
  * @throws Ts3Exception
  * @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 Ts3Exception(String::factory($errstr)->toUtf8()->toString(), $errno);
     }
     @stream_set_timeout($this->stream, $timeout);
     @stream_set_blocking($this->stream, $this->config["blocking"] ? 1 : 0);
 }
Пример #3
0
 /**
  * Returns the adapter type.
  *
  * @return string
  */
 public function getAdapterType()
 {
     if ($this->adapter instanceof AbstractAdapter) {
         $string = String::factory(get_class($this->adapter));
         return $string->substr($string->findLast("_"))->replace(array("_", " "), "")->toString();
     }
     return "Unknown";
 }
Пример #4
0
 /**
  * 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\TS3Abstract) {
                     $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);
 }
Пример #5
0
 /**
  * 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 = String::factory($key);
             if ($key->contains("_bytes_")) {
                 $info[$key->toString()] = Convert::bytes($val);
             } elseif ($key->contains("_bandwidth_")) {
                 $info[$key->toString()] = 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()] = Convert::seconds($val);
             } elseif ($key->endsWith("_version")) {
                 $info[$key->toString()] = Convert::version($val);
             } elseif ($key->endsWith("_icon_id")) {
                 $info[$key->toString()] = $this->iconGetName($key)->filterDigits();
             }
         }
         return $info;
     }
     return $this->nodeInfo;
 }
Пример #6
0
 /**
  * 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 Exception("connection to server '" . $this->config["host"] . ":" . $this->config["port"] . "' lost");
             }
         } else {
             $line->append($data);
         }
     }
     return $line->trim();
 }
Пример #7
0
 /**
  * @ignore
  */
 protected function fetchPermissionCats()
 {
     $permcats = array();
     $reflects = new \ReflectionClass("TeamSpeak3");
     foreach ($reflects->getConstants() as $key => $val) {
         if (!String::factory($key)->startsWith("PERM_CAT") || $val == 0xff) {
             continue;
         }
         $permcats[$key] = $val;
     }
     $this->permissionCats = $permcats;
 }
Пример #8
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;
 }
Пример #9
0
 /**
  * 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\TS3Abstract $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);
 }
Пример #10
0
 /**
  * Returns an array filled with all permission categories known to the server including
  * their ID, name and parent.
  *
  * @return array
  */
 public function permissionTree()
 {
     $permtree = array();
     foreach ($this->permissionCats() as $key => $val) {
         $permtree[$val]["permcatid"] = $val;
         $permtree[$val]["permcathex"] = "0x" . dechex($val);
         $permtree[$val]["permcatname"] = \TeamSpeak3\Helper\String::factory(TeamSpeak3\Helper\Convert::permissionCategory($val));
         $permtree[$val]["permcatparent"] = $permtree[$val]["permcathex"][3] == 0 ? 0 : hexdec($permtree[$val]["permcathex"][2] . 0);
         $permtree[$val]["permcatchilren"] = 0;
         $permtree[$val]["permcatcount"] = 0;
         if (isset($permtree[$permtree[$val]["permcatparent"]])) {
             $permtree[$permtree[$val]["permcatparent"]]["permcatchilren"]++;
         }
         if ($permtree[$val]["permcatname"]->contains("/")) {
             $permtree[$val]["permcatname"] = $permtree[$val]["permcatname"]->section("/", 1)->trim();
         }
         foreach ($this->permissionList() as $permission) {
             if ($permission["permid"]["permcatid"] == $val) {
                 $permtree[$val]["permcatcount"]++;
             }
         }
     }
     return $permtree;
 }
Пример #11
0
 /**
  * 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"] = 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"] = String::factory(trim($parts[4]));
         $array["msg_plain"] = $entry;
         $array["malformed"] = false;
     }
     return $array;
 }
Пример #12
0
 /**
  * Returns the name of an adapter class by $name.
  *
  * @param  string $name
  * @param  string $namespace
  * @throws Ts3Exception
  * @return string
  */
 protected static function getAdapterName($name, $namespace = "Adapter/")
 {
     $path = self::getFilePath($namespace);
     $scan = scandir($path);
     foreach ($scan as $node) {
         $file = String::factory($node)->toLower();
         if ($file->startsWith($name) && $file->endsWith(".php")) {
             return str_replace(".php", "", "TeamSpeak3\\Adapter\\" . $node);
         }
     }
     throw new Ts3Exception("adapter '" . $name . "' does not exist");
 }