Sync with trunk r63743.
[reactos.git] / base / services / tcpsvcs / daytime.c
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 DWORD 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 }