diff options
Diffstat (limited to 'vendor/JsonRPC/Client.php')
-rw-r--r-- | vendor/JsonRPC/Client.php | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/vendor/JsonRPC/Client.php b/vendor/JsonRPC/Client.php new file mode 100644 index 00000000..bbdb7200 --- /dev/null +++ b/vendor/JsonRPC/Client.php @@ -0,0 +1,174 @@ +<?php + +namespace JsonRPC; + +/** + * JsonRPC client class + * + * @package JsonRPC + * @author Frderic Guillot + * @license Unlicense http://unlicense.org/ + */ +class Client +{ + /** + * URL of the server + * + * @access private + * @var string + */ + private $url; + + /** + * HTTP client timeout + * + * @access private + * @var integer + */ + private $timeout; + + /** + * Debug flag + * + * @access private + * @var bool + */ + private $debug; + + /** + * Username for authentication + * + * @access private + * @var string + */ + private $username; + + /** + * Password for authentication + * + * @access private + * @var string + */ + private $password; + + /** + * Default HTTP headers to send to the server + * + * @access private + * @var array + */ + private $headers = array( + 'Connection: close', + 'Content-Type: application/json', + 'Accept: application/json' + ); + + /** + * Constructor + * + * @access public + * @param string $url Server URL + * @param integer $timeout Server URL + * @param bool $debug Debug flag + * @param array $headers Custom HTTP headers + */ + public function __construct($url, $timeout = 5, $debug = false, $headers = array()) + { + $this->url = $url; + $this->timeout = $timeout; + $this->debug = $debug; + $this->headers = array_merge($this->headers, $headers); + } + + /** + * Automatic mapping of procedures + * + * @access public + * @param string $method Procedure name + * @param array $params Procedure arguments + * @return mixed + */ + public function __call($method, $params) + { + return $this->execute($method, $params); + } + + /** + * Set authentication parameters + * + * @access public + * @param string $username Username + * @param string $password Password + */ + public function authentication($username, $password) + { + $this->username = $username; + $this->password = $password; + } + + /** + * Execute + * + * @access public + * @param string $procedure Procedure name + * @param array $params Procedure arguments + * @return mixed + */ + public function execute($procedure, array $params = array()) + { + $id = mt_rand(); + + $payload = array( + 'jsonrpc' => '2.0', + 'method' => $procedure, + 'id' => $id + ); + + if (! empty($params)) { + $payload['params'] = $params; + } + + $result = $this->doRequest($payload); + + if (isset($result['id']) && $result['id'] == $id && array_key_exists('result', $result)) { + return $result['result']; + } + else if ($this->debug && isset($result['error'])) { + print_r($result['error']); + } + + return null; + } + + /** + * Do the HTTP request + * + * @access public + * @param string $payload Data to send + */ + public function doRequest($payload) + { + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, $this->url); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->timeout); + curl_setopt($ch, CURLOPT_USERAGENT, 'JSON-RPC PHP Client'); + curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); + curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload)); + + if ($this->username && $this->password) { + curl_setopt($ch, CURLOPT_USERPWD, $this->username.':'.$this->password); + } + + $result = curl_exec($ch); + $response = json_decode($result, true); + + curl_close($ch); + + return is_array($response) ? $response : array(); + } +} |