~ubuntu-branches/ubuntu/hardy/php5/hardy-updates

« back to all changes in this revision

Viewing changes to pear/tests/PEAR_test_mock_pearweb.php.inc

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-10-09 03:14:32 UTC
  • Revision ID: james.westby@ubuntu.com-20051009031432-kspik3lobxstafv9
Tags: upstream-5.0.5
ImportĀ upstreamĀ versionĀ 5.0.5

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
require_once 'XML/RPC/Server.php';
 
3
 
 
4
class PEAR_test_mock_pearweb {
 
5
    var $_config;
 
6
    var $_remote;
 
7
    
 
8
    function setRemote(&$r)
 
9
    {
 
10
        $this->_remote = &$r;
 
11
    }
 
12
 
 
13
    function addHtmlConfig($address, $filename)
 
14
    {
 
15
        $this->_config['html'][$address] = array(basename($filename), file_get_contents($filename));
 
16
    }
 
17
    
 
18
    function addXmlrpcConfig($method, $params, $return)
 
19
    {
 
20
        $this->_config['xmlrpc'][$method][serialize($params)] = $return;
 
21
    }
 
22
    
 
23
    function _encode($val)
 
24
    {
 
25
        $val = XML_RPC_encode($val);
 
26
        $ser = new XML_RPC_Response($val);
 
27
        return $ser->serialize();
 
28
    }
 
29
    
 
30
    function receiveHttp($address)
 
31
    {
 
32
        if (!isset($this->_config) || !is_array($this->_config)) {
 
33
            return $this->do404($address);
 
34
        }
 
35
        if (!isset($this->_config['html'][$address])) {
 
36
            return $this->do404($address);
 
37
        } else {
 
38
            return $this->do200() .
 
39
                'content-length: ' . strlen($this->_config['html'][$address][1]) . "\n\n" .
 
40
                $this->_config['html'][$address][1];
 
41
        }
 
42
    }
 
43
    
 
44
    function receiveXmlrpc($postpayload)
 
45
    {
 
46
        $info = $this->parseRequest($postpayload);
 
47
        if (!isset($this->_config['xmlrpc'][$info['method']])) {
 
48
            return $this->doXmlrpcFault($info);
 
49
        }
 
50
        if (!isset($this->_config['xmlrpc'][serialize($info['params'])])) {
 
51
            var_dump($info['param']);
 
52
            die("Error - parameters not configured properly for $info[method]");
 
53
        }
 
54
        return $this->do200() .
 
55
            $this->_encode($this->_config['xmlrpc'][$info['method']][serialize($info['params'])]);
 
56
    }
 
57
    
 
58
    function call($method, $params)
 
59
    {
 
60
        if (!isset($this->_config['xmlrpc'][$method])) {
 
61
            include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'php_dump.php.inc';
 
62
            $args = $params;
 
63
            switch (count($args)) {
 
64
                case 0:
 
65
                    $result = $this->_remote->parentcall($method);
 
66
                break;
 
67
                case 1:
 
68
                    $result = $this->_remote->parentcall($method, $args[0]);
 
69
                break;
 
70
                case 2:
 
71
                    $result = $this->_remote->parentcall($method, $args[0], $args[1]);
 
72
                break;
 
73
                case 3:
 
74
                    $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2]);
 
75
                break;
 
76
                case 4:
 
77
                    $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3]);
 
78
                break;
 
79
                case 5:
 
80
                    $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3], $args[4]);
 
81
                break;
 
82
                case 6:
 
83
                    $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
 
84
                break;
 
85
            }
 
86
            $dump = new PHP_Dump($result);
 
87
            $args = new PHP_Dump($args);
 
88
            if (!isset($this->_pearweb->_config['xmlrpc'][$method][serialize($args)]))
 
89
            $GLOBALS['totalPHP'][$method . serialize($args)] = '$pearweb->addXmlrpcConfig("' .
 
90
                $method . '", ' .
 
91
                $args->toPHP() . ', ' .
 
92
                $dump->toPHP() .");";
 
93
            foreach($GLOBALS['totalPHP'] as $php) {
 
94
                echo $php . "\n";
 
95
            }
 
96
            var_dump(array_keys($this->_config['xmlrpc'][$method]), $params);
 
97
            die("Error - parameters not configured properly for $method");
 
98
            return false;
 
99
        }
 
100
        if (!isset($this->_config['xmlrpc'][$method][serialize($params)])) {
 
101
            include_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'php_dump.php.inc';
 
102
            $args = $params;
 
103
            switch (count($args)) {
 
104
                case 0:
 
105
                    $result = $this->_remote->parentcall($method);
 
106
                break;
 
107
                case 1:
 
108
                    $result = $this->_remote->parentcall($method, $args[0]);
 
109
                break;
 
110
                case 2:
 
111
                    $result = $this->_remote->parentcall($method, $args[0], $args[1]);
 
112
                break;
 
113
                case 3:
 
114
                    $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2]);
 
115
                break;
 
116
                case 4:
 
117
                    $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3]);
 
118
                break;
 
119
                case 5:
 
120
                    $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3], $args[4]);
 
121
                break;
 
122
                case 6:
 
123
                    $result = $this->_remote->parentcall($method, $args[0], $args[1], $args[2], $args[3], $args[4], $args[5]);
 
124
                break;
 
125
            }
 
126
            $dump = new PHP_Dump($result);
 
127
            $args = new PHP_Dump($args);
 
128
            if (!isset($this->_pearweb->_config['xmlrpc'][$method][serialize($args)]))
 
129
            $GLOBALS['totalPHP'][$method . serialize($args)] = '$pearweb->addXmlrpcConfig("' .
 
130
                $method . '", ' .
 
131
                $args->toPHP() . ', ' .
 
132
                $dump->toPHP() .");";
 
133
            foreach($GLOBALS['totalPHP'] as $php) {
 
134
                echo $php . "\n";
 
135
            }
 
136
            var_dump(array_keys($this->_config['xmlrpc'][$method]), $params);
 
137
            die("Error - parameters not configured properly for $method");
 
138
        }
 
139
        return $this->_config['xmlrpc'][$method][serialize($params)];
 
140
    }
 
141
    
 
142
    function doXmlrpcFault($info)
 
143
    {
 
144
        $r = new XML_RPC_Response(0, 1, 'Unknown method');
 
145
        return $this->do200() . $r->serialize();
 
146
    }
 
147
    
 
148
    function do200()
 
149
    {
 
150
        return "HTTP/1.1 200 \n";
 
151
    }
 
152
    
 
153
    function do404($address)
 
154
    {
 
155
        return 'HTTP/1.1 404 ' . $address . ' Is not valid';
 
156
    }
 
157
 
 
158
    /**
 
159
     * Parse an xmlrpc request
 
160
     * @param string fake HTTP_RAW_POST_DATA
 
161
     * @return string|array serialized fault string, or array containing method name and parameters
 
162
     */
 
163
    function parseRequest($data)
 
164
    {
 
165
        // copied from XML_RPC_Server
 
166
        global $XML_RPC_xh;
 
167
        global $XML_RPC_err, $XML_RPC_str, $XML_RPC_errxml,
 
168
            $XML_RPC_defencoding, $XML_RPC_Server_dmap;
 
169
 
 
170
        $parser = xml_parser_create($XML_RPC_defencoding);
 
171
 
 
172
        $XML_RPC_xh[$parser] = array();
 
173
        $XML_RPC_xh[$parser]['st'] = "";
 
174
        $XML_RPC_xh[$parser]['cm'] = 0;
 
175
        $XML_RPC_xh[$parser]['isf'] = 0;
 
176
        $XML_RPC_xh[$parser]['params'] = array();
 
177
        $XML_RPC_xh[$parser]['method'] = "";
 
178
 
 
179
        $plist = '';
 
180
 
 
181
        // decompose incoming XML into request structure
 
182
 
 
183
        xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
 
184
        xml_set_element_handler($parser, "XML_RPC_se", "XML_RPC_ee");
 
185
        xml_set_character_data_handler($parser, "XML_RPC_cd");
 
186
        xml_set_default_handler($parser, "XML_RPC_dh");
 
187
        if (!xml_parse($parser, $data, 1)) {
 
188
            // return XML error as a faultCode
 
189
            $r = new XML_RPC_Response(0,
 
190
                                      $XML_RPC_errxml+xml_get_error_code($parser),
 
191
                                      sprintf("XML error: %s at line %d",
 
192
                                              xml_error_string(xml_get_error_code($parser)),
 
193
                                              xml_get_current_line_number($parser)));
 
194
            xml_parser_free($parser);
 
195
            return $r->serialize();
 
196
        } else {
 
197
            xml_parser_free($parser);
 
198
            $params = array();
 
199
            // now add parameters in
 
200
            for ($i = 0; $i < sizeof($XML_RPC_xh[$parser]['params']); $i++) {
 
201
                // print "<!-- " . $XML_RPC_xh[$parser]['params'][$i]. "-->\n";
 
202
                $plist .= "$i - " . $XML_RPC_xh[$parser]['params'][$i] . " \n";
 
203
                eval('$val = ' . $XML_RPC_xh[$parser]['params'][$i] . ";");
 
204
                $param = $val->scalarval();
 
205
                $param = PEAR_test_mock_pearweb::_convertScalar($param);
 
206
                $params[] = $param;
 
207
            }
 
208
            return array('method' => $XML_RPC_xh[$parser]['method'], 'params' => $params);
 
209
        }
 
210
    }
 
211
    
 
212
    /**
 
213
     * Converts the mishmash returned from XML_RPC parsing into a regular PHP value,
 
214
     * handling nested arrays gracefully.
 
215
     * @param mixed
 
216
     * @return mixed
 
217
     */
 
218
    function _convertScalar($val)
 
219
    {
 
220
        if (is_a($val, 'XML_RPC_Value')) {
 
221
            $val = $val->scalarval();
 
222
        }
 
223
        if (!is_array($val)) {
 
224
            return $val;
 
225
        }
 
226
        $newval = array();
 
227
        foreach ($val as $i => $contents)
 
228
        {
 
229
            $newval[$i] = PEAR_test_mock_pearweb::_convertScalar($contents);
 
230
        }
 
231
        return $newval;
 
232
    }
 
233
}
 
234
?>
 
 
b'\\ No newline at end of file'