Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.webserver.echoResponder
on echoResponder (adrParamTable) { <<3/3/98 at 9:36:20 PM by WMF <<This is a debugging responder that echos all the parameters that are available to a responder <<It is similar to the samples.tellParams CGI <<9/26/98; 6:38:48 AM by DW <<improved the HTML it generates to make it prettier and to learn how to upgrade responders local (htmltext = "", indentlevel = 0); on add (s) { htmltext = htmltext + string.filledString ("\t", indentlevel) + s + "\r"}; local (title = "Echo Responder for \"" + tcp.dns.getMyDomainName () + "\""); add ("<html>"); indentlevel++; add ("<head>"); indentlevel++; add ("<title>" + title + "</title>"); add ("</head>"); indentlevel--; add ("<body>"); indentlevel++; on addTable (adrtable) { local (i, adritem, val); add ("<table cellpadding=\"2\" border=\"0\">"); indentlevel++; add ("<tr>"); indentlevel++; add ("<td valign=\"top\"><b>" + "Name" + "</b></td>"); add ("<td> </td>"); add ("<td valign=\"top\"><b>" + "Value" + "</b></td>"); add ("</tr>"); indentlevel--; for i = 1 to sizeof (adrtable^) { adritem = @adrtable^ [i]; if typeof (adritem^) == tabletype { val = sizeof (adritem^) + " items"} else { val = string (adritem^); if sizeof (val) == 0 { val = "\"\""}; if val contains "\r" { val = "<pre>" + string.trimWhitespace (val) + "</pre>"}}; add ("<tr>"); indentlevel++; add ("<td valign=\"top\">" + nameof (adritem^) + "</td>"); add ("<td> </td>"); add ("<td valign=\"top\">" + val + "</td>"); add ("</tr>"); indentlevel--}; add ("</table>"); indentlevel--}; add ("<blockquote>"); indentlevel++; add ("<h2>" + title + "</h2>"); add ("<blockquote>"); indentlevel++; bundle { //add introductory text add ("This responder shows you the contents of the param table for an HTTP request received on your machine."); add ("The first table shows you the top level items, and the second table shows you the contents of the requestHeaders sub-table."); add ("This responder was last updated on " + timeModified (this) + "."); add ("<p>")}; add ("<h4>Top level items in adrParamTable^</h4>"); add ("<blockquote>"); indentlevel++; addTable (adrParamTable); add ("</blockquote>"); indentlevel--; add ("<h4>Contents of the adrParamTable^.requestHeaders sub-table:</h4>"); add ("<blockquote>"); indentlevel++; addTable (@adrParamTable^.requestHeaders); add ("</blockquote>"); indentlevel--; add ("</blockquote>"); indentlevel--; add ("</blockquote>"); indentlevel--; add ("</body>"); indentlevel--; add ("</html>"); indentlevel--; adrParamTable^.responseHeaders.["Content-Type"] = "text/html"; // always set the MIME type adrParamTable^.responseBody = htmltext; return (true)} <<bundle //test code <<local (params) <<new (tabletype, @params) <<params.client = tcp.dns.getMyDomainName () <<new (tabletype, @params.requestHeaders) <<params.requestHeaders.somevalue = "Hello!" <<new (tabletype, @params.responseHeaders) <<get (@params) <<webbrowser.displaytext (params.responseBody)
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.