- /**
- * RPC method proxy
- *
- * @param string $method RPC method name
- * @param array $params RPC method arguments
- * @return mixed decoded RPC response
- * @throws Exception
- */
- public function __call($method, array $params)
- {
- if ($this->namespace) {
- $method = $this->namespace .'.'. $method;
- }
- $this->request->setRawPostData(xmlrpc_encode_request($method, $params));
- $response = $this->request->send();
- if ($response->getResponseCode() != 200) {
- throw new Exception($response->getBody(), $response->getResponseCode());
- }
- return xmlrpc_decode($response->getBody(), 'utf-8');
- }
+ /**
+ * RPC method proxy
+ *
+ * @param string $method RPC method name
+ * @param array $params RPC method arguments
+ * @return mixed decoded RPC response
+ * @throws Exception
+ */
+ public function __call($method, array $params)
+ {
+ if ($this->namespace) {
+ $method = $this->namespace .'.'. $method;
+ }
+
+ $data = xmlrpc_encode_request($method, $params);
+ $this->request->setRawPostData($data);
+
+ $response = $this->request->send();
+ if ($response->getResponseCode() != 200) {
+ throw new Exception(
+ $response->getResponseStatus(),
+ $response->getResponseCode()
+ );
+ }
+ $data = xmlrpc_decode($response->getBody(), 'utf-8');
+
+ if (isset($data['faultCode'], $data['faultString'])) {
+ throw new Exception(
+ $data['faultString'],
+ $data['faultCode']
+ );
+ }
+
+ return $data;
+ }
+
+ public function __set($what, $params)
+ {
+ return call_user_func_array(
+ array($this->request, "set$what"),
+ $params
+ );
+ }
+
+ public function __get($what)
+ {
+ return call_user_func(
+ array($this->request, "get$what")
+ );
+ }