| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- {
- $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 12/2/2004 4:23:54 PM JPMugaas
- Adjusted for changes in Core.
- Rev 1.7 2004.02.03 5:43:48 PM czhower
- Name changes
- Rev 1.6 1/21/2004 3:10:38 PM JPMugaas
- InitComponent
- Rev 1.5 3/27/2003 3:42:02 PM BGooijen
- Changed because some properties are moved to IOHandler
- Rev 1.4 2/24/2003 09:00:38 PM JPMugaas
- Rev 1.3 1/17/2003 07:10:32 PM JPMugaas
- Now compiles under new framework.
- Rev 1.2 1-1-2003 20:13:20 BGooijen
- Changed to support the new TIdContext class
- Rev 1.1 12/6/2002 04:35:16 PM JPMugaas
- Now compiles with new code.
- Rev 1.0 11/13/2002 07:54:44 AM JPMugaas
- 2001 - Feb 11 - J. Peter Mugaas
- Started this component.
- }
- unit IdIdentServer;
- {
- This is based on RFC 1413 - Identification Protocol
- Note that the default port is assigned to IdPORT_AUTH
- The reason for this is that the RFC specifies port 113 and the old protocol
- name was Authentication Server Protocol. This was renamed Ident to better
- reflect what it does.
- }
- interface
- {$i IdCompilerDefines.inc}
- uses
- IdAssignedNumbers, IdContext, IdCustomTCPServer, IdGlobal;
- const
- IdDefIdentQueryTimeOut = 60000; // 1 minute
- type
- TIdIdentQueryEvent = procedure (AContext:TIdContext; AServerPort, AClientPort : TIdPort) of object;
- TIdIdentErrorType = (ieInvalidPort, ieNoUser, ieHiddenUser, ieUnknownError);
- TIdIdentServer = class(TIdCustomTCPServer)
- protected
- FOnIdentQuery : TIdIdentQueryEvent;
- FQueryTimeOut : Integer;
- function DoExecute(AContext:TIdContext): boolean; override;
- procedure InitComponent; override;
- public
- Procedure ReplyError(AContext:TIdContext; AServerPort, AClientPort : TIdPort; AErr : TIdIdentErrorType);
- Procedure ReplyIdent(AContext:TIdContext; AServerPort, AClientPort : TIdPort; AOS, AUserName : String; const ACharset : String = ''); {Do not Localize}
- Procedure ReplyOther(AContext:TIdContext; AServerPort, AClientPort : TIdPort; AOther : String);
- published
- property QueryTimeOut : Integer read FQueryTimeOut write FQueryTimeOut default IdDefIdentQueryTimeOut;
- Property OnIdentQuery : TIdIdentQueryEvent read FOnIdentQuery write FOnIdentQuery;
- Property DefaultPort default IdPORT_AUTH;
- end;
- implementation
- uses
- SysUtils;
- { TIdIdentServer }
- procedure TIdIdentServer.InitComponent;
- begin
- inherited;
- DefaultPort := IdPORT_AUTH;
- FQueryTimeOut := IdDefIdentQueryTimeOut;
- end;
- function TIdIdentServer.DoExecute(AContext:TIdContext): Boolean;
- var
- s : String;
- ServerPort, ClientPort : TIdPort;
- begin
- Result := True;
- s := AContext.Connection.IOHandler.ReadLn('', FQueryTimeOut); {Do not Localize}
- if not AContext.Connection.IOHandler.ReadLnTimedOut then begin
- ServerPort := IndyStrToInt(Fetch(s,',')); {Do not Localize}
- ClientPort := IndyStrToInt(s);
- if Assigned(FOnIdentQuery) then begin
- FOnIdentQuery(AContext, ServerPort, ClientPort);
- Exit;
- end;
- ReplyError(AContext, ServerPort, ClientPort, ieUnknownError);
- end;
- AContext.Connection.Disconnect;
- end;
- procedure TIdIdentServer.ReplyError(AContext:TIdContext; AServerPort,
- AClientPort: TIdPort; AErr : TIdIdentErrorType);
- var s : String;
- begin
- s := IntToStr(AServerPort)+', '+IntToStr(AClientPort) + ' : ERROR : '; {Do not Localize}
- case AErr of
- ieInvalidPort : s := s + 'INVALID-PORT'; {Do not Localize}
- ieNoUser : s := s + 'NO-USER'; {Do not Localize}
- ieHiddenUser : s := s + 'HIDDEN-USER'; {Do not Localize}
- ieUnknownError : s := s + 'UNKNOWN-ERROR'; {Do not Localize}
- end;
- AContext.Connection.IOHandler.WriteLn(s);
- end;
- procedure TIdIdentServer.ReplyIdent(AContext:TIdContext; AServerPort,
- AClientPort: TIdPort; AOS, AUserName: String; const ACharset: String);
- var s : String;
- begin
- s := IntToStr(AServerPort)+', '+IntToStr(AClientPort) + ' : USERID : '; {Do not Localize}
- s := s + AOS;
- if Length(ACharset) > 0 then
- s := s + ','+ACharset; {Do not Localize}
- s := s + ' : '+AUserName; {Do not Localize}
- AContext.Connection.IOHandler.WriteLn(s);
- end;
- procedure TIdIdentServer.ReplyOther(AContext:TIdContext; AServerPort,
- AClientPort: TIdPort; AOther: String);
- begin
- AContext.Connection.IOHandler.WriteLn(IntToStr(AServerPort)+', '+IntToStr(AClientPort) + ' : USERID : OTHER : '+AOther); {Do not Localize}
- end;
- end.
|