- Added daytime and quote of the day services
- Use universal header and remove needless seperate dirs
- Many bugfixes
- Added to build, not yet included in install as it's still in the early stages

Tested in WinXP using both Windows and Linux clients. Not yet tried in ROS,
Modified: trunk/reactos/apps/utils/net/directory.xml
Deleted: trunk/reactos/apps/utils/net/tcpsvcs/chargen/
Added: trunk/reactos/apps/utils/net/tcpsvcs/chargen.c
Deleted: trunk/reactos/apps/utils/net/tcpsvcs/daytime/
Added: trunk/reactos/apps/utils/net/tcpsvcs/daytime.c
Deleted: trunk/reactos/apps/utils/net/tcpsvcs/discard/
Deleted: trunk/reactos/apps/utils/net/tcpsvcs/echo/
Added: trunk/reactos/apps/utils/net/tcpsvcs/echo.c
Deleted: trunk/reactos/apps/utils/net/tcpsvcs/qotd/
Added: trunk/reactos/apps/utils/net/tcpsvcs/qotd.c
Deleted: trunk/reactos/apps/utils/net/tcpsvcs/skelserver/
Added: trunk/reactos/apps/utils/net/tcpsvcs/skelserver.c
Modified: trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.c
Modified: trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.h
Added: trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.rc
Modified: trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.xml

Modified: trunk/reactos/apps/utils/net/directory.xml
--- trunk/reactos/apps/utils/net/directory.xml	2005-09-28 21:43:54 UTC (rev 18141)
+++ trunk/reactos/apps/utils/net/directory.xml	2005-09-28 22:33:55 UTC (rev 18142)
@@ -1,30 +1,33 @@
 <directory name="arp">
-	<xi:include href="arp/arp.xml" />
+    <xi:include href="arp/arp.xml" />
 </directory>
 <directory name="finger">
-	<xi:include href="finger/finger.xml" />
+    <xi:include href="finger/finger.xml" />
 </directory>
 <directory name="ftp">
-	<xi:include href="ftp/ftp.xml" />
+    <xi:include href="ftp/ftp.xml" />
 </directory>
 <directory name="ipconfig">
-	<xi:include href="ipconfig/ipconfig.xml" />
+    <xi:include href="ipconfig/ipconfig.xml" />
 </directory>
 <directory name="netstat">
-	<xi:include href="netstat/netstat.xml" />
+    <xi:include href="netstat/netstat.xml" />
 </directory>
 <directory name="ping">
-	<xi:include href="ping/ping.xml" />
+    <xi:include href="ping/ping.xml" />
 </directory>
 <directory name="route">
-	<xi:include href="route/route.xml" />
+    <xi:include href="route/route.xml" />
 </directory>
+<directory name="tcpsvcs">
+    <xi:include href="tcpsvcs/tcpsvcs.xml" />
+</directory>
 <directory name="telnet">
-	<xi:include href="telnet/telnet.xml" />
+    <xi:include href="telnet/telnet.xml" />
 </directory>
 <directory name="tracert">
-	<xi:include href="tracert/tracert.xml" />
+    <xi:include href="tracert/tracert.xml" />
 </directory>
 <directory name="whois">
-	<xi:include href="whois/whois.xml" />
+    <xi:include href="whois/whois.xml" />
 </directory>

Added: trunk/reactos/apps/utils/net/tcpsvcs/chargen.c
--- trunk/reactos/apps/utils/net/tcpsvcs/chargen.c	2005-09-28 21:43:54 UTC (rev 18141)
+++ trunk/reactos/apps/utils/net/tcpsvcs/chargen.c	2005-09-28 22:33:55 UTC (rev 18142)
@@ -0,0 +1,111 @@
+#include <stdio.h>
+#include <winsock2.h>
+#include <tchar.h>
+#include "tcpsvcs.h"
+
+DWORD WINAPI ChargenHandler(VOID* Sock_)
+{
+    DWORD Retval = 0;
+    SOCKET Sock = (SOCKET)Sock_;
+
+    if (!GenerateChars(Sock)) {
+        _tprintf(_T("Char generation failed\n"));
+        Retval = 3;
+    }
+
+    _tprintf(_T("Shutting connection down...\n"));
+    if (ShutdownConnection(Sock, FALSE)) {
+        _tprintf(_T("Connection is down.\n"));
+    }
+    else
+    {
+        _tprintf(_T("Connection shutdown failed\n"));
+        Retval = 3;
+    }
+    _tprintf(_T("Terminating thread\n"));
+    ExitThread(0);
+
+    return Retval;
+}
+
+
+BOOL GenerateChars(SOCKET Sock)
+{
+    int i,
+        charIndex, /* internal loop */
+        loopIndex; /* line loop */
+    char ring[END-START];
+    char *endring;
+    BOOL bLoop = TRUE;
+
+    /* fill ring with printable characters */
+    for (charIndex=0, i=START; i<=END; charIndex++, i++)
+        ring[charIndex] = i;
+    /* establish the end character in the ring */
+    endring = &ring[charIndex];
+
+    /* where we will start output from */
+    loopIndex = 0;
+
+    while (bLoop)
+    {
+        /* if the loop index is equal to number of chars previously
+         * printed, start the loop from the beginning */
+        if (loopIndex == END-START)
+            loopIndex = 0;
+
+        /* start printing from char controled by loopIndex */
+        charIndex = loopIndex;
+        for (i=0; i<LINESIZ; i++)
+        {
+            /* FIXME: Should send lines instead of chars to improve efficiency
+             * TCP will wait until it fills a packet anway before putting on
+             * the wire, so it's pointless to keep polling send */
+            if (!SendChar(Sock, ring[charIndex]))
+            {
+                return FALSE;
+            }
+            /* if current char equal last char, reset */
+            if (ring[charIndex] == *endring)
+                charIndex = 0;
+            else
+                charIndex++;
+        }
+
+        if (bLoop)
+            if ((!SendChar(Sock, L'\r')) ||   (!SendChar(Sock, L'\n')))
+                return FALSE;
+
+        /* increment loop index to start printing from next char in ring */
+        loopIndex++;
+    }
+
+    return TRUE;
+}
+
+BOOL SendChar(SOCKET Sock, TCHAR c)
+{
+    INT RetVal;
+    INT SentBytes;
+
+    SentBytes = 0;
+    RetVal = send(Sock, &c, sizeof(TCHAR), 0);
+    /*FIXME: need to establish if peer closes connection,
+             not just report a socket error */
+    if (RetVal > 0)
+    {
+        SentBytes += RetVal;
+        return TRUE;
+    }
+    else if (RetVal == SOCKET_ERROR)
+    {
+        _tprintf(("Socket error\n"));
+        return FALSE;
+    }
+    else
+        _tprintf(("unknown error\n"));
+        //WSAGetLastError()
+
+    _tprintf(("Connection closed by peer.\n"));
+    return TRUE;
+}
Property changes on: trunk/reactos/apps/utils/net/tcpsvcs/chargen.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/reactos/apps/utils/net/tcpsvcs/daytime.c
--- trunk/reactos/apps/utils/net/tcpsvcs/daytime.c	2005-09-28 21:43:54 UTC (rev 18141)
+++ trunk/reactos/apps/utils/net/tcpsvcs/daytime.c	2005-09-28 22:33:55 UTC (rev 18142)
@@ -0,0 +1,46 @@
+#include <stdio.h>
+#include <winsock2.h>
+#include <tchar.h>
+#include <time.h>
+#include "tcpsvcs.h"
+
+DWORD WINAPI DaytimeHandler(VOID* Sock_)
+{
+    struct tm *newtime;
+    time_t aclock;
+    TCHAR *pszTime;
+    DWORD Retval = 0;
+    SOCKET Sock = (SOCKET)Sock_;
+    
+    time(&aclock);
+    newtime = localtime(&aclock);
+    pszTime = _tasctime(newtime);
+    
+    SendTime(Sock, pszTime);
+
+    _tprintf(_T("Shutting connection down...\n"));
+    if (ShutdownConnection(Sock, FALSE))
+        _tprintf(_T("Connection is down.\n"));
+    else
+    {
+        _tprintf(_T("Connection shutdown failed\n"));
+        Retval = 3;
+    }
+    _tprintf(_T("Terminating thread\n"));
+    ExitThread(0);
+
+    return Retval;
+}
+
+
+BOOL SendTime(SOCKET Sock, TCHAR *time)
+{
+    INT StringSize = strlen(time);
+    INT RetVal = send(Sock, time, sizeof(TCHAR) * StringSize, 0);
+    
+    if (RetVal == SOCKET_ERROR)
+        return FALSE;
+
+    _tprintf(("Connection closed by peer.\n"));
+    return TRUE;
+}
Property changes on: trunk/reactos/apps/utils/net/tcpsvcs/daytime.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/reactos/apps/utils/net/tcpsvcs/echo.c
--- trunk/reactos/apps/utils/net/tcpsvcs/echo.c	2005-09-28 21:43:54 UTC (rev 18141)
+++ trunk/reactos/apps/utils/net/tcpsvcs/echo.c	2005-09-28 22:33:55 UTC (rev 18142)
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <winsock2.h>
+#include <tchar.h>
+#include "tcpsvcs.h"
+
+DWORD WINAPI EchoHandler(VOID* Sock_)
+{
+    DWORD Retval = 0;
+    SOCKET Sock = (SOCKET)Sock_;
+
+    if (!EchoIncomingPackets(Sock)) {
+        _tprintf(_T("Echo incoming packets failed\n"));
+        Retval = 3;
+    }
+
+    _tprintf(_T("Shutting connection down...\n"));
+    if (ShutdownConnection(Sock, TRUE)) {
+        _tprintf(_T("Connection is down.\n"));
+    }
+    else
+    {
+        _tprintf(_T("Connection shutdown failed\n"));
+        Retval = 3;
+    }
+    _tprintf(_T("Terminating thread\n"));
+    ExitThread(0);
+
+    return Retval;
+}
+
+
+
+BOOL EchoIncomingPackets(SOCKET Sock)
+{
+    TCHAR ReadBuffer[BUF];
+    INT Temp;
+    INT ReadBytes;
+    INT SentBytes;
+
+    do {
+        ReadBytes = recv(Sock, ReadBuffer, BUF, 0);
+        if (ReadBytes > 0) {
+            _tprintf(_T("Received %d bytes from client\n"), ReadBytes);
+
+            SentBytes = 0;
+            while (SentBytes < ReadBytes) {
+                Temp = send(Sock, ReadBuffer + SentBytes,
+                        ReadBytes - SentBytes, 0);
+                if (Temp > 0) {
+                    _tprintf(_T("Sent %d bytes back to client\n"), Temp);
+                    SentBytes += Temp;
+                }
+                else if (Temp == SOCKET_ERROR) {
+                    return FALSE;
+                }
+                else {
+                    /* Client closed connection before we could reply to
+                       all the data it sent, so quit early. */
+                    _tprintf(_T("Peer unexpectedly dropped connection!\n"));
+                    return FALSE;
+                }
+            }
+        }
+        else if (ReadBytes == SOCKET_ERROR) {
+            return FALSE;
+        }
+    } while (ReadBytes != 0);
+
+    _tprintf(("Connection closed by peer.\n"));
+    return TRUE;
+}
Property changes on: trunk/reactos/apps/utils/net/tcpsvcs/echo.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/reactos/apps/utils/net/tcpsvcs/qotd.c
--- trunk/reactos/apps/utils/net/tcpsvcs/qotd.c	2005-09-28 21:43:54 UTC (rev 18141)
+++ trunk/reactos/apps/utils/net/tcpsvcs/qotd.c	2005-09-28 22:33:55 UTC (rev 18142)
@@ -0,0 +1,56 @@
+#include <stdio.h>
+#include <winsock2.h>
+#include <tchar.h>
+#include <time.h>
+#include "tcpsvcs.h"
+
+//these need putting in an RC file.
+TCHAR Quotes[][MAX_QUOTE_BUF] = {
+    _T("\"I have a penchant for mischief, property damage, stalking and cheesecake, of course\" - kjk hyperion"),
+    _T("\"Wow! I fixed a setmenu bug.\" - jimtabor"),
+    _T("\"if the code is broken though, your free to call it ur own\" - Alex Ionescu"),
+    _T("\"i don't know about any bug; none exist; ReactOS is prefect\" - filip2307"),
+    _T("\"if you were kernel code, cutler would rewrite you.\" - Alex Ionescu"),
+    _T("\"Looks like Hartmut is cleaning out his WC. working copy, that is\" - WaxDragon")
+};
+
+DWORD WINAPI QotdHandler(VOID* Sock_)
+{
+    DWORD Retval = 0;
+    SOCKET Sock;
+    INT NumOfQuotes;
+
+    Sock = (SOCKET)Sock_;
+    NumOfQuotes = sizeof(Quotes) / MAX_QUOTE_BUF;
+
+    SendQuote(Sock, Quotes[1]);
+
+    _tprintf(_T("Shutting connection down...\n"));
+    if (ShutdownConnection(Sock, FALSE))
+        _tprintf(_T("Connection is down.\n"));
+    else
+    {
+        _tprintf(_T("Connection shutdown failed\n"));
+        Retval = 3;
+    }
+    _tprintf(_T("Terminating thread\n"));
+    ExitThread(0);
+
+    return Retval;
+}
+
+
+BOOL SendQuote(SOCKET Sock, TCHAR* Quote)
+{
+    INT StringSize;
+    INT RetVal;
+
+    StringSize = strlen(Quote);
+    RetVal = send(Sock, Quote, sizeof(TCHAR) * StringSize, 0);
+
+    if (RetVal == SOCKET_ERROR)
+        return FALSE;
+
+    _tprintf(("Connection closed by peer.\n"));
+    return TRUE;
+}
Property changes on: trunk/reactos/apps/utils/net/tcpsvcs/qotd.c
___________________________________________________________________
Name: svn:eol-style
   + native

Added: trunk/reactos/apps/utils/net/tcpsvcs/skelserver.c
--- trunk/reactos/apps/utils/net/tcpsvcs/skelserver.c	2005-09-28 21:43:54 UTC (rev 18141)
+++ trunk/reactos/apps/utils/net/tcpsvcs/skelserver.c	2005-09-28 22:33:55 UTC (rev 18142)
@@ -0,0 +1,125 @@
+#include <stdio.h>
+#include <winsock2.h>
+#include <tchar.h>
+#include "tcpsvcs.h"
+
+
+DWORD WINAPI StartServer(LPVOID lpParam)
+{
+    const TCHAR* HostIP = "127.0.0.1";
+    DWORD RetVal;
+    WSADATA wsaData;
+    PSERVICES pServices;
+
+    pServices = (PSERVICES)lpParam;
+
+    if ((RetVal = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
+    {
+        _tprintf(_T("WSAStartup() failed : %lu\n"), RetVal);
+        return -1;
+    }
+
+    SOCKET ListeningSocket = SetUpListener(HostIP, htons(pServices->Port));
+    if (ListeningSocket == INVALID_SOCKET)
+    {
+        _tprintf(_T("error setting up socket\n"));
+        return 3;
+    }
+
+    _tprintf(_T("Waiting for connections...\n"));
+    while (1)
+    {
+        AcceptConnections(ListeningSocket, pServices->Service);
+        printf("Acceptor restarting...\n");
+    }
+
+    /* won't see this yet as we kill the service */
+    _tprintf(_T("Detaching Winsock2...\n"));
+    WSACleanup();
+    return 0;
+}
+
+
+SOCKET SetUpListener(const char* ServAddr, int Port)
+{
+    SOCKET Sock;
+    SOCKADDR_IN Server;
+
+    Sock = socket(AF_INET, SOCK_STREAM, 0);
+    if (Sock != INVALID_SOCKET)
+    {
+        Server.sin_family = AF_INET;
+        Server.sin_addr.s_addr = htonl(INADDR_ANY);
+        Server.sin_port = Port;
+        if (bind(Sock, (SOCKADDR*)&Server, sizeof(SOCKADDR_IN)) != SOCKET_ERROR)
+        {
+            listen(Sock, SOMAXCONN);
+            return Sock;
+        }
+        else
+            printf("bind() failed\n");
+
+    }
+    return INVALID_SOCKET;
+}
+
+
+
+
+VOID AcceptConnections(SOCKET ListeningSocket, LPTHREAD_START_ROUTINE Service)
+{
+    SOCKADDR_IN Client;
+    SOCKET Sock;
+    INT nAddrSize = sizeof(Client);
+    DWORD ThreadID;
+
+    while (1)
+    {
+        Sock = accept(ListeningSocket, (SOCKADDR*)&Client, &nAddrSize);
+        if (Sock != INVALID_SOCKET)
+        {
+            _tprintf(_T("Accepted connection from %s:%d\n"),
+                inet_ntoa(Client.sin_addr), ntohs(Client.sin_port));
+            _tprintf(_T("About to create thread\n"));
+            CreateThread(0, 0, Service, (void*)Sock, 0, &ThreadID);
+        }
+        else
+        {
+            _tprintf(_T("accept() failed\n"));
+            return;
+        }
+    }
+}
+
+BOOL ShutdownConnection(SOCKET Sock, BOOL bRec)
+{
+    /* Disallow any further data sends.  This will tell the other side
+       that we want to go away now.  If we skip this step, we don't
+       shut the connection down nicely. */
+    if (shutdown(Sock, SD_SEND) == SOCKET_ERROR)
+    {
+        _tprintf(_T("Error in shutdown"));
+        return FALSE;
+    }
+
+      /* Receive any extra data still sitting on the socket.  After all
+         data is received, this call will block until the remote host
+         acknowledges the TCP control packet sent by the shutdown above.
+         Then we'll get a 0 back from recv, signalling that the remote
+         host has closed its side of the connection. */
+    if (bRec)
+    {
+        char ReadBuffer[BUF];
+        int NewBytes = recv(Sock, ReadBuffer, BUF, 0);
+        if (NewBytes == SOCKET_ERROR)
+            return FALSE;
+        else if (NewBytes != 0)
+            _tprintf(_T("FYI, received %d unexpected bytes during shutdown\n"), NewBytes);
+    }
+
+    /* Close the socket. */
+    if (closesocket(Sock) == SOCKET_ERROR)
+        return FALSE;
+
+    return TRUE;
+}
Property changes on: trunk/reactos/apps/utils/net/tcpsvcs/skelserver.c
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.c
--- trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.c	2005-09-28 21:43:54 UTC (rev 18141)
+++ trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.c	2005-09-28 22:33:55 UTC (rev 18142)
@@ -2,37 +2,49 @@
 #include <winsock2.h>
 #include <tchar.h>
 #include "tcpsvcs.h"
-#include "skelserver/skelserver.h"
-#include "echo/echo.h"
-#include "chargen/chargen.h"
 
+LPTHREAD_START_ROUTINE
+ServiceHandler[NUM_SERVICES] = {
+    EchoHandler,
+    ChargenHandler,
+    DaytimeHandler,
+    NULL,
+    QotdHandler
+};
+
+INT ServicePort[NUM_SERVICES] = {
+    ECHO_PORT,
+    CHARGEN_PORT,
+    DAYTIME_PORT,
+    DISCARD_PORT,
+    QOTD_PORT
+};
+
 int main(int argc, char *argv[])
 {
-    PMYDATA pData[MAX_THREADS];
-    DWORD dwThreadId[MAX_THREADS];
-    HANDLE hThread[MAX_THREADS];
+    PSERVICES pServices[NUM_SERVICES];
+    DWORD dwThreadId[NUM_SERVICES];
+    HANDLE hThread[NUM_SERVICES];
     INT i;
 
     /* Create MAX_THREADS worker threads. */
-    for( i=0; i<MAX_THREADS; i++ )
+    for( i=0; i<NUM_SERVICES; i++ )
     {
         /* Allocate memory for thread data. */
-        pData[i] = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MYDATA));
-
-        if( pData == NULL )
+        pServices[i] = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(SERVICES));
+        
+        if( pServices[i] == NULL )
             ExitProcess(2);
 
         /* Generate unique data for each thread. */
-        pData[0]->Port = ECHO_PORT;
-        pData[0]->Service = EchoHandler;
-        pData[1]->Port = CHARGEN_PORT;
-        pData[1]->Service = ChargenHandler;
+        pServices[i]->Service = ServiceHandler[i];
+        pServices[i]->Port = ServicePort[i];
 
         hThread[i] = CreateThread(
             NULL,              // default security attributes
             0,                 // use default stack size
             StartServer,       // thread function
-            pData[i],          // argument to thread function
+            pServices[i],      // argument to thread function
             0,                 // use default creation flags
             &dwThreadId[i]);   // returns the thread identifier
 
@@ -44,14 +56,13 @@
     }
 
     /* Wait until all threads have terminated. */
-    WaitForMultipleObjects(MAX_THREADS, hThread, TRUE, INFINITE);
+    WaitForMultipleObjects(NUM_SERVICES, hThread, TRUE, INFINITE);
 
     /* Close all thread handles upon completion. */
-    for(i=0; i<MAX_THREADS; i++)
+    for(i=0; i<NUM_SERVICES; i++)
     {
         CloseHandle(hThread[i]);
     }
 
     return 0;
 }
-

Modified: trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.h
--- trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.h	2005-09-28 21:43:54 UTC (rev 18141)
+++ trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.h	2005-09-28 22:33:55 UTC (rev 18142)
@@ -1,3 +1,4 @@
+/* default port numbers */
 #define ECHO_PORT 7
 #define CHARGEN_PORT 19
 #define DAYTIME_PORT 13
@@ -4,10 +5,49 @@
 #define DISCARD_PORT 9
 #define QOTD_PORT 17
 
-#define MAX_THREADS 2
+#define NUM_SERVICES 6
 #define BUF_SIZE 255
+#define BUF 1024
 
-typedef struct _MyData {
+/* RFC865 states no more than 512 chars per line */
+#define MAX_QUOTE_BUF 512
+
+/* printable ASCII's characters for chargen */
+#define START 32
+#define END 126
+
+/* number of chars to put on a line */
+#define LINESIZ 72
+
+/* data structure to pass to threads */
+typedef struct _Services {
     INT Port;
     LPTHREAD_START_ROUTINE Service;
-} MYDATA, *PMYDATA;
+} SERVICES, *PSERVICES;
+
+/* skelserver functions */
+DWORD WINAPI StartServer(LPVOID lpParam);
+SOCKET SetUpListener(const char* ServAddr, int Port);
+VOID AcceptConnections(SOCKET ListeningSocket, LPTHREAD_START_ROUTINE Service);
+BOOL EchoIncomingPackets(SOCKET sd);
+BOOL ShutdownConnection(SOCKET Sock, BOOL bRec);
+
+/* chargen functions */
+DWORD WINAPI ChargenHandler(VOID* Sock_);
+BOOL GenerateChars(SOCKET Sock);
+BOOL SendChar(SOCKET Sock, CHAR c);
+
+/* daytime functions */
+DWORD WINAPI DaytimeHandler(VOID* Sock_);
+BOOL SendTime(SOCKET Sock, TCHAR *time);
+
+/* echo functions */
+DWORD WINAPI EchoHandler(VOID* Sock_);
+BOOL EchoIncomingPackets(SOCKET Sock);
+
+/* discard functions */
+
+
+/* qotd functions */
+DWORD WINAPI QotdHandler(VOID* Sock_);
+BOOL SendQuote(SOCKET Sock, TCHAR* Quote);

Added: trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.rc
--- trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.rc	2005-09-28 21:43:54 UTC (rev 18141)
+++ trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.rc	2005-09-28 22:33:55 UTC (rev 18142)
@@ -0,0 +1,7 @@
+#include "resource.h"
+
+#define REACTOS_STR_FILE_DESCRIPTION	"ReactOS TCP/IP Services Application\0"
+#define REACTOS_STR_INTERNAL_NAME	"tcpsvcs\0"
+#define REACTOS_STR_ORIGINAL_FILENAME	"tcpsvcs.exe\0"
+#define REACTOS_STR_ORIGINAL_COPYRIGHT	"Ged Murphy (gedmurphy@gmail.com)\0"
+#include <reactos/version.rc>
Property changes on: trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.rc
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.xml
--- trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.xml	2005-09-28 21:43:54 UTC (rev 18141)
+++ trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.xml	2005-09-28 22:33:55 UTC (rev 18142)
@@ -1,13 +1,15 @@
-<module name="tcpsvcs" type="win32cui" installbase="system32" installname="tcpsvcs.exe">
-    <include base="arp">.</include>
-    <define name="__USE_W32API" />
-    <library>kernel32</library>
-    <library>iphlpapi</library>
-    <library>ws2_32</library>
-    <library>shlwapi</library>
-    <file>tcpsvcs.c</file>
-    <file>skelserver/skelserver.c</file>
-    <file>echo/echo.c</file>
-    <file>chargen/chargen.c</file>
-</module>
-
+<module name="tcpsvcs" type="win32cui" installbase="system32" installname="tcpsvcs.exe">
+    <include base="arp">.</include>
+    <define name="__USE_W32API" />
+    <library>kernel32</library>
+    <library>iphlpapi</library>
+    <library>ws2_32</library>
+    <library>shlwapi</library>
+    <file>tcpsvcs.c</file>
+    <file>skelserver.c</file>
+    <file>echo.c</file>
+    <file>chargen.c</file>
+    <file>daytime.c</file>
+    <file>qotd.c</file>
+</module>
+
Property changes on: trunk/reactos/apps/utils/net/tcpsvcs/tcpsvcs.xml
___________________________________________________________________
Name: svn:eol-style
   + native