/[cvs]/nfo/php/libs/org.netfrag.glib/DataSource/Proxy/XMLRPC.php
ViewVC logotype

Diff of /nfo/php/libs/org.netfrag.glib/DataSource/Proxy/XMLRPC.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by joko, Wed Mar 5 23:16:48 2003 UTC revision 1.3 by joko, Thu Mar 27 16:05:01 2003 UTC
# Line 14  Line 14 
14  ##    $Id$  ##    $Id$
15  ##    --------------------------------------------------------------------------  ##    --------------------------------------------------------------------------
16  ##    $Log$  ##    $Log$
17    ##    Revision 1.3  2003/03/27 16:05:01  joko
18    ##    enhanced 'function _call': debugging, tracing and autodisconnect now parametrized
19    ##
20  ##    Revision 1.2  2003/03/05 23:16:48  joko  ##    Revision 1.2  2003/03/05 23:16:48  joko
21  ##    updated docu - phpDocumentor is very strict about its 'blocks'...  ##    updated docu - phpDocumentor is very strict about its 'blocks'...
22  ##  ##
# Line 109  class DataSource_Proxy_XMLRPC extends Cl Line 112  class DataSource_Proxy_XMLRPC extends Cl
112      }      }
113      $this->_save_meta();      $this->_save_meta();
114    
115      if ($args['Host']) { $this->host = $args['Host']; }      // merge args - V1
116      if ($args['Port']) { $this->port = $args['Port']; }      //if ($args['Host']) { $this->HOST = $args['Host']; }
117        //if ($args['Port']) { $this->PORT = $args['Port']; }
118    
119        // merge args - V2
120        // TODO: php::merge_to($this, $args);
121        //php::merge_to($this, $args);
122        //print Dumper($args);
123        if (is_array($args)) {
124          foreach ($args as $key => $val) {
125            $key = strtoupper($key);
126            $this->$key = $val;
127          }
128        }
129    
130      // check if host is valid      // check if host is valid
131      if (!$this->host) {      if (!$this->HOST) {
132        $this->_raiseException( "->constructor: attribute 'host' is empty, please check your settings");        $this->_raiseException( "->constructor: attribute 'host' is empty, please check your settings");
133        return;        return;
134      }      }
135            
136      if (!$this->port) {      if (!$this->PORT) {
137        $this->_raiseException( "->constructor: attribute 'port' is empty, please check your settings");        $this->_raiseException( "->constructor: attribute 'port' is empty, please check your settings");
138        return;        return;
139      }      }
# Line 137  class DataSource_Proxy_XMLRPC extends Cl Line 152  class DataSource_Proxy_XMLRPC extends Cl
152      $this->log(get_class($this) . "->send: " . $command, PEAR_LOG_DEBUG);      $this->log(get_class($this) . "->send: " . $command, PEAR_LOG_DEBUG);
153            
154      if (!$this->isConnected()) {      if (!$this->isConnected()) {
155        $this->_raiseException( "->send: not connected!");        $this->_raiseException( "->send[ command=$command ]: not connected while trying to send command!");
156        return;        return;
157      }      }
158            
# Line 150  class DataSource_Proxy_XMLRPC extends Cl Line 165  class DataSource_Proxy_XMLRPC extends Cl
165      return $this->_call($command, $data, $options);      return $this->_call($command, $data, $options);
166    }    }
167    
168    
169    function _call($command, $data = "", $options = array() ) {    function _call($command, $data = "", $options = array() ) {
170    
171      if (!$this->configured) {      if (!$this->configured) {
# Line 174  class DataSource_Proxy_XMLRPC extends Cl Line 190  class DataSource_Proxy_XMLRPC extends Cl
190        //print Dumper($this);        //print Dumper($this);
191    
192      // data      // data
193        $data_enc = XML_RPC_encode($data);      $data_enc = XML_RPC_encode($data);
194    
195      // message - request      // message - request
196        $msg = new XML_RPC_Message($command);      $msg = new XML_RPC_Message($command);
197        $msg->addParam($data_enc);      $msg->addParam($data_enc);
198  //print htmlentities($msg->serialize());  
199        // ???
200        //print htmlentities($msg->serialize());
201    
202      // remote procedure call      // remote procedure call
203        $rpc = new XML_RPC_Client("/", $this->host, $this->port);      $rpc = new XML_RPC_Client("/", $this->HOST, $this->PORT);
204        $rpc->setDebug(0);      
205        if ( !$msg_response = $rpc->send($msg) ) {      // TODO: detect highlevel errors, raise proper exceptions on them (e.g. 'Unknown method', 'Method signature error(s)')
206          // TODO: redirect this error elsewhere!      // done: now possible to declare tracing at this point in configuration
207          //print "RPC-error!<br>";      //    Please look inside your {appname}/etc/hosts/{hostname}.php
208          $this->_raiseException( "->_call: no response");      $rpc->setDebug($this->TRACE);
209          return;      
210        }      if ( !$msg_response = $rpc->send($msg) ) {
211          // TODO: redirect this error elsewhere!
212          //print "RPC-error!<br>";
213          $this->_raiseException( "->_call: no response");
214          return;
215        }
216    
217      // message - response      // message - response
218        $response_enc = $msg_response->value();      $response_enc = $msg_response->value();
219    
220        // error handling
221        //    Please look inside your {appname}/etc/hosts/{hostname}.php for toggling $this->DEBUG
222        if ($this->DEBUG && $error_code = $msg_response->faultCode()) {
223          //print $msg_response->faultString();
224          $this->_raiseException( "->_call: " . $msg_response->faultString() );
225        }
226    
227        // TODO: what's this? prematurely returning here should not be considered "stable"....
228        return $this->decodeData($response_enc, $options);
229    
       // TODO: what's this? prematurely returning here should not be considered "stable"....  
       return $this->decodeData($response_enc, $options);  
230    }    }
231        
232    
233    function &decodeData(&$payload, $options = array() ) {    function &decodeData(&$payload, $options = array() ) {
234      //if (!is_object($payload)) { return; }      //if (!is_object($payload)) { return; }
235        if ($payload) {        if ($payload) {
# Line 220  class DataSource_Proxy_XMLRPC extends Cl Line 254  class DataSource_Proxy_XMLRPC extends Cl
254    }    }
255        
256    function _raiseException($message) {    function _raiseException($message) {
257      $this->meta[connected] = 0;      
258      $this->_save_meta();      // spout out the error message of the raised exception
259      $this->log(get_class($this) . $message, PEAR_LOG_ERR);      $this->log(get_class($this) . $message, PEAR_LOG_ERR);
260    
261        // handle some stuff regarding more special behaviour (will this get a 'rule' sometimes?)
262        if ($this->isConnected() && $this->DISCONNECT_ON_ERROR) {
263          $message = '->_raiseException: [DISCONNECT_ON_ERROR] done transparently. Please reconnect manually.';
264          $this->log(get_class($this) . $message, PEAR_LOG_WARNING);
265          $this->meta[connected] = 0;
266          $this->_save_meta();
267        }
268    }    }
269        
270    function isConnected() {    function isConnected() {

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed