demo.c
上传用户:ladybrid91
上传日期:2007-01-04
资源大小:287k
文件大小:3k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. /*
  2. ** demo.c
  3. **
  4. ** Copyright (c) 1995 Marcus E. Hennecke <marcush@leland.stanford.edu>
  5. ** Copyright (c) 1994-1995 Peter Eriksson <pen@signum.se>
  6. **
  7. ** This program is free software; you can redistribute it and/or modify
  8. ** it under the terms of the GNU General Public License as published by
  9. ** the Free Software Foundation; either version 2 of the License, or
  10. ** (at your option) any later version.
  11. **
  12. ** This program is distributed in the hope that it will be useful,
  13. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. ** GNU General Public License for more details.
  16. ** You should have received a copy of the GNU General Public License
  17. ** along with this program; if not, write to the Free Software
  18. ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19. */
  20. #include <stdio.h>
  21. #include <time.h>
  22. #include <string.h>
  23. #include <fcntl.h>
  24. #include <unistd.h>
  25. #include <errno.h>
  26. #include <sys/types.h>
  27. #include <sys/stat.h>
  28. #include <sys/mman.h>
  29.  
  30. /* #define IN_DNS_C
  31. #include "phttpd.h" */
  32.  
  33. #include "phttpd.h"
  34. static char *full_name=NULL;
  35. static struct options demo_cfg_table[] =
  36. {
  37.     { "full-name",  T_STRING , &full_name, NULL },
  38.     { NULL,                -1,       NULL,  NULL }
  39. };
  40. int pm_init(const char **argv)
  41. {
  42.     char *cfg_path, *cp;
  43.     const char *name = argv[0];
  44.     int cfgsize;
  45.     if (debug > 1)
  46. fprintf(stderr, "*** demo/pm_init("%s") called ***n", argv[0]);
  47.     cfgsize = strlen(name)+6;
  48.     cfg_path = s_malloc(cfgsize);
  49.     s_strcpy(cfg_path, cfgsize, name);
  50.  
  51.     cp = strrchr(cfg_path, '.');
  52.     if (cp && strcmp(cp, ".so") == 0)
  53.         *cp = '';
  54.    
  55.     s_strcat(cfg_path, cfgsize, ".conf");
  56.     if (config_parse_file(cfg_path, demo_cfg_table, 0) < 0)
  57.         return -1;
  58.  
  59.     if (config_parse_argv(argv+1, demo_cfg_table) < 0)
  60.     {
  61.         if (debug > 1)
  62.             fprintf(stderr, "config_parse_file() failedn");
  63.         return -1;
  64.     }
  65.     if (full_name == NULL ) full_name="Not set :-(";
  66.     return 0;
  67. }
  68. void pm_exit(void)
  69. {
  70.     if (debug > 1)
  71. fprintf(stderr, "*** demo/pm_exit() called ***n");
  72. }
  73. static int http_get_head(struct connectioninfo *cip)
  74. {
  75.     int result;
  76.     int fd = cip->fd;
  77.     struct httpinfo *hip = cip->hip;
  78.     
  79.     
  80.     if (debug > 1)
  81. fprintf(stderr, "*** demo/pm_get() called ***n");
  82.     result = 200;
  83.    
  84.     http_sendheaders(fd, cip, result, NULL);
  85.     fd_puts("Content-Type: text/plainnn", cip->fd);
  86.     fd_printf(fd, "Myname: %s ... n",full_name);
  87.     if ( mime_getheader(hip->mip, "HIER", 1 ) != NULL )
  88.     { 
  89.        fd_printf(fd,"Got: HIER: (%s)n",mime_getheader(hip->mip, "HIER", 1 ));
  90.     }
  91.     else fd_printf(fd,"Nix dan");
  92.     hip->length=fd_written(fd);
  93.     return result;
  94. }
  95. int pm_request(struct connectioninfo *cip)
  96. {
  97.     struct httpinfo *hip = cip->hip;
  98.     
  99.     if (strcasecmp(hip->method, "GET") == 0 ||
  100. strcasecmp(hip->method, "HEAD") == 0)
  101. return http_get_head(cip);
  102.     else
  103. return -2;
  104. }