20 var $headers = array();
22 // Storage place for an error message
28 function __construct( $server, $path = false, $port = 80, $timeout = 15 )
31 // Assume we have been given a URL instead
32 $bits = parse_url($server);
33 $this->server = $bits['host'];
34 $this->port = isset($bits['port']) ? $bits['port'] : 80;
35 $this->path = isset($bits['path']) ? $bits['path'] : '/';
37 // Make absolutely sure we have a path
42 if ( ! empty( $bits['query'] ) ) {
43 $this->path .= '?' . $bits['query'];
46 $this->server = $server;
50 $this->useragent = 'The Incutio XML-RPC PHP Library';
51 $this->timeout = $timeout;
57 public function IXR_Client( $server, $path = false, $port = 80, $timeout = 15 ) {
58 self::__construct( $server, $path, $port, $timeout );
63 $args = func_get_args();
64 $method = array_shift($args);
65 $request = new IXR_Request($method, $args);
66 $length = $request->getLength();
67 $xml = $request->getXml();
69 $request = "POST {$this->path} HTTP/1.0$r";
71 // Merged from WP #8145 - allow custom headers
72 $this->headers['Host'] = $this->server;
73 $this->headers['Content-Type'] = 'text/xml';
74 $this->headers['User-Agent'] = $this->useragent;
75 $this->headers['Content-Length']= $length;
77 foreach( $this->headers as $header => $value ) {
78 $request .= "{$header}: {$value}{$r}";
84 // Now send the request
86 echo '<pre class="ixr_request">'.htmlspecialchars($request)."\n</pre>\n\n";
90 $fp = @fsockopen($this->server, $this->port, $errno, $errstr, $this->timeout);
92 $fp = @fsockopen($this->server, $this->port, $errno, $errstr);
95 $this->error = new IXR_Error(-32300, 'transport error - could not open socket');
101 $gotFirstLine = false;
102 $gettingHeaders = true;
104 $line = fgets($fp, 4096);
105 if (!$gotFirstLine) {
106 // Check line for '200'
107 if (strstr($line, '200') === false) {
108 $this->error = new IXR_Error(-32300, 'transport error - HTTP status code was not 200');
111 $gotFirstLine = true;
113 if (trim($line) == '') {
114 $gettingHeaders = false;
116 if (!$gettingHeaders) {
117 // merged from WP #12559 - remove trim
121 $debugContents .= $line;
125 echo '<pre class="ixr_response">'.htmlspecialchars($debugContents)."\n</pre>\n\n";
128 // Now parse what we've got back
129 $this->message = new IXR_Message($contents);
130 if (!$this->message->parse()) {
132 $this->error = new IXR_Error(-32700, 'parse error. not well formed');
136 // Is the message a fault?
137 if ($this->message->messageType == 'fault') {
138 $this->error = new IXR_Error($this->message->faultCode, $this->message->faultString);
142 // Message must be OK
146 function getResponse()
148 // methodResponses can only have one param - return that
149 return $this->message->params[0];
154 return (is_object($this->error));
157 function getErrorCode()
159 return $this->error->code;
162 function getErrorMessage()
164 return $this->error->message;