Difference between revisions of "Unit Transport"
(13 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 === | ||
Line 330: | Line 391: | ||
</div></div> | </div></div> | ||
− | ''' | + | '''IPv4 nameservers''' |
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
Line 347: | Line 408: | ||
</div></div> | </div></div> | ||
− | ''' | + | '''IPv6 nameservers''' |
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;"> | ||
Line 362: | Line 423: | ||
|- | |- | ||
|} | |} | ||
− | </div></div> | + | </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 /> | <br /> | ||
Line 368: | Line 492: | ||
---- | ---- | ||
− | '' | + | |
+ | '''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 387: | Line 653: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 399: | Line 665: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 411: | Line 677: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 423: | Line 689: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 435: | Line 701: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 450: | Line 716: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 462: | Line 728: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 474: | 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 486: | 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 498: | 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 510: | 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 522: | 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 534: | 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 546: | 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 558: | Line 836: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 570: | Line 848: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 582: | Line 860: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 594: | Line 872: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 606: | Line 884: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 618: | Line 896: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 630: | Line 908: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 642: | Line 920: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 654: | Line 932: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 666: | Line 944: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 678: | Line 956: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 690: | Line 968: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 702: | Line 980: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 714: | Line 992: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 726: | 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 738: | 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 750: | 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 762: | 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 774: | Line 1,052: | ||
{| 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 786: | Line 1,064: | ||
{| 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 798: | Line 1,076: | ||
{| 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 813: | Line 1,091: | ||
{| class="wikitable" style="font-size: 14px; background: white;" | {| class="wikitable" style="font-size: 14px; background: white;" | ||
|- | |- | ||
− | ! | + | ! Note |
| None documented | | None documented | ||
|- | |- | ||
Line 825: | 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 837: | 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 849: | 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 861: | 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 873: | Line 1,151: | ||
{| 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:32, 31 August 2021
Return to Unit Reference
Contents
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_TYPE_DYNAMIC = 0;
|
|
HOST_TYPE_STATIC = 1;
|
|
HOST_TYPE_LOOPBACK = 2;
|
|
ROUTE_TYPE_DYNAMIC = 0;
|
|
ROUTE_TYPE_STATIC = 1;
|
|
ROUTE_TYPE_LOOPBACK = 2;
|
Loopback Route |
ROUTE_TYPE_GATEWAY = 3;
|
Default Route |
ROUTE_TYPE_MULTICAST = 4;
|
Multicast Route |
ROUTE_TYPE_BROADCAST = 5;
|
Broadcast Route |
ADDRESS_TYPE_DYNAMIC = 0;
|
Remote Dynamic Address |
ADDRESS_TYPE_STATIC = 1;
|
Remote Static Address |
ADDRESS_TYPE_LOCAL = 2;
|
Local Address (ARP/RARP Only) |
ADDRESS_TYPE_LOOPBACK = 3;
|
Local Loopback |
ADDRESS_TYPE_MULTICAST = 4;
|
Local Multicast |
ADDRESS_TYPE_BROADCAST = 5;
|
Local Broadcast |
ADDRESS_TYPE_PRIMARY = 6;
|
Same as Local but used by IP/IP6 |
ADDRESS_TYPE_SECONDARY = 7;
|
Same as Local but used by IP/IP6 |
*_HOST_*
MAX_HOST_LIFE = 600000;
|
10 Minute Host lifespan |
*_ROUTE_*
MAX_ROUTE_LIFE = 600000;
|
10 min Route lifespan |
*_ADDRESS_*
MAX_ADDRESS_LIFE = 300000;
|
5 min Address (ARP) lifespan |
IP_ADDRESS_SIZE = 4;
|
SizeOf(TInAddr) |
IP6_ADDRESS_SIZE = 16;
|
SizeOf(TIn6Addr) |
IPX_ADDRESS_SIZE = 12;
|
SizeOf(TIpxAddr) |
TTL_*
TTL_DEFAULT = 128;
|
Default to 128 Seconds/Hops (Defined as 64) |
TOS_DEFAULT = 0;
|
|
HOPLIMIT_DEFAULT = 255;
|
Default to 255 Hops (Defined as 64) |
ID_INCREMENT = 1;
|
Default Increment for ID Numbers |
TTL_DECREMENT = 1;
|
Default Decrement for TTL when Forwarding |
SEND_TIMEOUT = 0;
|
Default to wait forever on Send |
RECV_TIMEOUT = 0;
|
Default to wait forever on Recv |
CLOSE_TIMEOUT = 3000;
|
Time that Socket is kept before destruction |
LINGER_TIMEOUT = 60000;
|
Time that Socket goes into Linger state for |
CONNECT_TIMEOUT = 5000;
|
Time that Socket waits for connect completion |
TIMEWAIT_TIMEOUT = 240000;
|
Time that Socket goes into TimeWait state for (2 x MSL) |
SHUTDOWN_*
SHUTDOWN_RECV = 0;
|
|
SHUTDOWN_SEND = 1;
|
|
SHUTDOWN_BOTH = 2;
|
SELECT_*
SELECT_READ = 0;
|
|
SELECT_WRITE = 1;
|
|
SELECT_ERROR = 2;
|
|
SELECT_UNKNOWN = -1;
|
SS_*
SS_NOFDREF = $0001;
|
no file table ref any more |
SS_UNCONNECTED = SS_NOFDREF;
|
or just created socket |
SS_ISCONNECTED = $0002;
|
socket connected to a peer |
SS_ISCONNECTING = $0004;
|
in process of connecting |
SS_ISDISCONNECTING = $0008;
|
in process of disconnecting |
SS_CANTSENDMORE = $0010;
|
can't send more data |
SS_CANTRCVMORE = $0020;
|
can't receive more data |
SS_RCVATMARK = $0040;
|
at mark on input |
SS_PRIV = $0080;
|
privileged for broadcast |
SS_NBIO = $0100;
|
non-blocking ops |
SS_ASYNC = $0200;
|
async i/o notify |
SS_ISCONFIRMING = $0400;
|
accepting connection req |
SS_ISLISTENING = SS_ISCONFIRMING;
|
non standard |
SS_LOCAL_ADDR = $0800;
|
has local address/port (not used) |
SS_REMOTE_ADDR = $1000;
|
has remote address/port (not used) |
SS_CONN_REFUSED = $2000;
|
connection refused (ICMP_UNREACH) |
SS_CLOSED = $4000;
|
socket has been closed |
IP_*
IP_LOOPBACK_ADDRESS:TInAddr = (S_addr: $7F000001);
|
127.0.0.1 |
IP_LOOPBACK_NETWORK:TInAddr = (S_addr: $7F000000);
|
127.0.0.0 |
IP_LOOPBACK_NETMASK:TInAddr = (S_addr: $FF000000);
|
255.0.0.0 |
IP_BROADCAST_ADDRESS:TInAddr = (S_addr: $FFFFFFFF);
|
255.255.255.255 |
IP_BROADCAST_NETWORK:TInAddr = (S_addr: $FFFFFFFF);
|
255.255.255.255 |
IP_BROADCAST_NETMASK:TInAddr = (S_addr: $FFFFFFFF);
|
255.255.255.255 |
IP_DEFAULT_ADDRESS:TInAddr = (S_addr: $00000000);
|
0.0.0.0 |
IP_DEFAULT_NETWORK:TInAddr = (S_addr: $00000000);
|
0.0.0.0 |
IP_DEFAULT_NETMASK:TInAddr = (S_addr: $00000000);
|
0.0.0.0 |
IP_MULTICAST_HOSTS:TInAddr = (S_addr: $E0000001);
|
224.0.0.1 (All Hosts) |
IP_MULTICAST_ROUTERS:TInAddr = (S_addr: $E0000002);
|
224.0.0.2 (All Routers) |
IP_MULTICAST_NETWORK:TInAddr = (S_addr: $E0000000);
|
224.0.0.0 |
IP_MULTICAST_NETMASK:TInAddr = (S_addr: $F0000000);
|
240.0.0.0 |
Note: The recommended range for general use is 234.0.0.0 to 238.255.255.255 | |
IP_CLASSA_NETMASK:TInAddr = (S_addr: $FF000000);
|
255.0.0.0 |
IP_CLASSB_NETMASK:TInAddr = (S_addr: $FFFF0000);
|
255.255.0.0 |
IP_CLASSC_NETMASK:TInAddr = (S_addr: $FFFFFF00);
|
255.255.255.0 |
IP_CLASSD_NETMASK:TInAddr = (S_addr: $F0000000);
|
240.0.0.0 |
IP_CLASSE_NETMASK:TInAddr = (S_addr: $F0000000);
|
240.0.0.0 |
IP6_*
IP6_LOOPBACK_ADDRESS:TIn6Addr = (S6_addr: ($00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01));
|
|
IP6_DEFAULT_ADDRESS:TIn6Addr = (S6_addr: ($00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00));
|
Type definitions
Transport statistics
PTransportStatistics = ^TTransportStatistics;
TTransportStatistics = record
Note: Generic Transport | |
PacketsIn:Int64;
|
|
PacketsOut:Int64;
|
|
BytesIn:Int64;
|
|
BytesOut:Int64;
|
|
ErrorsIn:Int64;
|
|
ErrorsOut:Int64;
|
|
PacketsLost:Int64;
|
IPv4 nameservers
PIPNameservers = ^TIPNameservers;
TIPNameservers = array[0..MAX_NAME_SERVERS - 1] of TInAddr;
Note: IP4 Transport | |
IPv6 nameservers
PIP6Nameservers = ^TIP6Nameservers;
TIP6Nameservers = array[0..MAX_NAME_SERVERS - 1] of TIn6Addr;
Note: IP6 Transport | |
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
procedure TransportInit;
Note | None documented |
---|
function TransportStart:LongWord;
Note | None documented |
---|
function TransportStop:LongWord;
Note | None documented |
---|
function TransportBind:LongWord;
Note | None documented |
---|
function TransportUnbind:LongWord;
Note | None documented |
---|
Transport functions
function InAddrToHost(const AAddress:TInAddr):TInAddr; inline;
Note | None documented |
---|
function InAddrToNetwork(const AAddress:TInAddr):TInAddr; inline;
Note | None documented |
---|
function InAddrToString(const AAddress:TInAddr):String;
Note | Expects Address to be in Network order |
---|
function StringToInAddr(const AAddress:String):TInAddr;
Note | Returns Address in Network order |
---|
function InAddrIsEqual(const AAddress1,AAddress2:TInAddr):Boolean;
Note | Expects Address to be in Host order |
---|
function InAddrIsNone(const AAddress:TInAddr):Boolean;
Note | Expects Address to be in Host order |
---|
function InAddrIsDefault(const AAddress:TInAddr):Boolean;
Note | Expects Address to be in Host order |
---|
function InAddrIsLoopback(const AAddress:TInAddr):Boolean;
Note | Expects Address to be in Host order |
---|
function InAddrIsBroadcast(const AAddress:TInAddr):Boolean;
Note | Expects Address to be in Host order |
---|
function InAddrIsMulticast(const AAddress:TInAddr):Boolean;
Note | Expects Address to be in Host order |
---|
function In6AddrToString(const AAddress:TIn6Addr):String;
Note | None documented |
---|
function StringToIn6Addr(const AAddress:String):TIn6Addr;
Note | None documented |
---|
function In6AddrIsEqual(const AAddress1,AAddress2:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsDefault(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsLoopback(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsLinkLocal(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsSiteLocal(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsV4Mapped(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsV4Compatible(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsMulticast(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsMulticastNodeLocal(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsMulticastLinkLocal(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsMulticastSiteLocal(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsMulticastOrgLocal(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function In6AddrIsMulticastGlobal(const AAddress:TIn6Addr):Boolean;
Note | None documented |
---|
function IpxAddrToString(const AAddress:TIpxAddr):String;
Note | None documented |
---|
function StringToIpxAddr(const AAddress:String):TIpxAddr;
Note | None documented |
---|
function GetChecksum(ABuffer:Pointer; AOffset,ALength:Word):Word;
Note | None documented |
---|
function GetChecksum2(APseudo,ABuffer:Pointer; APseudoLength,ABufferOffset,ABufferLength:Word):Word;
Note | Pseudo is expected to start from Offset 0 |
---|
function GetChecksum3(APseudo,AHeader,AData:Pointer; APseudoLength,AHeaderLength,ADataOffset,ADataLength:Word):Word;
Note | Pseudo and Header are expected to start from Offset 0 |
---|
function GetChecksum4(APseudo,AHeader,AOptions,AData:Pointer; APseudoLength,AHeaderLength,AOptionsLength,ADataOffset,ADataLength:Word):Word;
Note | Pseudo, Header and Options are expected to start from Offset 0. |
---|
Transport helper functions
function HostTypeToString(AType:Word):String;
Note | None documented |
---|
function RouteTypeToString(AType:Word):String;
Note | None documented |
---|
function AddressTypeToString(AType:Word):String;
Note | None documented |
---|
function ProtocolToString(AProtocol:Word):String;
Note | None documented |
---|
function SocketTypeToString(ASocketType:Word):String;
Note | None documented |
---|
function AddressFamilyToString(AFamily:Word):String;
Note | None documented |
---|
Return to Unit Reference