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

操作系统开发

开发平台:

DOS

  1. /*
  2.  * modem - more advanced terminal server
  3.  *       - allows multiple TELNETs in
  4.  */
  5. #include <dos.h>
  6. #include <stdio.h>
  7. #include <rtos.h>
  8. #include <string.h>
  9. #include <mem.h>
  10. #include <telnetd.h>
  11. #include <ftpd.h>
  12. #include <httpd.h>
  13. #include <smtpcli.h>
  14. #include <process.h>
  15. #include <inifile.h>
  16. #include <syslog.h>
  17. #include "webpart.h"
  18. #define MAXHTTPD 5
  19. #define MAXTELNETD 4
  20. static void (*old_init)(char *name, char *value);
  21. char *emailuserid = NULL;
  22. DWORD oursysloghost = 0;
  23. char *syslogname = NULL;
  24. DWORD snmptraphost = 0;
  25. char *snmptrapname = NULL;
  26. #define EMAILNOTIFY "email.notify"
  27. #define SYSLOGHOST "syslog.host"
  28. #define SNMPHOST "snmptrap.host"
  29. char *loginuserid = NULL;
  30. char *loginpassword = NULL;
  31. int inuse[ MAXTELNETD ];
  32. /********************************************************************/
  33. void init_vars(void)
  34. {
  35.     char *p;
  36.     int i;
  37.     p = GetIniString( "TCP.CFG", "settings", EMAILNOTIFY, "");
  38.     if ( *p ) {
  39.         emailuserid = p;
  40.         printf("Configured email userid to %s.rn", emailuserid );
  41.     } else {
  42.         emailuserid = NULL;
  43.         kfree( p );
  44.         printf("No email userid set.rn");
  45.     }
  46.     p = GetIniString( "TCP.CFG", "settings", SYSLOGHOST, "");
  47.     if ( *p ) {
  48.         syslogname = p;
  49.         printf("Configured syslogging to %s.rn", syslogname);
  50.         oursysloghost = resolve( syslogname );
  51.     } else {
  52.         oursysloghost = 0;
  53.         syslogname = NULL;
  54.         kfree( p );
  55.         printf("No syslogging configured.rn");
  56.     }
  57.     p = GetIniString( "TCP.CFG", "settings", SNMPHOST, "");
  58.     if ( *p ) {
  59.         snmptrapname = p;
  60.         printf("Configured syslogging to %s.rn", snmptrapname);
  61.         snmptraphost = resolve( snmptrapname );
  62.     } else {
  63.         snmptrapname = NULL;
  64.         snmptraphost = 0;
  65.         kfree( p );
  66.         printf("No SNMP trap host configured.rn");
  67.     }
  68.     p = GetIniString( "TCP.CFG","settings","userid","");
  69.     if ( *p ) {
  70.         loginuserid = p;
  71.         printf("Login permitted with userid: %srn", loginuserid );
  72.     } else {
  73.         kfree( p );
  74.         printf("No Web login userid specifiedrn");
  75.     }
  76.     p = GetIniString("TCP.CFG","settings","password","");
  77.     if ( *p ) {
  78.         loginpassword = p;
  79.         printf("Login permitted with password: %srn", loginpassword );
  80.     } else
  81.         kfree( p );
  82. }
  83. /********************************************************************/
  84. void teld_write_string( void *t, char *s )
  85. {
  86.     teld_write( t, s, strlen(s) );
  87. }
  88. /********************************************************************/
  89. /* telnet_server - each thread executes this
  90.  */
  91. void telnet_server( DWORD virtualport )
  92. {
  93. #define CBUFSIZ 128
  94.     BYTE ch;
  95.     BYTE buffer[ CBUFSIZ ];
  96.     teld_str *t;
  97.     int i;
  98.     do {
  99.         inuse[ virtualport ] = 0;
  100.         printf("Listenning... TELNET #%urn", virtualport);
  101.         t = teld_listen( 0 );
  102.         printf("connection arrived... TELNETD session #%urn", virtualport);
  103.         /* if syslog enabled, notify log of change */
  104.         if ( oursysloghost )
  105.             syslog( oursysloghost, LOG_DAEMON, LOG_ERR, "connection arrived");
  106.         inuse[ virtualport ] = 1;
  107.         teld_write_string( t, "DEMO TERMSERVrnCopyright (c) 1990, 1999 Erick Engelkern");
  108.         rt_sleep( 1000 );
  109.         teld_write_string( t, "press any key to exitrn");
  110.         i = 0;
  111.         do {
  112.             /* way to break out */
  113.             if ( kbhit() ) exit( 0 );
  114.             /* look for TELNET arriving chars */
  115.             ch = teld_getc( t );
  116.             if ( ch == 255 ) break;             /* end of connection */
  117.             if ( ch != 0 ) {
  118.                 teld_write_string( t, "rnuser pressed a key, session ending");
  119.                 break;
  120.             }
  121.             rt_sleep( 1000 );
  122.             sprintf( buffer, "%urn", i++ );
  123.             teld_write_string( t, buffer);
  124.         } while ( 1 );
  125.         teld_close( t );
  126.         printf("Connection closed... Telnet #%urn", virtualport);
  127.         /* if syslog enabled, notify log of change */
  128.         if ( oursysloghost )
  129.             syslog( oursysloghost, LOG_DAEMON, LOG_ERR, "connection closed");
  130.     } while ( 1 );
  131. }
  132. /********************************************************************/
  133. /* main - setup everything then wait for a keystroke
  134.  */
  135. #pragma argsused
  136. void main(int argc, char **argv )
  137. {
  138.     int temp;
  139.     DWORD dummy;
  140.     rt_init( 100 );
  141.     puts("TERMSERV 1.1rn");
  142.     puts("Copyright (c) 1990, 1999 Erick Engelkern");
  143.     dbug_init();
  144.     sock_init();
  145.     init_vars();
  146.     kdebug = 1;
  147.     puts("Press any key to exitrn");
  148.     rt_newthread( ftpdthread, 1,2048, 0, "ftpd" );
  149.     for ( temp = 1 ; temp < MAXTELNETD ; ++temp ) {
  150.         rt_newthread( &telnet_server, temp, 4096, 0, "telnet thread");
  151.     }
  152.     rt_newthread( collector, 1,2048, 0, "collector" );
  153.     for ( temp = 0 ; temp < MAXHTTPD; ++temp )
  154.         rt_newthread( httpdthread, (DWORD)&user_proc, 2048, 0, "httpd worker" );
  155.     if ( emailuserid != NULL ) {
  156.         printf("Sending Email notification to %srn", emailuserid );
  157.         smtp_client( 0, "thisbox", emailuserid, "AUTOSEND: TermServer restarted",
  158.             "The terminal server has restarted");
  159.     }
  160.     /* if syslog enabled, notify log of change */
  161.     if ( oursysloghost )
  162.         syslog( oursysloghost, LOG_DAEMON, LOG_ERR, "termserver started");
  163.     while ( 1 ) {
  164.         if ( kbhit() ) break;
  165.         rt_sleep( 250 );
  166.     }
  167. }