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