compile function httpSvr_Trace( httpServer, requestID, requestHeaders )
/*
****************************************************************************
** IF YOU WANT TO MODIFY THIS FOR YOUR OWN APPLICATIONS PLEASE USE A COPY **
** DO NOT CHANGE THIS PROGRAM AS IT MAY BE OVERWRITTEN BY FUTURE UPDATES! **
****************************************************************************
** Copyright (C) 2012-2021 Revelation Software Inc. All Rights Reserved **
Author : Wile C Coyote - Super Genius
Date : March 2021
Purpose : "Trace" function for HTTPSERVER control requests.
Comments
========
This is a simple function designed to reflect the headers and content received
by the HTTPSERVER control back to the client as an HTML page.
Modelled on the venerable "INET_TRACE" function.
Amended Date Reason
======= ==== ======
*/
#pragma precomp event_precomp
declare function rti_XMLEncode, exec_Method
$insert ps_HTTPServer_Equates
$insert rti_Text_Equates
$insert logical
varNames = "CONTENT_LENGTH" ; varIndexes = PS_HSVR_REQHDR_CONTENTLEN$
varNames := @fm : "CONTENT_TYPE" ; varIndexes := @fm : PS_HSVR_REQHDR_CONTENTTYPE$
varNames := @fm : "GATEWAY_INTERFACE" ; varIndexes := @fm : PS_HSVR_REQHDR_GATEWAYINTERFACE$
varNames := @fm : "HTTPS" ; varIndexes := @fm : PS_HSVR_REQHDR_HTTPS$
varNames := @fm : "HTTP_ACCEPT" ; varIndexes := @fm : PS_HSVR_REQHDR_HTTPACCEPT$
varNames := @fm : "HTTP_COOKIE" ; varIndexes := @fm : PS_HSVR_REQHDR_HTTPCOOKIE$
varNames := @fm : "HTTP_FROM" ; varIndexes := @fm : PS_HSVR_REQHDR_HTTPFROM$
varNames := @fm : "HTTP_REFERER" ; varIndexes := @fm : PS_HSVR_REQHDR_HTTPREFERRER$
varNames := @fm : "HTTP_USER_AGENT" ; varIndexes := @fm : PS_HSVR_REQHDR_HTTPUSERAGENT$
varNames := @fm : "PATH_INFO" ; varIndexes := @fm : PS_HSVR_REQHDR_PATHINFO$
varNames := @fm : "PATH_TRANSLATED" ; varIndexes := @fm : PS_HSVR_REQHDR_PATHTRANSLATED$
varNames := @fm : "REMOTE_ADDR" ; varIndexes := @fm : PS_HSVR_REQHDR_REMOTEADDR$
varNames := @fm : "REMOTE_HOST" ; varIndexes := @fm : PS_HSVR_REQHDR_REMOTEHOST$
varNames := @fm : "REMOTE_IDENT" ; varIndexes := @fm : PS_HSVR_REQHDR_REMOTEIDENT$
varNames := @fm : "REMOTE_USER" ; varIndexes := @fm : PS_HSVR_REQHDR_REMOTEUSER$
varNames := @fm : "REQUEST_METHOD" ; varIndexes := @fm : PS_HSVR_REQHDR_REQUESTMETHOD$
varNames := @fm : "SCRIPT_NAME" ; varIndexes := @fm : PS_HSVR_REQHDR_SCRIPTNAME$
varNames := @fm : "SERVER_NAME" ; varIndexes := @fm : PS_HSVR_REQHDR_SERVERNAME$
varNames := @fm : "SERVER_PORT" ; varIndexes := @fm : PS_HSVR_REQHDR_SERVERPORT$
varNames := @fm : "SERVER_PROTOCOL" ; varIndexes := @fm : PS_HSVR_REQHDR_SERVERPROTOCOL$
varNames := @fm : "SERVER_SOFTWARE" ; varIndexes := @fm : PS_HSVR_REQHDR_SERVERSOFTWARE$
varNames := @fm : "SERVER_URL" ; varIndexes := @fm : PS_HSVR_REQHDR_SERVERURL$
content = ""
content<-1> = "
"
content<-1> = ""
content<-1> = ""
content<-1> = "Environment Variables"
content<-1> = ""
content<-1> = "Name | Value |
"
xCount = fieldCount( varNames, @fm )
for x = 1 to xCount
row = "" : varNames : " | "
row := "" : requestHeaders> : " |
"
content<-1> = row
next
content<-1> = "
"
content<-1> = "
"
content<-1> = "
"
content<-1> = "Request Headers"
content<-1> = ""
content<-1> = "Header Name | Header Value |
"
xCount = fieldCount( requestHeaders, @vm )
for x = 1 to xCount
row = "" : requestHeaders : " | "
row := "" : requestHeaders : " |
"
content<-1> = row
next
content<-1> = "
"
content<-1> = "
"
content<-1> = "
"
content<-1> = "Query Details"
content<-1> = ""
content<-1> = "Query Name | Query Value |
"
xCount = fieldCount( requestHeaders, @vm )
for x = 1 to xCount
row = "" : requestHeaders : " | "
row := "" : requestHeaders : " |
"
content<-1> = row
next
content<-1> = "
"
content<-1> = "
"
content<-1> = "
"
content<-1> = "Cookie Details"
content<-1> = ""
content<-1> = "Cookie Name | Cookie Value |
"
xCount = fieldCount( requestHeaders, @vm )
for x = 1 to xCount
row = "" : requestHeaders : " | "
row := "" : requestHeaders : " |
"
content<-1> = row
next
content<-1> = "
"
// Add the request content - encode it to make sure it's safe to embed in
// the returned HTML
content<-1> = "
"
content<-1> = "
"
content<-1> = "Request Content"
content<-1> = "
"
content<-1> = rti_XMLEncode( @httpServer->GetRequestContent( requestID ) )
content<-1> = ""
content<-1> = ""
convert @fm to LF$ in content
@httpServer->SetResponseContent( requestID, content )
@httpServer->SetResponseHeader( requestID, "Content-Type", "text/html" )
return TRUE$