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

操作系统开发

开发平台:

DOS

  1. /*
  2.  * javaserv.c web server with Server Side Includes to generate
  3.  *                     dynamic content, and a Java client side
  4.  *                     chart program to display the results
  5.  *                     See the files in .web
  6.  *
  7.  */
  8. #include <stdlib.h>
  9. #include <rtos.h>
  10. #include <net.h>
  11. #include <stdio.h>
  12. #include <ctype.h>
  13. #include <string.h>
  14. #include <time.h>
  15. #include <httpd.h>
  16. #include <mem.h>
  17. void RandValue( tcp_Socket *s, stringlist *unused )
  18. {
  19.     char buffer[64];
  20.     sprintf( buffer, "%lu", (rand() * 25L) / RAND_MAX );
  21.     sock_write( s, buffer, strlen( buffer ) );
  22. }
  23. static ssi_type ssi_list[] =
  24.   { { "RandValue", RandValue },
  25.     { NULL, NULL }
  26.     };
  27. /***********************************************************************
  28.  * - the web server calls this proc for each web request               *
  29.  * - it is called in the context of *one* of the HTTPD threads,        *
  30.  *   though which is not known or important                            *
  31.  * - multiple threads may be in the same proc at the same time         *
  32.  ***********************************************************************/
  33. void user_proc( tcp_Socket *s, char *cmd, char *file, char *ext,
  34.     stringlist *cookies )
  35. {
  36.     /* prepare output */
  37.     
  38.     if ( !stricmp( file, "/" )) {
  39.         sock_puts( s, "Content-Type: text/html");
  40.         http_shtml( s, "web", "index","sht", ssi_list, cookies );
  41.     } else if ( !stricmp( ext, "sht" )) {
  42.         sock_puts( s, "Content-Type: text/html");
  43.         http_shtml( s, "web", file, ext, ssi_list, cookies );
  44.     } else {
  45.         sock_puts( s, "Content-Type: application/octet-streamrn");
  46.         http_dump( s, "web", file, ext );
  47.     }
  48. }
  49. main()
  50. {
  51.     int i;
  52.     randomize();
  53.     kdebug = 1;
  54.     rt_init(100);
  55.     sock_init();            /* initialize network */
  56.     cputs("starting...rn");
  57. #define MAXHTTPD 5
  58.     for ( i = 0 ; i < MAXHTTPD; ++i )
  59.         rt_newthread( httpdthread, (DWORD)&user_proc, 4096, 0, "httpd worker" );
  60.     do {
  61.         /* nothing */
  62.         rt_yield();
  63.     } while ( 1 );
  64. }