Monday, November 08, 2010 at 12:02 AM.

on ping (email, password, status, adruserinfo=nil,, adrclouddata=nil) {
		<<11/22/01; 6:14:11 PM by DW
			<<New optional param, adrclouddata. If it's not nil, we copy the cloudData out of the response into adrclouddata. This table contains information that the cloud is maintaining for the user, such as the IP address, when they last upstreamed and whether or not the user is behind a firewall.
		<<10/15/01; 8:58:57 PM by DW
	local (info);
	xmlStorageSystem.init ();
	if adruserinfo == nil {
		new (tabletype, @info);
		adruserinfo = @info};
	local (params = {"email":email, "password":string.hashmd5 (password), "status":status, "clientPort":user.inetd.config.http.port, "userinfo":adruserinfo^});
	local (rpcPath);
	if defined (adrdata^.xmlRpcPath) {
		rpcPath = adrdata^.xmlRpcPath};
	if defined (adrdata^.rpcPath) {
		rpcPath = adrdata^.rpcPath};
	with adrdata^ {
		local (result = xml.rpc (server, port, "", @params, rpcPath:rpcPath, fldebug:fldebug, protocol:protocol, soapAction:soapAction));
		if result.flerror {
			return (false)};
		if adrclouddata != nil {
			adrclouddata^ = result.clouddata};
		<<scratchpad.result = result
		return (not result.flerror)}}
<<bundle //test code
	<<local (info); new (tabletype, @info); info.flBehindFirewall = false
	<<ping (,, 0, @info, adrclouddata:@scratchpad.clouddata)

This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.