constructor Create(AManager:TTransportManager; const AName:String);
|
|
destructor Destroy; override;
|
|
private
|
FNextIP6Id:Word;
|
|
FNextIP6Lock:TMutexHandle;
|
|
|
FFragments:TIP6Buffer;
|
|
|
FHosts:TNetworkList;
|
|
FServs:TNetworkList;
|
|
FProtos:TNetworkList;
|
|
FRoutes:TNetworkList;
|
|
FNetworks:TNetworkList;
|
|
FAddresses:TNetworkList;
|
|
|
FDefaultAddress:TIn6Addr;
|
|
FLoopbackAddress:TIn6Addr;
|
|
FBroadcastAddress:TIn6Addr;
|
|
FNameservers:TIP6Nameservers;
|
(Part of TNetworkList)
|
FNameserverLock:TMutexHandle;
|
|
|
FDefaultHopLimit:LongWord;
|
|
FAutoRelease:Boolean;
|
|
|
function PacketHandler(AHandle:THandle; ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean;
|
|
function FragmentHandler(ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean;
|
|
|
function CheckFragment(ABuffer:Pointer):Boolean;
|
|
|
function GetNextIP6Id(AIncrement:Boolean):Word;
|
|
|
function GetIP6Nameserver(ACount:LongWord):TIn6Addr;
|
|
|
function GetAdapterConfigType(const AName:String):Word;
|
|
function GetAdapterConfigAddress(const AName:String):TIn6Addr;
|
|
function GetAdapterConfigNetmask(const AName:String):TIn6Addr;
|
|
function GetAdapterConfigGateway(const AName:String):TIn6Addr;
|
|
function GetAdapterConfigServer(const AName:String):TIn6Addr;
|
|
protected
|
function FilterPacket(ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean; override;
|
|
function ForwardPacket(AAdapter:TTransportAdapter; ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean; override;
|
|
public
|
property Nameservers:TIP6Nameservers read FNameservers;
|
|
|
property DefaultHopLimit:LongWord read FDefaultHopLimit write FDefaultHopLimit;
|
|
|
property AutoRelease:Boolean read FAutoRelease write FAutoRelease;
|
|
|
function AddAdapter(AAdapter:TNetworkAdapter; AConfigType:Word; AAddress,ANetmask,AGateway,AServer:Pointer):Boolean; override;
|
|
function RemoveAdapter(AAdapter:TNetworkAdapter):Boolean; override;
|
|
|
function AddProtocol(AProtocol:Word; APacketHandler:TTransportPacketHandler; AControlHandler:TTransportControlHandler):THandle; override;
|
|
function RemoveProtocol(AHandle:THandle; AProtocol:Word):Boolean; override;
|
|
|
function AddFilter(AProtocol:Word; AFilterHandler:TTransportFilterHandler):THandle; override;
|
|
function RemoveFilter(AHandle:THandle; AProtocol:Word):Boolean; override;
|
|
|
function AddConfig(AConfigType:Word; AConfigAuto:Boolean; AConfigHandler:TTransportConfigHandler):THandle; override;
|
|
function RemoveConfig(AHandle:THandle; AConfigType:Word):Boolean; override;
|
|
|
function SendPacket(ASocket:TTransportSocket; ASource,ADest:Pointer; APacket:PPacketFragment; ASize,AFlags:Integer):Integer; override;
|
|
function SendControl(ASource,ADest:Pointer; AProtocol,ACommand,ACode:Word; AAddress,AData:Pointer; ASize:Integer):Boolean; override;
|
|
|
function GetSockOpt(ASocket:TTransportSocket; ALevel,AOptName:Integer; AOptValue:PChar; var AOptLength:Integer):Integer; override;
|
|
function SetSockOpt(ASocket:TTransportSocket; ALevel,AOptName:Integer; AOptValue:PChar; AOptLength:Integer):Integer; override;
|
|
|
function StartTransport:Boolean; override;
|
|
function StopTransport:Boolean; override;
|
|
function ProcessTransport:Boolean; override;
|
|
|
function BindTransport(AAdapter:TNetworkAdapter):Boolean; override;
|
|
function UnbindTransport(AAdapter:TNetworkAdapter):Boolean; override;
|
|
|
function AddNameserver(const AAddress:TIn6Addr):Boolean;
|
|
function RemoveNameserver(const AAddress:TIn6Addr):Boolean;
|
|
|
function GetHostByName(const AName:String; ALock:Boolean):TIP6HostEntry;
|
|
function GetHostByAddress(const AAddress:TIn6Addr; ALock:Boolean):TIP6HostEntry;
|
|
function GetHostByNext(APrevious:TIP6HostEntry; ALock,AUnlock:Boolean):TIP6HostEntry;
|
|
function AddHost(const AAddress:TIn6Addr; const AName:String; AType:Word; ALock:Boolean):TIP6HostEntry;
|
|
function RemoveHost(const AAddress:TIn6Addr):Boolean;
|
|
procedure FlushHosts(All:Boolean);
|
|
|
function GetRouteByAddress(const AAddress:TIn6Addr; ALock:Boolean; AState:LongWord):TIP6RouteEntry;
|
|
function GetRouteByNetwork(const ANetwork,AAddress:TIn6Addr; ALock:Boolean; AState:LongWord):TIP6RouteEntry;
|
|
function GetRouteByNext(APrevious:TIP6RouteEntry; ALock,AUnlock:Boolean; AState:LongWord):TIP6RouteEntry;
|
|
function AddRoute(const ANetwork,ANetmask,AGateway,AAddress:TIn6Addr; AType:Word; ALock:Boolean; AState:LongWord):TIP6RouteEntry;
|
|
function RemoveRoute(const ANetwork,AAddress:TIn6Addr):Boolean;
|
|
procedure FlushRoutes(All:Boolean);
|
|
|
function GetAddressByAddress(const AAddress:TIn6Addr; ALock:Boolean; AState:LongWord):TIP6AddressEntry;
|
|
function GetAddressByNext(APrevious:TIP6AddressEntry; ALock,AUnlock:Boolean; AState:LongWord):TIP6AddressEntry;
|
|
function AddAddress(const AAddress:TIn6Addr; AType:Word; AAdapter:TNetworkAdapter; ALock:Boolean; AState:LongWord):TIP6AddressEntry;
|
|
function RemoveAddress(const AAddress:TIn6Addr):Boolean;
|
|
procedure FlushAddresses(All:Boolean);
|
|
|
function GetNetworkByName(const AName:String; ALock:Boolean):TIP6NetworkEntry;
|
|
function GetNetworkByAddress(const ANetwork:TIn6Addr; ALock:Boolean):TIP6NetworkEntry;
|
|
function AddNetwork(const AName:String; const ANetwork:TIn6Addr; ALock:Boolean):TIP6NetworkEntry;
|
|
function RemoveNetwork(const AName:String):Boolean;
|
|
|
function GetServByName(const AName,AProtocol:String; ALock:Boolean):TIP6ServEntry;
|
|
function GetServByPort(APort:Word; const AProtocol:String; ALock:Boolean):TIP6ServEntry;
|
|
function AddServ(const AName,AProtocol:String; APort:Word; ALock:Boolean):TIP6ServEntry;
|
|
function RemoveServ(const AName,AProtocol:String):Boolean;
|
|
|
function GetProtoByName(const AName:String; ALock:Boolean):TIP6ProtoEntry;
|
|
function GetProtoByNumber(ANumber:Word; ALock:Boolean):TIP6ProtoEntry;
|
|
function AddProto(const AName:String; ANumber:Word; ALock:Boolean):TIP6ProtoEntry;
|
|
function RemoveProto(const AName:String):Boolean;
|
|
|
function CompareLocal(const AAddress:TIn6Addr):Boolean;
|
|
function CompareDefault(const AAddress:TIn6Addr):Boolean;
|
|
function CompareLoopback(const AAddress:TIn6Addr):Boolean;
|
|
function CompareDirected(const AAddress:TIn6Addr):Boolean;
|
|
function CompareBroadcast(const AAddress:TIn6Addr):Boolean;
|
|
function CompareMulticast(const AAddress:TIn6Addr):Boolean;
|
|
function CompareAddress(const AAddress1,AAddress2:TIn6Addr):Boolean;
|
|
function CompareSubnet(const AAddress,ANetwork,ANetmask:TIn6Addr):Boolean;
|
|