]> granicus.if.org Git - php/commitdiff
* pearweb xmlrpc layer now handles PEAR errors
authorStig Bakken <ssb@php.net>
Wed, 31 Oct 2001 06:21:11 +0000 (06:21 +0000)
committerStig Bakken <ssb@php.net>
Wed, 31 Oct 2001 06:21:11 +0000 (06:21 +0000)
pear/PEAR/Remote.php

index 17c36e023c3bf9ab4a960c49e6dc1351ac4fcc36..920c2d68aaffd72bb03c9c6b8abf9a76dfd8702a 100644 (file)
@@ -73,7 +73,27 @@ class PEAR_Remote extends PEAR
             $response .= $chunk;
         }
         fclose($fp);
-        return xmlrpc_decode($response);
+        $ret = xmlrpc_decode($response);
+        if (is_array($ret) && isset($ret['__PEAR_TYPE__'])) {
+            if ($ret['__PEAR_TYPE__'] == 'error') {
+                if (isset($ret['__PEAR_CLASS__'])) {
+                    $class = $ret['__PEAR_CLASS__'];
+                } else {
+                    $class = "PEAR_Error";
+                }
+                if ($ret['code']     === '') $ret['code']     = null;
+                if ($ret['message']  === '') $ret['message']  = null;
+                if ($ret['userinfo'] === '') $ret['userinfo'] = null;
+                if (strtolower($class) == 'db_error') {
+                    return $this->raiseError(DB::errorMessage($ret['code']),
+                                             $ret['code'], null, null,
+                                             $ret['userinfo']);
+                } else {
+                    return $this->raiseError($ret['message'], $ret['code'],
+                                             null, null, $ret['userinfo']);
+                }
+            }
+        }
     }
 
     // }}}