Difference between revisions of "Unit Transport"

From Ultibo.org
Jump to: navigation, search
(Created page with "Return to Unit Reference === Description === ---- ''To be documented'' === Constants === ---- ''To be documented'' === Type definitions === ---- ''To...")
 
 
(23 intermediate revisions by the same user not shown)
Line 5: Line 5:
 
----
 
----
  
''To be documented''
+
'''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 ===
 
=== Constants ===
 
----
 
----
  
''To be documented''
+
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Transport specific constants''' <code> *_TYPE_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>HOST_TYPE_DYNAMIC = 0;</code>
 +
| &nbsp;
 +
|-
 +
| <code>HOST_TYPE_STATIC = 1;</code>
 +
| &nbsp;
 +
|-
 +
| <code>HOST_TYPE_LOOPBACK = 2;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>ROUTE_TYPE_DYNAMIC = 0;</code>
 +
| &nbsp;
 +
|-
 +
| <code>ROUTE_TYPE_STATIC = 1;</code>
 +
| &nbsp;
 +
|-
 +
| <code>ROUTE_TYPE_LOOPBACK = 2;</code>
 +
| Loopback Route
 +
|-
 +
| <code>ROUTE_TYPE_GATEWAY = 3;</code>
 +
| Default Route
 +
|-
 +
| <code>ROUTE_TYPE_MULTICAST = 4;</code>
 +
| Multicast Route
 +
|-
 +
| <code>ROUTE_TYPE_BROADCAST = 5;</code>
 +
| Broadcast Route
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>ADDRESS_TYPE_DYNAMIC = 0;</code>
 +
| Remote Dynamic Address
 +
|-
 +
| <code>ADDRESS_TYPE_STATIC = 1;</code>
 +
| Remote Static Address
 +
|-
 +
| <code>ADDRESS_TYPE_LOCAL = 2;</code>
 +
| Local Address (ARP/RARP Only)
 +
|-
 +
| <code>ADDRESS_TYPE_LOOPBACK = 3;</code>
 +
| Local Loopback
 +
|-
 +
| <code>ADDRESS_TYPE_MULTICAST = 4;</code>
 +
| Local Multicast
 +
|-
 +
| <code>ADDRESS_TYPE_BROADCAST = 5;</code>
 +
| Local Broadcast
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>ADDRESS_TYPE_PRIMARY = 6;</code>
 +
| Same as Local but used by IP/IP6
 +
|-
 +
| <code>ADDRESS_TYPE_SECONDARY = 7;</code>
 +
| Same as Local but used by IP/IP6
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Host constants''' <code> *_HOST_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>MAX_HOST_LIFE = 600000;</code>
 +
| 10 Minute Host lifespan
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Route constants''' <code> *_ROUTE_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>MAX_ROUTE_LIFE = 600000;</code>
 +
| 10 min Route lifespan
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Address constants''' <code> *_ADDRESS_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>MAX_ADDRESS_LIFE = 300000;</code>
 +
| 5 min Address (ARP) lifespan
 +
|-
 +
| <code>IP_ADDRESS_SIZE = 4;</code>
 +
| SizeOf(TInAddr)
 +
|-
 +
| <code>IP6_ADDRESS_SIZE = 16;</code>
 +
| SizeOf(TIn6Addr)
 +
|-
 +
| <code>IPX_ADDRESS_SIZE = 12;</code>
 +
| SizeOf(TIpxAddr)
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Transport socket''' <code> TTL_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>TTL_DEFAULT = 128;</code>
 +
| Default to 128 Seconds/Hops (Defined as 64)
 +
|-
 +
| <code>TOS_DEFAULT = 0;</code>
 +
| &nbsp;
 +
|-
 +
| <code>HOPLIMIT_DEFAULT = 255;</code>
 +
| Default to 255 Hops (Defined as 64)
 +
|-
 +
| <code>ID_INCREMENT = 1;</code>
 +
| Default Increment for ID Numbers
 +
|-
 +
| <code>TTL_DECREMENT = 1;</code>
 +
| Default Decrement for TTL when Forwarding
 +
|-
 +
| <code>SEND_TIMEOUT = 0;</code>
 +
| Default to wait forever on Send
 +
|-
 +
| <code>RECV_TIMEOUT = 0;</code>
 +
| Default to wait forever on Recv
 +
|-
 +
| <code>CLOSE_TIMEOUT = 3000;</code>
 +
| Time that Socket is kept before destruction
 +
|-
 +
| <code>LINGER_TIMEOUT = 60000;</code>
 +
| Time that Socket goes into Linger state for
 +
|-
 +
| <code>CONNECT_TIMEOUT = 5000;</code>
 +
| Time that Socket waits for connect completion
 +
|-
 +
| <code>TIMEWAIT_TIMEOUT = 240000;</code>
 +
| Time that Socket goes into TimeWait state for (2 x MSL)
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Shutdown constants''' <code> SHUTDOWN_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>SHUTDOWN_RECV = 0;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>SHUTDOWN_SEND = 1;</code>
 +
| &nbsp;
 +
|-
 +
| <code>SHUTDOWN_BOTH = 2;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Select constants''' <code> SELECT_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>SELECT_READ = 0;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>SELECT_WRITE = 1;</code>
 +
| &nbsp;
 +
|-
 +
| <code>SELECT_ERROR = 2;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>SELECT_UNKNOWN = -1;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''Socket state''' <code> SS_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>SS_NOFDREF = $0001;</code>
 +
| no file table ref any more
 +
|-
 +
| <code>SS_UNCONNECTED = SS_NOFDREF;</code>
 +
| or just created socket
 +
|-
 +
| <code>SS_ISCONNECTED = $0002;</code>
 +
| socket connected to a peer
 +
|-
 +
| <code>SS_ISCONNECTING = $0004;</code>
 +
| in process of connecting
 +
|-
 +
| <code>SS_ISDISCONNECTING = $0008;</code>
 +
| in process of disconnecting
 +
|-
 +
| <code>SS_CANTSENDMORE = $0010;</code>
 +
| can't send more data
 +
|-
 +
| <code>SS_CANTRCVMORE = $0020;</code>
 +
| can't receive more data
 +
|-
 +
| <code>SS_RCVATMARK = $0040;</code>
 +
| at mark on input
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>SS_PRIV = $0080;</code>
 +
| privileged for broadcast
 +
|-
 +
| <code>SS_NBIO = $0100;</code>
 +
| non-blocking ops
 +
|-
 +
| <code>SS_ASYNC = $0200;</code>
 +
| async i/o notify
 +
|-
 +
| <code>SS_ISCONFIRMING = $0400;</code>
 +
| accepting connection req
 +
|-
 +
| <code>SS_ISLISTENING = SS_ISCONFIRMING;</code>
 +
| non standard
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>SS_LOCAL_ADDR = $0800;</code>
 +
| has local address/port (not used)
 +
|-
 +
| <code>SS_REMOTE_ADDR = $1000;</code>
 +
| has remote address/port (not used)
 +
|-
 +
| <code>SS_CONN_REFUSED = $2000;</code>
 +
| connection refused (ICMP_UNREACH)
 +
|-
 +
| <code>SS_CLOSED = $4000;</code>
 +
| socket has been closed
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''IPv4 transport''' <code> IP_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>IP_LOOPBACK_ADDRESS:TInAddr = (S_addr: $7F000001);</code>
 +
| 127.0.0.1
 +
|-
 +
| <code>IP_LOOPBACK_NETWORK:TInAddr = (S_addr: $7F000000);</code>
 +
| 127.0.0.0
 +
|-
 +
| <code>IP_LOOPBACK_NETMASK:TInAddr = (S_addr: $FF000000);</code>
 +
| 255.0.0.0
 +
|-
 +
| <code>IP_BROADCAST_ADDRESS:TInAddr = (S_addr: $FFFFFFFF);</code>
 +
| 255.255.255.255
 +
|-
 +
| <code>IP_BROADCAST_NETWORK:TInAddr = (S_addr: $FFFFFFFF);</code>
 +
| 255.255.255.255
 +
|-
 +
| <code>IP_BROADCAST_NETMASK:TInAddr = (S_addr: $FFFFFFFF);</code>
 +
| 255.255.255.255
 +
|-
 +
| <code>IP_DEFAULT_ADDRESS:TInAddr = (S_addr: $00000000);</code>
 +
| 0.0.0.0
 +
|-
 +
| <code>IP_DEFAULT_NETWORK:TInAddr = (S_addr: $00000000);</code>
 +
| 0.0.0.0
 +
|-
 +
| <code>IP_DEFAULT_NETMASK:TInAddr = (S_addr: $00000000);</code>
 +
| 0.0.0.0
 +
|-
 +
| <code>IP_MULTICAST_HOSTS:TInAddr = (S_addr: $E0000001);</code>
 +
| 224.0.0.1 (All Hosts)
 +
|-
 +
| <code>IP_MULTICAST_ROUTERS:TInAddr = (S_addr: $E0000002);</code>
 +
| 224.0.0.2 (All Routers)
 +
|-
 +
| <code>IP_MULTICAST_NETWORK:TInAddr = (S_addr: $E0000000);</code>
 +
| 224.0.0.0
 +
|-
 +
| <code>IP_MULTICAST_NETMASK:TInAddr = (S_addr: $F0000000);</code>
 +
| 240.0.0.0
 +
|-
 +
|colspan="2"|Note: The recommended range for general use is 234.0.0.0 to 238.255.255.255
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>IP_CLASSA_NETMASK:TInAddr = (S_addr: $FF000000);</code>
 +
| 255.0.0.0
 +
|-
 +
| <code>IP_CLASSB_NETMASK:TInAddr = (S_addr: $FFFF0000);</code>
 +
| 255.255.0.0
 +
|-
 +
| <code>IP_CLASSC_NETMASK:TInAddr = (S_addr: $FFFFFF00);</code>
 +
| 255.255.255.0
 +
|-
 +
| <code>IP_CLASSD_NETMASK:TInAddr = (S_addr: $F0000000);</code>
 +
| 240.0.0.0
 +
|-
 +
| <code>IP_CLASSE_NETMASK:TInAddr = (S_addr: $F0000000);</code>
 +
| 240.0.0.0
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''IPv6 transport''' <code> IP6_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>IP6_LOOPBACK_ADDRESS:TIn6Addr = (S6_addr: ($00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01));</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>IP6_DEFAULT_ADDRESS:TIn6Addr = (S6_addr: ($00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00));</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
=== Type definitions ===
 
=== Type definitions ===
 
----
 
----
  
''To be documented''
+
 
 +
'''Transport statistics'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PTransportStatistics = ^TTransportStatistics;</code>
 +
 
 +
<code>TTransportStatistics = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|Note: Generic Transport
 +
|-
 +
| <code>PacketsIn:Int64;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>PacketsOut:Int64;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BytesIn:Int64;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BytesOut:Int64;</code>
 +
| &nbsp;
 +
|-
 +
| <code>ErrorsIn:Int64;</code>
 +
| &nbsp;
 +
|-
 +
| <code>ErrorsOut:Int64;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PacketsLost:Int64;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div> 
 +
 +
'''IPv4 nameservers'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PIPNameservers = ^TIPNameservers;</code>
 +
 
 +
<code>TIPNameservers = array[0..MAX_NAME_SERVERS - 1] of TInAddr;</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|Note: IP4 Transport
 +
|-
 +
| style="width: 50%;"|&nbsp;
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''IPv6 nameservers'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PIP6Nameservers = ^TIP6Nameservers;</code>
 +
 
 +
<code>TIP6Nameservers = array[0..MAX_NAME_SERVERS - 1] of TIn6Addr;</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|Note: IP6 Transport
 +
|-
 +
| style="width: 50%;"|&nbsp;
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''Transport callback'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TTransportCallback = function(ATransport:TNetworkTransport):Boolean of object;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''Monitor callback'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TMonitorCallback = function(AMonitor:TNetworkMonitor):Boolean of object;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''Authenticator callback'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TAuthenticatorCallback = function(AAuthenticator:TNetworkAuthenticator):Boolean of object;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''Transport packet handler'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TTransportPacketHandler = function(AHandle:THandle; ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean of object;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''Transport control handler'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TTransportControlHandler = function(AHandle:THandle; ASource,ADest:Pointer; AProtocol,ACommand,ACode:Word; AAddress,AData:Pointer; ASize:Integer):Boolean of object;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''Transport filter handler'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TTransportFilterHandler = function(AHandle:THandle; ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean of object;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
 
 +
'''Transport configuration handler'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TTransportConfigHandler = function(AHandle:THandle; AAdapter:TTransportAdapter; ACommand:Word):Boolean of object;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
<br />
 +
 
 +
=== Class definitions ===
 +
----
 +
 
 +
 
 +
'''Transport specific classes'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TTransportManager|<code>TTransportManager = class(TObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TTransportBuffer|<code>TTransportBuffer = class(TObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TTransportBufferEx|<code>TTransportBufferEx = class(TObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TTransportAdapter|<code>TTransportAdapter = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TTransportBinding|<code>TTransportBinding = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TTransportProtocol|<code>TTransportProtocol = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TTransportFilter|<code>TTransportFilter = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TTransportConfig|<code>TTransportConfig = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TNetworkTransport|<code>TNetworkTransport = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TMonitorAdapter|<code>TMonitorAdapter = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TNetworkMonitor|<code>TNetworkMonitor = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TAuthenticatorAdapter|<code>TAuthenticatorAdapter = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TNetworkAuthenticator|<code>TNetworkAuthenticator = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TTransportSocket|<code>TTransportSocket = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TSocketList|<code>TSocketList = class(TObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TSocketState|<code>TSocketState = class(TObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TSocketBuffer|<code>TSocketBuffer = class(TObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TSocketOptions|<code>TSocketOptions = class(TObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TTransportState|<code>TTransportState = class(TObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TTransportOptions|<code>TTransportOptions = class(TObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[THostEntry|<code>THostEntry = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TRouteEntry|<code>TRouteEntry = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TAddressEntry|<code>TAddressEntry = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TNetworkEntry|<code>TNetworkEntry = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TServEntry|<code>TServEntry = class(TListObject)</code>]]
 +
|-
 +
|}
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| [[TProtoEntry|<code>TProtoEntry = class(TListObject)</code>]]
 +
|-
 +
|}
 +
<br />
  
 
=== Public variables ===
 
=== Public variables ===
 
----
 
----
  
''To be documented''
+
 
 +
'''Transport specific variables'''
 +
 
 +
{| class="wikitable" style="font-size: 14px; text-align: left; width: 100%; height: 50px;"
 +
|-
 +
| <code>TransportManager:TTransportManager;</code>
 +
| style="width: 40%;"|
 +
|-
 +
|}
 +
<br />
  
 
=== Function declarations ===
 
=== Function declarations ===
 
----
 
----
  
''To be documented''
 
  
 +
'''Initialization functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure TransportInit;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function TransportStart:LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function TransportStop:LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function TransportBind:LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function TransportUnbind:LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''Transport functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function InAddrToHost(const AAddress:TInAddr):TInAddr; inline;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert an InAddr in Network order to Host order</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function InAddrToNetwork(const AAddress:TInAddr):TInAddr; inline;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert an InAddr in Host order to Network order</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function InAddrToString(const AAddress:TInAddr):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert an InAddr to a String</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Expects Address to be in Network order
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function StringToInAddr(const AAddress:String):TInAddr;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a String to an InAddr</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Returns Address in Network order
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function InAddrIsEqual(const AAddress1,AAddress2:TInAddr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied addresses to see if they are the same</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Expects Address to be in Host order
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function InAddrIsNone(const AAddress:TInAddr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is equal to INADDR_NONE</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Expects Address to be in Host order
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function InAddrIsDefault(const AAddress:TInAddr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is the default address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Expects Address to be in Host order
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function InAddrIsLoopback(const AAddress:TInAddr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a loopback address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Expects Address to be in Host order
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function InAddrIsBroadcast(const AAddress:TInAddr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is the broadcast address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Expects Address to be in Host order
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function InAddrIsMulticast(const AAddress:TInAddr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a multicast address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Expects Address to be in Host order
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrToString(const AAddress:TIn6Addr):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert an In6Addr to a String</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function StringToIn6Addr(const AAddress:String):TIn6Addr;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Convert a String to an In6Addr</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsEqual(const AAddress1,AAddress2:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied addresses to see if they are the same</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsNone(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is IN6ADDR_NONE</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsDefault(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is the default address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsLoopback(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a loopback address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsLinkLocal(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a link local address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsSiteLocal(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a site local address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsV4Mapped(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a V4 mapped address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsV4Compatible(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a V4 compatible address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsMulticast(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a multicast address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsMulticastNodeLocal(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a multicast node local address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsMulticastLinkLocal(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a multicast link local address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsMulticastSiteLocal(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a multicast site local address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsMulticastOrgLocal(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a multicast org local address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function In6AddrIsMulticastGlobal(const AAddress:TIn6Addr):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Check the supplied address to see if it is a multicast global address</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function IpxAddrToString(const AAddress:TIpxAddr):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function StringToIpxAddr(const AAddress:String):TIpxAddr;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function GetChecksum(ABuffer:Pointer; AOffset,ALength:Word):Word;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Calculate the 1s Compliment Checksum of the Supplied Buffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function GetChecksum2(APseudo,ABuffer:Pointer; APseudoLength,ABufferOffset,ABufferLength:Word):Word;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Calculate the 1s Compliment Checksum of the Supplied Pseudo and Buffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Pseudo is expected to start from Offset 0
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function GetChecksum3(APseudo,AHeader,AData:Pointer; APseudoLength,AHeaderLength,ADataOffset,ADataLength:Word):Word;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Calculate the 1s Compliment Checksum of the Supplied Pseudo, Header and Data</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Pseudo and Header are expected to start from Offset 0
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function GetChecksum4(APseudo,AHeader,AOptions,AData:Pointer; APseudoLength,AHeaderLength,AOptionsLength,ADataOffset,ADataLength:Word):Word;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Calculate the 1s Compliment Checksum of the Supplied Pseudo, Header, Options and Data</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Pseudo, Header and Options are expected to start from Offset 0.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''Transport helper functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function HostTypeToString(AType:Word):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function RouteTypeToString(AType:Word):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function AddressTypeToString(AType:Word):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function ProtocolToString(AProtocol:Word):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function SocketTypeToString(ASocketType:Word):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function AddressFamilyToString(AFamily:Word):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
Return to [[Unit_Reference|Unit Reference]]
 
Return to [[Unit_Reference|Unit Reference]]

Latest revision as of 05:06, 5 March 2025

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_*


[Expand]
Host constants *_HOST_*


[Expand]
Route constants *_ROUTE_*


[Expand]
Address constants *_ADDRESS_*


[Expand]
Transport socket TTL_*


[Expand]
Shutdown constants SHUTDOWN_*


[Expand]
Select constants SELECT_*


[Expand]
Socket state SS_*


[Expand]
IPv4 transport IP_*


[Expand]
IPv6 transport IP6_*


Type definitions



Transport statistics

[Expand]

PTransportStatistics = ^TTransportStatistics;

TTransportStatistics = record

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

TTransportManager = class(TObject)
TTransportBuffer = class(TObject)
TTransportBufferEx = class(TObject)
TTransportAdapter = class(TListObject)
TTransportBinding = class(TListObject)
TTransportProtocol = class(TListObject)
TTransportFilter = class(TListObject)
TTransportConfig = class(TListObject)
TNetworkTransport = class(TListObject)
TMonitorAdapter = class(TListObject)
TNetworkMonitor = class(TListObject)
TAuthenticatorAdapter = class(TListObject)
TNetworkAuthenticator = class(TListObject)
TTransportSocket = class(TListObject)
TSocketList = class(TObject)
TSocketState = class(TObject)
TSocketBuffer = class(TObject)
TSocketOptions = class(TObject)
TTransportState = class(TObject)
TTransportOptions = class(TObject)
THostEntry = class(TListObject)
TRouteEntry = class(TListObject)
TAddressEntry = class(TListObject)
TNetworkEntry = class(TListObject)
TServEntry = class(TListObject)
TProtoEntry = class(TListObject)


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


[Expand]
function StringToInAddr(const AAddress:String):TInAddr;
Description: Convert a String to an InAddr


[Expand]
function InAddrIsEqual(const AAddress1,AAddress2:TInAddr):Boolean;
Description: Check the supplied addresses to see if they are the same


[Expand]
function InAddrIsNone(const AAddress:TInAddr):Boolean;
Description: Check the supplied address to see if it is equal to INADDR_NONE


[Expand]
function InAddrIsDefault(const AAddress:TInAddr):Boolean;
Description: Check the supplied address to see if it is the default address


[Expand]
function InAddrIsLoopback(const AAddress:TInAddr):Boolean;
Description: Check the supplied address to see if it is a loopback address


[Expand]
function InAddrIsBroadcast(const AAddress:TInAddr):Boolean;
Description: Check the supplied address to see if it is the broadcast address


[Expand]
function InAddrIsMulticast(const AAddress:TInAddr):Boolean;
Description: Check the supplied address to see if it is a multicast address


[Expand]
function In6AddrToString(const AAddress:TIn6Addr):String;
Description: Convert an In6Addr to a String


[Expand]
function StringToIn6Addr(const AAddress:String):TIn6Addr;
Description: Convert a String to an In6Addr


[Expand]
function In6AddrIsEqual(const AAddress1,AAddress2:TIn6Addr):Boolean;
Description: Check the supplied addresses to see if they are the same


[Expand]
function In6AddrIsNone(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is IN6ADDR_NONE


[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


[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


[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


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