| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- {
- $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.6 7/21/04 3:14:04 PM RLebeau
- Removed local Buffer variable from TIdMappedPortUDP.DoUDPRead(), not needed
- Rev 1.5 2004.02.03 5:44:00 PM czhower
- Name changes
- Rev 1.4 2/2/2004 4:20:30 PM JPMugaas
- Removed warning from Delphi 8. It now should compile in DotNET.
- Rev 1.3 1/21/2004 3:11:34 PM JPMugaas
- InitComponent
- Rev 1.2 10/25/2003 06:52:14 AM JPMugaas
- Updated for new API changes and tried to restore some functionality.
- Rev 1.1 2003.10.24 10:38:28 AM czhower
- UDP Server todos
- Rev 1.0 11/13/2002 07:56:46 AM JPMugaas
- }
- unit IdMappedPortUDP;
- interface
- {$i IdCompilerDefines.inc}
- {
- - Syncronized with Indy standards by Gregor Ibic
- - Original DNS mapped port by Gregor Ibic
- }
- uses
- Classes,
- IdGlobal,
- IdUDPServer,
- IdSocketHandle,
- IdGlobalProtocols;
- type
- TIdMappedPortUDP = class(TIdUDPServer)
- protected
- FMappedPort: TIdPort;
- FMappedHost: String;
- FOnRequest: TNotifyEvent;
- //
- procedure DoRequestNotify; virtual;
- procedure InitComponent; override;
- procedure DoUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); override;
- published
- property MappedHost: string read FMappedHost write FMappedHost;
- property MappedPort: TIdPort read FMappedPort write FMappedPort;
- property OnRequest: TNotifyEvent read FOnRequest write FOnRequest;
- end;
- implementation
- uses
- IdAssignedNumbers,
- IdUDPClient, SysUtils;
- procedure TIdMappedPortUDP.InitComponent;
- begin
- inherited InitComponent;
- DefaultPort := IdPORT_DOMAIN;
- end;
- procedure TIdMappedPortUDP.DoRequestNotify;
- begin
- if Assigned(OnRequest) then begin
- OnRequest(Self);
- end;
- end;
- procedure TIdMappedPortUDP.DoUDPRead(AThread: TIdUDPListenerThread;
- const AData: TIdBytes; ABinding: TIdSocketHandle);
- var
- LClient: TIdUDPClient;
- LData: TIdBytes;
- i: Integer;
- begin
- inherited DoUDPRead(AThread, AData, ABinding);
- DoRequestNotify;
- LClient := TIdUDPClient.Create(nil);
- try
- LClient.Host := FMappedHost;
- LClient.Port := FMappedPort;
- LClient.SendBuffer(AData);
- SetLength(LData, LClient.BufferSize);
- i := LClient.ReceiveBuffer(LData);
- if i > 0 then begin
- SetLength(LData, i);
- ABinding.SendTo(ABinding.PeerIP, ABinding.PeerPort, LData, 0, i, ABinding.IPVersion);
- end;
- finally
- FreeAndNil(LClient);
- end;
- end;
- end.
|