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

Web服务器

开发平台:

Unix_Linux

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include "phttpd.h"
  6. int pm_init(const char **argv)
  7. {
  8.     fprintf(stderr, "*** pm_init("%s") called ***n", argv[0]);
  9.     return 0;
  10. }
  11. void pm_exit(void)
  12. {
  13.     fprintf(stderr, "*** pm_exit() called ***n");
  14. }
  15. static int http_get(struct connectioninfo *cip)
  16. {
  17.     char buf[256];
  18.     int fd = cip->fd;
  19.     struct httpinfo *hip = cip->hip;
  20.     
  21.     fprintf(stderr, "*** http_get() called ***n");
  22.     http_time_r(&cip->cn_time, buf, sizeof(buf));
  23.     
  24.     if (hip->mip != NULL)
  25.     {
  26. http_sendheaders(fd, cip, 200, NULL);
  27. fd_printf(fd, "Last-Modified: %s", buf);
  28. fd_printf(fd, "Content-Type: text/htmlnn");
  29.     }
  30.     html_sysheader(fd, "H2", "Test av DynLink - GET");
  31.     
  32.     fd_printf(fd, "<B>Server host is:</B> %s<BR>n", server_host);
  33.     fd_printf(fd, "<B>Server port is:</B> %d<BR>n", server_port);
  34. #if 0
  35.     fd_printf(fd, "<B>Client host is:</B> %s<BR>n", cip->client.addr_s);
  36.     fd_printf(fd, "<B>Client port is:</B> %dn", cip->client.port);
  37. #endif
  38.     
  39.     fd_printf(fd, "<P><B>Current time is:</B> %s", buf);
  40.     html_sysfooter(fd);
  41.     
  42.     return 200;
  43. }
  44. static int http_head(struct connectioninfo *cip)
  45. {
  46.     char buf[256];
  47.     int fd = cip->fd;
  48.     struct httpinfo *hip = cip->hip;
  49.     
  50.     if (debug)
  51. fprintf(stderr, "*** http_head() called ***n");
  52.     http_time_r(&cip->cn_time, buf, sizeof(buf));
  53.     if (hip->mip != NULL)
  54.     {
  55. http_sendheaders(fd, cip, 200, NULL);
  56. fd_printf(fd, "Last-Modified: %s", buf);
  57. fd_printf(fd, "Content-Type: text/htmln");
  58.     }
  59.     return 200;
  60. }
  61. static int http_put(struct connectioninfo *cip)
  62. {
  63.     int i;
  64.     char buf[256];
  65.     int fd = cip->fd;
  66.     struct httpinfo *hip = cip->hip;
  67.     
  68.     if (debug)
  69. fprintf(stderr, "*** http_put() called ***n");
  70.     i = 0;
  71.     while (fd_gets(buf, sizeof(buf), fd))
  72. i++;
  73.     http_time_r(&cip->cn_time, buf, sizeof(buf));
  74.     if (hip->mip != NULL)
  75.     {
  76. http_sendheaders(fd, cip, 200, NULL);
  77. fd_printf(fd, "Last-Modified: %s", buf);
  78. fd_printf(fd, "Content-Type: text/htmlnn");
  79.     }
  80.     html_sysheader(fd, "H2", "Test av DynLink - PUT");
  81.     
  82.     fd_printf(fd, "<B>Antal inputrader:</B> %d<BR>n", i);
  83.     
  84.     fd_printf(fd, "<B>Server host is:</B> %s<BR>n", server_host);
  85.     fd_printf(fd, "<B>Server port is:</B> %d<BR>n", server_port);
  86. #if 0
  87.     fd_printf(fd, "<B>Client host is:</B> %s<BR>n", cip->client.addr_s);
  88.     fd_printf(fd, "<B>Client port is:</B> %dn", cip->client.port);
  89. #endif
  90.     
  91.     fd_printf(fd, "<P><B>Current time is:</B> %s", buf);
  92.     html_sysfooter(fd);
  93.     return 200;
  94. }
  95. static int http_post(struct connectioninfo *cip)
  96. {
  97.     int i;
  98.     char buf[256];
  99.     int len;
  100.     int fd = cip->fd;
  101.     struct httpinfo *hip = cip->hip;
  102.     
  103.     if (debug)
  104. fprintf(stderr, "*** http_post() called ***n");
  105.     http_time_r(&cip->cn_time, buf, sizeof(buf));
  106.     len = -1;
  107.     
  108.     if (hip->mip != NULL)
  109.     {
  110. http_sendheaders(fd, cip, 200, NULL);
  111. fd_printf(fd, "Last-Modified: %s", buf);
  112. fd_printf(fd, "Content-Type: text/htmlnn");
  113.     }
  114.     fd_flush(fd);
  115.     if (len < 0)
  116.     {
  117. /* XXXXX Not working!!!! XXXXXX */
  118. i = 0;
  119. while (fd_gets(buf, sizeof(buf), fd))
  120. {
  121.     fprintf(stderr, "      fd_gets: "%s"n", buf);
  122.     i++;
  123. }
  124. fprintf(stderr, "      done (fd_gets loop)n");
  125.     }
  126.     else
  127.     {
  128. fd_printf(fd, "<HR>n");
  129. i = fd_read(fd, buf, len);
  130. buf[i] = '';
  131. fd_printf(fd, "<B>Data:</B> %sn", buf);
  132. fd_printf(fd, "<HR>n");
  133.     }
  134.     
  135.     
  136.     html_sysheader(fd, "H1", "Test av DynLink - POST");
  137.     
  138.     if (debug > 2)
  139. fprintf(stderr, "   http_post, after fd_gets()n");
  140.     
  141.     fd_printf(fd, "<B>Antal input-tecken:</B> %d<BR>n", i);
  142.     
  143.     html_sysfooter(fd);
  144.     return 200;
  145. }
  146. int pm_request(struct connectioninfo *cip)
  147. {
  148.     struct httpinfo *hip = cip->hip;
  149.     
  150.     if (strcasecmp(hip->method, "GET") == 0)
  151. return http_get(cip);
  152.     else if (strcasecmp(hip->method, "HEAD") == 0)
  153. return http_head(cip);
  154.     else if (strcasecmp(hip->method, "PUT") == 0)
  155. return http_put(cip);
  156.     else if (strcasecmp(hip->method, "POST") == 0)
  157. return http_post(cip);
  158.     else
  159. return -1;
  160. }