Home | History | Annotate | Download | only in cgi
      1 /**
      2  * Copyright 2006 Mike Tsao. All rights reserved.
      3  *
      4  * Hello World using FastCGI and ClearSilver.
      5  */
      6 
      7 #include "ClearSilver.h"
      8 #include <string>
      9 #include <fcgi_stdio.h>
     10 #include <stdlib.h>
     11 #include <stdarg.h>
     12 #include <syslog.h>
     13 
     14 static bool quit = false;
     15 
     16 static int cs_printf(void *ctx, const char *s, va_list args) {
     17   return printf(s, args);
     18 }
     19 
     20 static int cs_write(void *ctx, const char *s, int n) {
     21   return fwrite(const_cast<char *>(s), n, 1, FCGI_stdout);
     22 }
     23 
     24 int main(int argc, char **argv, char **envp) {
     25   openlog(argv[0], 0, LOG_USER);
     26   syslog(LOG_INFO, "%s started.", argv[0]);
     27 
     28   int hits = 0;
     29   while (FCGI_Accept() >= 0) {
     30     HDF *hdf = NULL;
     31     CGI *cgi = NULL;
     32 
     33     /* Note that we aren't doing any error handling here, we really should. */
     34     hdf_init(&hdf);
     35 
     36     // Takes ownership of HDF.
     37     cgi_init(&cgi, hdf);
     38 
     39     hits++;
     40 
     41     /* Initialize the standard cgiwrap environment.  FastCGI already wraps some
     42      * of the standard calls that cgiwrap wraps.  */
     43     cgiwrap_init_std(argc, argv, environ);
     44 
     45     /* Then, we install our own wrappers for some cgiwrap calls that aren't
     46      * already wrapped in the standard wrappers. */
     47     cgiwrap_init_emu(NULL, NULL, cs_printf, cs_write, NULL, NULL, NULL);
     48 
     49     hdf_read_file(cgi->hdf, "common.hdf");
     50     hdf_read_file(cgi->hdf, "hello_world.hdf");
     51 
     52     cgi_display(cgi, "hello_world.cs");
     53 
     54     // This destroys HDF.
     55     cgi_destroy(&cgi);
     56   }
     57   syslog(LOG_INFO, "%s ending.", argv[0]);
     58   return 0;
     59 }
     60