Fix testsuite failure for https mode
[plcapi.git] / lib / xmlrpc_wrappers.inc
index f96edd5..b2c6611 100644 (file)
@@ -3,9 +3,8 @@
  * PHP-XMLRPC "wrapper" functions\r
  * Generate stubs to transparently access xmlrpc methods as php functions and viceversa\r
  *\r
- * @version $Id: xmlrpc_wrappers.inc,v 1.13 2008/09/20 01:23:47 ggiunta Exp $\r
  * @author Gaetano Giunta\r
- * @copyright (C) 2006-2009 G. Giunta\r
+ * @copyright (C) 2006-2014 G. Giunta\r
  * @license code licensed under the BSD License: http://phpxmlrpc.sourceforge.net/license.txt\r
  *\r
  * @todo separate introspection from code generation for func-2-method wrapping\r
        * carried out by the lib, while datetime vals are passed around as strings)\r
        *\r
        * Known limitations:\r
-       * - requires PHP 5.0.3 +\r
        * - only works for user-defined functions, not for PHP internal functions\r
        *   (reflection does not support retrieving number/type of params for those)\r
        * - functions returning php objects will generate special xmlrpc responses:\r
                $decode_php_objects = isset($extra_options['decode_php_objs']) ? (bool)$extra_options['decode_php_objs'] : false;\r
                $catch_warnings = isset($extra_options['suppress_warnings']) && $extra_options['suppress_warnings'] ? '@' : '';\r
 \r
-               if(version_compare(phpversion(), '5.0.3') == -1)\r
-               {\r
-                       // up to php 5.0.3 some useful reflection methods were missing\r
-                       error_log('XML-RPC: cannot not wrap php functions unless running php version bigger than 5.0.3');\r
-                       return false;\r
-               }\r
-\r
-        $exists = false;\r
+               $exists = false;\r
+           if (is_string($funcname) && strpos($funcname, '::') !== false)\r
+           {\r
+               $funcname = explode('::', $funcname);\r
+           }\r
         if(is_array($funcname))\r
         {\r
             if(count($funcname) < 2 || (!is_string($funcname[0]) && !is_object($funcname[0])))\r
                                error_log('XML-RPC: method to be wrapped is the constructor: '.$plainfuncname);\r
                                return false;\r
                        }\r
-                       if($func->isDestructor())\r
+                if($func->isDestructor())\r
                        {\r
                                error_log('XML-RPC: method to be wrapped is the destructor: '.$plainfuncname);\r
                                return false;\r
                $methodfilter = isset($extra_options['method_filter']) ? $extra_options['method_filter'] : '';\r
                $methodtype = isset($extra_options['method_type']) ? $extra_options['method_type'] : 'auto';\r
 \r
-        if(version_compare(phpversion(), '5.0.3') == -1)\r
-               {\r
-                       // up to php 5.0.3 some useful reflection methods were missing\r
-                       error_log('XML-RPC: cannot not wrap php functions unless running php version bigger than 5.0.3');\r
-                       return false;\r
-               }\r
-\r
         $result = array();\r
                $mlist = get_class_methods($classname);\r
                foreach($mlist as $mname)\r
        * Given an xmlrpc client and a method name, register a php wrapper function\r
        * that will call it and return results using native php types for both\r
        * params and results. The generated php function will return an xmlrpcresp\r
-       * oject for failed xmlrpc calls\r
+       * object for failed xmlrpc calls\r
        *\r
        * Known limitations:\r
        * - server must support system.methodsignature for the wanted xmlrpc method\r
        * - for methods that expose many signatures, only one can be picked (we\r
-       *   could in priciple check if signatures differ only by number of params\r
+       *   could in principle check if signatures differ only by number of params\r
        *   and not by type, but it would be more complication than we can spare time)\r
        * - nested xmlrpc params: the caller of the generated php function has to\r
        *   encode on its own the params passed to the php function if these are structs\r
        *\r
        * @param xmlrpc_client $client     an xmlrpc client set up correctly to communicate with target server\r
        * @param string        $methodname the xmlrpc method to be mapped to a php function\r
-       * @param array         $extra_options array of options that specify conversion details. valid ptions include\r
+       * @param array         $extra_options array of options that specify conversion details. valid options include\r
        *        integer       signum      the index of the method signature to use in mapping (if method exposes many sigs)\r
        *        integer       timeout     timeout (in secs) to be used when executing function/calling remote method\r
        *        string        protocol    'http' (default), 'http11' or 'https'\r
-       *        string        new_function_name the name of php function to create. If unsepcified, lib will pick an appropriate name\r
+       *        string        new_function_name the name of php function to create. If unspecified, lib will pick an appropriate name\r
        *        string        return_source if true return php code w. function definition instead fo function name\r
        *        bool          encode_php_objs let php objects be sent to server using the 'improved' xmlrpc notation, so server can deserialize them as php objects\r
        *        bool          decode_php_objs --- WARNING !!! possible security hazard. only use it with trusted servers ---\r
 \r
                $encode_php_objects = isset($extra_options['encode_php_objs']) ? (bool)$extra_options['encode_php_objs'] : false;\r
                $decode_php_objects = isset($extra_options['decode_php_objs']) ? (bool)$extra_options['decode_php_objs'] : false;\r
+               // it seems like the meaning of 'simple_client_copy' here is swapped wrt client_copy_mode later on...\r
                $simple_client_copy = isset($extra_options['simple_client_copy']) ? (int)($extra_options['simple_client_copy']) : 0;\r
                $buildit = isset($extra_options['return_source']) ? !($extra_options['return_source']) : true;\r
                $prefix = isset($extra_options['prefix']) ? $extra_options['prefix'] : 'xmlrpc';\r