/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; }