\n$http_request\n", $debug); fputs($query_fd, $http_request, strlen($http_request)); dbg1("receiving response...", $debug); $header_parsed = false; $line = fgets($query_fd, 4096); while ($line) { if (!$header_parsed) { if ($line === "\r\n" || $line === "\n") { $header_parsed = 1; } dbg2("got header - $line", $debug); } else { $response_buf .= $line; } $line = fgets($query_fd, 4096); } fclose($query_fd); } else { dbg1("socket open failed", $debug); } } else { dbg1("missing param(s)", $debug); } dbg1("got response:. \n$response_buf\n\n", $debug); return $response_buf; } function xu_fault_code($code, $string) { return array('faultCode' => $code, 'faultString' => $string); } function find_and_decode_xml($buf, $debug) { if (strlen($buf)) { $xml_begin = substr($buf, strpos($buf, " 'xml', * 'verbosity' => 'pretty', * 'escaping' => array('markup', 'non-ascii', 'non-print'), * 'version' => 'xmlrpc', * 'encoding' => 'utf-8' * ); * or * * $output_options = array('output_type' => 'php'); */ function xu_rpc_http_concise($params) { $host = $uri = $port = $method = $args = $debug = null; $timeout = $user = $pass = $secure = $debug = null; extract($params); // default values if(!$port) { $port = 80; } if(!$uri) { $uri = '/'; } if(!isset($output)) { $output = array('version' => 'xmlrpc'); } $response_buf = ""; if ($host && $uri && $port) { $request_xml = xmlrpc_encode_request($method, $args, $output); $response_buf = xu_query_http_post($request_xml, $host, $uri, $port, $debug, $timeout, $user, $pass, $secure); $retval = find_and_decode_xml($response_buf, $debug); } return $retval; } /* call an xmlrpc method on a remote http server. legacy support. */ function xu_rpc_http($method, $args, $host, $uri="/", $port=80, $debug=false, $timeout=0, $user=false, $pass=false, $secure=false) { return xu_rpc_http_concise( array( method => $method, args => $args, host => $host, uri => $uri, port => $port, debug => $debug, timeout => $timeout, user => $user, pass => $pass, secure => $secure )); } function xu_is_fault($arg) { // xmlrpc extension finally supports this. return is_array($arg) ? xmlrpc_is_fault($arg) : false; } /* sets some http headers and prints xml */ function xu_server_send_http_response($xml) { header("Content-type: text/xml"); header("Content-length: " . strlen($xml) ); echo $xml; } function dbg($msg) { echo "

$msg

"; flush(); } function dbg1($msg, $debug_level) { if ($debug_level >= 1) { dbg($msg); } } function dbg2($msg, $debug_level) { if ($debug_level >= 2) { dbg($msg); } }