public function handleQueryFromStream(string $buffer): string
    {
        $message = Decoder::decodeMessage($buffer);
        $this->dispatch(Events::QUERY_RECEIVE, new QueryReceiveEvent($message));

        $responseMessage = clone $message;
        $responseMessage->getHeader()
            ->setResponse(true)
            ->setRecursionAvailable($this->resolver->allowsRecursion())
            ->setAuthoritative($this->isAuthoritative($message->getQuestions()));

        try {
            $answers = $this->resolver->getAnswer($responseMessage->getQuestions());
            $responseMessage->setAnswers($answers);
            $this->needsAdditionalRecords($responseMessage);
            $this->dispatch(Events::QUERY_RESPONSE, new QueryResponseEvent($responseMessage));

            return Encoder::encodeMessage($responseMessage);
        } catch (UnsupportedTypeException $e) {
            $responseMessage
                    ->setAnswers([])
                    ->getHeader()->setRcode(Header::RCODE_NOT_IMPLEMENTED);
            $this->dispatch(Events::QUERY_RESPONSE, new QueryResponseEvent($responseMessage));

            return Encoder::encodeMessage($responseMessage);
        }
    }
public function handleQueryFromStream(string $buffer): string
    {
        $message = Decoder::decodeMessage($buffer);
        $this->dispatch(Events::QUERY_RECEIVE, new QueryReceiveEvent($message));

        $responseMessage = clone $message;
        $responseMessage->getHeader()
            ->setResponse(true)
            ->setRecursionAvailable($this->resolver->allowsRecursion())
            ->setAuthoritative($this->isAuthoritative($message->getQuestions()));

        try {
            $answers = $this->resolver->getAnswer($responseMessage->getQuestions());
            $responseMessage->setAnswers($answers);
            $this->needsAdditionalRecords($responseMessage);
            $this->dispatch(Events::QUERY_RESPONSE, new QueryResponseEvent($responseMessage));

            return Encoder::encodeMessage($responseMessage);
        } catch (UnsupportedTypeException $e) {
            $responseMessage
                    ->setAnswers([])
                    ->getHeader()->setRcode(Header::RCODE_NOT_IMPLEMENTED);
            $this->dispatch(Events::QUERY_RESPONSE, new QueryResponseEvent($responseMessage));

            return Encoder::encodeMessage($responseMessage);
        }
    }
public function handleQueryFromStream ( string $ buffer ) : string { $ message = Decoder :: decodeMessage ( $ buffer ) ; $ this -> dispatch ( Events :: QUERY_RECEIVE , new QueryReceiveEvent ( $ message ) ) ; $ responseMessage = clone $ message ; $ responseMessage -> getHeader ( ) -> setResponse ( true ) -> setRecursionAvailable ( $ this -> resolver -> allowsRecursion ( ) ) -> setAuthoritative ( $ this -> isAuthoritative ( $ message -> getQuestions ( ) ) ) ; try { $ answers = $ this -> resolver -> getAnswer ( $ responseMessage -> getQuestions ( ) ) ; $ responseMessage -> setAnswers ( $ answers ) ; $ this -> needsAdditionalRecords ( $ responseMessage ) ; $ this -> dispatch ( Events :: QUERY_RESPONSE , new QueryResponseEvent ( $ responseMessage ) ) ; return Encoder :: encodeMessage ( $ responseMessage ) ; } catch ( UnsupportedTypeException $ e ) { $ responseMessage -> setAnswers ( [ ] ) -> getHeader ( ) -> setRcode ( Header :: RCODE_NOT_IMPLEMENTED ) ; $ this -> dispatch ( Events :: QUERY_RESPONSE , new QueryResponseEvent ( $ responseMessage ) ) ; return Encoder :: encodeMessage ( $ responseMessage ) ; } }
Decode a message and return an encoded response.

@param string $buffer

@return string

@throws UnsupportedTypeException
Decode a message and return an encoded response .