- Use the Wine spooler service as the service entry template as I was
[reactos.git] / rosapps / applications / sysutils / telnetd / telnetd.c
index a5c365b..f8058d0 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * File: TelnetD.c
- *
  * Abstract: a simple telnet 'daemon' for Windows hosts.
  *
  * Compiled & run successfully using MSVC 5.0 under Windows95 (requires 
  * TODO: 
  * - access control
  * - will/won't handshake
- * - (run as) Windows NT service
+ * - Unify Debugging output and return StatusCodes
  */
 
 #include <stdio.h> 
-#include <windows.h>  
-
-/*
-** macro definitions
-*/
-#define TELNET_PORT      (23)
-
-#define BUFSIZE        (4096)  
-#define USERID_SIZE      (64)
-#define CTRLC             (3)
-#define BS                (8)
-#define CR               (13)
-#define LF               (10)
-#define DEL             (127)
-
-#define IAC "\xff"
-#define DONT "\xfe"
-#define WONT "\xfc"
-#define WILL "\xfb"
-#define DO "\xfd"
-#define SB "\xfa"
-#define SE "\xf0"
-#define ECHO "\x01"
-#define SUPPRESS_GO_AHEAD "\x03"
-#define TERMINAL_TYPE "\x18"
-#define NAWS "\x1f"
-#define LINEMODE "\x22"
-#define NEWENVIRON "\x27"
-#define MODE "\x01"
-
-
-#define HANDSHAKE_TIMEOUT (3)
-
-/*
-** types
-*/
+#include <windows.h>
 
-typedef struct client_s
-{
-  char     userID[USERID_SIZE];
-  int      socket;
-  BOOLEAN  bTerminate;
-  BOOLEAN  bReadFromPipe;
-  BOOLEAN  bWriteToPipe;
-  HANDLE   hProcess;
-  DWORD    dwProcessId;
-  HANDLE   hChildStdinWr;   
-  HANDLE   hChildStdoutRd;
-} client_t;
-
-typedef enum
-{
-  NoEcho = 0,
-  Echo = 1,
-  Password = 2
-} EchoMode;
+#include "telnetd.h"
 
-/*
-** Local data
-*/
+/* Local data */
 
 static BOOLEAN bShutdown = 0;
 static BOOLEAN bSocketInterfaceInitialised = 0;
 
 static int sock;
 
-/*
-** Forward function declarations
-*/
-static BOOL WINAPI Cleanup(DWORD dwControlType);
-static void WaitForConnect(void);
-static BOOLEAN StartSocketInterface(void);
-static void CreateSocket(void);
-static void UserLogin(int client_socket);
-static DWORD WINAPI UserLoginThread(LPVOID);
-static int DoTelnetHandshake(int sock);
-static int ReceiveLine(int sock, char *buffer, int len, EchoMode echo);
-static void RunShell(client_t *client); 
-//static BOOL CreateChildProcess(const char *); 
-static DWORD WINAPI MonitorChildThread(LPVOID);
-static DWORD WINAPI WriteToPipeThread(LPVOID); 
-static DWORD WINAPI ReadFromPipeThread(LPVOID); 
-static void TerminateShell(client_t *client);
-static VOID ErrorExit(LPTSTR); 
-
-
-/*
-** main
-*/
-DWORD telnetd_main() 
+/* In the future, some options might be passed here to handle
+ * authentication options in the registry or command line
+ * options passed to the service
+ *
+ * Once you are ready to turn on the service
+ * rename this function
+ * int kickoff_telnetd(void)
+ */
+int main(int argc, char **argv)
 {
   SetConsoleCtrlHandler(Cleanup, 1);
 
@@ -127,9 +55,7 @@ DWORD telnetd_main()
   return 0;
 }
 
-/*
-** Cleanup
-*/
+/* Cleanup */
 static BOOL WINAPI Cleanup(DWORD dwControlType)
 {
   if (bSocketInterfaceInitialised) {
@@ -139,9 +65,7 @@ static BOOL WINAPI Cleanup(DWORD dwControlType)
   return 0;
 }
 
-/*
-** StartSocketInterface
-*/
+/* StartSocketInterface */
 static BOOLEAN StartSocketInterface(void)
 {
   WORD    wVersionRequested;