steffen: server/kolab-horde-framework/kolab-horde-framework/RPC/RPC soap.php, NONE, 1.1 syncml.php, NONE, 1.1 syncml_wbxml.php, NONE, 1.1 webdav.php, NONE, 1.1 xmlrpc.php, NONE, 1.1
cvs at intevation.de
cvs at intevation.de
Fri Oct 14 16:33:12 CEST 2005
- Previous message: steffen: server/kolab-horde-framework/kolab-horde-framework/Prefs/Prefs CategoryManager.php, NONE, 1.1 UI.php, NONE, 1.1 imsp.php, NONE, 1.1 ldap.php, NONE, 1.1 session.php, NONE, 1.1 sql.php, NONE, 1.1
- Next message: steffen: server/kolab-horde-framework/kolab-horde-framework/Search Search.php, NONE, 1.1 package.xml, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: steffen
Update of /kolabrepository/server/kolab-horde-framework/kolab-horde-framework/RPC/RPC
In directory doto:/tmp/cvs-serv28903/kolab-horde-framework/kolab-horde-framework/RPC/RPC
Added Files:
soap.php syncml.php syncml_wbxml.php webdav.php xmlrpc.php
Log Message:
Separated Horde Framework from kolab-resource-handlers
--- NEW FILE: soap.php ---
<?php
/**
* The Horde_RPC_soap class provides an SOAP implementation of the
* Horde RPC system.
*
* $Horde: framework/RPC/RPC/soap.php,v 1.10 2004/05/24 16:08:32 jwm Exp $
*
* Copyright 2003-2004 Jan Schneider <jan at horde.org>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Jan Schneider <jan at horde.org>
* @version $Revision: 1.1 $
* @since Horde 3.0
* @package Horde_RPC
*/
class Horde_RPC_soap extends Horde_RPC {
/**
* Resource handler for the RPC server.
* @var object $_server
*/
var $_server;
/**
* Hash holding all methods' signatures.
* @var array $__dispatch_map
*/
var $__dispatch_map = array();
/**
* SOAP server constructor
*
* @access private
* @return object An RPC server instance
*/
function Horde_RPC_soap()
{
parent::Horde_RPC();
global $registry;
require_once 'SOAP/Server.php';
$this->_server = &new SOAP_Server();
$this->_server->_auto_translation = true;
}
/**
* Fills a hash that is used by the SOAP server with the signatures of
* all available methods.
*/
function _setupDispatchMap()
{
global $registry;
$methods = $registry->listMethods();
foreach ($methods as $method) {
$signature = $registry->getSignature($method);
if (!is_array($signature)) {
continue;
}
$method = str_replace('/', '.', $method);
$this->__dispatch_map[$method] = array(
'in' => $signature[0],
'out' => array('output' => $signature[1])
);
}
$this->__typedef = $registry->listTypes();
}
/**
* Returns the signature of a method.
* Internally used by the SOAP server.
*
* @param string $method A method name.
*
* @return array An array describing the method's signature.
*/
function __dispatch($method)
{
global $registry;
$method = str_replace('.', '/', $method);
$signature = $registry->getSignature($method);
if (!is_array($signature)) {
return null;
}
return array('in' => $signature[0],
'out' => array('output' => $signature[1]));
}
/**
* Will be registered as the handler for all methods called in the
* SOAP server and will call the appropriate function through the registry.
*
* @access private
*
* @param string $method The name of the method called by the RPC request.
* @param array $params The passed parameters.
* @param mixed $data Unknown.
*
* @return mixed The result of the called registry method.
*/
function _dispatcher($method, $params)
{
global $registry;
$method = str_replace('.', '/', $method);
if (!$registry->hasMethod($method)) {
return sprintf(_("Method '%s' is not defined"), $method);
}
return $registry->call($method, $params);
}
/**
* Takes an RPC request and returns the result.
*
* @param string The raw request string.
* @param string (optional) String specifying what kind of data to
* return. Defaults to SOAP request. Possible other values:
* "wdsl" and "disco".
*
* @return string The XML encoded response from the server.
*/
function getResponse($request, $params = null)
{
$this->_server->addObjectMap($this, 'urn:horde');
if (!$params) {
$this->_server->setCallHandler(array($this, '_dispatcher'));
/* We can't use Util::bufferOutput() here for some reason. */
ob_start();
$this->_server->service($request);
$output = ob_get_contents();
ob_end_clean();
} else {
require_once 'SOAP/Disco.php';
$disco = new SOAP_DISCO_Server($this->_server, 'horde');
if ($params == 'wsdl') {
$this->_setupDispatchMap();
$output = $disco->getWSDL();
} else {
$output = $disco->getDISCO();
}
}
return $output;
}
/**
* Builds an SOAP request and sends it to the SOAP server.
*
* This statically called method is actually the SOAP client.
*
* @param string $url The path to the SOAP server on the called host.
* @param string $method The method to call.
* @param array $params (optional) A hash containing any necessary
* parameters for the method call.
* @param $options Optional associative array of parameters which can be:
* user - Basic Auth username
* pass - Basic Auth password
* proxy_host - Proxy server host
* proxy_port - Proxy server port
* proxy_user - Proxy auth username
* proxy_pass - Proxy auth password
* timeout - Connection timeout in seconds.
* allowRedirects - Whether to follow redirects or not
* maxRedirects - Max number of redirects to follow
* namespace
* soapaction
* from - SMTP, from address
* transfer-encoding - SMTP, sets the
* Content-Transfer-Encoding header
* subject - SMTP, subject header
* headers - SMTP, array-hash of extra smtp
* headers
*
* @return mixed The returned result from the method or a PEAR
* error object on failure.
*/
function request($url, $method, $params = null, $options = array())
{
if (!isset($options['timeout'])) {
$options['timeout'] = 5;
}
if (!isset($options['allowRedirects'])) {
$options['allowRedirects'] = true;
$options['maxRedirects'] = 3;
}
require_once 'SOAP/Client.php';
$soap = &new SOAP_Client($url, false, false, $options);
return $soap->call($method, $params, $options['namespace']);
}
}
--- NEW FILE: syncml.php ---
<?php
include_once 'Horde/RPC.php';
include_once 'Horde/SyncML.php';
include_once 'Horde/SyncML/State.php';
include_once 'Horde/SyncML/Command/Status.php';
/**
* The Horde_RPC_syncml class provides a SyncML implementation of the
* Horde RPC system.
*
* $Horde: framework/RPC/RPC/syncml.php,v 1.16 2004/04/07 17:43:42 chuck Exp $
*
* Copyright 2003-2004 Chuck Hagenbuch <chuck at horde.org>, Anthony Mills <amills at pyramid6.com>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Chuck Hagenbuch <chuck at horde.org>
* @author Anthony Mills <amills at pyramid6.com>
* @version $Revision: 1.1 $
* @since Horde 3.0
* @package Horde_RPC
*/
class Horde_RPC_syncml extends Horde_RPC {
/**
* Output ContentHandler used to output XML events.
* @var object $_output
*/
var $_output;
/**
* @var integer $_xmlStack
*/
var $_xmlStack = 0;
/**
* Debug directory, if set will store copies of all packets.
*/
var $_debugDir = '/tmp/sync';
/**
* Default character set. Only supports UTF-8(ASCII?).
*/
var $_charset = 'UTF-8';
/**
* SyncML handles authentication internally, so bypass the
* system-level auth check by just returning true here.
*/
function authorize()
{
return true;
}
/**
* Sends an RPC request to the server and returns the result.
*
* @param string $request The raw request string.
*
* @return string The XML encoded response from the server.
*/
function getResponse($request)
{
// Very useful for debugging. Logs the xml packets to $this->_debugDir
if (isset($this->_debugDir)) {
$packetNum = @intval(file_get_contents($this->_debugDir . '/syncml.packetnum'));
if (!isset($packetNum)) {
$packetNum = 0;
}
$f = @fopen($this->_debugDir . '/syncml_client_' . $packetNum . '.xml', 'wb');
if ($f) {
fwrite($f, $request);
fclose($f);
}
}
// $this->_output can be already set by a subclass.
// The subclass can use it's own ContentHandler and bypass
// this classes use of the ContentHandler. In this case
// no output is return from this method, instead the output
// comes from the subclasses ContentHandler
// We may need to add this code back when we get to the content
//if (!isset($this->_output)) {
include_once 'XML/WBXML/ContentHandler.php';
$this->_output = &new XML_WBXML_ContentHandler();
//}
$this->_parse($request);
$xmlinput = $this->_output->getOutput();
// Very useful for debugging.
if (isset($this->_debugDir)) {
$f = @fopen($this->_debugDir . '/syncml_server_' . $packetNum . '.xml', 'wb');
if ($f) {
fwrite($f, $xmlinput);
fclose($f);
}
$packetNum++;
$f = @fopen($this->_debugDir . '/syncml.packetnum', 'wb');
if ($f) {
fwrite($f, $packetNum);
fclose($f);
}
}
return $xmlinput;
}
function _parse($xml)
{
// Create the XML parser and set method references.
$this->_parser = xml_parser_create_ns($this->_charset);
xml_set_object($this->_parser, $this);
xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler($this->_parser, '_startElement', '_endElement');
xml_set_character_data_handler($this->_parser, '_characters');
xml_set_processing_instruction_handler($this->_parser, '');
xml_set_external_entity_ref_handler($this->_parser, '');
if (!xml_parse($this->_parser, $xml)) {
return $this->raiseError(sprintf('XML error: %s at line %d',
xml_error_string(xml_get_error_code($this->_parser)),
xml_get_current_line_number($this->_parser)));
}
xml_parser_free($this->_parser);
}
function _startElement($parser, $tag, $attributes)
{
list($uri, $name) = $this->_splitURI($tag);
$this->startElement($uri, $name, $attributes);
}
function _characters($parser, $chars)
{
$this->characters($chars);
}
function _endElement($parser, $tag)
{
list($uri, $name) = $this->_splitURI($tag);
$this->endElement($uri, $name);
}
function _splitURI($tag)
{
$parts = explode(':', $tag);
$name = array_pop($parts);
$uri = implode(':', $parts);
return array($uri, $name);
}
/**
* Get the Content-Type of the response.
*
* @return string The MIME Content-Type of the RPC response.
*/
function getResponseContentType()
{
return 'application/vnd.syncml+xml';
}
function startElement($uri, $element, $attrs)
{
$this->_xmlStack++;
switch ($this->_xmlStack) {
case 1:
// <SyncML>
// Defined in SyncML Representation Protocol, version 1.1 5.2.1
$this->_output->startElement($uri, $element, $attrs);
break;
case 2:
// Either <SyncML><SyncHdr> or <SyncML><SyncBody>
if (!isset($this->_contentHandler)) {
// If not defined then create SyncHdr.
$this->_contentHandler = &new Horde_SyncML_SyncmlHdr();
$this->_contentHandler->setOutput($this->_output);
}
$this->_contentHandler->startElement($uri, $element, $attrs);
break;
default:
if (isset($this->_contentHandler)) {
$this->_contentHandler->startElement($uri, $element, $attrs);
}
break;
}
}
function endElement($uri, $element)
{
switch ($this->_xmlStack) {
case 1:
// </SyncML>
// Defined in SyncML Representation Protocol, version 1.1 5.2.1
$this->_output->endElement($uri, $element);
break;
case 2:
// Either </SyncHdr></SyncML> or </SyncBody></SyncML>
if ($element == 'SyncHdr') {
// Then we get the state from SyncMLHdr, and create a
// new SyncMLBody.
$this->_contentHandler->endElement($uri, $element);
unset($this->_contentHandler);
$this->_contentHandler = &new Horde_SyncML_SyncmlBody();
$this->_contentHandler->setOutput($this->_output);
} else {
// No longer used.
$this->_contentHandler->endElement($uri, $element);
unset($this->_contentHandler);
}
break;
default:
// </*></SyncHdr></SyncML> or </*></SyncBody></SyncML>
if (isset($this->_contentHandler)) {
$this->_contentHandler->endElement($uri, $element);
}
break;
}
if (isset($this->_chars)) {
unset($this->_chars);
}
$this->_xmlStack--;
}
function characters($str)
{
if (isset($this->_contentHandler)) {
$this->_contentHandler->characters($str);
}
}
function raiseError($str) {
Horde::logMEssage($str, __FILE__, __LINE__, PEAR_LOG_ERR);
}
}
--- NEW FILE: syncml_wbxml.php ---
<?php
include_once 'Horde/RPC/syncml.php';
include_once 'XML/WBXML/Decoder.php';
include_once 'XML/WBXML/Encoder.php';
/**
* The Horde_RPC_syncml class provides a SyncML implementation of the Horde
* RPC system.
*
* $Horde: framework/RPC/RPC/syncml_wbxml.php,v 1.9 2004/04/07 17:43:42 chuck Exp $
*
* Copyright 2003-2004 Chuck Hagenbuch <chuck at horde.org>, Anthony Mills <amills at pyramid6.com>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Chuck Hagenbuch <chuck at horde.org>
* @author Anthony Mills <amills at pyramid6.com>
* @version $Revision: 1.1 $
* @since Horde 3.0
* @package Horde_RPC
*/
class Horde_RPC_syncml_wbxml extends Horde_RPC_syncml {
/**
* Sends an RPC request to the server and returns the result.
*
* @param string $request The raw request string.
*
* @return string The WBXML encoded response from the server (binary).
*/
function getResponse($request)
{
// Very useful for debugging. Logs the wbxml packets to $this->_debugDir
if (isset($this->_debugDir)) {
$packetNum = @intval(file_get_contents($this->_debugDir . '/syncml_wbxml.packetnum'));
if (!isset($packetNum)) {
$packetNum = 0;
}
$fp = fopen($this->_debugDir . '/syncml_client_' . $packetNum . '.wbxml', 'wb');
fwrite($fp, $request);
fclose($fp);
}
$decoder = &new XML_WBXML_Decoder();
$xmlinput = $decoder->decode($request);
if (is_a($xmlinput, 'PEAR_Error')) {
return '';
}
$xmloutput = parent::getResponse($xmlinput);
$encoder = &new XML_WBXML_Encoder();
$encoder->setVersion($decoder->getVersion());
$encoder->setCharset($decoder->getCharsetStr());
$wbxmloutput = $encoder->encode($xmloutput);
if (isset($this->_debugDir)) {
$fp = fopen($this->_debugDir . '/syncml_server_' . $packetNum . '.wbxml', 'wb');
fwrite($fp, $wbxmloutput);
fclose($fp);
$packetNum++;
$f = fopen($this->_debugDir . '/syncml_wbxml.packetnum', 'wb');
fwrite($f, $packetNum);
fclose($f);
}
return $wbxmloutput;
}
/**
* Get the Content-Type of the response.
*
* @return string The MIME Content-Type of the RPC response.
*/
function getResponseContentType()
{
return 'application/vnd.syncml+wbxml';
}
}
--- NEW FILE: webdav.php ---
<?php
include_once 'HTTP/WebDAV/Server.php';
/**
* The Horde_RPC_webdav class provides a WebDAV implementation of the
* Horde RPC system.
*
* $Horde: framework/RPC/RPC/webdav.php,v 1.1 2004/01/24 23:21:08 chuck Exp $
*
* Copyright 2004 Chuck Hagenbuch <chuck at horde.org>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Chuck Hagenbuch <chuck at horde.org>
* @version $Revision: 1.1 $
* @since Horde 3.0
* @package Horde_RPC
*/
class Horde_RPC_webdav extends Horde_RPC {
/**
* Resource handler for the WebDAV server.
* @var object HTTP_WebDAV_Server_Horde $_server
*/
var $_server;
/**
* WebDav server constructor.
*
* @access private
* @return object An RPC server instance
*/
function Horde_RPC_xmlrpc()
{
parent::Horde_RPC();
$this->_server = &new HTTP_WebDAV_Server_Horde();
}
/**
* Sends an RPC request to the server and returns the result.
*
* @param string The raw request string.
*
* @return string The XML encoded response from the server.
*/
function getResponse($request)
{
$this->_server->ServeRequest();
exit;
}
/**
* WebDAV handles authentication internally, so bypass the
* system-level auth check by just returning true here.
*/
function authorize()
{
return true;
}
}
/**
* Horde extension of the base HTTP_WebDAV_Server class.
*
* @package Horde_RPC
*/
class HTTP_WebDAV_Server_Horde extends HTTP_WebDAV_Server {
/**
* GET implementation.
*
* @param array &$params Array of input and output parameters.
* <br><b>input</b><ul>
* <li> path -
* </ul>
* <br><b>output</b><ul>
* <li> size -
* </ul>
*
* @return integer HTTP-Statuscode.
*/
function GET(&$params)
{
return true;
}
/**
* Check authentication. We always return true here since we
* handle permissions based on the resource that's requested, but
* we do record the authenticated user for later use.
*
* @param string $type Authentication type, e.g. "basic" or "digest"
* @param string $username Transmitted username.
* @param string $password Transmitted password.
*
* @return boolean Authentication status. Always true.
*/
function check_auth($type, $username, $password)
{
$auth = &Auth::singleton($GLOBALS['conf']['auth']['driver']);
$auth->authenticate($username, array('password' => $password));
return true;
}
}
--- NEW FILE: xmlrpc.php ---
<?php
/**
* The Horde_RPC_xmlrpc class provides an XMLRPC implementation of the
* Horde RPC system.
*
* $Horde: framework/RPC/RPC/xmlrpc.php,v 1.8 2004/04/08 20:45:11 jan Exp $
*
* Copyright 2002-2004 Jan Schneider <jan at horde.org>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Jan Schneider <jan at horde.org>
* @version $Revision: 1.1 $
* @since Horde 3.0
* @package Horde_RPC
*/
class Horde_RPC_xmlrpc extends Horde_RPC {
/**
* Resource handler for the XMLRPC server.
* @var object $_server
*/
var $_server;
/**
* XMLRPC server constructor
*
* @access private
* @return object A RPC server instance
*/
function Horde_RPC_xmlrpc()
{
parent::Horde_RPC();
$this->_server = xmlrpc_server_create();
foreach ($GLOBALS['registry']->listMethods() as $method) {
xmlrpc_server_register_method($this->_server, str_replace('/', '.', $method), array('Horde_RPC_xmlrpc', '_dispatcher'));
}
}
/**
* Cleans up the RPC server.
*/
function shutdown()
{
xmlrpc_server_destroy($this->_server);
}
/**
* Sends an RPC request to the server and returns the result.
*
* @param string The raw request string.
*
* @return string The XML encoded response from the server.
*/
function getResponse($request)
{
$response = null;
return xmlrpc_server_call_method($this->_server, $request, $response);
}
/**
* Will be registered as the handler for all available methods
* and will call the appropriate function through the registry.
*
* @access private
*
* @param string $method The name of the method called by the RPC request.
* @param array $params The passed parameters.
* @param mixed $data Unknown.
*
* @return mixed The result of the called registry method.
*/
function _dispatcher($method, $params, $data)
{
global $registry;
$method = str_replace('.', '/', $method);
if (!$registry->hasMethod($method)) {
return sprintf(_("Method '%s' is not defined"), $method);
}
return $registry->call($method, $params);
}
/**
* Builds an XMLRPC request and sends it to the XMLRPC server.
*
* This statically called method is actually the XMLRPC client.
*
* @param string $url The path to the XMLRPC server on the called host.
* @param string $method The method to call.
* @param array $params (optional) A hash containing any necessary
* parameters for the method call.
* @param $options Optional associative array of parameters which can be:
* user - Basic Auth username
* pass - Basic Auth password
* proxy_host - Proxy server host
* proxy_port - Proxy server port
* proxy_user - Proxy auth username
* proxy_pass - Proxy auth password
* timeout - Connection timeout in seconds.
* allowRedirects - Whether to follow redirects or not
* maxRedirects - Max number of redirects to follow
*
* @return mixed The returned result from the method or a PEAR
* error object on failure.
*/
function request($url, $method, $params = null, $options = array())
{
$options['method'] = 'POST';
$language = isset($GLOBALS['language']) ? $GLOBALS['language'] :
(isset($_SERVER['LANG']) ? $_SERVER['LANG'] : '');
if (!isset($options['timeout'])) {
$options['timeout'] = 5;
}
if (!isset($options['allowRedirects'])) {
$options['allowRedirects'] = true;
$options['maxRedirects'] = 3;
}
require_once 'HTTP/Request.php';
$http = &new HTTP_Request($url, $options);
if (!empty($language)) {
$http->addHeader('Accept-Language', $language);
}
$http->addHeader('User-Agent', 'Horde RPC client');
$http->addHeader('Content-Type', 'text/xml');
$http->addRawPostData(xmlrpc_encode_request($method, $params));
$result = $http->sendRequest();
if (is_a($result, 'PEAR_Error')) {
return $result;
} elseif ($http->getResponseCode() != 200) {
return PEAR::raiseError(_("Request couldn't be answered. Returned errorcode: ") . $http->getResponseCode(), 'horde.error');
} elseif (!strstr($http->getResponseBody(), '<?xml')) {
return PEAR::raiseError(_("No valid XML data returned"), 'horde.error', null, null, $http->getResponseBody());
} else {
$response = @xmlrpc_decode(substr($http->getResponseBody(), strpos($http->getResponseBody(), '<?xml')));
if (is_array($response) && isset($response['faultString'])) {
return PEAR::raiseError($response['faultString'], 'horde.error');
} elseif (is_array($response) && isset($response[0]) &&
is_array($response[0]) && isset($response[0]['faultString'])) {
return PEAR::raiseError($response[0]['faultString'], 'horde.error');
}
return $response;
}
}
}
- Previous message: steffen: server/kolab-horde-framework/kolab-horde-framework/Prefs/Prefs CategoryManager.php, NONE, 1.1 UI.php, NONE, 1.1 imsp.php, NONE, 1.1 ldap.php, NONE, 1.1 session.php, NONE, 1.1 sql.php, NONE, 1.1
- Next message: steffen: server/kolab-horde-framework/kolab-horde-framework/Search Search.php, NONE, 1.1 package.xml, NONE, 1.1
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the commits
mailing list