You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

120 lines
3.9 KiB

<?php
/*
This file is part of ActiveLink PHP XML Package (www.active-link.com).
Copyright (c) 2002-2004 by Zurab Davitiani
You can contact the author of this software via E-mail at
hattrick@mailcan.com
ActiveLink PHP XML Package is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
ActiveLink PHP XML Package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with ActiveLink PHP XML Package; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* requires HTTPClient, XML and XMLDocument classes
*/
import("org.active-link.net.HTTPClient");
import("org.active-link.xml.XML");
import("org.active-link.xml.XMLDocument");
/**
* XMLRPCClient class provides XML-RPC client capabilities
* @class XMLRPCClient
* @package org.active-link.xml
* @author Zurab Davitiani
* @version 0.4.0
* @extends HTTPClient
* @requires HTTPClient, XML, XMLDocument
* @see HTTPClient
*/
class XMLRPCClient extends HTTPClient {
var $xml;
var $xmlDoc;
var $params;
/**
* XMLRPCClient client class constructor accepts host (required) and port (optional, default 80) arguments
* @method XMLRPCClient
* @param string host
* @param optional int port
*/
function XMLRPCClient($host, $port = 80) {
$this->HTTPClient($host, $port);
$this->setRequestMethod("POST");
$this->addRequestHeaderRaw("Content-type: text/xml");
$this->xml = new XML("methodCall");
$this->xml->setTagContent("", "methodCall/methodName");
$this->xml->setTagContent("", "methodCall/params");
$this->xmlDoc = new XMLDocument();
$this->xmlDoc->setXML($this->xml);
$paramsBranchArray = &$this->xml->getBranches("methodCall", "params");
$this->params = &$paramsBranchArray[0];
// this call not necessary if we can somehow update body before HTTPClient->sendRequest
$this->setRequestBody($this->xmlDoc->getXMLString());
}
/**
* Adds a parameter to a method call in XMLRPC request
* @method addParam
* @param string paramType
* @param mixed paramValue
* @returns none
*/
function addParam($paramType, $paramValue) {
$newParam = new XMLBranch("param");
$newParam->setTagContent($paramValue, "param/value/$paramType");
$this->params->addXMLBranch($newParam);
// this call not necessary if we can somehow update body before HTTPClient->sendRequest
$this->setRequestBody($this->xmlDoc->getXMLString());
}
/**
* Sets method name in XMLRPC request
* @method setMethodName
* @param string methodName
* @returns none
*/
function setMethodName ($methodName) {
$this->xml->setTagContent($methodName, "methodCall/methodName");
// this call not necessary if we can somehow update body before HTTPClient->sendRequest
$this->setRequestBody($this->xmlDoc->getXMLString());
}
/**
* Sets XMLRPC request by supplying an XMLDocument object
* @method setRequestXML
* @param object XMLDocument
* @returns true if successful, false otherwise
*/
function setRequestXML(&$XMLDocument) {
if(is_object($XMLDocument) && strtolower(get_class($XMLDocument)) == "xmldocument") {
$this->xmlDoc = &$XMLDocument;
$this->xml = &$this->xmlDoc->getXML();
$this->params = &$this->xml->getBranches("methodCall", "params");
// this call not necessary if we can somehow update body before HTTPClient->sendRequest
$this->setRequestBody(htmlspecialchars($this->xmlDoc->getXMLString()));
$success = true;
}
else
$success = false;
return $success;
}
}
?>