Passed
Push — php51 ( 29fddb...e2e917 )
by Gaetano
09:58
created

xmlrpc_server_methods_container   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 27
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 5
c 2
b 0
f 0
dl 0
loc 27
rs 10
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A phpwarninggenerator() 0 4 1
A findstate() 0 3 1
A exceptiongenerator() 0 3 1
1
<?php
2
/**
3
 * Demo server for xmlrpc library.
4
 *
5
 * Implements a lot of webservices, including a suite of services used for
6
 * interoperability testing (validator1 methods), and some whose only purpose
7
 * is to be used for unit-testing the library.
8
 *
9
 * Please do not copy this file verbatim into your production server.
10
 *
11
 **/
12
13
// give user a chance to see the source for this server instead of running the services
14
if ($_SERVER['REQUEST_METHOD'] != 'POST' && isset($_GET['showSource']))
15
{
16
	highlight_file(__FILE__);
17
	die();
18
}
19
20
	include("xmlrpc.inc");
21
	include("xmlrpcs.inc");
22
	include("xmlrpc_wrappers.inc");
23
24
	/**
25
	* Used to test usage of object methods in dispatch maps and in wrapper code
26
	*/
27
	class xmlrpc_server_methods_container
28
	{
29
		/**
30
		* Method used to test logging of php warnings generated by user functions.
31
		*/
32
		function phpwarninggenerator($m)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $m is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

32
		function phpwarninggenerator(/** @scrutinizer ignore-unused */ $m)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
33
		{
34
			$a = $b; // this triggers a warning in E_ALL mode, since $b is undefined
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $b seems to be never defined.
Loading history...
Unused Code introduced by
The assignment to $a is dead and can be removed.
Loading history...
35
			return new xmlrpcresp(new xmlrpcval(1, 'boolean'));
36
		}
37
38
	    /**
39
	     * Method used to testcatching of exceptions in the server.
40
	     */
41
	    function exceptiongenerator($m)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
Unused Code introduced by
The parameter $m is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

41
	    function exceptiongenerator(/** @scrutinizer ignore-unused */ $m)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
42
	    {
43
	        throw new Exception("it's just a test", 1);
44
	    }
45
46
		/**
47
		* a PHP version of the state-number server. Send me an integer and i'll sell you a state
48
		* @param integer $s
49
		* @return string
50
		*/
51
		static function findstate($s)
0 ignored issues
show
Best Practice introduced by
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
52
		{
53
			return inner_findstate($s);
54
		}
55
	}
56
57
58
	// a PHP version
59
	// of the state-number server
60
	// send me an integer and i'll sell you a state
61
62
	$stateNames = array(
63
		"Alabama", "Alaska", "Arizona", "Arkansas", "California",
64
		"Colorado", "Columbia", "Connecticut", "Delaware", "Florida",
65
		"Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas",
66
		"Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts", "Michigan",
67
		"Minnesota", "Mississippi", "Missouri", "Montana", "Nebraska", "Nevada",
68
		"New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina",
69
		"North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island",
70
		"South Carolina", "South Dakota", "Tennessee", "Texas", "Utah", "Vermont",
71
		"Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming"
72
	);
73
74
	$findstate_sig=array(array($xmlrpcString, $xmlrpcInt));
75
	$findstate_doc='When passed an integer between 1 and 51 returns the
76
name of a US state, where the integer is the index of that state name
77
in an alphabetic order.';
78
79
80
	function findstate($m)
81
	{
82
		global $xmlrpcerruser, $stateNames;
83
		$err="";
84
		// get the first param
85
		$sno=$m->getParam(0);
86
87
		// param must be there and of the correct type: server object does the
88
		// validation for us
89
90
		// extract the value of the state number
91
		$snv=$sno->scalarval();
92
		// look it up in our array (zero-based)
93
		if (isset($stateNames[$snv-1]))
94
		{
95
			$sname=$stateNames[$snv-1];
96
		}
97
		else
98
		{
99
			// not, there so complain
100
			$err="I don't have a state for the index '" . $snv . "'";
101
		}
102
103
		// if we generated an error, create an error return response
104
		if ($err)
105
		{
106
			return new xmlrpcresp(0, $xmlrpcerruser, $err);
107
		}
108
		else
109
		{
110
			// otherwise, we create the right response
111
			// with the state name
112
			return new xmlrpcresp(new xmlrpcval($sname));
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $sname does not seem to be defined for all execution paths leading up to this point.
Loading history...
113
		}
114
	}
115
116
	/**
117
	* Inner code of the state-number server.
118
	* Used to test auto-registration of PHP funcions as xmlrpc methods.
119
	* @param integer $stateno the state number
120
	* @return string the name of the state (or error descrption)
121
	*/
122
	function inner_findstate($stateno)
123
	{
124
		global $stateNames;
125
		if (isset($stateNames[$stateno-1]))
126
		{
127
			return $stateNames[$stateno-1];
128
		}
129
		else
130
		{
131
			// not, there so complain
132
			return "I don't have a state for the index '" . $stateno . "'";
133
		}
134
	}
135
	$findstate2_sig = wrap_php_function('inner_findstate');
136
137
	$findstate3_sig = wrap_php_function(array('xmlrpc_server_methods_container', 'findstate'));
0 ignored issues
show
Bug introduced by
array('xmlrpc_server_met...ontainer', 'findstate') of type array<integer,string> is incompatible with the type string expected by parameter $funcname of wrap_php_function(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

137
	$findstate3_sig = wrap_php_function(/** @scrutinizer ignore-type */ array('xmlrpc_server_methods_container', 'findstate'));
Loading history...
138
139
	$findstate5_sig = wrap_php_function('xmlrpc_server_methods_container::findstate');
140
141
	$obj = new xmlrpc_server_methods_container();
142
	$findstate4_sig = wrap_php_function(array($obj, 'findstate'));
0 ignored issues
show
Bug introduced by
array($obj, 'findstate') of type array<integer,string|xml...rver_methods_container> is incompatible with the type string expected by parameter $funcname of wrap_php_function(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

142
	$findstate4_sig = wrap_php_function(/** @scrutinizer ignore-type */ array($obj, 'findstate'));
Loading history...
143
144
	$addtwo_sig=array(array($xmlrpcInt, $xmlrpcInt, $xmlrpcInt));
145
	$addtwo_doc='Add two integers together and return the result';
146
	function addtwo($m)
147
	{
148
		$s=$m->getParam(0);
149
		$t=$m->getParam(1);
150
		return new xmlrpcresp(new xmlrpcval($s->scalarval()+$t->scalarval(),"int"));
151
	}
152
153
	$addtwodouble_sig=array(array($xmlrpcDouble, $xmlrpcDouble, $xmlrpcDouble));
154
	$addtwodouble_doc='Add two doubles together and return the result';
155
	function addtwodouble($m)
156
	{
157
		$s=$m->getParam(0);
158
		$t=$m->getParam(1);
159
		return new xmlrpcresp(new xmlrpcval($s->scalarval()+$t->scalarval(),"double"));
160
	}
161
162
	$stringecho_sig=array(array($xmlrpcString, $xmlrpcString));
163
	$stringecho_doc='Accepts a string parameter, returns the string.';
164
	function stringecho($m)
165
	{
166
		// just sends back a string
167
		$s=$m->getParam(0);
168
		$v = $s->scalarval();
0 ignored issues
show
Unused Code introduced by
The assignment to $v is dead and can be removed.
Loading history...
169
		return new xmlrpcresp(new xmlrpcval($s->scalarval()));
170
	}
171
172
	$echoback_sig=array(array($xmlrpcString, $xmlrpcString));
173
	$echoback_doc='Accepts a string parameter, returns the entire incoming payload';
174
	function echoback($m)
175
	{
176
		// just sends back a string with what i got
177
		// sent to me, just escaped, that's all
178
		//
179
		// $m is an incoming message
180
		$s="I got the following message:\n" . $m->serialize();
181
		return new xmlrpcresp(new xmlrpcval($s));
182
	}
183
184
	$echosixtyfour_sig=array(array($xmlrpcString, $xmlrpcBase64));
185
	$echosixtyfour_doc='Accepts a base64 parameter and returns it decoded as a string';
186
	function echosixtyfour($m)
187
	{
188
		// accepts an encoded value, but sends it back
189
		// as a normal string. this is to test base64 encoding
190
		// is working as expected
191
		$incoming=$m->getParam(0);
192
		return new xmlrpcresp(new xmlrpcval($incoming->scalarval(), "string"));
193
	}
194
195
	$bitflipper_sig=array(array($xmlrpcArray, $xmlrpcArray));
196
	$bitflipper_doc='Accepts an array of booleans, and returns them inverted';
197
	function bitflipper($m)
198
	{
199
		global $xmlrpcArray;
200
201
		$v=$m->getParam(0);
202
		$sz=$v->arraysize();
203
		$rv=new xmlrpcval(array(), $xmlrpcArray);
204
205
		for($j=0; $j<$sz; $j++)
206
		{
207
			$b=$v->arraymem($j);
208
			if ($b->scalarval())
209
			{
210
				$rv->addScalar(false, "boolean");
211
			}
212
			else
213
			{
214
				$rv->addScalar(true, "boolean");
215
			}
216
		}
217
218
		return new xmlrpcresp($rv);
219
	}
220
221
	// Sorting demo
222
	//
223
	// send me an array of structs thus:
224
	//
225
	// Dave 35
226
	// Edd  45
227
	// Fred 23
228
	// Barney 37
229
	//
230
	// and I'll return it to you in sorted order
231
232
	function agesorter_compare($a, $b)
233
	{
234
		global $agesorter_arr;
235
236
		// don't even ask me _why_ these come padded with
237
		// hyphens, I couldn't tell you :p
238
		$a=str_replace("-", "", $a);
239
		$b=str_replace("-", "", $b);
240
241
		if ($agesorter_arr[$a]==$agesorter[$b])
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $agesorter seems to be never defined.
Loading history...
242
		{
243
			return 0;
244
		}
245
		return ($agesorter_arr[$a] > $agesorter_arr[$b]) ? -1 : 1;
246
	}
247
248
	$agesorter_sig=array(array($xmlrpcArray, $xmlrpcArray));
249
	$agesorter_doc='Send this method an array of [string, int] structs, eg:
250
<pre>
251
 Dave   35
252
 Edd	45
253
 Fred   23
254
 Barney 37
255
</pre>
256
And the array will be returned with the entries sorted by their numbers.
257
';
258
	function agesorter($m)
259
	{
260
		global $agesorter_arr, $xmlrpcerruser, $s;
261
262
		xmlrpc_debugmsg("Entering 'agesorter'");
263
		// get the parameter
264
		$sno=$m->getParam(0);
265
		// error string for [if|when] things go wrong
266
		$err="";
267
		// create the output value
268
		$v=new xmlrpcval();
269
		$agar=array();
270
271
		if (isset($sno) && $sno->kindOf()=="array")
272
		{
273
			$max=$sno->arraysize();
274
			// TODO: create debug method to print can work once more
275
			// print "<!-- found $max array elements -->\n";
276
			for($i=0; $i<$max; $i++)
277
			{
278
				$rec=$sno->arraymem($i);
279
				if ($rec->kindOf()!="struct")
280
				{
281
					$err="Found non-struct in array at element $i";
282
					break;
283
				}
284
				// extract name and age from struct
285
				$n=$rec->structmem("name");
286
				$a=$rec->structmem("age");
287
				// $n and $a are xmlrpcvals,
288
				// so get the scalarval from them
289
				$agar[$n->scalarval()]=$a->scalarval();
290
			}
291
292
			$agesorter_arr=$agar;
293
			// hack, must make global as uksort() won't
294
			// allow us to pass any other auxilliary information
295
			uksort($agesorter_arr, agesorter_compare);
0 ignored issues
show
Bug introduced by
The constant agesorter_compare was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
296
			$outAr=array();
297
			while (list( $key, $val ) = each( $agesorter_arr ) )
0 ignored issues
show
Deprecated Code introduced by
The function each() has been deprecated: 7.2 ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

297
			while (list( $key, $val ) = /** @scrutinizer ignore-deprecated */ each( $agesorter_arr ) )

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
298
			{
299
				// recreate each struct element
300
				$outAr[]=new xmlrpcval(array("name" =>
301
				new xmlrpcval($key),
302
				"age" =>
303
				new xmlrpcval($val, "int")), "struct");
304
			}
305
			// add this array to the output value
306
			$v->addArray($outAr);
307
		}
308
		else
309
		{
310
			$err="Must be one parameter, an array of structs";
311
		}
312
313
		if ($err)
314
		{
315
			return new xmlrpcresp(0, $xmlrpcerruser, $err);
316
		}
317
		else
318
		{
319
			return new xmlrpcresp($v);
320
		}
321
	}
322
323
	// signature and instructions, place these in the dispatch
324
	// map
325
	$mail_send_sig=array(array(
326
		$xmlrpcBoolean, $xmlrpcString, $xmlrpcString,
327
		$xmlrpcString, $xmlrpcString, $xmlrpcString,
328
		$xmlrpcString, $xmlrpcString
329
	));
330
331
	$mail_send_doc='mail.send(recipient, subject, text, sender, cc, bcc, mimetype)<br/>
332
recipient, cc, and bcc are strings, comma-separated lists of email addresses, as described above.<br/>
333
subject is a string, the subject of the message.<br/>
334
sender is a string, it\'s the email address of the person sending the message. This string can not be
335
a comma-separated list, it must contain a single email address only.<br/>
336
text is a string, it contains the body of the message.<br/>
337
mimetype, a string, is a standard MIME type, for example, text/plain.
338
';
339
	// WARNING; this functionality depends on the sendmail -t option
340
	// it may not work with Windows machines properly; particularly
341
	// the Bcc option. Sneak on your friends at your own risk!
342
	function mail_send($m)
343
	{
344
		global $xmlrpcerruser, $xmlrpcBoolean;
345
		$err="";
346
347
		$mTo=$m->getParam(0);
348
		$mSub=$m->getParam(1);
349
		$mBody=$m->getParam(2);
350
		$mFrom=$m->getParam(3);
351
		$mCc=$m->getParam(4);
352
		$mBcc=$m->getParam(5);
353
		$mMime=$m->getParam(6);
354
355
		if ($mTo->scalarval()=="")
356
		{
357
			$err="Error, no 'To' field specified";
358
		}
359
360
		if ($mFrom->scalarval()=="")
361
		{
362
			$err="Error, no 'From' field specified";
363
		}
364
365
		$msghdr="From: " . $mFrom->scalarval() . "\n";
366
		$msghdr.="To: ". $mTo->scalarval() . "\n";
367
368
		if ($mCc->scalarval()!="")
369
		{
370
			$msghdr.="Cc: " . $mCc->scalarval(). "\n";
371
		}
372
		if ($mBcc->scalarval()!="")
373
		{
374
			$msghdr.="Bcc: " . $mBcc->scalarval(). "\n";
375
		}
376
		if ($mMime->scalarval()!="")
377
		{
378
			$msghdr.="Content-type: " . $mMime->scalarval() . "\n";
379
		}
380
		$msghdr.="X-Mailer: XML-RPC for PHP mailer 1.0";
381
382
		if ($err=="")
383
		{
384
			if (!mail("",
385
				$mSub->scalarval(),
386
				$mBody->scalarval(),
387
				$msghdr))
388
			{
389
				$err="Error, could not send the mail.";
390
			}
391
		}
392
393
		if ($err)
394
		{
395
			return new xmlrpcresp(0, $xmlrpcerruser, $err);
396
		}
397
		else
398
		{
399
			return new xmlrpcresp(new xmlrpcval("true", $xmlrpcBoolean));
400
		}
401
	}
402
403
	$getallheaders_sig=array(array($xmlrpcStruct));
404
	$getallheaders_doc='Returns a struct containing all the HTTP headers received with the request. Provides limited functionality with IIS';
405
	function getallheaders_xmlrpc($m)
0 ignored issues
show
Unused Code introduced by
The parameter $m is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

405
	function getallheaders_xmlrpc(/** @scrutinizer ignore-unused */ $m)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
406
	{
407
		global $xmlrpcerruser;
408
		if (function_exists('getallheaders'))
409
		{
410
			return new xmlrpcresp(php_xmlrpc_encode(getallheaders()));
411
		}
412
		else
413
		{
414
			$headers = array();
415
			// IIS: poor man's version of getallheaders
416
			foreach ($_SERVER as $key => $val)
417
				if (strpos($key, 'HTTP_') === 0)
418
				{
419
					$key = ucfirst(str_replace('_', '-', strtolower(substr($key, 5))));
420
					$headers[$key] = $val;
421
				}
422
			return new xmlrpcresp(php_xmlrpc_encode($headers));
423
		}
424
	}
425
426
	$setcookies_sig=array(array($xmlrpcInt, $xmlrpcStruct));
427
	$setcookies_doc='Sends to client a response containing a single \'1\' digit, and sets to it http cookies as received in the request (array of structs describing a cookie)';
428
	function setcookies($m)
429
	{
430
		$m = $m->getParam(0);
431
		while(list($name,$value) = $m->structeach())
432
		{
433
			$cookiedesc = php_xmlrpc_decode($value);
434
			setcookie($name, @$cookiedesc['value'], @$cookiedesc['expires'], @$cookiedesc['path'], @$cookiedesc['domain'], @$cookiedesc['secure']);
435
		}
436
		return new xmlrpcresp(new xmlrpcval(1, 'int'));
437
	}
438
439
	$getcookies_sig=array(array($xmlrpcStruct));
440
	$getcookies_doc='Sends to client a response containing all http cookies as received in the request (as struct)';
441
	function getcookies($m)
0 ignored issues
show
Unused Code introduced by
The parameter $m is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

441
	function getcookies(/** @scrutinizer ignore-unused */ $m)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
442
	{
443
		return new xmlrpcresp(php_xmlrpc_encode($_COOKIE));
444
	}
445
446
	$v1_arrayOfStructs_sig=array(array($xmlrpcInt, $xmlrpcArray));
447
	$v1_arrayOfStructs_doc='This handler takes a single parameter, an array of structs, each of which contains at least three elements named moe, larry and curly, all <i4>s. Your handler must add all the struct elements named curly and return the result.';
448
	function v1_arrayOfStructs($m)
449
	{
450
		$sno=$m->getParam(0);
451
		$numcurly=0;
452
		for($i=0; $i<$sno->arraysize(); $i++)
453
		{
454
			$str=$sno->arraymem($i);
455
			$str->structreset();
456
			while(list($key,$val)=$str->structeach())
457
			{
458
				if ($key=="curly")
459
				{
460
					$numcurly+=$val->scalarval();
461
				}
462
			}
463
		}
464
		return new xmlrpcresp(new xmlrpcval($numcurly, "int"));
465
	}
466
467
	$v1_easyStruct_sig=array(array($xmlrpcInt, $xmlrpcStruct));
468
	$v1_easyStruct_doc='This handler takes a single parameter, a struct, containing at least three elements named moe, larry and curly, all &lt;i4&gt;s. Your handler must add the three numbers and return the result.';
469
	function v1_easyStruct($m)
470
	{
471
		$sno=$m->getParam(0);
472
		$moe=$sno->structmem("moe");
473
		$larry=$sno->structmem("larry");
474
		$curly=$sno->structmem("curly");
475
		$num=$moe->scalarval() + $larry->scalarval() + $curly->scalarval();
476
		return new xmlrpcresp(new xmlrpcval($num, "int"));
477
	}
478
479
	$v1_echoStruct_sig=array(array($xmlrpcStruct, $xmlrpcStruct));
480
	$v1_echoStruct_doc='This handler takes a single parameter, a struct. Your handler must return the struct.';
481
	function v1_echoStruct($m)
482
	{
483
		$sno=$m->getParam(0);
484
		return new xmlrpcresp($sno);
485
	}
486
487
	$v1_manyTypes_sig=array(array(
488
		$xmlrpcArray, $xmlrpcInt, $xmlrpcBoolean,
489
		$xmlrpcString, $xmlrpcDouble, $xmlrpcDateTime,
490
		$xmlrpcBase64
491
	));
492
	$v1_manyTypes_doc='This handler takes six parameters, and returns an array containing all the parameters.';
493
	function v1_manyTypes($m)
494
	{
495
		return new xmlrpcresp(new xmlrpcval(array(
496
			$m->getParam(0),
497
			$m->getParam(1),
498
			$m->getParam(2),
499
			$m->getParam(3),
500
			$m->getParam(4),
501
			$m->getParam(5)),
502
			"array"
503
		));
504
	}
505
506
	$v1_moderateSizeArrayCheck_sig=array(array($xmlrpcString, $xmlrpcArray));
507
	$v1_moderateSizeArrayCheck_doc='This handler takes a single parameter, which is an array containing between 100 and 200 elements. Each of the items is a string, your handler must return a string containing the concatenated text of the first and last elements.';
508
	function v1_moderateSizeArrayCheck($m)
509
	{
510
		$ar=$m->getParam(0);
511
		$sz=$ar->arraysize();
512
		$first=$ar->arraymem(0);
513
		$last=$ar->arraymem($sz-1);
514
		return new xmlrpcresp(new xmlrpcval($first->scalarval() .
515
		$last->scalarval(), "string"));
516
	}
517
518
	$v1_simpleStructReturn_sig=array(array($xmlrpcStruct, $xmlrpcInt));
519
	$v1_simpleStructReturn_doc='This handler takes one parameter, and returns a struct containing three elements, times10, times100 and times1000, the result of multiplying the number by 10, 100 and 1000.';
520
	function v1_simpleStructReturn($m)
521
	{
522
		$sno=$m->getParam(0);
523
		$v=$sno->scalarval();
524
		return new xmlrpcresp(new xmlrpcval(array(
525
			"times10"   => new xmlrpcval($v*10, "int"),
526
			"times100"  => new xmlrpcval($v*100, "int"),
527
			"times1000" => new xmlrpcval($v*1000, "int")),
528
			"struct"
529
		));
530
	}
531
532
	$v1_nestedStruct_sig=array(array($xmlrpcInt, $xmlrpcStruct));
533
	$v1_nestedStruct_doc='This handler takes a single parameter, a struct, that models a daily calendar. At the top level, there is one struct for each year. Each year is broken down into months, and months into days. Most of the days are empty in the struct you receive, but the entry for April 1, 2000 contains a least three elements named moe, larry and curly, all &lt;i4&gt;s. Your handler must add the three numbers and return the result.';
534
	function v1_nestedStruct($m)
535
	{
536
		$sno=$m->getParam(0);
537
538
		$twoK=$sno->structmem("2000");
539
		$april=$twoK->structmem("04");
540
		$fools=$april->structmem("01");
541
		$curly=$fools->structmem("curly");
542
		$larry=$fools->structmem("larry");
543
		$moe=$fools->structmem("moe");
544
		return new xmlrpcresp(new xmlrpcval($curly->scalarval() + $larry->scalarval() + $moe->scalarval(), "int"));
545
	}
546
547
	$v1_countTheEntities_sig=array(array($xmlrpcStruct, $xmlrpcString));
548
	$v1_countTheEntities_doc='This handler takes a single parameter, a string, that contains any number of predefined entities, namely &lt;, &gt;, &amp; \' and ".<BR>Your handler must return a struct that contains five fields, all numbers: ctLeftAngleBrackets, ctRightAngleBrackets, ctAmpersands, ctApostrophes, ctQuotes.';
549
	function v1_countTheEntities($m)
550
	{
551
		$sno=$m->getParam(0);
552
		$str=$sno->scalarval();
553
		$gt=0; $lt=0; $ap=0; $qu=0; $amp=0;
554
		for($i=0; $i<strlen($str); $i++)
555
		{
556
			$c=substr($str, $i, 1);
557
			switch($c)
558
			{
559
				case ">":
560
					$gt++;
561
					break;
562
				case "<":
563
					$lt++;
564
					break;
565
				case "\"":
566
					$qu++;
567
					break;
568
				case "'":
569
					$ap++;
570
					break;
571
				case "&":
572
					$amp++;
573
					break;
574
				default:
575
					break;
576
			}
577
		}
578
		return new xmlrpcresp(new xmlrpcval(array(
579
			"ctLeftAngleBrackets"  => new xmlrpcval($lt, "int"),
580
			"ctRightAngleBrackets" => new xmlrpcval($gt, "int"),
581
			"ctAmpersands"		 => new xmlrpcval($amp, "int"),
582
			"ctApostrophes"		=> new xmlrpcval($ap, "int"),
583
			"ctQuotes"			 => new xmlrpcval($qu, "int")),
584
			"struct"
585
		));
586
	}
587
588
	// trivial interop tests
589
	// http://www.xmlrpc.com/stories/storyReader$1636
590
591
	$i_echoString_sig=array(array($xmlrpcString, $xmlrpcString));
592
	$i_echoString_doc="Echoes string.";
593
594
	$i_echoStringArray_sig=array(array($xmlrpcArray, $xmlrpcArray));
595
	$i_echoStringArray_doc="Echoes string array.";
596
597
	$i_echoInteger_sig=array(array($xmlrpcInt, $xmlrpcInt));
598
	$i_echoInteger_doc="Echoes integer.";
599
600
	$i_echoIntegerArray_sig=array(array($xmlrpcArray, $xmlrpcArray));
601
	$i_echoIntegerArray_doc="Echoes integer array.";
602
603
	$i_echoFloat_sig=array(array($xmlrpcDouble, $xmlrpcDouble));
604
	$i_echoFloat_doc="Echoes float.";
605
606
	$i_echoFloatArray_sig=array(array($xmlrpcArray, $xmlrpcArray));
607
	$i_echoFloatArray_doc="Echoes float array.";
608
609
	$i_echoStruct_sig=array(array($xmlrpcStruct, $xmlrpcStruct));
610
	$i_echoStruct_doc="Echoes struct.";
611
612
	$i_echoStructArray_sig=array(array($xmlrpcArray, $xmlrpcArray));
613
	$i_echoStructArray_doc="Echoes struct array.";
614
615
	$i_echoValue_doc="Echoes any value back.";
616
	$i_echoValue_sig=array(array($xmlrpcValue, $xmlrpcValue));
617
618
	$i_echoBase64_sig=array(array($xmlrpcBase64, $xmlrpcBase64));
619
	$i_echoBase64_doc="Echoes base64.";
620
621
	$i_echoDate_sig=array(array($xmlrpcDateTime, $xmlrpcDateTime));
622
	$i_echoDate_doc="Echoes dateTime.";
623
624
	function i_echoParam($m)
625
	{
626
		$s=$m->getParam(0);
627
		return new xmlrpcresp($s);
628
	}
629
630
	function i_echoString($m) { return i_echoParam($m); }
631
	function i_echoInteger($m) { return i_echoParam($m); }
632
	function i_echoFloat($m) { return i_echoParam($m); }
633
	function i_echoStruct($m) { return i_echoParam($m); }
634
	function i_echoStringArray($m) { return i_echoParam($m); }
635
	function i_echoIntegerArray($m) { return i_echoParam($m); }
636
	function i_echoFloatArray($m) { return i_echoParam($m); }
637
	function i_echoStructArray($m) { return i_echoParam($m); }
638
	function i_echoValue($m) { return i_echoParam($m); }
639
	function i_echoBase64($m) { return i_echoParam($m); }
640
	function i_echoDate($m) { return i_echoParam($m); }
641
642
	$i_whichToolkit_sig=array(array($xmlrpcStruct));
643
	$i_whichToolkit_doc="Returns a struct containing the following strings: toolkitDocsUrl, toolkitName, toolkitVersion, toolkitOperatingSystem.";
644
645
	function i_whichToolkit($m)
0 ignored issues
show
Unused Code introduced by
The parameter $m is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

645
	function i_whichToolkit(/** @scrutinizer ignore-unused */ $m)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
646
	{
647
		global $xmlrpcName, $xmlrpcVersion,$SERVER_SOFTWARE;
648
		$ret=array(
649
			"toolkitDocsUrl" => "http://phpxmlrpc.sourceforge.net/",
650
			"toolkitName" => $xmlrpcName,
651
			"toolkitVersion" => $xmlrpcVersion,
652
			"toolkitOperatingSystem" => isset ($SERVER_SOFTWARE) ? $SERVER_SOFTWARE : $_SERVER['SERVER_SOFTWARE']
653
		);
654
		return new xmlrpcresp ( php_xmlrpc_encode($ret));
655
	}
656
657
	$o=new xmlrpc_server_methods_container;
658
	$a=array(
659
		"examples.getStateName" => array(
660
			"function" => "findstate",
661
			"signature" => $findstate_sig,
662
			"docstring" => $findstate_doc
663
		),
664
		"examples.sortByAge" => array(
665
			"function" => "agesorter",
666
			"signature" => $agesorter_sig,
667
			"docstring" => $agesorter_doc
668
		),
669
		"examples.addtwo" => array(
670
			"function" => "addtwo",
671
			"signature" => $addtwo_sig,
672
			"docstring" => $addtwo_doc
673
		),
674
		"examples.addtwodouble" => array(
675
			"function" => "addtwodouble",
676
			"signature" => $addtwodouble_sig,
677
			"docstring" => $addtwodouble_doc
678
		),
679
		"examples.stringecho" => array(
680
			"function" => "stringecho",
681
			"signature" => $stringecho_sig,
682
			"docstring" => $stringecho_doc
683
		),
684
		"examples.echo" => array(
685
			"function" => "echoback",
686
			"signature" => $echoback_sig,
687
			"docstring" => $echoback_doc
688
		),
689
		"examples.decode64" => array(
690
			"function" => "echosixtyfour",
691
			"signature" => $echosixtyfour_sig,
692
			"docstring" => $echosixtyfour_doc
693
		),
694
		"examples.invertBooleans" => array(
695
			"function" => "bitflipper",
696
			"signature" => $bitflipper_sig,
697
			"docstring" => $bitflipper_doc
698
		),
699
		"examples.generatePHPWarning" => array(
700
			"function" => array($o, "phpwarninggenerator")
701
			//'function' => 'xmlrpc_server_methods_container::phpwarninggenerator'
702
		),
703
		"examples.raiseException" => array(
704
			"function" => array($o, "exceptiongenerator")
705
		),
706
		"examples.getallheaders" => array(
707
			"function" => 'getallheaders_xmlrpc',
708
			"signature" => $getallheaders_sig,
709
			"docstring" => $getallheaders_doc
710
		),
711
		"examples.setcookies" => array(
712
			"function" => 'setcookies',
713
			"signature" => $setcookies_sig,
714
			"docstring" => $setcookies_doc
715
		),
716
		"examples.getcookies" => array(
717
			"function" => 'getcookies',
718
			"signature" => $getcookies_sig,
719
			"docstring" => $getcookies_doc
720
		),
721
		"mail.send" => array(
722
			"function" => "mail_send",
723
			"signature" => $mail_send_sig,
724
			"docstring" => $mail_send_doc
725
		),
726
		"validator1.arrayOfStructsTest" => array(
727
			"function" => "v1_arrayOfStructs",
728
			"signature" => $v1_arrayOfStructs_sig,
729
			"docstring" => $v1_arrayOfStructs_doc
730
		),
731
		"validator1.easyStructTest" => array(
732
			"function" => "v1_easyStruct",
733
			"signature" => $v1_easyStruct_sig,
734
			"docstring" => $v1_easyStruct_doc
735
		),
736
		"validator1.echoStructTest" => array(
737
			"function" => "v1_echoStruct",
738
			"signature" => $v1_echoStruct_sig,
739
			"docstring" => $v1_echoStruct_doc
740
		),
741
		"validator1.manyTypesTest" => array(
742
			"function" => "v1_manyTypes",
743
			"signature" => $v1_manyTypes_sig,
744
			"docstring" => $v1_manyTypes_doc
745
		),
746
		"validator1.moderateSizeArrayCheck" => array(
747
			"function" => "v1_moderateSizeArrayCheck",
748
			"signature" => $v1_moderateSizeArrayCheck_sig,
749
			"docstring" => $v1_moderateSizeArrayCheck_doc
750
		),
751
		"validator1.simpleStructReturnTest" => array(
752
			"function" => "v1_simpleStructReturn",
753
			"signature" => $v1_simpleStructReturn_sig,
754
			"docstring" => $v1_simpleStructReturn_doc
755
		),
756
		"validator1.nestedStructTest" => array(
757
			"function" => "v1_nestedStruct",
758
			"signature" => $v1_nestedStruct_sig,
759
			"docstring" => $v1_nestedStruct_doc
760
		),
761
		"validator1.countTheEntities" => array(
762
			"function" => "v1_countTheEntities",
763
			"signature" => $v1_countTheEntities_sig,
764
			"docstring" => $v1_countTheEntities_doc
765
		),
766
		"interopEchoTests.echoString" => array(
767
			"function" => "i_echoString",
768
			"signature" => $i_echoString_sig,
769
			"docstring" => $i_echoString_doc
770
		),
771
		"interopEchoTests.echoStringArray" => array(
772
			"function" => "i_echoStringArray",
773
			"signature" => $i_echoStringArray_sig,
774
			"docstring" => $i_echoStringArray_doc
775
		),
776
		"interopEchoTests.echoInteger" => array(
777
			"function" => "i_echoInteger",
778
			"signature" => $i_echoInteger_sig,
779
			"docstring" => $i_echoInteger_doc
780
		),
781
		"interopEchoTests.echoIntegerArray" => array(
782
			"function" => "i_echoIntegerArray",
783
			"signature" => $i_echoIntegerArray_sig,
784
			"docstring" => $i_echoIntegerArray_doc
785
		),
786
		"interopEchoTests.echoFloat" => array(
787
			"function" => "i_echoFloat",
788
			"signature" => $i_echoFloat_sig,
789
			"docstring" => $i_echoFloat_doc
790
		),
791
		"interopEchoTests.echoFloatArray" => array(
792
			"function" => "i_echoFloatArray",
793
			"signature" => $i_echoFloatArray_sig,
794
			"docstring" => $i_echoFloatArray_doc
795
		),
796
		"interopEchoTests.echoStruct" => array(
797
			"function" => "i_echoStruct",
798
			"signature" => $i_echoStruct_sig,
799
			"docstring" => $i_echoStruct_doc
800
		),
801
		"interopEchoTests.echoStructArray" => array(
802
			"function" => "i_echoStructArray",
803
			"signature" => $i_echoStructArray_sig,
804
			"docstring" => $i_echoStructArray_doc
805
		),
806
		"interopEchoTests.echoValue" => array(
807
			"function" => "i_echoValue",
808
			"signature" => $i_echoValue_sig,
809
			"docstring" => $i_echoValue_doc
810
		),
811
		"interopEchoTests.echoBase64" => array(
812
			"function" => "i_echoBase64",
813
			"signature" => $i_echoBase64_sig,
814
			"docstring" => $i_echoBase64_doc
815
		),
816
		"interopEchoTests.echoDate" => array(
817
			"function" => "i_echoDate",
818
			"signature" => $i_echoDate_sig,
819
			"docstring" => $i_echoDate_doc
820
		),
821
		"interopEchoTests.whichToolkit" => array(
822
			"function" => "i_whichToolkit",
823
			"signature" => $i_whichToolkit_sig,
824
			"docstring" => $i_whichToolkit_doc
825
		)
826
	);
827
828
	if ($findstate2_sig)
0 ignored issues
show
introduced by
The condition $findstate2_sig is always false.
Loading history...
829
		$a['examples.php.getStateName'] = $findstate2_sig;
830
831
	if ($findstate3_sig)
0 ignored issues
show
introduced by
The condition $findstate3_sig is always false.
Loading history...
832
		$a['examples.php2.getStateName'] = $findstate3_sig;
833
834
	if ($findstate4_sig)
0 ignored issues
show
introduced by
The condition $findstate4_sig is always false.
Loading history...
835
		$a['examples.php3.getStateName'] = $findstate4_sig;
836
837
    if ($findstate5_sig)
0 ignored issues
show
introduced by
The condition $findstate5_sig is always false.
Loading history...
838
        $a['examples.php4.getStateName'] = $findstate5_sig;
839
840
	$s=new xmlrpc_server($a, false);
841
	$s->setdebug(3);
842
	$s->compress_response = true;
843
844
	// out-of-band information: let the client manipulate the server operations.
845
	// we do this to help the testsuite script: do not reproduce in production!
846
	if (isset($_GET['RESPONSE_ENCODING']))
847
		$s->response_charset_encoding = $_GET['RESPONSE_ENCODING'];
848
	if (isset($_GET['EXCEPTION_HANDLING']))
849
		$s->exception_handling = $_GET['EXCEPTION_HANDLING'];
850
	$s->service();
851
	// that should do all we need!
852
?>
0 ignored issues
show
Best Practice introduced by
It is not recommended to use PHP's closing tag ?> in files other than templates.

Using a closing tag in PHP files that only contain PHP code is not recommended as you might accidentally add whitespace after the closing tag which would then be output by PHP. This can cause severe problems, for example headers cannot be sent anymore.

A simple precaution is to leave off the closing tag as it is not required, and it also has no negative effects whatsoever.

Loading history...