Difference between revisions of "Unit Transport"
(15 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
---- | ---- | ||
− | '''Ultibo Network Transport | + | '''Ultibo Network Transport Interface unit''' |
''Notes:'' | ''Notes:'' | ||
Line 115: | Line 115: | ||
| <code>MAX_ADDRESS_LIFE = 300000;</code> | | <code>MAX_ADDRESS_LIFE = 300000;</code> | ||
| 5 min Address (ARP) lifespan | | 5 min Address (ARP) lifespan | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| <code>IP_ADDRESS_SIZE = 4;</code> | | <code>IP_ADDRESS_SIZE = 4;</code> | ||
| SizeOf(TInAddr) | | SizeOf(TInAddr) | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| <code>IP6_ADDRESS_SIZE = 16;</code> | | <code>IP6_ADDRESS_SIZE = 16;</code> | ||
| SizeOf(TIn6Addr) | | SizeOf(TIn6Addr) | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
| <code>IPX_ADDRESS_SIZE = 12;</code> | | <code>IPX_ADDRESS_SIZE = 12;</code> | ||
Line 153: | Line 129: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <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 | + | <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;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 222: | Line 198: | ||
|- | |- | ||
| <code>SELECT_ERROR = 2;</code> | | <code>SELECT_ERROR = 2;</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>SELECT_UNKNOWN = -1;</code> | ||
| | | | ||
|- | |- | ||
Line 228: | Line 209: | ||
<br /> | <br /> | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;"> | <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 | + | <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;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
Line 290: | Line 271: | ||
</div></div> | </div></div> | ||
<br /> | <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"| | ||
+ | |- | ||
+ | | <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%;"| | ||
+ | |- | ||
+ | | <code>IP6_DEFAULT_ADDRESS:TIn6Addr = (S6_addr: ($00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00));</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
=== Type definitions === | === Type definitions === | ||
---- | ---- | ||
− | '' | + | |
+ | '''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%;"| | ||
+ | |- | ||
+ | | <code>PacketsOut:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>BytesIn:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>BytesOut:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ErrorsIn:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>ErrorsOut:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>PacketsLost:Int64;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </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%;"| | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </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%;"| | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </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 === | === 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 === | ||
---- | ---- | ||
− | '' | + | |
+ | '''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 === | ||
Line 318: | Line 653: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 330: | Line 665: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 342: | Line 677: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 354: | Line 689: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 366: | Line 701: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 381: | Line 716: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 393: | Line 728: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 405: | Line 740: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Expects Address to be in Network order | | Expects Address to be in Network order | ||
|- | |- | ||
Line 417: | Line 752: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Returns Address in Network order | | Returns Address in Network order | ||
|- | |- | ||
Line 429: | Line 764: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| 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 | | Expects Address to be in Host order | ||
|- | |- | ||
Line 441: | Line 788: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Expects Address to be in Host order | | Expects Address to be in Host order | ||
|- | |- | ||
Line 453: | Line 800: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Expects Address to be in Host order | | Expects Address to be in Host order | ||
|- | |- | ||
Line 465: | Line 812: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Expects Address to be in Host order | | Expects Address to be in Host order | ||
|- | |- | ||
Line 477: | Line 824: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Expects Address to be in Host order | | Expects Address to be in Host order | ||
|- | |- | ||
Line 485: | Line 832: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | <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> | <pre style="border: 0; padding-bottom:0px;">function In6AddrToString(const AAddress:TIn6Addr):String;</pre> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' | + | <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;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 497: | Line 844: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | <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> | <pre style="border: 0; padding-bottom:0px;">function StringToIn6Addr(const AAddress:String):TIn6Addr;</pre> | ||
− | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' | + | <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;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 513: | Line 860: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| 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 | | None documented | ||
|- | |- | ||
Line 525: | Line 884: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 537: | Line 896: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 549: | Line 908: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 561: | Line 920: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 573: | Line 932: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 585: | Line 944: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 597: | Line 956: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 609: | Line 968: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 621: | Line 980: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 633: | Line 992: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 645: | Line 1,004: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 657: | Line 1,016: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 669: | Line 1,028: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 681: | Line 1,040: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 693: | Line 1,052: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 705: | Line 1,064: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Pseudo is expected to start from Offset 0 | | Pseudo is expected to start from Offset 0 | ||
|- | |- | ||
Line 717: | Line 1,076: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| Pseudo and Header are expected to start from Offset 0 | | Pseudo and Header are expected to start from Offset 0 | ||
|- | |- | ||
Line 729: | Line 1,088: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
− | | Pseudo, Header and Options are expected to start from Offset 0 | + | | Pseudo, Header and Options are expected to start from Offset 0. |
|- | |- | ||
|} | |} | ||
Line 744: | Line 1,103: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 756: | Line 1,115: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 768: | Line 1,127: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 780: | Line 1,139: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 792: | Line 1,151: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 804: | Line 1,163: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- |
Latest revision as of 05:06, 5 March 2025
Return to Unit Reference
Contents
[hide]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
*_TYPE_*
*_HOST_*
*_ROUTE_*
*_ADDRESS_*
TTL_*
SHUTDOWN_*
SELECT_*
SS_*
IP_*
IP6_*
Type definitions
Transport statistics
IPv4 nameservers
PIPNameservers = ^TIPNameservers;
TIPNameservers = array[0..MAX_NAME_SERVERS - 1] of TInAddr;
IPv6 nameservers
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
Transport functions
function InAddrToHost(const AAddress:TInAddr):TInAddr; inline;
function InAddrToNetwork(const AAddress:TInAddr):TInAddr; inline;
function InAddrToString(const AAddress:TInAddr):String;
function StringToInAddr(const AAddress:String):TInAddr;
function InAddrIsEqual(const AAddress1,AAddress2:TInAddr):Boolean;
function InAddrIsNone(const AAddress:TInAddr):Boolean;
function InAddrIsDefault(const AAddress:TInAddr):Boolean;
function InAddrIsLoopback(const AAddress:TInAddr):Boolean;
function InAddrIsBroadcast(const AAddress:TInAddr):Boolean;
function InAddrIsMulticast(const AAddress:TInAddr):Boolean;
function In6AddrToString(const AAddress:TIn6Addr):String;
function StringToIn6Addr(const AAddress:String):TIn6Addr;
function In6AddrIsEqual(const AAddress1,AAddress2:TIn6Addr):Boolean;
function In6AddrIsNone(const AAddress:TIn6Addr):Boolean;
function In6AddrIsDefault(const AAddress:TIn6Addr):Boolean;
function In6AddrIsLoopback(const AAddress:TIn6Addr):Boolean;
function In6AddrIsLinkLocal(const AAddress:TIn6Addr):Boolean;
function In6AddrIsSiteLocal(const AAddress:TIn6Addr):Boolean;
function In6AddrIsV4Mapped(const AAddress:TIn6Addr):Boolean;
function In6AddrIsV4Compatible(const AAddress:TIn6Addr):Boolean;
function In6AddrIsMulticast(const AAddress:TIn6Addr):Boolean;
function In6AddrIsMulticastNodeLocal(const AAddress:TIn6Addr):Boolean;
function In6AddrIsMulticastLinkLocal(const AAddress:TIn6Addr):Boolean;
function In6AddrIsMulticastSiteLocal(const AAddress:TIn6Addr):Boolean;
function In6AddrIsMulticastOrgLocal(const AAddress:TIn6Addr):Boolean;
function In6AddrIsMulticastGlobal(const AAddress:TIn6Addr):Boolean;
function GetChecksum(ABuffer:Pointer; AOffset,ALength:Word):Word;
function GetChecksum2(APseudo,ABuffer:Pointer; APseudoLength,ABufferOffset,ABufferLength:Word):Word;
function GetChecksum3(APseudo,AHeader,AData:Pointer; APseudoLength,AHeaderLength,ADataOffset,ADataLength:Word):Word;
function GetChecksum4(APseudo,AHeader,AOptions,AData:Pointer; APseudoLength,AHeaderLength,AOptionsLength,ADataOffset,ADataLength:Word):Word;
Transport helper functions
Return to Unit Reference