Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.webserver.data.trap
on sdoc (pathArgs, kfor="", user="", pass="", frmu="", addr="", svpt="", svnm="", scnm="", meth="", refr="", Kcid="", Kact="", Kapt="", ctyp="", post="", Kcip="", Kfrq="", Agnt="", DIRE="") {
<<Thu, Apr 2, 1998 at 6:35:52 PM by WMF
<<I did this in 5 minutes
<<Once it works we can throw away the commented parts
local (paramtable, appID, appName, websiteFolderPath, serverPath);
new (tableType, @paramtable);
<<The binaryID should be used in send-partial commands
<<in place of the appID or appName. The binaryID specifies
<<the application that sent the CGI sdoc event
<<specifically. This way you can have two copies of WebSTAR
<<(for instance) running at the same time.
<<Example:
<<webstar.sendpartial (myData, adrparams^.connectionID, true, adrparams^.binaryID)
<<[Technically: the binaryID is always either a ProcessSerialNumber or a Target ID Record
<<('psn ' or 'targ'), but you don't need to know that to use it.]
<<local (binaryID = getEventSender ())
<<Get info about the server app.
<<bundle
<<Get the website folder path.
<<if DIRE != "" <<DIRE is the website folder parameter
<<websiteFolderPath = DIRE
<<else
<<websiteFolderPath = webserver.getPref ("websiteFolderPath")
<<
<<Get the server app path and name
<<serverPath = webserver.getPref ("serverPath")
<<try
<<appName = file.fileFromPath (serverPath)
<<
<<Get the server appID
<<try
<<appID = file.creator (serverPath)
<<bundle <<Set up CGI params table
<<paramtable.action = Kact
<<paramtable.actionPath = Kapt
<<paramtable.appID = appID
<<paramtable.appName = appName
<<paramtable.binaryID = binaryID
<<paramtable.clientAddress = addr
<<paramtable.clientIP = Kcip
<<paramtable.connectionID = Kcid
<<paramtable.contentType = ctyp
<<paramtable.fromUser = frmu
<<paramtable.fullRequest = Kfrq
<<paramtable.httpSearchArgs = kfor
<<paramtable.method = meth
<<paramtable.password = pass
<<paramtable.pathArgs = pathArgs
<<paramtable.postargs = post
<<paramtable.referer = refr
<<paramtable.scriptName = scnm
<<paramtable.serverName = svnm
<<paramtable.serverPath = serverPath
<<paramtable.serverPort = svpt
<<paramtable.userAgent = Agnt
<<paramtable.username = user
<<paramtable.websiteFolder = websiteFolderPath
<<Parse the post args, if they exist.
<<if paramtable.postargs != ""
<<new (tabletype, @paramtable.argtable)
<<webserver.parseArgs (post, @paramtable.argtable)
<<If debugging is on, make a copy of the paramtable.
<<if webserver.getPref ("fldebug")
<<scratchpad.cgiparams = paramtable
bundle {
new (tableType, @paramtable.requestHeaders);
paramtable.client = addr;
paramtable.firstLine = webserver.util.parseHeaders (Kfrq, @paramtable.requestHeaders);
paramtable.method = meth;
paramtable.path = scnm;
paramtable.pathArgs = pathArgs;
paramtable.password = pass;
paramtable.ready = true; // no idea what this is for
paramtable.refcon = 0; // this one either
paramtable.request = Kfrq;
paramtable.requestBody = post; // hope this works...
paramtable.searchArgs = kfor;
paramtable.stream = -1; // so that they don't try to use tcp verbs
paramtable.username = user};
msg ("about to call dispatch");
return (webserver.dispatch (@paramtable))}
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.