note description : "Basic Service that shows the standard CGI variables" date : "$Date$" revision : "$Revision$" EIS: "name=CGI specification","src=(https://tools.ietf.org/html/rfc3875", "protocol=url" class APPLICATION inherit WSF_DEFAULT_SERVICE redefine initialize end create make_and_launch feature {NONE} -- Initialization initialize -- Initialize current service. do set_service_option ("port", 9090) set_service_option ("verbose", true) end feature -- Basic operations execute (req: WSF_REQUEST; res: WSF_RESPONSE) -- Execute the incomming request local l_raw_data: STRING l_page_response: STRING l_rows: STRING do create l_page_response.make_from_string (html_template) if req.path_info.same_string ("/") then -- HTTP method l_page_response.replace_substring_all ("$http_method", req.request_method) -- URI l_page_response.replace_substring_all ("$uri", req.path_info) -- Protocol l_page_response.replace_substring_all ("$protocol", req.server_protocol) -- Fill the table rows with CGI standard variables create l_rows.make_empty -- Auth_type l_rows.append ("") l_rows.append ("") l_rows.append ("AUTH_TYPE") l_rows.append ("") l_rows.append ("") if attached req.auth_type as l_type then l_rows.append (l_type) else l_rows.append ("Not present") end l_rows.append ("") l_rows.append ("") -- Content length l_rows.append ("") l_rows.append ("") l_rows.append ("CONTENT_LENGTH") l_rows.append ("") l_rows.append ("") if attached req.content_length as l_content_length then l_rows.append (l_content_length) else l_rows.append ("Not present") end l_rows.append ("") l_rows.append ("") -- Content length l_rows.append ("") l_rows.append ("") l_rows.append ("CONTENT_TYPE") l_rows.append ("") l_rows.append ("") if attached req.content_type as l_content_type then l_rows.append (l_content_type.string) else l_rows.append ("Not present") end l_rows.append ("") l_rows.append ("") -- Gateway interface l_rows.append ("") l_rows.append ("") l_rows.append ("GATEWAY_INTERFACE") l_rows.append ("") l_rows.append ("") if attached req.gateway_interface as l_gateway_interface then l_rows.append (l_gateway_interface) else l_rows.append ("Not present") end l_rows.append ("") l_rows.append ("") -- Path info l_rows.append ("") l_rows.append ("") l_rows.append ("PATH_INFO") l_rows.append ("") l_rows.append ("") if attached req.path_info as l_path_info then l_rows.append (l_path_info) else l_rows.append ("Not present") end l_rows.append ("") l_rows.append ("") -- Path translated l_rows.append ("") l_rows.append ("") l_rows.append ("PATH_TRANSLATED") l_rows.append ("") l_rows.append ("") if attached req.path_translated as l_path_translated then l_rows.append (l_path_translated) else l_rows.append ("Not present") end l_rows.append ("") l_rows.append ("") -- Query string l_rows.append ("") l_rows.append ("") l_rows.append ("QUERY_STRING") l_rows.append ("") l_rows.append ("") if attached req.query_string as l_query_string then l_rows.append (l_query_string) else l_rows.append ("Not present") end l_rows.append ("") l_rows.append ("") -- Remote addr l_rows.append ("") l_rows.append ("") l_rows.append ("REMOTE_ADDR") l_rows.append ("") l_rows.append ("") l_rows.append (req.remote_addr) l_rows.append ("") l_rows.append ("") -- Remote host l_rows.append ("") l_rows.append ("") l_rows.append ("REMOTE_HOST") l_rows.append ("") l_rows.append ("") if attached req.remote_host as l_remote_host then l_rows.append (l_remote_host) else l_rows.append ("Not present") end l_rows.append ("") l_rows.append ("") -- Remote ident l_rows.append ("") l_rows.append ("") l_rows.append ("REMOTE_IDENT") l_rows.append ("") l_rows.append ("") if attached req.remote_ident as l_remote_ident then l_rows.append (l_remote_ident) else l_rows.append ("Not present") end l_rows.append ("") l_rows.append ("") -- Remote user l_rows.append ("") l_rows.append ("") l_rows.append ("REMOTE_USER") l_rows.append ("") l_rows.append ("") if attached req.remote_user as l_remote_user then l_rows.append (l_remote_user) else l_rows.append ("Not present") end l_rows.append ("") l_rows.append ("") -- Request method l_rows.append ("") l_rows.append ("") l_rows.append ("REQUEST_METHOD") l_rows.append ("") l_rows.append ("") l_rows.append (req.request_method) l_rows.append ("") l_rows.append ("") -- Script name l_rows.append ("") l_rows.append ("") l_rows.append ("SCRIPT_NAME") l_rows.append ("") l_rows.append ("") l_rows.append (req.script_name) l_rows.append ("") l_rows.append ("") -- Server name l_rows.append ("") l_rows.append ("") l_rows.append ("SERVER_NAME") l_rows.append ("") l_rows.append ("") l_rows.append (req.server_name) l_rows.append ("") l_rows.append ("") -- Server protocol l_rows.append ("") l_rows.append ("") l_rows.append ("SERVER_PROTOCOL") l_rows.append ("") l_rows.append ("") l_rows.append (req.server_protocol) l_rows.append ("") l_rows.append ("") -- Server software l_rows.append ("") l_rows.append ("") l_rows.append ("SERVER_SOFTWARE") l_rows.append ("") l_rows.append ("") l_rows.append (req.server_software) l_rows.append ("") l_rows.append ("") l_page_response.replace_substring_all ("$rows", l_rows) -- Reading the raw header if attached req.raw_header_data as l_raw_header then l_page_response.replace_substring_all ("$raw_header", l_raw_header) end res.put_header ({HTTP_STATUS_CODE}.ok, <<["Content-Type", "text/html"], ["Content-Length", l_page_response.count.out]>>) res.put_string (l_page_response) end end html_template: STRING = "[

EWF service example: Showing Standard CGI Variables

HTTP METHOD:$http_method
URI:$uri
PROTOCOL:$protocol

$rows
CGI Name Value

Raw header

$raw_header ]" end