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

system.verbs.builtins.tcp.im.rpi.encode

on encode (procedureName, paramlist) {
	<<Changes
		<<8/27/02; 5:07:06 PM by JES
			<<Base64-encode strings which are struct members, in addition to string-parameters.
		<<5/6/02; 7:56:01 PM by DW
			<<Created. Cribbed from betty.rpc.client.
	local (xmltext = "");
	on add (s) {
		xmltext = xmltext + s};
	add ("<?xml version=\"1.0\"?>");
	add ("<methodCall>");
	add ("<methodName>" + procedureName + "</methodName>");
	local (item);
	add ("<params>");
	on addOneParam (item, tagname="param", name="", flAddName=false) {
		case (typeOf (item)) {
			tableType {
				add ("<" + tagname + ">");
				if flAddName {
					add ("<name>" + name + "</name>")};
				add ("<value><struct>");
				local (adrsub);
				for adrsub in @item {
					addOneParam (adrsub^, "member", nameOf (adrsub^), true)};
				add ("</struct></value></" + tagname + ">")};
			stringType { // JB 5/24/02 - override string values to base64 encode them
				if flAddName {
					add("<" + tagname + "><name>" + name + "</name><value><string>" + base64.encode(item, infinity) + "</string></value></" + tagname + ">")}
				else {
					add("<" + tagname + "><value><string>" + base64.encode(item, infinity) + "</string></value></" + tagname + ">")}}}
		else { // normal processing
			if flAddName {
				add ("<" + tagname + "><name>" + name + "</name><value>" + xml.coercions.frontierValueToTaggedText (@item, 0) + "</value></" + tagname + ">")}
			else {
				add ("<" + tagname + "><value>" + xml.coercions.frontierValueToTaggedText (@item, 0) + "</value></" + tagname + ">")}};
		return (true)};
	for item in paramlist {
		addOneParam (item)};
	add ("</params>");
	add ("</methodCall>");
	return (xmltext)}
<<bundle //test code
	<<wp.newtextobject (encode ("test.noOp", {user.prefs.commonStyles}), @scratchpad.rpctext)
	<<local (xstruct); xml.compile (string (scratchpad.rpctext), @xstruct); wp.newtextobject (xml.decompile (@xstruct), @scratchpad.rpctext)
	<<edit (@scratchpad.rpctext)



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.