RequestProcessor::Authenticate(); } // Do the actual processing of the request if (Request::IsMethodGET()) { throw new NoPostRequestException("This is the Z-Push location and can only be accessed by Microsoft ActiveSync-capable devices", NoPostRequestException::GET_REQUEST); } // Do the actual request header(ZPush::GetServerHeader()); // announce the supported AS versions (if not already sent to device) if (ZPush::GetDeviceManager()->AnnounceASVersion()) { $versions = ZPush::GetSupportedProtocolVersions(true); ZLog::Write(LOGLEVEL_INFO, sprintf("Announcing latest AS version to device: %s", $versions)); header("X-MS-RP: " . $versions); } RequestProcessor::Initialize(); if (!RequestProcessor::HandleRequest()) { throw new WBXMLException(ZLog::GetWBXMLDebugInfo()); } // stream the data $len = ob_get_length(); $data = ob_get_contents(); ob_end_clean(); // log amount of data transferred // TODO check $len when streaming more data (e.g. Attachments), as the data will be send chunked ZPush::GetDeviceManager()->SentData($len); // Unfortunately, even though Z-Push can stream the data to the client // with a chunked encoding, using chunked encoding breaks the progress bar // on the PDA. So the data is de-chunk here, written a content-length header and // data send as a 'normal' packet. If the output packet exceeds 1MB (see ob_start) // then it will be sent as a chunked packet anyway because PHP will have to flush // the buffer.
if (Request::IsMethodGET()) { throw new NoPostRequestException("This is the Z-Push location and can only be accessed by Microsoft ActiveSync-capable devices", NoPostRequestException::GET_REQUEST); } // Do the actual request header(ZPush::GetServerHeader()); if (RequestProcessor::isUserAuthenticated()) { header("X-Z-Push-Version: " . @constant('ZPUSH_VERSION')); } // announce the supported AS versions (if not already sent to device) if (ZPush::GetDeviceManager()->AnnounceASVersion()) { $versions = ZPush::GetSupportedProtocolVersions(true); ZLog::Write(LOGLEVEL_INFO, sprintf("Announcing latest AS version to device: %s", $versions)); header("X-MS-RP: " . $versions); } RequestProcessor::Initialize(); RequestProcessor::HandleRequest(); // eventually the RequestProcessor wants to send other headers to the mobile foreach (RequestProcessor::GetSpecialHeaders() as $header) { header($header); } // stream the data $len = ob_get_length(); $data = ob_get_contents(); ob_end_clean(); // log amount of data transferred // TODO check $len when streaming more data (e.g. Attachments), as the data will be send chunked ZPush::GetDeviceManager()->SentData($len); // Unfortunately, even though Z-Push can stream the data to the client // with a chunked encoding, using chunked encoding breaks the progress bar // on the PDA. So the data is de-chunk here, written a content-length header and // data send as a 'normal' packet. If the output packet exceeds 1MB (see ob_start)