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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Mon Mar 3 21:53:52 2003 UTC (21 years, 5 months ago) by joko
Branch: MAIN
refactored from Data::Driver::RPC::Remote

1 joko 1.1 <?
2     /*
3     ## --------------------------------------------------------------------------
4     ## $Id: Remote.php,v 1.4 2003/02/20 21:42:43 joko Exp $
5     ## --------------------------------------------------------------------------
6     ## $Log: Remote.php,v $
7     ## Revision 1.4 2003/02/20 21:42:43 joko
8     ## + fix: always converting from utf8 into latin here (for now)
9     ##
10     ## Revision 1.3 2003/02/13 21:51:29 joko
11     ## + now can remember its connection-state
12     ## + sub ping
13     ##
14     ## Revision 1.2 2003/02/13 00:42:44 joko
15     ## +- renamed modules
16     ##
17     ## Revision 1.1 2003/02/09 17:25:38 joko
18     ## + refactored from flib/Application/RPC/Remote.php
19     ##
20     ## Revision 1.6 2003/02/03 03:37:45 jonen
21     ## - removed unused argument '$decode' at function '_call()'
22     ## + added argument '$options=array()' at function '_call()'
23     ## which will be passed to function '&decodeData()' for e.g. utf8 decoding
24     ## + added '$encoder->toISO()' at '&decodeData()', (re)moved from 'ProxyObject.php'
25     ##
26     ## Revision 1.5 2002/12/22 13:24:09 jonen
27     ## + added utf8 encoding at 'send()' toggled by option
28     ##
29     ## Revision 1.4 2002/12/19 02:02:25 jonen
30     ## + minor changes
31     ##
32     ## Revision 1.3 2002/12/19 01:59:37 jonen
33     ## + minor changes: coment debug prints
34     ##
35     ## Revision 1.2 2002/12/05 21:45:31 joko
36     ## + debugging
37     ##
38     ## Revision 1.1 2002/12/01 17:23:58 joko
39     ## + initial check-in
40     ##
41     ## Revision 1.3 2002/12/01 06:22:57 cvsjoko
42     ## + minor update: now can use config defaults or given args
43     ##
44     ## Revision 1.2 2002/10/29 19:14:45 cvsjoko
45     ## - bugfix: dont' do utf8-encoding here
46     ##
47     ## Revision 1.1 2002/10/09 00:51:39 cvsjoko
48     ## + new
49     ##
50     ##
51     ## -------------------------------------------------------------------------
52     */
53    
54    
55     /*
56    
57     TODO:
58     o SOAP?
59    
60    
61     */
62    
63    
64     // V1: normal require
65     //require_once 'XML/RPC/RPC.php';
66    
67     // V2: first time load of foreign module (PEAR::XML::RPC)
68     //require_once 'XML/RPC/RPC.php';
69     loadModule('XML::RPC::RPC');
70    
71     loadModule('Class::Logger');
72    
73     class DataSource_Proxy_XMLRPC extends Class_Logger {
74    
75     var $configured;
76     var $meta;
77    
78     function DataSource_Proxy_XMLRPC($args = array()) {
79    
80     parent::constructor();
81    
82     //print Dumper($this, $args);
83    
84     global $Data_Driver_RPC_Remote_meta;
85     session_register_safe("Data_Driver_RPC_Remote_meta");
86     $this->meta = $Data_Driver_RPC_Remote_meta;
87    
88     if (!isset($this->meta[connected]) || $args[connect]) {
89     $this->meta[connected] = 1;
90     }
91     $this->_save_meta();
92    
93     if ($args['Host']) { $this->host = $args['Host']; }
94     if ($args['Port']) { $this->port = $args['Port']; }
95    
96     // check if host is valid
97     if (!$this->host) {
98     $this->_raiseException( "->constructor: attribute 'host' is empty, please check your settings");
99     return;
100     }
101    
102     if (!$this->port) {
103     $this->_raiseException( "->constructor: attribute 'port' is empty, please check your settings");
104     return;
105     }
106    
107     $this->configured = 1;
108    
109     }
110    
111     function _save_meta() {
112     global $Data_Driver_RPC_Remote_meta;
113     $Data_Driver_RPC_Remote_meta = $this->meta;
114     }
115    
116     function send($command, $data = "", $options = array()) {
117    
118     $this->log(get_class($this) . "->send: " . $command, PEAR_LOG_DEBUG);
119    
120     if (!$this->isConnected()) {
121     $this->_raiseException( "->send: not connected!");
122     return;
123     }
124    
125     // do 'encode' here and ...
126     if ($options[utf8]) {
127     $encoder = new Data_Encode($data);
128     $encoder->toUTF8();
129     }
130     // call '_call' with 'decode'
131     return $this->_call($command, $data, $options);
132     }
133    
134     function _call($command, $data = "", $options = array() ) {
135    
136     if (!$this->configured) {
137     $this->_raiseException( "->_call: class not configured properly");
138     return;
139     }
140    
141     // populate options list - mostly for debugging purposes
142     $options_list = array();
143     foreach ($options as $key => $value) {
144     array_push($options_list, "$key=$value");
145     }
146    
147     $data_debug = $data;
148     if (is_array($data_debug)) { $data_debug = join(", ", $data_debug); }
149     $options_debug = join(", ", $options_list);
150     $this->log(get_class($this) . ": " . $command . "(" . $data_debug . ") [" . $options_debug . "]", PEAR_LOG_DEBUG);
151    
152     // trace
153     //print "call: $command<hr>";
154     //print Dumper($data);
155     //print Dumper($this);
156    
157     // data
158     $data_enc = XML_RPC_encode($data);
159    
160     // message - request
161     $msg = new XML_RPC_Message($command);
162     $msg->addParam($data_enc);
163     //print htmlentities($msg->serialize());
164     // remote procedure call
165     $rpc = new XML_RPC_Client("/", $this->host, $this->port);
166     $rpc->setDebug(0);
167     if ( !$msg_response = $rpc->send($msg) ) {
168     // TODO: redirect this error elsewhere!
169     //print "RPC-error!<br>";
170     $this->_raiseException( "->_call: no response");
171     return;
172     }
173     // message - response
174     $response_enc = $msg_response->value();
175    
176     // TODO: what's this? prematurely returning here should not be considered "stable"....
177     return $this->decodeData($response_enc, $options);
178     }
179    
180     function &decodeData(&$payload, $options = array() ) {
181     //if (!is_object($payload)) { return; }
182     if ($payload) {
183     // data
184     $data = XML_RPC_decode($payload);
185     //print "data: " . dumpVar($response);
186    
187     // decode UTF8 to ISO if wanted
188     //if ($options[to_latin]) {
189     $encoder = new Data_Encode($data);
190     $encoder->toISO();
191     //}
192    
193     $this->meta[connected] = 1;
194     $this->_save_meta();
195    
196     return $data;
197     } else {
198     //print "ERROR!<br>";
199     return 0;
200     }
201     }
202    
203     function _raiseException($message) {
204     $this->meta[connected] = 0;
205     $this->_save_meta();
206     $this->log(get_class($this) . $message, PEAR_LOG_ERR);
207     }
208    
209     function isConnected() {
210     return $this->meta[connected];
211     }
212    
213     function ping() {
214     $this->_call('ping');
215     }
216    
217     }
218    
219     ?>

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