Return to Unit Reference
Description
Ultibo Network Transport interface unit
Notes:
Includes all global transport definitions plus base class for Network transports.
Currently supported transports are IP, ARP, RARP, IPX and IP6.
All HostToNetwork swaps occur at the level where they are appropriate (ie the level of their header).
Bindings is provided to support Transports (such as IP) which can provide multiple addresses on a single adapter. It is not used by the Protocol or Winsock layer and is only used by the transport where appropriate. In such cases the ConfigType in the Adapter object is not used and the Binding is used instead.
Constants
[Expand]
Transport specific constants *_TYPE_*
HOST_TYPE_DYNAMIC = 0;
|
|
HOST_TYPE_STATIC = 1;
|
|
HOST_TYPE_LOOPBACK = 2;
|
|
|
ROUTE_TYPE_DYNAMIC = 0;
|
|
ROUTE_TYPE_STATIC = 1;
|
|
ROUTE_TYPE_LOOPBACK = 2;
|
Loopback Route
|
ROUTE_TYPE_GATEWAY = 3;
|
Default Route
|
ROUTE_TYPE_MULTICAST = 4;
|
Multicast Route
|
ROUTE_TYPE_BROADCAST = 5;
|
Broadcast Route
|
|
ADDRESS_TYPE_DYNAMIC = 0;
|
Remote Dynamic Address
|
ADDRESS_TYPE_STATIC = 1;
|
Remote Static Address
|
ADDRESS_TYPE_LOCAL = 2;
|
Local Address (ARP/RARP Only)
|
ADDRESS_TYPE_LOOPBACK = 3;
|
Local Loopback
|
ADDRESS_TYPE_MULTICAST = 4;
|
Local Multicast
|
ADDRESS_TYPE_BROADCAST = 5;
|
Local Broadcast
|
|
ADDRESS_TYPE_PRIMARY = 6;
|
Same as Local but used by IP/IP6
|
ADDRESS_TYPE_SECONDARY = 7;
|
Same as Local but used by IP/IP6
|
[Expand]
Host constants *_HOST_*
MAX_HOST_LIFE = 600000;
|
10 Minute Host lifespan
|
[Expand]
Route constants *_ROUTE_*
MAX_ROUTE_LIFE = 600000;
|
10 min Route lifespan
|
[Expand]
Address constants *_ADDRESS_*
MAX_ADDRESS_LIFE = 300000;
|
5 min Address (ARP) lifespan
|
IP_ADDRESS_SIZE = 4;
|
SizeOf(TInAddr)
|
IP6_ADDRESS_SIZE = 16;
|
SizeOf(TIn6Addr)
|
IPX_ADDRESS_SIZE = 12;
|
SizeOf(TIpxAddr)
|
[Expand]
Transport socket TTL_*
TTL_DEFAULT = 128;
|
Default to 128 Seconds/Hops (Defined as 64)
|
TOS_DEFAULT = 0;
|
|
HOPLIMIT_DEFAULT = 255;
|
Default to 255 Hops (Defined as 64)
|
ID_INCREMENT = 1;
|
Default Increment for ID Numbers
|
TTL_DECREMENT = 1;
|
Default Decrement for TTL when Forwarding
|
SEND_TIMEOUT = 0;
|
Default to wait forever on Send
|
RECV_TIMEOUT = 0;
|
Default to wait forever on Recv
|
CLOSE_TIMEOUT = 3000;
|
Time that Socket is kept before destruction
|
LINGER_TIMEOUT = 60000;
|
Time that Socket goes into Linger state for
|
CONNECT_TIMEOUT = 5000;
|
Time that Socket waits for connect completion
|
TIMEWAIT_TIMEOUT = 240000;
|
Time that Socket goes into TimeWait state for (2 x MSL)
|
[Expand]
Shutdown constants SHUTDOWN_*
SHUTDOWN_RECV = 0;
|
|
SHUTDOWN_SEND = 1;
|
|
SHUTDOWN_BOTH = 2;
|
|
[Expand]
Select constants SELECT_*
SELECT_READ = 0;
|
|
SELECT_WRITE = 1;
|
|
SELECT_ERROR = 2;
|
|
|
SELECT_UNKNOWN = -1;
|
|
[Expand]
Socket state SS_*
SS_NOFDREF = $0001;
|
no file table ref any more
|
SS_UNCONNECTED = SS_NOFDREF;
|
or just created socket
|
SS_ISCONNECTED = $0002;
|
socket connected to a peer
|
SS_ISCONNECTING = $0004;
|
in process of connecting
|
SS_ISDISCONNECTING = $0008;
|
in process of disconnecting
|
SS_CANTSENDMORE = $0010;
|
can't send more data
|
SS_CANTRCVMORE = $0020;
|
can't receive more data
|
SS_RCVATMARK = $0040;
|
at mark on input
|
|
SS_PRIV = $0080;
|
privileged for broadcast
|
SS_NBIO = $0100;
|
non-blocking ops
|
SS_ASYNC = $0200;
|
async i/o notify
|
SS_ISCONFIRMING = $0400;
|
accepting connection req
|
SS_ISLISTENING = SS_ISCONFIRMING;
|
non standard
|
|
SS_LOCAL_ADDR = $0800;
|
has local address/port (not used)
|
SS_REMOTE_ADDR = $1000;
|
has remote address/port (not used)
|
SS_CONN_REFUSED = $2000;
|
connection refused (ICMP_UNREACH)
|
SS_CLOSED = $4000;
|
socket has been closed
|
[Expand]
IPv4 transport IP_*
IP_LOOPBACK_ADDRESS:TInAddr = (S_addr: $7F000001);
|
127.0.0.1
|
IP_LOOPBACK_NETWORK:TInAddr = (S_addr: $7F000000);
|
127.0.0.0
|
IP_LOOPBACK_NETMASK:TInAddr = (S_addr: $FF000000);
|
255.0.0.0
|
IP_BROADCAST_ADDRESS:TInAddr = (S_addr: $FFFFFFFF);
|
255.255.255.255
|
IP_BROADCAST_NETWORK:TInAddr = (S_addr: $FFFFFFFF);
|
255.255.255.255
|
IP_BROADCAST_NETMASK:TInAddr = (S_addr: $FFFFFFFF);
|
255.255.255.255
|
IP_DEFAULT_ADDRESS:TInAddr = (S_addr: $00000000);
|
0.0.0.0
|
IP_DEFAULT_NETWORK:TInAddr = (S_addr: $00000000);
|
0.0.0.0
|
IP_DEFAULT_NETMASK:TInAddr = (S_addr: $00000000);
|
0.0.0.0
|
IP_MULTICAST_HOSTS:TInAddr = (S_addr: $E0000001);
|
224.0.0.1 (All Hosts)
|
IP_MULTICAST_ROUTERS:TInAddr = (S_addr: $E0000002);
|
224.0.0.2 (All Routers)
|
IP_MULTICAST_NETWORK:TInAddr = (S_addr: $E0000000);
|
224.0.0.0
|
IP_MULTICAST_NETMASK:TInAddr = (S_addr: $F0000000);
|
240.0.0.0
|
Note: The recommended range for general use is 234.0.0.0 to 238.255.255.255
|
|
IP_CLASSA_NETMASK:TInAddr = (S_addr: $FF000000);
|
255.0.0.0
|
IP_CLASSB_NETMASK:TInAddr = (S_addr: $FFFF0000);
|
255.255.0.0
|
IP_CLASSC_NETMASK:TInAddr = (S_addr: $FFFFFF00);
|
255.255.255.0
|
IP_CLASSD_NETMASK:TInAddr = (S_addr: $F0000000);
|
240.0.0.0
|
IP_CLASSE_NETMASK:TInAddr = (S_addr: $F0000000);
|
240.0.0.0
|
[Expand]
IPv6 transport IP6_*
IP6_LOOPBACK_ADDRESS:TIn6Addr = (S6_addr: ($00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01));
|
|
IP6_DEFAULT_ADDRESS:TIn6Addr = (S6_addr: ($00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00));
|
|
Type definitions
Transport statistics
[Expand]
PTransportStatistics = ^TTransportStatistics;
TTransportStatistics = record
Note: Generic Transport
|
PacketsIn:Int64;
|
|
PacketsOut:Int64;
|
|
BytesIn:Int64;
|
|
BytesOut:Int64;
|
|
ErrorsIn:Int64;
|
|
ErrorsOut:Int64;
|
|
PacketsLost:Int64;
|
|
IPv4 nameservers
[Expand]
PIPNameservers = ^TIPNameservers;
TIPNameservers = array[0..MAX_NAME_SERVERS - 1] of TInAddr;
IPv6 nameservers
[Expand]
PIP6Nameservers = ^TIP6Nameservers;
TIP6Nameservers = array[0..MAX_NAME_SERVERS - 1] of TIn6Addr;
Transport callback
TTransportCallback = function(ATransport:TNetworkTransport):Boolean of object;
|
|
Monitor callback
TMonitorCallback = function(AMonitor:TNetworkMonitor):Boolean of object;
|
|
Authenticator callback
TAuthenticatorCallback = function(AAuthenticator:TNetworkAuthenticator):Boolean of object;
|
|
Transport packet handler
TTransportPacketHandler = function(AHandle:THandle; ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean of object;
|
|
Transport control handler
TTransportControlHandler = function(AHandle:THandle; ASource,ADest:Pointer; AProtocol,ACommand,ACode:Word; AAddress,AData:Pointer; ASize:Integer):Boolean of object;
|
|
Transport filter handler
TTransportFilterHandler = function(AHandle:THandle; ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean of object;
|
|
Transport configuration handler
TTransportConfigHandler = function(AHandle:THandle; AAdapter:TTransportAdapter; ACommand:Word):Boolean of object;
|
|
Class definitions
Transport specific classes
Public variables
Transport specific variables
TransportManager:TTransportManager;
|
|
Function declarations
Initialization functions
[Expand]
procedure TransportInit;
Description: To be documented
[Expand]
function TransportStart:LongWord;
Description: To be documented
[Expand]
function TransportStop:LongWord;
Description: To be documented
[Expand]
function TransportBind:LongWord;
Description: To be documented
[Expand]
function TransportUnbind:LongWord;
Description: To be documented
Transport functions
[Expand]
function InAddrToHost(const AAddress:TInAddr):TInAddr; inline;
Description: Convert an InAddr in Network order to Host order
[Expand]
function InAddrToNetwork(const AAddress:TInAddr):TInAddr; inline;
Description: Convert an InAddr in Host order to Network order
[Expand]
function InAddrToString(const AAddress:TInAddr):String;
Description: Convert an InAddr to a String
Note
|
Expects Address to be in Network order
|
[Expand]
function StringToInAddr(const AAddress:String):TInAddr;
Description: Convert a String to an InAddr
Note
|
Returns Address in Network order
|
[Expand]
function InAddrIsEqual(const AAddress1,AAddress2:TInAddr):Boolean;
Description: Check the supplied addresses to see if they are the same
Note
|
Expects Address to be in Host order
|
[Expand]
function InAddrIsNone(const AAddress:TInAddr):Boolean;
Description: Check the supplied address to see if it is equal to INADDR_NONE
Note
|
Expects Address to be in Host order
|
[Expand]
function InAddrIsDefault(const AAddress:TInAddr):Boolean;
Description: Check the supplied address to see if it is the default address
Note
|
Expects Address to be in Host order
|
[Expand]
function InAddrIsLoopback(const AAddress:TInAddr):Boolean;
Description: Check the supplied address to see if it is a loopback address
Note
|
Expects Address to be in Host order
|
[Expand]
function InAddrIsBroadcast(const AAddress:TInAddr):Boolean;
Description: Check the supplied address to see if it is the broadcast address
Note
|
Expects Address to be in Host order
|
[Expand]
function InAddrIsMulticast(const AAddress:TInAddr):Boolean;
Description: Check the supplied address to see if it is a multicast address
Note
|
Expects Address to be in Host order
|
[Expand]
function In6AddrToString(const AAddress:TIn6Addr):String;
Description: To be documented
[Expand]
function StringToIn6Addr(const AAddress:String):TIn6Addr;
Description: To be documented
[Expand]
function In6AddrIsEqual(const AAddress1,AAddress2:TIn6Addr):Boolean;
Description: Check the supplied addresses to see if they are the same
[Expand]
function In6AddrIsDefault(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is the default address
[Expand]
function In6AddrIsLoopback(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a loopback address
[Expand]
function In6AddrIsLinkLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a link local address
[Expand]
function In6AddrIsSiteLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a site local address
[Expand]
function In6AddrIsV4Mapped(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a V4 mapped address
[Expand]
function In6AddrIsV4Compatible(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a V4 compatible address
[Expand]
function In6AddrIsMulticast(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a multicast address
[Expand]
function In6AddrIsMulticastNodeLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a multicast node local address
[Expand]
function In6AddrIsMulticastLinkLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a multicast link local address
[Expand]
function In6AddrIsMulticastSiteLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a multicast site local address
[Expand]
function In6AddrIsMulticastOrgLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a multicast org local address
[Expand]
function In6AddrIsMulticastGlobal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a multicast global address
[Expand]
function IpxAddrToString(const AAddress:TIpxAddr):String;
Description: To be documented
[Expand]
function StringToIpxAddr(const AAddress:String):TIpxAddr;
Description: To be documented
[Expand]
function GetChecksum(ABuffer:Pointer; AOffset,ALength:Word):Word;
Description: Calculate the 1s Compliment Checksum of the Supplied Buffer
[Expand]
function GetChecksum2(APseudo,ABuffer:Pointer; APseudoLength,ABufferOffset,ABufferLength:Word):Word;
Description: Calculate the 1s Compliment Checksum of the Supplied Pseudo and Buffer
Note
|
Pseudo is expected to start from Offset 0
|
[Expand]
function GetChecksum3(APseudo,AHeader,AData:Pointer; APseudoLength,AHeaderLength,ADataOffset,ADataLength:Word):Word;
Description: Calculate the 1s Compliment Checksum of the Supplied Pseudo, Header and Data
Note
|
Pseudo and Header are expected to start from Offset 0
|
[Expand]
function GetChecksum4(APseudo,AHeader,AOptions,AData:Pointer; APseudoLength,AHeaderLength,AOptionsLength,ADataOffset,ADataLength:Word):Word;
Description: Calculate the 1s Compliment Checksum of the Supplied Pseudo, Header, Options and Data
Note
|
Pseudo, Header and Options are expected to start from Offset 0.
|
Transport helper functions
[Expand]
function HostTypeToString(AType:Word):String;
Description: To be documented
[Expand]
function RouteTypeToString(AType:Word):String;
Description: To be documented
[Expand]
function AddressTypeToString(AType:Word):String;
Description: To be documented
[Expand]
function ProtocolToString(AProtocol:Word):String;
Description: To be documented
[Expand]
function SocketTypeToString(ASocketType:Word):String;
Description: To be documented
[Expand]
function AddressFamilyToString(AFamily:Word):String;
Description: To be documented
Return to Unit Reference