X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fxmlrpcclient.php;h=3f50e7aa4779ba9c3af8a9aa52051e4e59f5beed;hb=db9c38388c6d941c9aff798921a69317ff88ce8f;hp=8784a0c2b5d392da58aadb457a17616fef4e6685;hpb=df69f0b9e58a6edcd47e9b6dfcf971526f268d45;p=platal.git diff --git a/classes/xmlrpcclient.php b/classes/xmlrpcclient.php index 8784a0c..3f50e7a 100644 --- a/classes/xmlrpcclient.php +++ b/classes/xmlrpcclient.php @@ -1,146 +1,5 @@ url = $url; $this->urlparts = parse_url($this->url); - foreach (array('scheme', 'host', 'user', 'pass', 'path', 'query', 'fragment') as $part) { - if (!isset($this->urlparts[$part])) { - $this->urlparts[$part] = null; - } + + if (empty($this->urlparts['port'])) { + $this->urlparts['port'] = 80; } + + if (empty($this->urlparts['path'])) { + $this->urlparts['path'] = '/'; + } + } + + private function http_post($request) + { + $host = $path = $port = $user = $pass = null; + extract($this->urlparts); + + if ($scheme == 'https') { + $host = 'ssl://'.$host; + } + + $query_fd = fsockopen($host, $port, $errno, $errstr, 10); + if (!$query_fd) + return null; + + $auth = ''; + if ($user) { + $auth = 'Authorization: Basic ' . base64_encode("$user:$pass") . "\r\n"; + } + + $content_len = strlen($request); + $http_request = + "POST $path HTTP/1.0\r\n" . + $auth . + "Content-Type: text/xml\r\n" . + "Content-Length: $content_len\r\n" . + "Connection: Close\r\n" . + "Host: $host:$port\r\n" . + "\r\n" . + $request; + + fputs($query_fd, $http_request, strlen($http_request)); + + $buf = ''; + while (!feof($query_fd)) { + $buf .= fread($query_fd, 8192); + } + + fclose($query_fd); + return $buf; + } + + private function find_and_decode_xml($buf) + { + $pos = strpos($buf, 'urlparts['host']; - $requestprms['port'] = $this->urlparts['port']; - $requestprms['uri'] = $this->urlparts['path']; - $requestprms['user'] = $this->urlparts['user']; - $requestprms['pass'] = $this->urlparts['pass']; - $requestprms['method'] = $function; - $requestprms['args'] = $arguments; - $requestprms['timeout'] = 0; - $requestprms['secure'] = 0; - - $result = xu_rpc_http_concise($requestprms); + $query = xmlrpc_encode_request($method, $args); + $answer = $this->http_post($query, $this->urlparts); + $result = $this->find_and_decode_xml($answer); + if (is_array($result) && isset($result['faultCode'])) { - print('Error in xmlrpc call \''.$function.'\''."\n"); - print(' code : '.$result['faultCode']."\n"); - print(' message: '.$result['faultString']."\n"); + trigger_error("Error in xmlrpc call $function\n". + " code : {$result['faultCode']}\n". + " message: {$result['faultString']}\n"); return null; } return $result; } - } // vim:set et sw=4 sts=4 sws=4: