Wiki
Download
Manual
Eggs
API
Tests
Bugs
show
edit
history
You can edit this page using
wiki syntax
for markup.
Article contents:
== Outdated egg! This is an egg for CHICKEN 3, the unsupported old release. You're almost certainly looking for [[/eggref/4/xml-rpc|the CHICKEN 4 version of this egg]], if it exists. If it does not exist, there may be equivalent functionality provided by another egg; have a look at the [[https://wiki.call-cc.org/chicken-projects/egg-index-4.html|egg index]]. Otherwise, please consider porting this egg to the current version of CHICKEN. [[tags: eggs]] == xml-rpc [[toc:]] === Description A library for XML-RPC client/servers. === Author [[felix winkelmann|Felix Winkelmann]] === Requirements http ssax base64 url === Download [[http://code.call-cc.org/legacy-eggs/3/xml-rpc.egg|xml-rpc.egg]] === Documentation ==== Client Usage: (require-extension xml-rpc-client) <procedure>(xml-rpc:server HOST [PORT [PATH]] [user: USER] [password: PASSWORD] [attributes: ATTRIBUTES])</procedure> Returns a procedure that, when called with the name of a remote XML-RPC method, will return a procedure that passes its arguments to the XML-RPC server which is given in {{HOST}} (a string), {{PORT}} (which defaults to 80) and {{PATH}} (which defaults to {{"/RPC2"}}). The {{USER}} and {{PASSWORD}} keyword arguments, if given, are used to perform basic authentication to the server. The {{ATTRIBUTES}} argument specifies an a-list of attributes to add to the HTTP request object sent to the server. If and only if {{HOST}} is a properly-formatted URL using the "http" or "https" schemes, the {{PORT}}, {{PATH}}, {{USER}} and {{PASSWORD}} information found in the URL takes precedence over the arguments with the same meaning. ==== Server Usage: (require-extension xml-rpc-server) <procedure>(xml-rpc:register-method NAME PROC [DOCSTRING [PATH]])</procedure> Registers a remotely callable procedure {{PROC}} under {{NAME}}, which should be a string or a symbol. XML-RPC clients can now call this procedure (provided a HTTP server is started). Unhandled exceptions are returned as "fault" responses. {{PATH}} specifies the URL under which the remote procedure is available and defaults to {{"/RPC2"}}. {{DOCSTRING}} specifies an optional documentation string. See {{define-remote-method}} for a simpler method of defining XML-RPC procedures. <procedure>(xml-rpc:method-documentation NAME [PATH])</procedure> Returns the documentation-string of the method with the name NAME (a string) at the URL PATH (which defaults to "/RPC2"). <parameter>(xml-rpc:current-method-path)</parameter> Contains the URL (a string) under which the currently executing method is called. Outside of the dynamic context of an XML-RPC method invocation, the value of this parameter is unspecified. <macro>(define-remote-method (NAME VAR ... [. RVAR]) [DOCSTRING] BODY ...)</macro> A more convenient syntax for defining remotely callable procedures. The optional DOCSTRING can be accessed by xml-rpc:method-documentation. ==== Type conversion The following table summarizes how XML-RPC values map to Scheme data and vice versa: Scheme -> XML-RPC: <table> <tr> <th>exact integer</th> <td>i4</td> </tr> <tr> <th>number</th> <td>double</td> </tr> <tr> <th>boolean</th> <td>boolean</td> </tr> <tr> <th>string</th> <td>string</td> </tr> <tr> <th>byte-vector</th> <td>base64</td> </tr> <tr> <th>vector</th> <td>array</td> </tr> <tr> <th>a-list</th> <td>struct</td> </tr> <tr> <th>list</th> <td>struct</td> </tr> </table> XML-RPC -> Scheme <table> <tr> <th>i4, int, double</th> <td>number</td> </tr> <tr> <th>boolean</th> <td>boolean</td> </tr> <tr> <th>string</th> <td>string</td> </tr> <tr> <th>base64</th> <td>byte-vector</td> </tr> <tr> <th>array</th> <td>vector</td> </tr> <tr> <th>struct</th> <td>a-list</td> </tr> <tr> <th>dateTime.iso8601</th> <td>string</td> </tr> </table> This implementation of XML-RPC is extended to allow returning multiple values. Errors during the execution of a server-method are propagated to the client as "fault" responses. === Examples Fetch time from xml-rpc.org: (require-extension xml-rpc-client) (define currentTime (xml-rpc:server "xml-rpc.org") ) (define getCurrentTime (currentTime "currentTime.getCurrentTime") ) (print (getCurrentTime)) A simple "hello" server: % cat hello.scm (require-extension xml-rpc-server) (define-remote-method (hello var) (sprintf "Hello, ~A!" var) ) ((http:make-server 4242)) % cat client.scm (require-extension xml-rpc-client) (define srv (xml-rpc:server "http://localhost:4242/RPC2")) (define hello (srv "hello")) (print "-> " (hello "you")) % csi -script hello.scm & % csi -script client.scm -> Hello, you! === Changelog * 1.16 Allow empty strings (quick hack) [Peter Bex] * 1.14 HTTPS-URLs are recognized, user, password and attributes are recognized as keyword parameters to xml-rpc:server. [Thomas Chust] * 1.13 Server replies with proper protocol [guess who reported it?] * 1.12 Fixed another bug, again reported by Daishi * 1.11 Fixed bugs in xml content-parser and PI matching [reported by Daishi Kato] * 1.10 Bug-fixes and improvements by Hans Bulfone * 1.9 Adapted to SRFI-69-compatible hash-tables * 1.8 Interpretation of HOST argument of xml-rpc:server is now consistent with documentation. [edw] * 1.7 XML content-parser used old signature. * 1.6 Fixed small bug in URL handling. [edw] * 1.5 Server now supports processing instructions in requests. Xml-rpc:server now accepts a URL in HOST argument. [edw@poseur.com] * 1.4 Adapted to new setup scheme. * 1.3 Reponse parsing did not accept XML processing instructions. * 1.2 Unmarshaling of dateTime.iso8601 results was wrong (again!). * 1.1 Unmarshaling of dateTime.iso8601 results was wrong. * 1.0 === License Copyright (c) 2003-2006, Felix L. Winkelmann All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Description of your changes:
I would like to authenticate
Authentication
Username:
Password:
Spam control
What do you get when you add 18 to 6?