Difference between revisions of "Unit Transport"

From Ultibo.org
Jump to: navigation, search
Line 20: Line 20:
 
----
 
----
  
''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
 +
|-
 +
|}
 +
</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;">'''IP4 transport constants''' <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_ADDRESS_SIZE = 4;</code>
 +
| SizeOf(TInAddr)
 +
|-
 +
|}
 +
</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;">'''IP6 transport constants''' <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_ADDRESS_SIZE = 16;</code>
 +
| SizeOf(TIn6Addr)
 +
|-
 +
|}
 +
</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;">'''IPX transport constants''' <code> IPX_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <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 constants''' <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;
 +
|-
 +
|}
 +
</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 constants''' <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 />
  
 
=== Type definitions ===
 
=== Type definitions ===

Revision as of 04:39, 18 December 2016

Return to Unit Reference


Description


Network Transport

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]
IP4 transport constants IP_*


[Expand]
IP6 transport constants IP6_*


[Expand]
IPX transport constants IPX_*


[Expand]
Transport socket constants TTL_*


[Expand]
Shutdown constants SHUTDOWN_*


[Expand]
Select constants SELECT_*


[Expand]
Socket state constants SS_*


Type definitions


To be documented

Public variables


To be documented

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 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: To be documented


[Expand]
function StringToIn6Addr(const AAddress:String):TIn6Addr;
Description: To be documented


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


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


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


[Expand]
function In6AddrIsLinkLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a link local address


[Expand]
function In6AddrIsSiteLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a site local address


[Expand]
function In6AddrIsV4Mapped(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a V4 mapped address


[Expand]
function In6AddrIsV4Compatible(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a V4 compatible address


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


[Expand]
function In6AddrIsMulticastNodeLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a multicast node local address


[Expand]
function In6AddrIsMulticastLinkLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a multicast link local address


[Expand]
function In6AddrIsMulticastSiteLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a multicast site local address


[Expand]
function In6AddrIsMulticastOrgLocal(const AAddress:TIn6Addr):Boolean;
Description: Check the supplied address to see if it is a multicast org local address


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


[Expand]
function IpxAddrToString(const AAddress:TIpxAddr):String;
Description: To be documented


[Expand]
function StringToIpxAddr(const AAddress:String):TIpxAddr;
Description: To be documented


[Expand]
function GetChecksum(ABuffer:Pointer; AOffset,ALength:Word):Word;
Description: Calculate the 1s Compliment Checksum of the Supplied Buffer


[Expand]
function GetChecksum2(APseudo,ABuffer:Pointer; APseudoLength,ABufferOffset,ABufferLength:Word):Word;
Description: Calculate the 1s Compliment Checksum of the Supplied Pseudo and Buffer


[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