4 * Produce a page containing all the inputs (fcgiapp version)
7 * Copyright (c) 1996 Open Market, Inc.
9 * See the file "LICENSE.TERMS" for information on usage and redistribution
10 * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
15 static const char rcsid[] = "$Id: echo2.c,v 1.1 1997/09/16 15:36:28 stanleyg Exp $";
26 void PrintEnv(FCGX_Stream *out, char *label, char **envp)
28 printf("%s:<br>\n<pre>\n", label);
29 FCGX_FPrintF(out, "%s:<br>\n<pre>\n", label);
30 for(; *envp != NULL; envp++) {
31 FCGX_FPrintF(out, "%s\n", *envp);
33 FCGX_FPrintF(out, "</pre><p>\n");
37 extern char **environ;
42 FCGX_Stream *in, *out, *err;
45 while (FCGX_Accept(&in, &out, &err, &envp) >= 0) {
46 char *contentLength = FCGX_GetParam("CONTENT_LENGTH", envp);
49 "Content-type: text/html\r\n"
51 "<title>FastCGI echo (fcgiapp version)</title>"
52 "<h1>FastCGI echo (fcgiapp version)</h1>\n"
53 "Request number %d, Process ID: %d<p>\n", ++count,
55 if(contentLength != NULL) {
56 len = strtol(contentLength, NULL, 10);
61 FCGX_FPrintF(out, "No data from standard input.<p>\n");
64 FCGX_FPrintF(out, "Standard input:<br>\n<pre>\n");
65 for(i = 0; i < len; i++) {
66 if((ch = FCGX_GetChar(in)) < 0) {
67 FCGX_FPrintF(out, "Error: Not enough bytes received "
68 "on standard input<p>\n");
71 FCGX_PutChar(ch, out);
73 FCGX_FPrintF(out, "\n</pre><p>\n");
75 PrintEnv(out, "Request environment", envp);
76 PrintEnv(out, "Initial environment", environ);