summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 167c912)
raw | patch | inline | side by side (parent: 167c912)
author | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Fri, 28 May 2010 14:00:37 +0000 (14:00 +0000) | ||
committer | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Fri, 28 May 2010 14:00:37 +0000 (14:00 +0000) |
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@18788 594d385d-05f5-0310-b6e9-bd551577e9d8
gosa-core/include/class_jsonRPC.inc | [new file with mode: 0644] | patch | blob |
diff --git a/gosa-core/include/class_jsonRPC.inc b/gosa-core/include/class_jsonRPC.inc
--- /dev/null
@@ -0,0 +1,163 @@
+<?php
+/*
+ COPYRIGHT
+
+Copyright 2007 Sergio Vaccaro <sergio@inservibile.org>
+
+This file is part of JSON-RPC PHP.
+
+JSON-RPC PHP is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+JSON-RPC PHP is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with JSON-RPC PHP; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+/**
+ * The object of this class are generic jsonRPC 1.0 clients
+ * http://json-rpc.org/wiki/specification
+ *
+ * @author sergio <jsonrpcphp@inservibile.org>
+ */
+class jsonRPCClient {
+
+ private $curlHandler = NULL;
+
+ /**
+ * Debug state
+ *
+ * @var boolean
+ */
+ private $debug;
+
+ /**
+ * The server URL
+ *
+ * @var string
+ */
+ private $url;
+ /**
+ * The request id
+ *
+ * @var integer
+ */
+ private $id;
+ /**
+ * If true, notifications are performed instead of requests
+ *
+ * @var boolean
+ */
+ private $notification = false;
+
+ /**
+ * Takes the connection parameters
+ *
+ * @param string $url
+ * @param boolean $debug
+ */
+ public function __construct($url,$debug = false) {
+ // server URL
+ $this->url = $url;
+ // proxy
+ empty($proxy) ? $this->proxy = '' : $this->proxy = $proxy;
+ // debug state
+ empty($debug) ? $this->debug = false : $this->debug = true;
+ // message id
+ $this->id = 1;
+
+ // Init Curl handler
+ $this->curlHandler = curl_init($this->url);
+ curl_setopt($this->curlHandler, CURLOPT_URL , $this->url);
+ curl_setopt($this->curlHandler, CURLOPT_COOKIESESSION , TRUE);
+ curl_setopt($this->curlHandler, CURLOPT_COOKIEFILE, 'cookiefile.txt');
+ }
+
+ /**
+ * Sets the notification state of the object. In this state, notifications are performed, instead of requests.
+ *
+ * @param boolean $notification
+ */
+ public function setRPCNotification($notification) {
+ empty($notification) ?
+ $this->notification = false
+ :
+ $this->notification = true;
+ }
+
+ /**
+ * Performs a jsonRCP request and gets the results as an array
+ *
+ * @param string $method
+ * @param array $params
+ * @return array
+ */
+ public function __call($method,$params) {
+
+ // check
+ if (!is_scalar($method)) {
+ throw new Exception('Method name has no scalar value');
+ }
+
+ // check
+ if (is_array($params)) {
+ // no keys
+ $params = array_values($params);
+ } else {
+ throw new Exception('Params must be given as array');
+ }
+
+ // sets notification or request task
+ if ($this->notification) {
+ $currentId = NULL;
+ } else {
+ $currentId = $this->id;
+ }
+
+ // prepares the request
+ $request = array(
+ 'method' => $method,
+ 'params' => $params,
+ 'id' => $currentId
+ );
+ $request = json_encode($request);
+ $this->debug && $this->debug.='***** Request *****'."\n".$request."\n".'***** End Of request *****'."\n\n";
+
+ curl_setopt($this->curlHandler, CURLOPT_POST , TRUE);
+ curl_setopt($this->curlHandler, CURLOPT_POSTFIELDS , $request);
+ curl_setopt($this->curlHandler, CURLOPT_RETURNTRANSFER , TRUE);
+ curl_setopt($this->curlHandler, CURLOPT_HTTPHEADER , array('Content-Type: application/json'));
+ $response = curl_exec($this->curlHandler);
+ $this->debug && $this->debug.='***** Server response *****'."\n".$response.'***** End of server response *****'."\n";
+ $response = json_decode($response,true);
+
+ // debug output
+ if ($this->debug) {
+ echo nl2br($debug);
+ }
+
+ // final checks and return
+ if (!$this->notification) {
+ // check
+ if ($response['id'] != $currentId) {
+ throw new Exception('Incorrect response id (request id: '.$currentId.', response id: '.$response['id'].')');
+ }
+ if (!is_null($response['error'])) {
+ throw new Exception('Request error: '.$response['error']);
+ }
+
+ return $response['result'];
+
+ } else {
+ return true;
+ }
+ }
+}
+?>