1<?php 2if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../'); 3 4require_once(DOKU_INC.'inc/init.php'); 5require_once(DOKU_INC.'inc/remote.php'); 6session_write_close(); //close session 7 8if(!$conf['xmlrpc']) die('XML-RPC server not enabled.'); 9 10/** 11 * Contains needed wrapper functions and registers all available 12 * XMLRPC functions. 13 */ 14class dokuwiki_xmlrpc_server extends IXR_Server { 15 var $remote; 16 17 /** 18 * Constructor. Register methods and run Server 19 */ 20 function dokuwiki_xmlrpc_server(){ 21 $this->remote = new RemoteAPI(); 22 $this->remote->setDateTransformation(array($this, 'toDate')); 23 $this->remote->setFileTransformation(array($this, 'toFile')); 24 $this->IXR_Server(); 25 } 26 27 function call($methodname, $args){ 28 try { 29 $result = $this->remote->call($methodname, $args); 30 return $result; 31 } catch (RemoteAccessDeniedException $e) { 32 if (!isset($_SERVER['REMOTE_USER'])) { 33 header('HTTP/1.1 401 Unauthorized'); 34 } else { 35 header('HTTP/1.1 403 Forbidden'); 36 } 37 return new IXR_Error(-32603, "server error. not authorized to call method $methodname"); 38 } catch (RemoteException $e) { 39 return new IXR_Error($e->getCode(), $e->getMessage()); 40 } 41 } 42 43 function toDate($data) { 44 return new IXR_Date($data); 45 } 46 47 function toFile($data) { 48 return new IXR_Base64($data); 49 } 50} 51 52$server = new dokuwiki_xmlrpc_server(); 53 54// vim:ts=4:sw=4:et: 55