1<?php 2 /** 3 * XMLRPC server 4 * @author Dan Kuykendall <dan@kuykendall.org> 5 * @copyright Copyright (C) 2004 Free Software Foundation, Inc. http://www.fsf.org/ 6 * @license http://www.fsf.org/licenses/gpl.html GNU General Public License 7 * @package phpgwapi 8 * @subpackage communication 9 * @version $Id: xmlrpc.interop.php 15462 2004-11-06 15:34:27Z powerstat $ 10 */ 11 12 // a PHP version 13 // of the state-number server 14 // send me an integer and i'll sell you a state 15 16 $stateNames = array( 17 'Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 18 'Colorado', 'Columbia', 'Connecticut', 'Delaware', 'Florida', 19 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 20 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 21 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 22 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 23 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 24 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 25 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming' 26 ); 27 28 $findstate_sig = array(array(xmlrpcString, xmlrpcInt)); 29 30 $findstate_doc = 'When passed an integer between 1 and 51 returns the 31name of a US state, where the integer is the index of that state name 32in an alphabetic order.'; 33 34 35 /** 36 * Find state 37 * 38 * @param object $m 39 * @return object xmlrpcresp - error or state name 40 */ 41 function findstate($m) 42 { 43 $err=''; 44 // get the first param 45 $sno=$m->getParam(0); 46 // if it's there and the correct type 47 48 if (isset($sno) && ($sno->scalartyp()=='int')) 49 { 50 // extract the value of the state number 51 $snv=$sno->scalarval(); 52 // look it up in our array (zero-based) 53 if (isset($GLOBALS['stateNames'][$snv-1])) 54 { 55 $sname=$GLOBALS['stateNames'][$snv-1]; 56 } 57 else 58 { 59 // not, there so complain 60 $err="I don't have a state for the index '" . $snv . "'"; 61 } 62 } 63 else 64 { 65 // parameter mismatch, complain 66 $err='One integer parameter required'; 67 } 68 69 // if we generated an error, create an error return response 70 if ($err) 71 { 72 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval'), $GLOBALS['xmlrpcerruser'], $err); 73 } 74 else 75 { 76 // otherwise, we create the right response 77 // with the state name 78 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval',$sname)); 79 } 80 } 81 82 $addtwo_sig=array(array(xmlrpcInt, xmlrpcInt, xmlrpcInt)); 83 $addtwo_doc='Add two integers together and return the result'; 84 85 function addtwo($m) 86 { 87 $s=$m->getParam(0); 88 $t=$m->getParam(1); 89 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval',$s->scalarval()+$t->scalarval(),'int')); 90 } 91 92 $addtwodouble_sig=array(array(xmlrpcDouble, xmlrpcDouble, xmlrpcDouble)); 93 $addtwodouble_doc='Add two doubles together and return the result'; 94 95 function addtwodouble($m) 96 { 97 $s=$m->getParam(0); 98 $t=$m->getParam(1); 99 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval',$s->scalarval()+$t->scalarval(),'double')); 100 } 101 102 $stringecho_sig=array(array(xmlrpcString, xmlrpcString)); 103 $stringecho_doc='Accepts a string parameter, returns the string.'; 104 105 function stringecho($m) 106 { 107 // just sends back a string 108 $s=$m->getParam(0); 109 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval',$s->scalarval())); 110 } 111 112 $echoback_sig=array(array(xmlrpcString, xmlrpcString)); 113 $echoback_doc='Accepts a string parameter, returns the entire incoming payload'; 114 115 function echoback($m) 116 { 117 // just sends back a string with what i got 118 // send to me, just escaped, that's all 119 // 120 // $m is an incoming message 121 $s="I got the following message:\n" . $m->serialize(); 122 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval',$s)); 123 } 124 125 $echosixtyfour_sig=array(array(xmlrpcString, xmlrpcBase64)); 126 $echosixtyfour_doc='Accepts a base64 parameter and returns it decoded as a string'; 127 128 function echosixtyfour($m) 129 { 130 // accepts an encoded value, but sends it back 131 // as a normal string. this is to test base64 encoding 132 // is working as expected 133 $incoming=$m->getParam(0); 134 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval',$incoming->scalarval(), 'string')); 135 } 136 137 $bitflipper_sig=array(array(xmlrpcArray, xmlrpcArray)); 138 $bitflipper_doc='Accepts an array of booleans, and returns them inverted'; 139 140 function bitflipper($m) 141 { 142 $v = $m->getParam(0); 143 $sz = $v->arraysize(); 144 $rv = CreateObject('phpgwapi.xmlrpcval',array(), xmlrpcArray); 145 146 for($j=0; $j<$sz; $j++) 147 { 148 $b = $v->arraymem($j); 149 if ($b->scalarval()) 150 { 151 $rv->addScalar(False, 'boolean'); 152 } 153 else 154 { 155 $rv->addScalar(True, 'boolean'); 156 } 157 } 158 return CreateObject('phpgwapi.xmlrpcresp',$rv); 159 } 160 161 // Sorting demo 162 // 163 // send me an array of structs thus: 164 // 165 // Dave 35 166 // Edd 45 167 // Fred 23 168 // Barney 37 169 // 170 // and I'll return it to you in sorted order 171 172 function agesorter_compare($a, $b) 173 { 174 // don't even ask me _why_ these come padded with 175 // hyphens, I couldn't tell you :p 176 $a=ereg_replace('-', '', $a); 177 $b=ereg_replace('-', '', $b); 178 179 if ($GLOBALS['agesorter_arr'][$a]==$agesorter[$b]) 180 { 181 return 0; 182 } 183 return ($GLOBALS['agesorter_arr'][$a] > $GLOBALS['agesorter_arr'][$b]) ? -1 : 1; 184 } 185 186 $agesorter_sig=array(array(xmlrpcArray, xmlrpcArray)); 187 $agesorter_doc='Send this method an array of [string, int] structs, eg: 188<PRE> 189 Dave 35 190 Edd 45 191 Fred 23 192 Barney 37 193</PRE> 194And the array will be returned with the entries sorted by their numbers. 195'; 196 197 function agesorter($m) 198 { 199 global $s; 200 201 xmlrpc_debugmsg("Entering 'agesorter'"); 202 // get the parameter 203 $sno = $m->getParam(0); 204 // error string for [if|when] things go wrong 205 $err = ''; 206 // create the output value 207 $v = CreateObject('phpgwapi.xmlrpcval'); 208 $agar = array(); 209 210 if (isset($sno) && $sno->kindOf()=='array') 211 { 212 $max = $sno->arraysize(); 213 // TODO: create debug method to print can work once more 214 // print "<!-- found $max array elements -->\n"; 215 for($i=0; $i<$max; $i++) 216 { 217 $rec = $sno->arraymem($i); 218 if ($rec->kindOf()!='struct') 219 { 220 $err = 'Found non-struct in array at element ' . $i; 221 break; 222 } 223 // extract name and age from struct 224 $n = $rec->structmem('name'); 225 $a = $rec->structmem('age'); 226 // $n and $a are xmlrpcvals, 227 // so get the scalarval from them 228 $agar[$n->scalarval()] = $a->scalarval(); 229 } 230 231 $GLOBALS['agesorter_arr'] = $agar; 232 // hack, must make global as uksort() won't 233 // allow us to pass any other auxilliary information 234 uksort($GLOBALS['agesorter_arr'], agesorter_compare); 235 $outAr = array(); 236 while (list($key,$val) = each($GLOBALS['agesorter_arr'])) 237 { 238 // recreate each struct element 239 $outAr[] = CreateObject('phpgwapi.xmlrpcval',array( 240 'name' => CreateObject('phpgwapi.xmlrpcval',$key), 241 'age' => CreateObject('phpgwapi.xmlrpcval',$val, 'int') 242 ), 243 'struct' 244 ); 245 } 246 // add this array to the output value 247 $v->addArray($outAr); 248 } 249 else 250 { 251 $err = 'Must be one parameter, an array of structs'; 252 } 253 254 if ($err) 255 { 256 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval'), $GLOBALS['xmlrpcerruser'], $err); 257 } 258 else 259 { 260 return CreateObject('phpgwapi.xmlrpcresp',$v); 261 } 262 } 263 264 // signature and instructions, place these in the dispatch map 265 266 $mail_send_sig = array( 267 array( 268 xmlrpcBoolean, xmlrpcString, xmlrpcString, 269 xmlrpcString, xmlrpcString, xmlrpcString, 270 xmlrpcString, xmlrpcString 271 ) 272 ); 273 274 $mail_send_doc = 'mail.send(recipient, subject, text, sender, cc, bcc, mimetype) 275<br />recipient, cc, and bcc are strings, comma-separated lists of email addresses, as described above. 276<br />subject is a string, the subject of the message. 277<br />sender is a string, it\'s the email address of the person sending the message. This string can not be 278a comma-separated list, it must contain a single email address only. 279text is a string, it contains the body of the message. 280<br />mimetype, a string, is a standard MIME type, for example, text/plain. 281'; 282 283 // WARNING; this functionality depends on the sendmail -t option 284 // it may not work with Windows machines properly; particularly 285 // the Bcc option. Sneak on your friends at your own risk! 286 function mail_send($m) 287 { 288 $err = ''; 289 290 $mTo = $m->getParam(0); 291 $mSub = $m->getParam(1); 292 $mBody = $m->getParam(2); 293 $mFrom = $m->getParam(3); 294 $mCc = $m->getParam(4); 295 $mBcc = $m->getParam(5); 296 $mMime = $m->getParam(6); 297 298 if ($mTo->scalarval() == '') 299 { 300 $err = "Error, no 'To' field specified"; 301 } 302 if ($mFrom->scalarval() == '') 303 { 304 $err = "Error, no 'From' field specified"; 305 } 306 $msghdr = 'From: ' . $mFrom->scalarval() . "\n"; 307 $msghdr .= 'To: '. $mTo->scalarval() . "\n"; 308 309 if ($mCc->scalarval()!='') 310 { 311 $msghdr .= 'Cc: ' . $mCc->scalarval(). "\n"; 312 } 313 if ($mBcc->scalarval()!='') 314 { 315 $msghdr .= 'Bcc: ' . $mBcc->scalarval(). "\n"; 316 } 317 if ($mMime->scalarval()!='') 318 { 319 $msghdr .= 'Content-type: ' . $mMime->scalarval() . "\n"; 320 } 321 322 $msghdr .= 'X-Mailer: XML-RPC for PHP mailer 1.0'; 323 324 if ($err == '') 325 { 326 if (!mail('', $mSub->scalarval(), $mBody->scalarval(), $msghdr)) 327 { 328 $err = 'Error, could not send the mail.'; 329 } 330 } 331 332 if ($err) 333 { 334 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval'), $GLOBALS['xmlrpcerruser'], $err); 335 } 336 else 337 { 338 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval','true', xmlrpcBoolean)); 339 } 340 } 341 342 $v1_arrayOfStructs_sig = array(array(xmlrpcInt, xmlrpcArray)); 343 $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.'; 344 345 function v1_arrayOfStructs($m) 346 { 347 $sno = $m->getParam(0); 348 $numcurly = 0; 349 for($i=0; $i<$sno->arraysize(); $i++) 350 { 351 $str = $sno->arraymem($i); 352 $str->structreset(); 353 while(list($key,$val) = $str->structeach()) 354 { 355 if ($key == 'curly') 356 { 357 $numcurly += $val->scalarval(); 358 } 359 } 360 } 361 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval',$numcurly, 'int')); 362 } 363 364 $v1_easyStruct_sig = array(array(xmlrpcInt, xmlrpcStruct)); 365 $v1_easyStruct_doc = 'This handler takes a single parameter, a struct, containing at least three elements named moe, larry and curly, all <i4>s. Your handler must add the three numbers and return the result.'; 366 367 function v1_easyStruct($m) 368 { 369 $sno = $m->getParam(0); 370 $moe = $sno->structmem('moe'); 371 $larry = $sno->structmem('larry'); 372 $curly = $sno->structmem('curly'); 373 $num = $moe->scalarval() + $larry->scalarval() + $curly->scalarval(); 374 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval',$num, 'int')); 375 } 376 377 $v1_echoStruct_sig=array(array(xmlrpcStruct, xmlrpcStruct)); 378 $v1_echoStruct_doc='This handler takes a single parameter, a struct. Your handler must return the struct.'; 379 380 function v1_echoStruct($m) 381 { 382 $sno=$m->getParam(0); 383 return CreateObject('phpgwapi.xmlrpcresp',$sno); 384 } 385 386 $v1_manyTypes_sig = array( 387 array( 388 xmlrpcArray, xmlrpcInt, xmlrpcBoolean, 389 xmlrpcString, xmlrpcDouble, xmlrpcDateTime, 390 xmlrpcBase64 391 ) 392 ); 393 $v1_manyTypes_doc = 'This handler takes six parameters, and returns an array containing all the parameters.'; 394 395 function v1_manyTypes($m) 396 { 397 return CreateObject('phpgwapi.xmlrpcresp', 398 CreateObject('phpgwapi.xmlrpcval',array( 399 $m->getParam(0), 400 $m->getParam(1), 401 $m->getParam(2), 402 $m->getParam(3), 403 $m->getParam(4), 404 $m->getParam(5) 405 ), 406 'array' 407 )); 408 } 409 410 $v1_moderateSizeArrayCheck_sig = array(array(xmlrpcString, xmlrpcArray)); 411 $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.'; 412 413 function v1_moderateSizeArrayCheck($m) 414 { 415 $ar = $m->getParam(0); 416 $sz = $ar->arraysize(); 417 $first = $ar->arraymem(0); 418 $last = $ar->arraymem($sz-1); 419 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval',$first->scalarval() . $last->scalarval(), "string")); 420 } 421 422 $v1_simpleStructReturn_sig = array(array(xmlrpcStruct, xmlrpcInt)); 423 $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.'; 424 425 function v1_simpleStructReturn($m) 426 { 427 $sno=$m->getParam(0); 428 $v=$sno->scalarval(); 429 return CreateObject('phpgwapi.xmlrpcresp', 430 CreateObject('phpgwapi.xmlrpcval',array( 431 'times10' => CreateObject('phpgwapi.xmlrpcval',$v*10, 'int'), 432 'times100' => CreateObject('phpgwapi.xmlrpcval',$v*100, 'int'), 433 'times1000' => CreateObject('phpgwapi.xmlrpcval',$v*1000, 'int') 434 ), 435 'struct' 436 )); 437 } 438 439 $v1_nestedStruct_sig = array(array(xmlrpcInt, xmlrpcStruct)); 440 $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 <i4>s. Your handler must add the three numbers and return the result.'; 441 442 function v1_nestedStruct($m) 443 { 444 $sno=$m->getParam(0); 445 $twoK=$sno->structmem('2000'); 446 $april=$twoK->structmem('04'); 447 $fools=$april->structmem('01'); 448 $curly=$fools->structmem('curly'); 449 $larry=$fools->structmem('larry'); 450 $moe=$fools->structmem('moe'); 451 return CreateObject('phpgwapi.xmlrpcresp',CreateObject('phpgwapi.xmlrpcval', 452 $curly->scalarval() + $larry->scalarval() + $moe->scalarval(), 'int' 453 )); 454 } 455 456 $v1_countTheEntities_sig=array(array(xmlrpcStruct, xmlrpcString)); 457 $v1_countTheEntities_doc='This handler takes a single parameter, a string, that contains any number of predefined entities, namely <, >, & \' and ".<br />Your handler must return a struct that contains five fields, all numbers: ctLeftAngleBrackets, ctRightAngleBrackets, ctAmpersands, ctApostrophes, ctQuotes.'; 458 459 function v1_countTheEntities($m) 460 { 461 $sno=$m->getParam(0); 462 $str=$sno->scalarval(); 463 $gt=0; $lt=0; $ap=0; $qu=0; $amp=0; 464 for($i=0; $i<strlen($str); $i++) 465 { 466 $c=substr($str, $i, 1); 467 switch($c) 468 { 469 case '>': 470 $gt++; 471 break; 472 case '<': 473 $lt++; 474 break; 475 case '"': 476 $qu++; 477 break; 478 case "'": 479 $ap++; 480 break; 481 case '&': 482 $amp++; 483 break; 484 default: 485 break; 486 } 487 } 488 return CreateObject('phpgwapi.xmlrpcresp', 489 CreateObject('phpgwapi.xmlrpcval',array( 490 'ctLeftAngleBrackets' => CreateObject('phpgwapi.xmlrpcval',$lt, 'int'), 491 'ctRightAngleBrackets' => CreateObject('phpgwapi.xmlrpcval',$gt, 'int'), 492 'ctAmpersands' => CreateObject('phpgwapi.xmlrpcval',$amp, 'int'), 493 'ctApostrophes' => CreateObject('phpgwapi.xmlrpcval',$ap, 'int'), 494 'ctQuotes' => CreateObject('phpgwapi.xmlrpcval',$qu, 'int') 495 ), 496 'struct' 497 )); 498 } 499 500 // trivial interop tests 501 // http://www.xmlrpc.com/stories/storyReader$1636 502 503 $i_echoString_sig=array(array(xmlrpcString, xmlrpcString)); 504 $i_echoString_doc='Echoes string.'; 505 506 $i_echoStringArray_sig=array(array(xmlrpcArray, xmlrpcArray)); 507 $i_echoStringArray_doc='Echoes string array.'; 508 509 $i_echoInteger_sig=array(array(xmlrpcInt, xmlrpcInt)); 510 $i_echoInteger_doc='Echoes integer.'; 511 512 $i_echoIntegerArray_sig=array(array(xmlrpcArray, xmlrpcArray)); 513 $i_echoIntegerArray_doc='Echoes integer array.'; 514 515 $i_echoFloat_sig=array(array(xmlrpcDouble, xmlrpcDouble)); 516 $i_echoFloat_doc='Echoes float.'; 517 518 $i_echoFloatArray_sig=array(array(xmlrpcArray, xmlrpcArray)); 519 $i_echoFloatArray_doc='Echoes float array.'; 520 521 $i_echoStruct_sig=array(array(xmlrpcStruct, xmlrpcStruct)); 522 $i_echoStruct_doc='Echoes struct.'; 523 524 $i_echoStructArray_sig=array(array(xmlrpcArray, xmlrpcArray)); 525 $i_echoStructArray_doc='Echoes struct array.'; 526 527 $i_echoValue_doc='Echoes any value back.'; 528 529 $i_echoBase64_sig=array(array(xmlrpcBase64, xmlrpcBase64)); 530 $i_echoBase64_doc='Echoes base64.'; 531 532 $i_echoDate_sig=array(array(xmlrpcDateTime, xmlrpcDateTime)); 533 $i_echoDate_doc='Echoes dateTime.'; 534 535 function i_echoParam($m) 536 { 537 $s = $m->getParam(0); 538 return CreateObject('phpgwapi.xmlrpcresp',$s); 539 } 540 541 function i_echoString($m) 542 { 543 return i_echoParam($m); 544 } 545 function i_echoInteger($m) 546 { 547 return i_echoParam($m); 548 } 549 function i_echoFloat($m) 550 { 551 return i_echoParam($m); 552 } 553 function i_echoStruct($m) 554 { 555 return i_echoParam($m); 556 } 557 function i_echoStringArray($m) 558 { 559 return i_echoParam($m); 560 } 561 function i_echoIntegerArray($m) 562 { 563 return i_echoParam($m); 564 } 565 function i_echoFloatArray($m) 566 { 567 return i_echoParam($m); 568 } 569 function i_echoStructArray($m) 570 { 571 return i_echoParam($m); 572 } 573 function i_echoValue($m) 574 { 575 return i_echoParam($m); 576 } 577 function i_echoBase64($m) 578 { 579 return i_echoParam($m); 580 } 581 function i_echoDate($m) 582 { 583 return i_echoParam($m); 584 } 585 586 $i_whichToolkit_doc = 'Returns a struct containing the following strings: toolkitDocsUrl, toolkitName, toolkitVersion, toolkitOperatingSystem.'; 587 588 function i_whichToolkit($m) 589 { 590 $ret = array( 591 'toolkitDocsUrl' => 'http://xmlrpc.usefulinc.com/php.html', 592 'toolkitName' => $GLOBALS['xmlrpcName'], 593 'toolkitVersion' => $GLOBALS['xmlrpcVersion'], 594 'toolkitOperatingSystem' => $GLOBALS['SERVER_SOFTWARE'] 595 ); 596 return CreateObject('phpgwapi.xmlrpcresp',phpgw_xmlrpc_encode($ret)); 597 } 598 599 $server->add_to_map('examples.getStateName', 'findstate',$findstate_sig,$findstate_doc); 600 $server->add_to_map('examples.sortByAge', 'agesorter',$agesorter_sig,$agesorter_doc); 601 $server->add_to_map('examples.addtwo', 'addtwo',$addtwo_sig,$addtwo_doc); 602 $server->add_to_map('examples.addtwodouble', 'addtwodouble',$addtwodouble_sig,$addtwodouble_doc); 603 $server->add_to_map('examples.stringecho', 'stringecho',$stringecho_sig,$stringecho_doc); 604 $server->add_to_map('examples.echo', 'echoback',$echoback_sig,$echoback_doc); 605 $server->add_to_map('examples.decode64', 'echosixtyfour',$echosixtyfour_sig,$echosixtyfour_doc); 606 $server->add_to_map('examples.invertBooleans', 'bitflipper',$bitflipper_sig,$bitflipper_doc); 607 $server->add_to_map('mail.send', 'mail_send',$mail_send_sig,$mail_send_doc); 608 $server->add_to_map('validator1.arrayOfStructsTest', 'v1_arrayOfStructs',$v1_arrayOfStructs_sig,$v1_arrayOfStructs_doc); 609 $server->add_to_map('validator1.easyStructTest', 'v1_easyStruct',$v1_easyStruct_sig,$v1_easyStruct_doc); 610 $server->add_to_map('validator1.echoStructTest', 'v1_echoStruct',$v1_echoStruct_sig,$v1_echoStruct_doc); 611 $server->add_to_map('validator1.manyTypesTest', 'v1_manyTypes',$v1_manyTypes_sig,$v1_manyTypes_doc); 612 $server->add_to_map('validator1.moderateSizeArrayCheck','v1_moderateSizeArrayCheck',$v1_moderateSizeArrayCheck_sig,$v1_moderateSizeArrayCheck_doc); 613 $server->add_to_map('validator1.simpleStructReturnTest','v1_simpleStructReturn',$v1_simpleStructReturn_sig,$v1_simpleStructReturn_doc); 614 $server->add_to_map('validator1.nestedStructTest', 'v1_nestedStruct',$v1_nestedStruct_sig,$v1_nestedStruct_doc); 615 $server->add_to_map('validator1.countTheEntities', 'v1_countTheEntities',$v1_countTheEntities_sig,$v1_countTheEntities_doc); 616 $server->add_to_map('interopEchoTests.echoString', 'i_echoString',$i_echoString_sig,$i_echoString_doc); 617 $server->add_to_map('interopEchoTests.echoStringArray', 'i_echoStringArray',$i_echoStringArray_sig,$i_echoStringArray_doc); 618 $server->add_to_map('interopEchoTests.echoInteger', 'i_echoInteger',$i_echoInteger_sig,$i_echoInteger_doc); 619 $server->add_to_map('interopEchoTests.echoIntegerArray','i_echoIntegerArray',$i_echoIntegerArray_sig,$i_echoIntegerArray_doc); 620 $server->add_to_map('interopEchoTests.echoFloat', 'i_echoFloat',$i_echoFloat_sig,$i_echoFloat_doc); 621 $server->add_to_map('interopEchoTests.echoFloatArray', 'i_echoFloatArray',$i_echoFloatArray_sig,$i_echoFloatArray_doc); 622 $server->add_to_map('interopEchoTests.echoStruct', 'i_echoStruct',$i_echoStruct_sig,$i_echoStruct_doc); 623 $server->add_to_map('interopEchoTests.echoStructArray', 'i_echoStructArray',$i_echoStructArray_sig,$i_echoStructArray_doc); 624 $server->add_to_map('interopEchoTests.echoValue', 'i_echoValue','',$i_echoValue_doc); 625 $server->add_to_map('interopEchoTests.echoBase64', 'i_echoBase64',$i_echoBase64_sig,$i_echoBase64_doc); 626 $server->add_to_map('interopEchoTests.echoDate', 'i_echoDate',$i_echoDate_sig,$i_echoDate_doc); 627 $server->add_to_map('interopEchoTests.whichToolkit', 'i_whichToolkit','',$i_whichToolkit_doc); 628 629 // that should do all we need! 630?> 631