SHTTP_D.C
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:2k
源码类别:

操作系统开发

开发平台:

DOS

  1. /*
  2.  * http_d.c web server with Server Side Includes to generate
  3.  *                     dynamic content, and a cookie example
  4.  */
  5. #include <rtos.h>
  6. #include <net.h>
  7. #include <stdio.h>
  8. #include <ctype.h>
  9. #include <string.h>
  10. #include <time.h>
  11. #include <httpd.h>
  12. #include <mem.h>
  13. void ShowCoreLeft( tcp_Socket *s, stringlist *unused )
  14. {
  15.     char buffer[64];
  16.     sprintf( buffer, "%lu", coreleft() );
  17.     sock_puts( s, buffer );
  18. }
  19. void ShowTime( tcp_Socket *s, stringlist *unused )
  20. {
  21.     time_t now;
  22.     char buffer[ 128 ];
  23.     dos_enter();
  24.     time( & now );
  25.     strcpy( buffer, ctime( &now ));
  26.     dos_exit();
  27.     sock_puts( s, buffer );
  28. }
  29. void ShowCookie( tcp_Socket *s, stringlist *cookies )
  30. {
  31.     char *p;
  32.     void *x;
  33.     p = strlst_findfirst( cookies, "ourcookie", &x, NULL );
  34.     sock_puts( s, p );
  35. }
  36. static ssi_type ssi_list[] =
  37.   { { "coreleft", ShowCoreLeft },
  38.     { "time",     ShowTime },
  39.     { "showcookie",ShowCookie },
  40.     { NULL, NULL }
  41.     };
  42. /***********************************************************************
  43.  * - the web server calls this proc for each web request               *
  44.  * - it is called in the context of *one* of the HTTPD threads,        *
  45.  *   though which is not known or important                            *
  46.  * - multiple threads may be in the same proc at the same time         *
  47.  ***********************************************************************/
  48. void user_proc( tcp_Socket *s, char *cmd, char *file, char *ext,
  49.     stringlist *cookies )
  50. {
  51.     /* prepare output */
  52.     sock_puts( s, "Content-Type: text/html");
  53.     sock_puts( s, "Set-Cookie: ourcookie=flubrn");
  54.     
  55.     if ( !stricmp( file, "/" ))
  56.         http_shtml( s, "web", "index","sht", ssi_list, cookies );
  57.     else if ( !stricmp( ext, "sht" ))
  58.         http_shtml( s, "web", file, ext, ssi_list, cookies );
  59.     else
  60.         http_dump( s, "web", file, ext );
  61. }
  62. main()
  63. {
  64.     int i;
  65.     kdebug = 1;
  66.     rt_init(100);
  67.     kpreemptive = 1;        /* enable pre-emptive multithreading */
  68.     sock_init();            /* initialize network */
  69.     cputs("starting...rn");
  70. #define MAXHTTPD 5
  71.     for ( i = 0 ; i < MAXHTTPD; ++i )
  72.         rt_newthread( httpdthread, (DWORD)&user_proc, 4096, 0, "httpd worker" );
  73.     do {
  74.         /* nothing */
  75.         rt_yield();
  76.     } while ( 1 );
  77. }