Exemple #1
0
 public function __construct()
 {
     $this->server = xmlrpc_server_create();
     //http://www.hixie.ch/specs/pingback/pingback
     //https://github.com/tedeh/pingback-php
     xmlrpc_server_register_method($this->server, 'pingback.ping', [$this, 'pingback_ping']);
 }
Exemple #2
0
 /**
  * XMLRPC server constructor
  *
  * @access private
  */
 public function __construct($request, $params = array())
 {
     parent::__construct($request, $params);
     $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'));
     }
 }
Exemple #3
0
 function handlePost()
 {
     $server = xmlrpc_server_create();
     xmlrpc_server_register_method($server, 'pingback.ping', array($this, 'ping'));
     echo xmlrpc_server_call_method($server, file_get_contents('php://input'), null, array('encoding' => 'utf-8'));
     xmlrpc_server_destroy($server);
     return true;
 }
Exemple #4
0
 public function __construct($options = array())
 {
     $this->_server = xmlrpc_server_create();
     $this->setOptions($options);
     if (!xmlrpc_server_register_method($this->_server, 'pingback.ping', array($this, '_ping'))) {
         throw new PingbackException('Failed to register method to server');
     }
 }
 /**
  * Initialize the XMLRPC server
  *
  * @return   void
  */
 protected function init()
 {
     $this->XmlRpcServer = xmlrpc_server_create();
     xmlrpc_server_register_method($this->XmlRpcServer, 'ns1.doSomething', array($this, '_xmlrpc_ns1_doSomething'));
     xmlrpc_server_register_method($this->XmlRpcServer, 'ns2.getServerTime', array($this, '_xmlrpc_ns2_getServerTime'));
     xmlrpc_server_register_method($this->XmlRpcServer, 'sayHello', array($this, '_xmlrpc_sayHello'));
     // TODO how does this work?
     //xmlrpc_server_register_introspection_callback($this->XmlRpcServer, array($this, '_xmlrpc_introspection'));
 }
 function __construct($payload, $payload_signed, $payload_encrypted)
 {
     $this->payload = $payload;
     // xmlrpc_decode_request is defined such that the '$method' string is
     // passed in by reference.
     $this->params = xmlrpc_decode_request($this->payload, $this->method, 'UTF-8');
     // The method name is not allowed to have a dot, except for a single dot
     // which preceeds the php extension. It can have slashes but it cannot
     // begin with a slash. We specifically don't want .. to be possible.
     if (0 == preg_match("@^[A-Za-z0-9]+/[A-Za-z0-9/_-]+(\\.php/)?[A-Za-z0-9_-]+\$@", $this->method)) {
         throw new XmlrpcServerException('The function does not exist', 6010);
     }
     if ($payload_signed && $payload_encrypted || $this->method == 'system/keyswap') {
         // The remote server's credentials checked out.
         // You might want to enable some methods for unsigned/unencrypted
         // transport
     } else {
         // For now, we throw an exception
         throw new XmlrpcServerException('The signature on your message was not valid', 6005);
     }
     // The system methods are treated differently.
     if (array_key_exists($this->method, $this->system_methods)) {
         $xmlrpcserver = xmlrpc_server_create();
         xmlrpc_server_register_method($xmlrpcserver, $this->method, array(&$this, $this->system_methods[$this->method]));
     } else {
         // Security: I'm thinking that we should not return separate errors for
         //           the file not existing, the file not being readable, etc. as
         //           it might provide an opportunity for outsiders to scan the
         //           server for random files. So just a single message/code for
         //           all failures here kthxbye.
         if (strpos($this->method, '/') !== false) {
             $this->callstack = explode('/', $this->method);
         } else {
             throw new XmlrpcServerException('The function does not exist', 6011);
         }
         // Read custom xmlrpc functions from local
         if (function_exists('local_xmlrpc_services')) {
             foreach (local_xmlrpc_services() as $name => $localservices) {
                 $this->services[$name] = array_merge($this->services[$name], $localservices);
             }
         }
         foreach ($this->services as $container) {
             if (array_key_exists($this->method, $container)) {
                 $xmlrpcserver = xmlrpc_server_create();
                 $bool = xmlrpc_server_register_method($xmlrpcserver, $this->method, 'api_dummy_method');
                 $this->response = xmlrpc_server_call_method($xmlrpcserver, $payload, $container[$this->method], array("encoding" => "utf-8"));
                 $bool = xmlrpc_server_destroy($xmlrpcserver);
                 return $this->response;
             }
         }
         throw new XmlrpcServerException('No such method: ' . $this->method);
     }
     $temp = '';
     $this->response = xmlrpc_server_call_method($xmlrpcserver, $payload, $temp, array("encoding" => "utf-8"));
     return $this->response;
 }
 /**
  * Processes an incoming request, executes it and builds a response.
  *
  * @since 5.1
  * @param ModuleServerRequest $request Incoming request.
  * @param ModuleServerResponse $response Outcoming response.
  * @return void
  */
 public function process(ModuleServerRequest $request, ModuleServerResponse $response)
 {
     $command = explode(' ', $request->getCommand());
     $module_location = $command[1];
     if (!strlen($module_location)) {
         $response->sendWarning(ModuleServerResponse::SC_NOT_FOUND, 'Module location not defined.', ModuleServerRsponse::ERROR_CLASSNAME_MISSING);
         return;
     }
     try {
         $locator = new ModuleLocator('module://' . $request->getHeader('User') . ':' . $request->getHeader('Password') . '@/' . $module_location);
         $sessionId = $request->getHeader('Session');
         if ($sessionId) {
             $this->module = ModuleFactory::getSessionModule($locator, $sessionId);
         } else {
             $this->module = ModuleFactory::getModule($locator);
         }
     } catch (ModuleException $e) {
         $response->sendWarning(ModuleServerResponse::SC_INTERNAL_SERVER_ERROR, $e->__toString());
         return;
     } catch (\Exception $e) {
         $response->sendWarning(ModuleServerResponse::SC_INTERNAL_SERVER_ERROR, $e->__toString());
         return;
     }
     if (!($xmlrpc_server = xmlrpc_server_create())) {
         $response->sendWarning(ModuleServerResponse::SC_INTERNAL_SERVER_ERROR, 'Internal error: Could not create an XML-RPC server.', ModuleServerResponse::ERROR_XMLRPC_ERROR);
         return;
     }
     $theClass = new \ReflectionObject($this->module);
     $methods = $theClass->getMethods();
     foreach ($methods as $method) {
         // Ignore private methods
         $theMethod = new \ReflectionMethod($theClass->getName(), $method->getName());
         if (!$theMethod->isPublic()) {
             continue;
         }
         // Expose only methods beginning with "module" prefix
         if (!(substr($method->getName(), 0, 6) == 'module')) {
             continue;
         }
         xmlrpc_server_register_method($xmlrpc_server, strtolower($method->getName()), array($this, 'xmlrpcGateway'));
     }
     xmlrpc_server_register_introspection_callback($xmlrpc_server, array($this, 'introspectionGateway'));
     try {
         $buffer = xmlrpc_server_call_method($xmlrpc_server, $request->getPayload(), '', array('output_type' => 'xml'));
         $response->addHeader('Module/1.0 ' . ModuleServerResponse::SC_OK);
         $response->setBuffer($buffer);
     } catch (\Exception $e) {
         $response->addHeader('Module/1.0 ' . ModuleServerResponse::SC_INTERNAL_ERROR);
         $response->setBuffer($buffer);
     }
     xmlrpc_server_destroy($xmlrpc_server);
     $context = new ModuleContext($module_location);
     $session = new \Innomatic\Module\Session\ModuleSession($context, $sessionId);
     $session->save($this->module);
     $response->addHeader('Session: ' . $session->getId());
 }
 function xmlrpc_server($dispMap = '', $serviceNow = 0)
 {
     $this->server = xmlrpc_server_create();
     if ($dispMap) {
         $this->dmap = $dispMap;
         if ($serviceNow) {
             $this->service();
         }
     }
 }
 /**
  * Create a new XML-RPC Server. 
  *
  * The constructor receives a mandatory parameter: the Call Handler. The call handler executes the actual
  * method call. XML_RPC2 server acts as a protocol decoder/encoder between the call handler and the client
  *
  * @param object $callHandler
  * @param array $options associative array of options
  */
 function __construct($callHandler, $options = array())
 {
     parent::__construct($callHandler, $options);
     $this->_xmlrpcextServer = xmlrpc_server_create();
     foreach ($callHandler->getMethods() as $method) {
         if (xmlrpc_server_register_method($this->_xmlrpcextServer, $method->getName(), array($this, 'epiFunctionHandlerAdapter')) !== true) {
             throw new XML_RPC2_Exception('Unable to setup XMLRPCext server. xmlrpc_server_register_method returned non-true.');
         }
     }
 }
Exemple #10
0
 /**
  * Constructeur.
  *
  * @access protected
  */
 function __construct()
 {
     $this->_server = xmlrpc_server_create();
     $this->auth = false;
     $this->_logger = Tools::loggerFactory();
     $this->registerMethod('test');
     $this->registerMethod('auth.login');
     $this->registerMethod('i18n.setLocale');
     $this->registerMethod('i18n.getSupportedLocales');
     $this->registerMethod('session.register');
 }
Exemple #11
0
 /**
  * XMLRPC server constructor.
  */
 function __construct($request, $params = array())
 {
     parent::__construct($request, $params);
     $this->_server = xmlrpc_server_create();
     // Register only phpgw services.
     foreach ($GLOBALS['registry']->listMethods('phpgw') as $method) {
         $methods = explode('/', $method);
         array_shift($methods);
         $method = implode('.', $methods);
         xmlrpc_server_register_method($this->_server, $method, array('Horde_Rpc_Phpgw', '_dispatcher'));
     }
 }
Exemple #12
0
/**
 * This won't ever be called unless there is an error
 */
function serializationAction(&$body)
{
    $request_xml = $body->getValue();
    $toSerialize = $body->getResults();
    $lambdaFunc = 'return $userData;';
    $func = create_function('$a,$b,$userData', $lambdaFunc);
    $xmlrpc_server = xmlrpc_server_create();
    $request_xml = $body->getValue();
    xmlrpc_server_register_method($xmlrpc_server, $body->packageClassMethodName, $func);
    $response = xmlrpc_server_call_method($xmlrpc_server, $request_xml, $toSerialize);
    $body->setResults($response);
}
Exemple #13
0
 public function __construct()
 {
     $this->director = Director::getInstance();
     if (!function_exists("xmlrpc_server_create")) {
         require_once "xmlrpc/xmlrpc.inc";
         require_once "xmlrpc/xmlrpcs.inc";
         require_once "xmlrpc/xmlrpc_wrappers.inc";
         require_once "xmlrpc/xmlrpc_extension_api.inc";
     }
     $this->server = xmlrpc_server_create();
     $this->log = Logger::getInstance();
 }
Exemple #14
0
 /**
  * Request processor
  * @param object $handler
  * @param array|bool $methodsList If omitted, handler should contain getMethods() method
  * @return string
  */
 public function processRequest($handler, $methodsList = false)
 {
     $server = xmlrpc_server_create();
     if (!$methodsList) {
         $methodsList = $handler->getMethods();
     }
     foreach ($methodsList as $method) {
         xmlrpc_server_register_method($server, $method, [$handler, $method]);
     }
     $request = (isset($HTTP_RAW_POST_DATA) and $HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : file_get_contents('php://input');
     $response = xmlrpc_server_call_method($server, $request, null);
     xmlrpc_server_destroy($server);
     return $response;
 }
Exemple #15
0
    private function setUpXmlRpcTypes($xmlrpc_das)
    {
        $typeList = <<<END
<introspection>
    <typeList>

        <typeDescription name='SimpleType' basetype='struct' desc='Simple type'>
    
            <value type='int' name='intValue'></value>
            <value type='double' name='doubleValue'></value>
            <value type='string' name='strValue'></value>

        </typeDescription>

        <typeDescription name='ComplexType' basetype='struct' desc='Complex type'>

            <value type='SimpleType []' name='objArrValue'></value>
            <value type='int []' name='intArrValue'></value>
            <value type='int' name='intValue'></value>
            <value type='double' name='doubleValue'></value>
            <value type='string' name='strValue'></value>
            <value type='SimpleType' name='objValue'></value>

        </typeDescription>
    </typeList>
</introspection>
END;
        $call = <<<END
<?xml version="1.0" encoding="iso-8859-1"?>
<methodCall>
    <methodName>system.describeMethods</methodName>
    <params/>
</methodCall>
END;
        $xmlrpc_server = xmlrpc_server_create();
        $descArray = xmlrpc_parse_method_descriptions($typeList);
        xmlrpc_server_add_introspection_data($xmlrpc_server, $descArray);
        $response = xmlrpc_server_call_method($xmlrpc_server, $call, null);
        xmlrpc_server_destroy($xmlrpc_server);
        $methodDesc = xmlrpc_decode_request($response, $method);
        $this->xmlrpc_das->addTypesXmlRpc($methodDesc["typeList"]);
    }
    /**
     * Generate
     *
     * @param string $service_description Service Description
     *
     * @return null
     */
    public function generate($service_description)
    {
        SCA::$logger->log("Entering");
        try {
            $xmlrpc_server = xmlrpc_server_create();
            $aliases = array();
            $this->addIntrospectionData($xmlrpc_server, $service_description, $aliases);
            $describeMethods = <<<END
<?xml version="1.0" ?>
<methodCall>
<methodName>system.describeMethods</methodName>
<params/>
</methodCall>
END;
            $desc = xmlrpc_server_call_method($xmlrpc_server, $describeMethods, null);
            xmlrpc_server_destroy($xmlrpc_server);
            header('Content-type: text/xml');
            echo $desc;
        } catch (Exception $se) {
            echo $se->exceptionString() . "\n";
        }
    }
Exemple #17
0
 /**
  * Create the service wrapper for a SCA Component.
  *
  * @param object $instance      Instance
  * @param string $class_name    Class
  * @param string $wsdl_filename WSDL
  */
 public function __construct($instance, $class_name, $wsdl_filename)
 {
     SCA::$logger->log("Wrapper {$class_name}");
     $this->class_name = $class_name;
     $this->instance_of_the_base_class = $instance;
     SCA::fillInReferences($this->instance_of_the_base_class);
     $this->annotations = new SCA_AnnotationReader($this->instance_of_the_base_class);
     // create an XML-RPC DAS and populate it with the valid types
     // that this service can create.
     $xsds = SCA_Helper::getAllXsds($class_name);
     $this->xmlrpc_das = new SCA_Bindings_Xmlrpc_DAS();
     foreach ($xsds as $index => $xsds) {
         list($namespace, $xsdfile) = $xsds;
         if (SCA_Helper::isARelativePath($xsdfile)) {
             $xsd = SCA_Helper::constructAbsolutePath($xsdfile, $class_name);
             $this->xmlrpc_das->addTypesXsdFile($xsd);
         }
     }
     $this->xmlrpc_server = xmlrpc_server_create();
     $service_description = $this->annotations->reflectService();
     $serviceDescGen = new SCA_Bindings_Xmlrpc_ServiceDescriptionGenerator();
     $serviceDescGen->addIntrospectionData($this->xmlrpc_server, $service_description, $this->method_aliases, $this->xmlrpc_das);
 }
Exemple #18
0
 /**
  * Creates a new instance of the Ripcord server.
  *
  * @param mixed $services   . Optional. An object or array of objects.
  *                          The public methods in these objects will be exposed through the RPC server.
  *                          If the services array has non-numeric keys, the key for each object will define its namespace.
  * @param array $options    . Optional. Allows you to override the default server settings. Accepted key names are:
  *                          - 'documentor': allows you to specify an alternative HTML documentor class, no HTML documentor.
  *                          - 'name'      : The name of the server, used by the default HTML documentor.
  *                          - 'css'       : An url of a css file to link to in the HTML documentation.
  *                          - 'wsdl'      : The wsdl 1.0 description of this service ('soap 1.1' version, or the 'auto' version
  *                          - 'wsdl2'     : The wsdl 2.0 description of this service
  *                          In addition you can set any of the outputOptions for the xmlrpc server.
  * @param null  $documentor
  *
  * @throws ConfigurationException when the xmlrpc extension in not available.
  *
  * @see Ripcord_Server::setOutputOption()
  */
 public function __construct($services = null, $options = null, $documentor = null)
 {
     if (!function_exists('xmlrpc_server_create')) {
         throw new ConfigurationException('PHP XMLRPC library is not installed', Ripcord::XMLRPC_NOT_INSTALLED);
     }
     $this->xmlrpc = xmlrpc_server_create();
     if (isset($services)) {
         if (is_array($services)) {
             foreach ($services as $serviceName => $service) {
                 $this->addService($service, $serviceName);
             }
         } else {
             $this->addService($services);
         }
     }
     if (isset($documentor) && is_object($documentor)) {
         $this->documentor = $documentor;
         xmlrpc_server_register_introspection_callback($this->xmlrpc, [$this->documentor, 'getIntrospectionXML']);
     }
     if (isset($options)) {
         $this->outputOptions = array_merge($this->outputOptions, $options);
     }
 }
Exemple #19
0
function processRequest(&$request_xml)
{
    // define XML-RPC server
    $server = xmlrpc_server_create();
    // log for debuggin
    $fp = fopen("/var/tmp/ws_request.log", "a");
    fwrite($fp, date("H:i") . "\n");
    fwrite($fp, $request_xml);
    fwrite($fp, "\n\n");
    fclose($fp);
    // register methods
    xmlrpc_server_register_method($server, "getQueueValues", "rpc_get_queue_values");
    xmlrpc_server_register_method($server, "pushValue", "rpc_push_value");
    xmlrpc_server_register_method($server, "getStateData", "rpc_get_state_data");
    xmlrpc_server_register_method($server, "setStateData", "rpc_set_state_data");
    xmlrpc_server_register_method($server, "helloWorld", "rpc_hello_world");
    xmlrpc_server_register_method($server, "noop", "rpc_hello_world");
    // call the method
    $response =& xmlrpc_server_call_method($server, $request_xml, '');
    // send back the respond
    print $response;
    // release resources
    xmlrpc_server_destroy($server);
}
Exemple #20
0
 /**
  * Creates a class instance.
  */
 protected function __construct()
 {
     parent::__construct();
     $this->server = xmlrpc_server_create();
 }
<?php

class SOAP_Array
{
    public function get($id)
    {
        return $this->add($id);
    }
}
$xml = xmlrpc_server_create();
$Myrequest = '<?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>GetProducts</methodName><params><param><value><dateTime.iso8601>20060922T14:26:19</dateTime.iso8601></value></param></params></methodCall>';
class MyClass
{
    function GetProducts($dummy, $time)
    {
        return array('faultString' => $time);
    }
}
$myclass = new MyClass();
xmlrpc_server_register_method($xml, 'GetProducts', array($myclass, 'GetProducts'));
$response = xmlrpc_server_call_method($xml, $Myrequest, null);
var_dump($response);
echo "Done\n";
Exemple #22
0
/*
 * This handler takes one parameter, and returns a struct containing three 
 * elements, times10, times100 and times1000, the result of multiplying the 
 * number by 10, 100 and 1000.  
 */
function validator1_simpleStructReturnTest($method_name, $params, $app_data)
{
    $xStruct = array();
    $iIncoming = array_pop($params);
    $xStruct["times10"] = $iIncoming * 10;
    $xStruct["times100"] = $iIncoming * 100;
    $xStruct["times1000"] = $iIncoming * 1000;
    return $xStruct;
}
/* create a new server object */
$server = xmlrpc_server_create();
xmlrpc_server_register_method($server, "validator1.arrayOfStructsTest", "validator1_arrayOfStructsTest");
xmlrpc_server_register_method($server, "validator1.countTheEntities", "validator1_countTheEntities");
xmlrpc_server_register_method($server, "validator1.easyStructTest", "validator1_easyStructTest");
xmlrpc_server_register_method($server, "validator1.echoStructTest", "validator1_echoStructTest");
xmlrpc_server_register_method($server, "validator1.manyTypesTest", "validator1_manyTypesTest");
xmlrpc_server_register_method($server, "validator1.moderateSizeArrayCheck", "validator1_moderateSizeArrayCheck");
xmlrpc_server_register_method($server, "validator1.nestedStructTest", "validator1_nestedStructTest");
xmlrpc_server_register_method($server, "validator1.simpleStructReturnTest", "validator1_simpleStructReturnTest");
// name differently for soap.
xmlrpc_server_register_method($server, "arrayOfStructsTest", "validator1_arrayOfStructsTest");
xmlrpc_server_register_method($server, "countTheEntities", "validator1_countTheEntities");
xmlrpc_server_register_method($server, "easyStructTest", "validator1_easyStructTest");
xmlrpc_server_register_method($server, "echoStructTest", "validator1_echoStructTest");
xmlrpc_server_register_method($server, "manyTypesTest", "validator1_manyTypesTest");
xmlrpc_server_register_method($server, "moderateSizeArrayCheck", "validator1_moderateSizeArrayCheck");
Exemple #23
0
 /**
  *  フレームワークの処理を実行する(XMLRPC)
  *
  *  @access private
  *  @param  mixed   $action_name    指定のアクション名
  *  @return mixed   0:正常終了 Ethna_Error:エラー
  */
 function _trigger_XMLRPC($action_name = "")
 {
     // prepare xmlrpc server
     $xmlrpc_gateway_method_name = "_Ethna_XmlrpcGateway";
     $xmlrpc_server = xmlrpc_server_create();
     $method = null;
     $param = xmlrpc_decode_request(file_get_contents('php://input'), $method);
     $this->xmlrpc_method_name = $method;
     $request = xmlrpc_encode_request($xmlrpc_gateway_method_name, $param, array('output_type' => 'xml', 'verbosity' => 'pretty', 'escaping' => array('markup'), 'version' => 'xmlrpc', 'encoding' => 'utf-8'));
     xmlrpc_server_register_method($xmlrpc_server, $xmlrpc_gateway_method_name, $xmlrpc_gateway_method_name);
     // send request
     $r = xmlrpc_server_call_method($xmlrpc_server, $request, null, array('output_type' => 'xml', 'verbosity' => 'pretty', 'escaping' => array('markup'), 'version' => 'xmlrpc', 'encoding' => 'utf-8'));
     header('Content-Length: ' . strlen($r));
     header('Content-Type: text/xml; charset=UTF-8');
     print $r;
 }
Exemple #24
0
 private static function initialize($server = true, $data = false)
 {
     if ($data) {
         if (!self::$xmlreq && !(self::$xmlreq = http_get_request_body())) {
             throw new Exception("Failed to fetch XMLRPC request body");
         }
     }
     if ($server) {
         if (!self::$xmlrpc && !(self::$xmlrpc = xmlrpc_server_create())) {
             throw new Exception("Failed to initialize XMLRPC server");
         }
         ++self::$refcnt;
     }
 }
Exemple #25
0
/**
 * Initialize the object (if necessary), execute the method or function, and
 * return the response
 *
 * @param  string  $includefile    The file that contains the object definition
 * @param  string  $methodname     The name of the method to execute
 * @param  string  $method         The full path to the method
 * @param  string  $payload        The XML-RPC request payload
 * @param  string  $class          The name of the class to instantiate (or false)
 *
 * @throws mnet_server_exception
 *
 * @return string                  The XML-RPC response
 */
function mnet_server_invoke_dangerous_method($includefile, $methodname, $method, $payload) {

    if (file_exists($CFG->dirroot . $includefile)) {
        require_once $CFG->dirroot . $includefile;
        // $callprefix matches the rpc convention
        // of not having a leading slash
        $callprefix = preg_replace('!^/!', '', $includefile);
    } else {
        throw new mnet_server_exception(705, "nosuchfile");
    }

    if ($functionname != clean_param($functionname, PARAM_PATH)) {
        throw new mnet_server_exception(7012, "nosuchfunction");
    }

    if (!function_exists($functionname)) {
        throw new mnet_server_exception(7012, "nosuchfunction");
    }
    $xmlrpcserver = xmlrpc_server_create();
    xmlrpc_server_register_method($xmlrpcserver, $method, 'mnet_server_dummy_method');
    $response = xmlrpc_server_call_method($xmlrpcserver, $payload, $methodname, array("encoding" => "utf-8"));
    xmlrpc_server_destroy($xmlrpcserver);
    return $response;
}
Exemple #26
0
 public function __construct()
 {
     $this->server = xmlrpc_server_create();
 }
 function RPCServer()
 {
     $this->_server = xmlrpc_server_create();
     $this->methods = array();
     $this->services = array();
 }
Exemple #28
0
 /**
  * Creates a new instance of the Ripcord server.
  * @param mixed $services. Optional. An object or array of objects. The public methods in these objects will be exposed
  * through the RPC server. If the services array has non-numeric keys, the key for each object will define its namespace.
  * @param array $options. Optional. Allows you to override the default server settings. Accepted key names are:
  * - 'documentor': allows you to specify an alternative HTML documentor class, or if set to false, no HTML documentor.
  * - 'name'      : The name of the server, used by the default HTML documentor.
  * - 'css'       : An url of a css file to link to in the HTML documentation.
  * - 'wsdl'      : The wsdl 1.0 description of this service (only usefull if you run the 'soap 1.1' version, or the 'auto' version
  * - 'wsdl2'     : The wsdl 2.0 description of this service
  * In addition you can set any of the outputOptions for the xmlrpc server.
  * @see Ripcord_Server::setOutputOption()
  * @throws Ripcord_InvalidArgumentException (ripcord::unknownServiceType) when passed an incorrect service
  * @throws Ripcord_ConfigurationException (ripcord::xmlrpcNotInstalled) when the xmlrpc extension in not available.
  */
 function __construct($services = null, $options = null, $documentor = null)
 {
     if (!function_exists('xmlrpc_server_create')) {
         throw new Ripcord_ConfigurationException('PHP XMLRPC library is not installed', ripcord::xmlrpcNotInstalled);
     }
     libxml_disable_entity_loader();
     // prevents XXE attacks
     $this->xmlrpc = xmlrpc_server_create();
     if (isset($services)) {
         if (is_array($services)) {
             foreach ($services as $serviceName => $service) {
                 $this->addService($service, $serviceName);
             }
         } else {
             $this->addService($services);
         }
     }
     if (isset($documentor) && is_object($documentor)) {
         $this->documentor = $documentor;
         xmlrpc_server_register_introspection_callback($this->xmlrpc, array($this->documentor, 'getIntrospectionXML'));
     }
     if (isset($options)) {
         $this->outputOptions = array_merge($this->outputOptions, $options);
     }
 }
Exemple #29
0
/**
 * Initialize the object (if necessary), execute the method or function, and 
 * return the response
 *
 * @param  string  $includefile    The file that contains the object definition
 * @param  string  $methodname     The name of the method to execute
 * @param  string  $method         The full path to the method
 * @param  string  $payload        The XML-RPC request payload
 * @param  string  $class          The name of the class to instantiate (or false)
 * @return string                  The XML-RPC response
 */
function mnet_server_invoke_method($includefile, $methodname, $method, $payload, $class = false)
{
    $permission = mnet_permit_rpc_call($includefile, $methodname, $class);
    if (RPC_NOSUCHFILE == $permission) {
        // Generate error response - unable to locate function
        exit(mnet_server_fault(705, 'nosuchfile', $includefile));
    }
    if (RPC_NOSUCHFUNCTION == $permission) {
        // Generate error response - unable to locate function
        exit(mnet_server_fault(706, 'nosuchfunction'));
    }
    if (RPC_FORBIDDENFUNCTION == $permission) {
        // Generate error response - unable to locate function
        exit(mnet_server_fault(707, 'forbidden-function'));
    }
    if (RPC_NOSUCHCLASS == $permission) {
        // Generate error response - unable to locate function
        exit(mnet_server_fault(7013, 'nosuchfunction'));
    }
    if (RPC_NOSUCHMETHOD == $permission) {
        // Generate error response - unable to locate function
        exit(mnet_server_fault(7014, 'nosuchmethod'));
    }
    if (RPC_NOSUCHFUNCTION == $permission) {
        // Generate error response - unable to locate function
        exit(mnet_server_fault(7014, 'nosuchmethod'));
    }
    if (RPC_FORBIDDENMETHOD == $permission) {
        // Generate error response - unable to locate function
        exit(mnet_server_fault(7015, 'nosuchfunction'));
    }
    if (0 < $permission) {
        // Generate error response - unable to locate function
        exit(mnet_server_fault(7019, 'unknownerror'));
    }
    if (RPC_OK == $permission) {
        $xmlrpcserver = xmlrpc_server_create();
        $bool = xmlrpc_server_register_method($xmlrpcserver, $method, 'mnet_server_dummy_method');
        $response = xmlrpc_server_call_method($xmlrpcserver, $payload, $methodname, array("encoding" => "utf-8"));
        $bool = xmlrpc_server_destroy($xmlrpcserver);
        return $response;
    }
}
Exemple #30
0
function xmlrpcgetaffiliations()
{
    global $xmlrpc_handle, $HTTP_RAW_POST_DATA;
    # create xmlrpc handle
    $xmlrpc_handle = xmlrpc_server_create();
    # register functions available via rpc calls
    xmlrpc_server_register_method($xmlrpc_handle, "XMLRPCaffiliations", "xmlRPChandler");
    print xmlrpc_server_call_method($xmlrpc_handle, $HTTP_RAW_POST_DATA, '');
    xmlrpc_server_destroy($xmlrpc_handle);
    semUnlock();
    dbDisconnect();
    exit;
}