/**
  * Uploads a given icon file content to the server and returns the ID of the icon.
  *
  * @param  string $data
  *
  * @return integer
  */
 public function iconUpload($data)
 {
     $crc = crc32($data);
     $size = strlen($data);
     $upload = $this->transferInitUpload(rand(0x0, 0xffff), 0, "/icon_" . $crc, $size);
     $transfer = Constant::factory("filetransfer://" . $upload["host"] . ":" . $upload["port"]);
     $transfer->upload($upload["ftkey"], $upload["seekpos"], $data);
     return $crc;
 }
 /**
  * Downloads and returns the server groups icon file content.
  *
  * @return TeamSpeak3_Helper_String
  */
 public function iconDownload()
 {
     if ($this->iconIsLocal("iconid") || $this["iconid"] == 0) {
         return;
     }
     $download = $this->getParent()->transferInitDownload(rand(0x0, 0xffff), 0, $this->iconGetName("iconid"));
     $transfer = Constant::factory("filetransfer://" . $download["host"] . ":" . $download["port"]);
     return $transfer->download($download["ftkey"], $download["size"]);
 }
 /**
  * Returns the HTML img tags which can be used to display the various icons for a
  * ClientNode object.
  *
  * @return string
  */
 protected function getSuffixIconClient()
 {
     $html = "";
     if ($this->currObj["client_is_priority_speaker"]) {
         $html .= $this->getImage("client_priority.png", "Priority Speaker");
     }
     if ($this->currObj["client_is_channel_commander"]) {
         $html .= $this->getImage("client_cc.png", "Channel Commander");
     }
     if ($this->currObj["client_is_talker"]) {
         $html .= $this->getImage("client_talker.png", "Talk Power granted");
     } elseif ($cntp = $this->currObj->getParent()->channelGetById($this->currObj["cid"])->channel_needed_talk_power) {
         if ($cntp > $this->currObj["client_talk_power"]) {
             $html .= $this->getImage("client_mic_muted.png", "Insufficient Talk Power");
         }
     }
     foreach ($this->currObj->memberOf() as $group) {
         if (!$group["iconid"]) {
             continue;
         }
         $type = $group instanceof ServerGroupNode ? "Server Group" : "Channel Group";
         if (!$group->iconIsLocal("iconid") && $this->ftclient) {
             if (!isset($this->cacheIcon[$group["iconid"]])) {
                 $download = $group->getParent()->transferInitDownload(rand(0x0, 0xffff), 0, $group->iconGetName("iconid"));
                 if ($this->ftclient == "data:image") {
                     $download = Constant::factory("filetransfer://" . $download["host"] . ":" . $download["port"])->download($download["ftkey"], $download["size"]);
                 }
                 $this->cacheIcon[$group["iconid"]] = $download;
             } else {
                 $download = $this->cacheIcon[$group["iconid"]];
             }
             if ($this->ftclient == "data:image") {
                 $html .= $this->getImage("data:" . Convert::imageMimeType($download) . ";base64," . base64_encode($download), $group . " [" . $type . "]", null, false);
             } else {
                 $html .= $this->getImage($this->ftclient . "?ftdata=" . base64_encode(serialize($download)), $group . " [" . $type . "]", null, false);
             }
         } elseif (in_array($group["iconid"], $this->cachedIcons)) {
             $html .= $this->getImage("group_icon_" . $group["iconid"] . ".png", $group . " [" . $type . "]");
         }
     }
     if ($this->currObj["client_icon_id"]) {
         if (!$this->currObj->iconIsLocal("client_icon_id") && $this->ftclient) {
             if (!isset($this->cacheIcon[$this->currObj["client_icon_id"]])) {
                 $download = $this->currObj->getParent()->transferInitDownload(rand(0x0, 0xffff), 0, $this->currObj->iconGetName("client_icon_id"));
                 if ($this->ftclient == "data:image") {
                     $download = Constant::factory("filetransfer://" . $download["host"] . ":" . $download["port"])->download($download["ftkey"], $download["size"]);
                 }
                 $this->cacheIcon[$this->currObj["client_icon_id"]] = $download;
             } else {
                 $download = $this->cacheIcon[$this->currObj["client_icon_id"]];
             }
             if ($this->ftclient == "data:image") {
                 $html .= $this->getImage("data:" . Convert::imageMimeType($download) . ";base64," . base64_encode($download), "Client Icon", null, false);
             } else {
                 $html .= $this->getImage($this->ftclient . "?ftdata=" . base64_encode(serialize($download)), "Client Icon", null, false);
             }
         } elseif (in_array($this->currObj["client_icon_id"], $this->cachedIcons)) {
             $html .= $this->getImage("group_icon_" . $this->currObj["client_icon_id"] . ".png", "Client Icon");
         }
     }
     return $html;
 }