. * * Consult LICENSE file for details ************************************************/ class GetAttachment extends RequestProcessor { /** * Handles the GetAttachment command * * @param int $commandCode * * @access public * @return boolean */ public function Handle($commandCode) { $attname = Request::GetGETAttachmentName(); if(!$attname) return false; try { $attachment = self::$backend->GetAttachmentData($attname); $stream = $attachment->data; ZLog::Write(LOGLEVEL_DEBUG, sprintf("HandleGetAttachment(): attachment stream from backend: %s", $stream)); if ($stream == null) throw new StatusException(sprintf("HandleGetAttachment(): No stream resource returned by backend for attachment: %s", $attname), SYNC_ITEMOPERATIONSSTATUS_INVALIDATT); if (!is_resource($stream)) throw new StatusException(sprintf("HandleGetAttachment(): is_resource(stream) == false for attachment: %s", $attname), SYNC_ITEMOPERATIONSSTATUS_INVALIDATT); header("Content-Type: application/octet-stream"); $l = fpassthru($stream); fclose($stream); if ($l === false) throw new Exception("HandleGetAttachment(): fpassthru === false !!!"); self::$topCollector->AnnounceInformation(sprintf("Streamed %d KB attachment", round($l/1024)), true); ZLog::Write(LOGLEVEL_DEBUG, sprintf("HandleGetAttachment(): attachment with %d KB sent to mobile", round($l/1024))); } catch (StatusException $s) { // StatusException already logged so we just need to pass it upwards to send a HTTP error throw new HTTPReturnCodeException($s->getMessage(), HTTP_CODE_500, null, LOGLEVEL_DEBUG); } return true; } }