143 lines
3.6 KiB
Plaintext
143 lines
3.6 KiB
Plaintext
|
{
|
||
|
$Project$
|
||
|
$Workfile$
|
||
|
$Revision$
|
||
|
$DateUTC$
|
||
|
$Id$
|
||
|
|
||
|
This file is part of the Indy (Internet Direct) project, and is offered
|
||
|
under the dual-licensing agreement described on the Indy website.
|
||
|
(http://www.indyproject.org/)
|
||
|
|
||
|
Copyright:
|
||
|
(c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
|
||
|
}
|
||
|
{
|
||
|
$Log$
|
||
|
}
|
||
|
{
|
||
|
Rev 1.8 2/10/2005 2:24:42 PM JPMugaas
|
||
|
Minor Restructures for some new UnixTime Service components.
|
||
|
|
||
|
Rev 1.7 12/2/2004 4:24:00 PM JPMugaas
|
||
|
Adjusted for changes in Core.
|
||
|
|
||
|
Rev 1.6 2004.02.03 5:44:34 PM czhower
|
||
|
Name changes
|
||
|
|
||
|
Rev 1.5 1/21/2004 4:20:58 PM JPMugaas
|
||
|
InitComponent
|
||
|
|
||
|
Rev 1.4 2003.10.12 6:36:44 PM czhower
|
||
|
Now compiles.
|
||
|
|
||
|
Rev 1.3 2/24/2003 10:37:04 PM JPMugaas
|
||
|
Should compile. TODO: Figure out what to do with TIdTime and the timeout
|
||
|
feature.
|
||
|
|
||
|
Rev 1.2 1/17/2003 07:11:08 PM JPMugaas
|
||
|
Now compiles under new framework.
|
||
|
|
||
|
Rev 1.1 1/8/2003 05:54:00 PM JPMugaas
|
||
|
Switched stuff to IdContext.
|
||
|
|
||
|
Rev 1.0 11/13/2002 08:03:20 AM JPMugaas
|
||
|
}
|
||
|
|
||
|
unit IdTimeServer;
|
||
|
|
||
|
interface
|
||
|
{$i IdCompilerDefines.inc}
|
||
|
|
||
|
{
|
||
|
2000-3-May J. Peter Mugaas
|
||
|
-Added BaseDate to the date the calculations are based on can be
|
||
|
adjusted to work after the year 2035
|
||
|
2000-30-April J. Peter Mugaas
|
||
|
-Adjusted the formula for the integer so that the Time is now
|
||
|
always based on Universal Time (also known as Greenwhich Mean
|
||
|
-Time Replaced the old forumala used to calculate the time with
|
||
|
a new one suggested by Jim Gunkel. This forumala is more
|
||
|
accurate than the old one.
|
||
|
2000-24-April J. Peter Mugaaas
|
||
|
-This now uses the Internet Byte order functions
|
||
|
2000-22-Apr J Peter Mugass
|
||
|
-Ported to Indy
|
||
|
-Fixed a problem where the server was not returning anything
|
||
|
2000-13-Jan MTL
|
||
|
-Moved to new Palette Scheme (Winshoes Servers)
|
||
|
1999-13-Apr
|
||
|
-Final Version
|
||
|
|
||
|
Original Author: Ozz Nixon
|
||
|
-Based on RFC 868
|
||
|
}
|
||
|
|
||
|
uses
|
||
|
{$IFDEF WORKAROUND_INLINE_CONSTRUCTORS}
|
||
|
Classes,
|
||
|
{$ENDIF}
|
||
|
IdAssignedNumbers,
|
||
|
IdContext,
|
||
|
IdCustomTCPServer;
|
||
|
|
||
|
Type
|
||
|
TIdCustomTimeServer = class(TIdCustomTCPServer)
|
||
|
protected
|
||
|
FBaseDate : TDateTime;
|
||
|
//
|
||
|
function DoExecute(AContext: TIdContext): Boolean; override;
|
||
|
procedure InitComponent; override;
|
||
|
{$IFDEF WORKAROUND_INLINE_CONSTRUCTORS}
|
||
|
public
|
||
|
constructor Create(AOwner: TComponent); reintroduce; overload;
|
||
|
{$ENDIF}
|
||
|
published
|
||
|
end;
|
||
|
|
||
|
TIdTimeServer = class(TIdCustomTimeServer)
|
||
|
published
|
||
|
property DefaultPort default IdPORT_TIME;
|
||
|
{This property is used to set the Date the Time server bases it's
|
||
|
calculations from. If both the server and client are based from the same
|
||
|
date which is higher than the original date, you can extend it beyond the
|
||
|
year 2035}
|
||
|
property BaseDate : TDateTime read FBaseDate write FBaseDate;
|
||
|
|
||
|
end;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
uses
|
||
|
{$IFDEF USE_VCL_POSIX}
|
||
|
Posix.Time,
|
||
|
{$ENDIF}
|
||
|
IdGlobal, //here to facilitate inlining
|
||
|
IdGlobalProtocols,
|
||
|
SysUtils;
|
||
|
|
||
|
{$IFDEF WORKAROUND_INLINE_CONSTRUCTORS}
|
||
|
constructor TIdCustomTimeServer.Create(AOwner: TComponent);
|
||
|
begin
|
||
|
inherited Create(AOwner);
|
||
|
end;
|
||
|
{$ENDIF}
|
||
|
|
||
|
procedure TIdCustomTimeServer.InitComponent;
|
||
|
begin
|
||
|
inherited;
|
||
|
DefaultPort := IdPORT_TIME;
|
||
|
{This indicates that the default date is Jan 1, 1900 which was specified
|
||
|
by RFC 868.}
|
||
|
FBaseDate := TIME_BASEDATE;
|
||
|
end;
|
||
|
|
||
|
function TIdCustomTimeServer.DoExecute(AContext: TIdContext): Boolean;
|
||
|
begin
|
||
|
Result := true;
|
||
|
AContext.Connection.IOHandler.Write(UInt32(Trunc(Extended(Now + TimeZoneBias - Int(FBaseDate)) * 24 * 60 * 60)));
|
||
|
AContext.Connection.Disconnect;
|
||
|
end;
|
||
|
|
||
|
end.
|