public function getResponse() { try { return new SuccesfullResponse($this->requestObject->getId(), $this->dispatchMethod($this->requestObject->getMethod(), $this->requestObject->getParams())); } catch (\Exception $e) { return new ErrorResponse($this->requestObject->getId(), array('message' => $e->getMessage(), 'code' => $e->getCode())); } }
/** * Read and parse a DNS response message. * * This method assumes that the given request has been sent beforehand using the same transport. * * @param Request $request The request that caused the incoming response message. * @return Response Parsed and validated DNS response message. * * @throws ProtocolException When a malformed or invalid message is received. */ public function parse(Request $request) : \Generator { $response = new Response(yield from $this->transport->readShort()); $response->setFlags(yield from $this->transport->readShort()); if ($response->getId() !== $request->getId()) { throw new ProtocolException(\sprintf('Expected DNS message ID is %u, server returned %u', $request->getId(), $response->getId())); } $questionCount = (yield from $this->transport->readShort()); $answersCount = (yield from $this->transport->readShort()); $response->setAuthorityCount(yield from $this->transport->readShort()); $response->setAdditionalCount(yield from $this->transport->readShort()); // Parse questions: for ($i = 0; $i < $questionCount; $i++) { yield from $this->parseQuestion($response); } if ($response->getQuestions() !== $request->getQuestions()) { throw new ProtocolException('DNS server did not return the question(s) in the response message'); } // Parse answers: for ($i = 0; $i < $answersCount; $i++) { yield from $this->parseAnswer($response); } return $response; }
/** * Trigger a request error (400) response (JSON format) * * @param unknown $code * @param string $msg The error message to return. * @param Request $request * @param unknown $data (optional) */ public function request_error($code, $msg, Request $request = null, $data = null) { header('HTTP/1.1 400'); Context::getInstance()->getLogger()->error(sprintf('Request error: %s - %s', $code, $msg)); if ($request && $request->getType() == 'JSONRPC') { $jsonError = array("jsonrpc" => "2.0", "error" => array("code" => $code, "msg" => $msg, "data" => $data), "id" => $request ? $request->getId() : null); if ($data === null) { array_pop($jsonError["error"]); } header('Content-Type: application/json'); echo json_encode($jsonError); } else { echo json_encode(array('error' => array('code' => $code, 'message' => $msg, 'data' => $data))); } ob_end_flush(); exit; }
/** * Summary of requestReservationSent * @param Request $request * @param User $target */ public static function requestReservationSent(Request $request, User $target) { self::send("Reservation of request {$request->getId()} ({$request->getName()}) sent to {$target->getUsername()} by " . User::getCurrent()->getUsername()); }
/** * @param Request $request */ public function addRequest(Request $request) { $request->setFolder($this); $this->order[] = $request->getId(); $this->requests[] = $request; }