function or an array with four * entries: * - The XML-RPC method name (for example, module.function). * - The Drupal callback function (for example, module_function). * - The method signature is an array of XML-RPC types. The first element * of this array is the type of return value and then you should write a * list of the types of the parameters. XML-RPC types are the following * (See the types at http://www.xmlrpc.com/spec): * - "boolean": 0 (false) or 1 (true). * - "double": a floating point number (for example, -12.214). * - "int": a integer number (for example, -12). * - "array": an array without keys (for example, array(1, 2, 3)). * - "struct": an associative array or an object (for example, * array('one' => 1, 'two' => 2)). * - "date": when you return a date, then you may either return a * timestamp (time(), mktime() etc.) or an ISO8601 timestamp. When * date is specified as an input parameter, then you get an object, * which is described in the function xmlrpc_date * - "base64": a string containing binary data, automatically * encoded/decoded automatically. * - "string": anything else, typically a string. * - A descriptive help string, enclosed in a t() function for translation * purposes. * Both forms are shown in the example. */ function hook_xmlrpc() { return array( 'drupal.login' => 'drupal_login', array( 'drupal.site.ping', 'drupal_directory_ping', array('boolean', 'string', 'string', 'string', 'string', 'string'), t('Handling ping request')) ); } /** * Alters the definition of XML-RPC methods before they are called. * * This hook allows modules to modify the callback definition of declared * XML-RPC methods, right before they are invoked by a client. Methods may be * added, or existing methods may be altered. * * Note that hook_xmlrpc() supports two distinct and incompatible formats to * define a callback, so care must be taken when altering other methods. * * @param $methods * An asssociative array of method callback definitions, as returned from * hook_xmlrpc() implementations. * * @see hook_xmlrpc() * @see xmlrpc_server() */ function hook_xmlrpc_alter(&$methods) { // Directly change a simple method. $methods['drupal.login'] = 'mymodule_login'; // Alter complex definitions. foreach ($methods as $key => &$method) { // Skip simple method definitions. if (!is_int($key)) { continue; } // Perform the wanted manipulation. if ($method[0] == 'drupal.site.ping') { $method[1] = 'mymodule_directory_ping'; } } }