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

操作系统开发

开发平台:

DOS

  1. /* This example show a CGI script in use
  2.  *
  3.  * Includes SMTP client feature: change main title by mailing new subject
  4.  * line as mail subject, to update@thismachine
  5.  */
  6. #include <rtos.h>
  7. #include <net.h>
  8. #include <stdio.h>
  9. #include <time.h>
  10. #include <string.h>
  11. #include <graph.h>
  12. #include <smtpcli.h>
  13. #include <ftpd.h>
  14. #include <httpd.h>
  15. #include <smtpd.h>
  16. #include <strlst.h>
  17. crit_x *dos;
  18. void web_index( tcp_Socket *s )
  19. {
  20.     FILE *f;
  21.     char buf[128];
  22.     sock_puts(s, "Content-Type: text/htmlrn");
  23.     cs_enter( dos );
  24.     f = fopen( "email.htm" , "rt" );
  25.     if ( f != NULL ) {
  26.         while ( fgets( buf, sizeof( buf ), f ) != NULL ) {
  27.             cs_exit( dos );
  28.             sock_puts( s, buf );
  29.             cs_enter( dos );
  30.         }
  31.         fclose( f );
  32.     }
  33.     cs_exit( dos );
  34. }
  35. void web_email( tcp_Socket *s )
  36. {
  37.     stringlist *sl;
  38.     char *p, *q;
  39.     void *x;
  40.     DWORD host = 0;
  41.     char *destuser = NULL;
  42.     int result;
  43.     sock_puts(s, "Content-Type: text/htmlrn");
  44.     sl = cgi_getstrings( s );
  45.     if ( (p = strlst_findfirst( sl, "RELAY", &x, &q )) != NULL )
  46.         host = resolve( q ) ;
  47.     if ( (p = strlst_findfirst( sl, "DESTUSER", &x, &q )) != NULL )
  48.         destuser = q;
  49.     if ( host == 0 )
  50.         sock_puts( s, "Needs a valid mail relay host!");
  51.     else if ( destuser == NULL )
  52.         sock_puts( s, "Missing destination Email userid");
  53.     else {
  54.         result = smtp_client( host, "automail", destuser, "test",
  55.             "This is a test message");
  56.         cprintf("smtp result was: %srn", result == 0 ? "success":"failure");
  57.         sock_puts( s, "result = ");
  58.         sock_puts( s, (result==0) ? "success" : "failure");
  59.     }
  60.     cgi_freestrings( sl );
  61. }
  62. /*
  63.  * - the web server calls this proc for each web request
  64.  * - it is called in the context of *one* of the HTTPD threads,
  65.  *   though which is not known or important
  66.  * - multiple threads may be in the same proc at the same time
  67.  */
  68. void user_proc( tcp_Socket *s, char *cmd, char *file, char *ext )
  69. {
  70.     if ( !stricmp( file, "/" )) web_index( s );
  71.     if ( !stricmp( file, "/email" )) web_email( s );
  72. }
  73. main()
  74. {
  75.     int i;
  76.     kdebug = 1;
  77.     rt_init(100);
  78.     dos = cs_alloc();
  79.     kpreemptive = 1;        /* enable pre-emptive multithreading */
  80.     sock_init();            /* initialize network */
  81.     cputs("starting...rn");
  82.     rt_newthread( ftpdthread, 1,2048, 0, "ftpd" );
  83. #define MAXHTTPD 5
  84.     for ( i = 0 ; i < MAXHTTPD; ++i )
  85.         rt_newthread( httpdthread, (DWORD)&user_proc, 8192, 0, "httpd worker" );
  86.     do {
  87.         /* nothing */
  88.         rt_yield();
  89.     } while ( 1 );
  90. }