xref: /reactos/base/services/tcpsvcs/daytime.c (revision 8540ab04)
1 /*
2  * PROJECT:     ReactOS simple TCP/IP services
3  * LICENSE:     GPL - See COPYING in the top level directory
4  * FILE:        base/services/tcpsvcs/daytime.c
5  * PURPOSE:     Sends the current date and time to the client
6  * COPYRIGHT:   Copyright 2005 - 2008 Ged Murphy <gedmurphy@reactos.org>
7  *
8  */
9 
10 #include "tcpsvcs.h"
11 
12 #include <time.h>
13 
14 static BOOL
15 SendTime(SOCKET sock, CHAR *time)
16 {
17     SIZE_T stringSize = strlen(time) + 1;
18     if (send(sock, time, stringSize, 0) == SOCKET_ERROR)
19     {
20         LogEvent(L"DayTime: Error sending data", WSAGetLastError(), 0, LOG_ERROR);
21         return FALSE;
22     }
23 
24     return TRUE;
25 }
26 
27 
28 DWORD WINAPI
29 DaytimeHandler(VOID* Sock_)
30 {
31     struct tm *localTime;
32     time_t aclock;
33     CHAR *pszTime;
34     DWORD retVal = 0;
35     SOCKET Sock = (SOCKET)Sock_;
36 
37     time(&aclock);
38     localTime = localtime(&aclock);
39     if (localTime)
40     {
41         pszTime = asctime(localTime);
42         if (!SendTime(Sock, pszTime))
43             retVal = 1;
44     }
45 
46     LogEvent(L"DayTime: Shutting connection down", 0, 0, LOG_FILE);
47     if (ShutdownConnection(Sock, FALSE))
48         LogEvent(L"DayTime: Connection is down", 0, 0, LOG_FILE);
49     else
50     {
51         LogEvent(L"DayTime: Connection shutdown failed", 0, 0, LOG_FILE);
52         retVal = 1;
53     }
54 
55     LogEvent(L"DayTime: Terminating thread", 0, 0, LOG_FILE);
56     ExitThread(retVal);
57 }
58