Esempio n. 1
0
    /**
     * Load XML and parse into request components
     *
     * @param string $request
     * @return boolean True on success, false if an error occurred.
     */
    public function loadXml($request)
    {
        if (!is_string($request)) {
            $this->_fault = new Fault(635);
            $this->_fault->setEncoding($this->getEncoding());
            return false;
        }

        try {
            $xml = new \SimpleXMLElement($request);
        } catch (\Exception $e) {
            // Not valid XML
            $this->_fault = new Fault(631);
            $this->_fault->setEncoding($this->getEncoding());
            return false;
        }

        // Check for method name
        if (empty($xml->methodName)) {
            // Missing method name
            $this->_fault = new Fault(632);
            $this->_fault->setEncoding($this->getEncoding());
            return false;
        }

        $this->_method = (string) $xml->methodName;

        // Check for parameters
        if (!empty($xml->params)) {
            $types = array();
            $argv  = array();
            foreach ($xml->params->children() as $param) {
                if (!isset($param->value)) {
                    $this->_fault = new Fault(633);
                    $this->_fault->setEncoding($this->getEncoding());
                    return false;
                }

                try {
                    $param   = Value::getXmlRpcValue($param->value, Value::XML_STRING);
                    $types[] = $param->getType();
                    $argv[]  = $param->getValue();
                } catch (\Exception $e) {
                    $this->_fault = new Fault(636);
                    $this->_fault->setEncoding($this->getEncoding());
                    return false;
                }
            }

            $this->_types  = $types;
            $this->_params = $argv;
        }

        $this->_xml = $request;

        return true;
    }
Esempio n. 2
0
 /**
  * Load XML and parse into request components
  *
  * @param string $request
  * @return boolean True on success, false if an error occurred.
  */
 public function loadXml($request)
 {
     if (!is_string($request)) {
         $this->fault = new Fault(635);
         $this->fault->setEncoding($this->getEncoding());
         return false;
     }
     // @see ZF-12293 - disable external entities for security purposes
     $loadEntities = libxml_disable_entity_loader(true);
     try {
         $xml = new \SimpleXMLElement($request);
         libxml_disable_entity_loader($loadEntities);
     } catch (\Exception $e) {
         // Not valid XML
         $this->fault = new Fault(631);
         $this->fault->setEncoding($this->getEncoding());
         libxml_disable_entity_loader($loadEntities);
         return false;
     }
     // Check for method name
     if (empty($xml->methodName)) {
         // Missing method name
         $this->fault = new Fault(632);
         $this->fault->setEncoding($this->getEncoding());
         return false;
     }
     $this->method = (string) $xml->methodName;
     // Check for parameters
     if (!empty($xml->params)) {
         $types = array();
         $argv = array();
         foreach ($xml->params->children() as $param) {
             if (!isset($param->value)) {
                 $this->fault = new Fault(633);
                 $this->fault->setEncoding($this->getEncoding());
                 return false;
             }
             try {
                 $param = AbstractValue::getXmlRpcValue($param->value, AbstractValue::XML_STRING);
                 $types[] = $param->getType();
                 $argv[] = $param->getValue();
             } catch (\Exception $e) {
                 $this->fault = new Fault(636);
                 $this->fault->setEncoding($this->getEncoding());
                 return false;
             }
         }
         $this->types = $types;
         $this->params = $argv;
     }
     $this->xml = $request;
     return true;
 }
Esempio n. 3
0
    /**
     * Load a response from an XML response
     *
     * Attempts to load a response from an XMLRPC response, autodetecting if it
     * is a fault response.
     *
     * @param string $response
     * @return boolean True if a valid XMLRPC response, false if a fault
     * response or invalid input
     */
    public function loadXml($response)
    {
        if (!is_string($response)) {
            $this->_fault = new Fault(650);
            $this->_fault->setEncoding($this->getEncoding());
            return false;
        }

        try {
            $useInternalXmlErrors = libxml_use_internal_errors(true);
            $xml = new \SimpleXMLElement($response);
            libxml_use_internal_errors($useInternalXmlErrors);
        } catch (\Exception $e) {
            libxml_use_internal_errors($useInternalXmlErrors);
            // Not valid XML
            $this->_fault = new Fault(651);
            $this->_fault->setEncoding($this->getEncoding());
            return false;
        }

        if (!empty($xml->fault)) {
            // fault response
            $this->_fault = new Fault();
            $this->_fault->setEncoding($this->getEncoding());
            $this->_fault->loadXml($response);
            return false;
        }

        if (empty($xml->params)) {
            // Invalid response
            $this->_fault = new Fault(652);
            $this->_fault->setEncoding($this->getEncoding());
            return false;
        }

        try {
            if (!isset($xml->params) || !isset($xml->params->param) || !isset($xml->params->param->value)) {
                throw new Exception\ValueException('Missing XML-RPC value in XML');
            }
            $valueXml = $xml->params->param->value->asXML();
            $value = Value::getXmlRpcValue($valueXml, Value::XML_STRING);
        } catch (Value\Exception $e) {
            $this->_fault = new Fault(653);
            $this->_fault->setEncoding($this->getEncoding());
            return false;
        }

        $this->setReturnValue($value->getValue());
        return true;
    }
Esempio n. 4
0
 /**
  * Load a response from an XML response
  *
  * Attempts to load a response from an XMLRPC response, autodetecting if it
  * is a fault response.
  *
  * @param string $response
  * @return boolean True if a valid XMLRPC response, false if a fault
  * response or invalid input
  */
 public function loadXml($response)
 {
     if (!is_string($response)) {
         $this->_fault = new Fault(650);
         $this->_fault->setEncoding($this->getEncoding());
         return false;
     }
     // @see ZF-12293 - disable external entities for security purposes
     $loadEntities = libxml_disable_entity_loader(true);
     $useInternalXmlErrors = libxml_use_internal_errors(true);
     try {
         $xml = new \SimpleXMLElement($response);
         libxml_disable_entity_loader($loadEntities);
         libxml_use_internal_errors($useInternalXmlErrors);
     } catch (\Exception $e) {
         libxml_disable_entity_loader($loadEntities);
         libxml_use_internal_errors($useInternalXmlErrors);
         // Not valid XML
         $this->_fault = new Fault(651);
         $this->_fault->setEncoding($this->getEncoding());
         return false;
     }
     if (!empty($xml->fault)) {
         // fault response
         $this->_fault = new Fault();
         $this->_fault->setEncoding($this->getEncoding());
         $this->_fault->loadXml($response);
         return false;
     }
     if (empty($xml->params)) {
         // Invalid response
         $this->_fault = new Fault(652);
         $this->_fault->setEncoding($this->getEncoding());
         return false;
     }
     try {
         if (!isset($xml->params) || !isset($xml->params->param) || !isset($xml->params->param->value)) {
             throw new Exception\ValueException('Missing XML-RPC value in XML');
         }
         $valueXml = $xml->params->param->value->asXML();
         $value = AbstractValue::getXmlRpcValue($valueXml, AbstractValue::XML_STRING);
     } catch (Exception\ValueException $e) {
         $this->_fault = new Fault(653);
         $this->_fault->setEncoding($this->getEncoding());
         return false;
     }
     $this->setReturnValue($value->getValue());
     return true;
 }