Difference between revisions of "TUDPProtocol"
From Ultibo.org
(Created page with "Return to Unit UDP __TOC__ === Description === ---- ''To be documented'' === Class definitions === ---- <div class="toccolours mw-collapsible mw-collapsed"...") |
(No difference)
|
Revision as of 01:31, 31 May 2018
Return to Unit UDP
Description
To be documented
Class definitions
TUDPProtocol = class(TNetworkProtocol)
constructor Create(AManager:TProtocolManager; const AName:String);
|
|
destructor Destroy; override;
|
|
private
| |
FNextPort:Word;
|
|
private
| |
function PacketHandler(AHandle:THandle; ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean;
|
|
protected
| |
function OpenPort(ASocket:TProtocolSocket; APort:Word):Boolean; override;
|
|
function ClosePort(ASocket:TProtocolSocket):Boolean; override;
|
|
function FindPort(APort:Word; AWrite,ALock:Boolean):TProtocolPort; override;
|
|
function SelectCheck(ASource,ADest:PFDSet; ACode:Integer):Integer; override;
|
|
function SelectWait(ASocket:TProtocolSocket; ACode:Integer; ATimeout:LongWord):Integer; override;
|
|
function SendPacket(ASocket:TProtocolSocket; ASource,ADest:Pointer; ASourcePort,ADestPort:Word; APacket:PPacketFragment; ASize,AFlags:Integer):Integer; override;
|
|
public
| |
function Accept(ASocket:TProtocolSocket; ASockAddr:PSockAddr; AAddrLength:PInteger):TProtocolSocket; override;
|
|
function Bind(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; AAddrLength:Integer):Integer; override;
|
|
function CloseSocket(ASocket:TProtocolSocket):Integer; override;
|
|
function Connect(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; AAddrLength:Integer):Integer; override;
|
|
function IoctlSocket(ASocket:TProtocolSocket; ACmd:DWORD; var AArg:u_long):Integer; override;
|
|
function GetPeerName(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; var AAddrLength:Integer):Integer; override;
|
|
function GetSockName(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; var AAddrLength:Integer):Integer; override;
|
|
function GetSockOpt(ASocket:TProtocolSocket; ALevel,AOptName:Integer; AOptValue:PChar; var AOptLength:Integer):Integer; override;
|
|
function Listen(ASocket:TProtocolSocket; ABacklog:Integer):Integer; override;
|
|
function Recv(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer):Integer; override;
|
|
function RecvFrom(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer; var AFromAddr:TSockAddr; var AFromLength:Integer):Integer; override;
|
|
function Select(ANfds:Integer; AReadfds,AWritefds,AExceptfds:PFDSet; ATimeout:PTimeVal):LongInt; override;
|
|
function Send(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer):Integer; override;
|
|
function SendTo(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer; var AToAddr:TSockAddr; AToLength:Integer):Integer; override;
|
|
function SetSockOpt(ASocket:TProtocolSocket; ALevel,AOptName:Integer; AOptValue:PChar; AOptLength:Integer):Integer; override;
|
|
function Shutdown(ASocket:TProtocolSocket; AHow:Integer):Integer; override;
|
|
function Socket(AFamily,AStruct,AProtocol:Integer):TProtocolSocket; override;
|
|
function AddTransport(ATransport:TNetworkTransport):Boolean; override;
|
|
function RemoveTransport(ATransport:TNetworkTransport):Boolean; override;
|
|
function FindSocket(AFamily,AStruct,AProtocol:Word; ALocalAddress,ARemoteAddress:Pointer; ALocalPort,ARemotePort:Word; ABroadcast,AListen,ALock:Boolean; AState:LongWord):TProtocolSocket; override;
|
|
procedure FlushSockets(All:Boolean); override;
|
|
function StartProtocol:Boolean; override;
|
|
function StopProtocol:Boolean; override;
|
|
function ProcessProtocol:Boolean; override;
|
Function declarations
constructor TUDPProtocol.Create(AManager:TProtocolManager; const AName:String);
Description: To be documented
Note | None documented |
---|
destructor TUDPProtocol.Destroy;
Description: To be documented
Note | None documented |
---|
function TUDPProtocol.PacketHandler(AHandle:THandle; ASource,ADest,APacket:Pointer; ASize:Integer; ABroadcast:Boolean):Boolean;
Description: Process a packet received by a Transport
Handle | The Handle of the Protocol Transport the packet was received from |
---|---|
Source | The source address of the received packet (Set by Transport) |
Dest | The destination address of the received packet (Set by Transport) |
Packet | The received packet (The complete packet including Transport header) |
Size | The size of the received packet in bytes |
Broadcast | True if the destination address is a broadcast address |
function TUDPProtocol.OpenPort(ASocket:TProtocolSocket; APort:Word):Boolean;
Description: To be documented
Note | Caller must hold the Socket lock |
---|
function TUDPProtocol.ClosePort(ASocket:TProtocolSocket):Boolean;
Description: To be documented
Note | Caller must hold the Socket lock |
---|
function TUDPProtocol.FindPort(APort:Word; AWrite,ALock:Boolean):TProtocolPort;
Description: Find a protocol port for the specified port number
Port | The port number to find |
---|---|
Write | If True then use the writer lock |
Lock | If True then lock the found entry before returning |
function TUDPProtocol.SelectCheck(ASource,ADest:PFDSet; ACode:Integer):Integer;
Description: To be documented
Source | Source is the working set to check |
---|---|
Dest | Dest is the set passed to Select |
function TUDPProtocol.SelectWait(ASocket:TProtocolSocket; ACode:Integer; ATimeout:LongWord):Integer;
Description: To be documented
Socket | Socket is the single socket to check |
---|---|
Code | Code is the type of check |
Timeout | Timeout is how long to wait |
function TUDPProtocol.SendPacket(ASocket:TProtocolSocket; ASource,ADest:Pointer; ASourcePort,ADestPort:Word; APacket:PPacketFragment; ASize,AFlags:Integer):Integer;
Description: Send a Packet by adding the Protocol Header and other details to the Data
Socket | The socket to use for sending the packet |
---|---|
Source | The source address of the packet (Host Order) |
Dest | The destination address of the packet (Host Order) |
SourcePort | The source port of the packet (Host Order) |
DestPort | The destination port of the packet (Host Order) |
Packet | The packet data to send |
Size | The size of the packet data in bytes |
Flags | Any protocol specific flags for sending |
Note | Caller must hold the Socket lock |
function TUDPProtocol.Accept(ASocket:TProtocolSocket; ASockAddr:PSockAddr; AAddrLength:PInteger):TProtocolSocket;
Description: BSD compatible Accept
Socket | The socket to accept from |
---|---|
SockAddr | The socket address (Network Order) |
AddrLength | The socket address length |
Note | Caller must hold the Socket lock |
function TUDPProtocol.Bind(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; AAddrLength:Integer):Integer;
Description: BSD compatible Bind
Socket | The socket to bind |
---|---|
SockAddr | The socket address (Network Order) |
AddrLength | The socket address length |
Note | Sets the LocalAddress/Port for future Sends and Receives, Address can be specified as INADDR_ANY which allows Listening or auto assignment. If Port is IPPORT_ANY then a dynamic Port will be assigned.
Caller must hold the Socket lock |
function TUDPProtocol.CloseSocket(ASocket:TProtocolSocket):Integer;
Description: BSD compatible Close Socket
Socket | The socket to close |
---|---|
Note | Closes and removes the socket, does not perform Linger
Caller must hold the Socket lock |
function TUDPProtocol.Connect(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; AAddrLength:Integer):Integer;
Description: BSD compatible Connect
Socket | The socket to connect |
---|---|
SockAddr | The socket address (Network Order) |
AddrLength | The socket address length |
Note | Sets the RemoteAddress/Port of future Sends and Receives, if Bind has not been called then the LocalAddress/Port will be set appropriately as well based on the route to the RemoteAddress.
Caller must hold the Socket lock |
function TUDPProtocol.IoctlSocket(ASocket:TProtocolSocket; ACmd:DWORD; var AArg:u_long):Integer;
Description: BSD compatible IO Control Socket
Socket | The socket to control |
---|---|
Cmd | The socket command |
Arg | The command argument |
Note | Caller must hold the Socket lock |
function TUDPProtocol.GetPeerName(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; var AAddrLength:Integer):Integer;
Description: BSD compatible Get Peer Name (Remote)
Socket | The socket to get from |
---|---|
SockAddr | The socket address (Network Order) |
AddrLength | The socket address length |
Note | Caller must hold the Socket lock |
function TUDPProtocol.GetSockName(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; var AAddrLength:Integer):Integer;
Description: BSD compatible Get Sock Name (Local)
Socket | The socket to get from |
---|---|
SockAddr | The socket address (Network Order) |
AddrLength | The socket address length |
Note | Caller must hold the Socket lock |
function TUDPProtocol.GetSockOpt(ASocket:TProtocolSocket; ALevel,AOptName:Integer; AOptValue:PChar; var AOptLength:Integer):Integer;
Description: BSD compatible Get Socket Option
Socket | The socket to get the option from |
---|---|
Level | The protocol level for the option |
OptName | The name of the option to get |
OptValue | The value of the option |
OptLength | The length of the option |
Note | Caller must hold the Socket lock |
function TUDPProtocol.Listen(ASocket:TProtocolSocket; ABacklog:Integer):Integer;
Description: BSD compatible Listen
Socket | The socket to listen on |
---|---|
Backlog | Queue depth for accepted connections |
Note | Caller must hold the Socket lock |
function TUDPProtocol.Recv(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer):Integer;
Description: BSD compatible Receive
Socket | The socket to receive from |
---|---|
Buffer | Buffer for received data |
Length | Length of buffer in bytes |
Flags | Protocol specific receive flags |
Note | Caller must hold the Socket lock |
function TUDPProtocol.RecvFrom(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer; var AFromAddr:TSockAddr; var AFromLength:Integer):Integer;
Description: BSD compatible Receive From
Socket | The socket to receive from |
---|---|
Buffer | Buffer for received data |
Length | Length of buffer in bytes |
Flags | Protocol specific receive flags |
FromAddr | The address the data was received from (Network Order) |
FromLength | The length of the address |
Note | Caller must hold the Socket lock |
function TUDPProtocol.Send(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer):Integer;
Description: BSD compatible Send
Socket | The socket to send to |
---|---|
Buffer | Buffer for data to send |
Length | Length of buffer in bytes |
Flags | Protocol specific send flags |
Note | Caller must hold the Socket lock |
function TUDPProtocol.SendTo(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer; var AToAddr:TSockAddr; AToLength:Integer):Integer;
Description: BSD compatible Send To
Socket | The socket to send to |
---|---|
Buffer | Buffer for data to send |
Length | Length of buffer in bytes |
Flags | Protocol specific send flags |
ToAddr | The socket address to send to (Network Order) |
ToLength | The length of the socket address |
Note | Caller must hold the Socket lock |
function TUDPProtocol.SetSockOpt(ASocket:TProtocolSocket; ALevel,AOptName:Integer; AOptValue:PChar; AOptLength:Integer):Integer;
Description: BSD compatible Set Socket Option
Socket | The socket to set the option for |
---|---|
Level | The protocol level for the option |
OptName | The name of the option to set |
OptValue | The value of the option |
OptLength | The length of the option |
Note | Caller must hold the Socket lock |
function TUDPProtocol.Shutdown(ASocket:TProtocolSocket; AHow:Integer):Integer;
Description: BSD compatible Shutdown
Socket | The socket to shutdown |
---|---|
How | The direction to shutdown the socket |
Note | Shutdown does not result in CloseSocket so Closed must not get set
Caller must hold the Socket lock |
function TUDPProtocol.Socket(AFamily,AStruct,AProtocol:Integer):TProtocolSocket;
Description: BSD compatible Socket (Create a new socket)
Family | Socket address family (eg AF_INET) |
---|---|
Struct | Socket type (eg SOCK_DGRAM) |
Protocol | Socket protocol (eg IPPROTO_UDP) |
function TUDPProtocol.AddTransport(ATransport:TNetworkTransport):Boolean;
Description: Add a transport to this protocol
Transport | The transport to add |
---|
function TUDPProtocol.RemoveTransport(ATransport:TNetworkTransport):Boolean;
Description: Remove a transport from this protocol
Transport | The transport to remove |
---|
function TUDPProtocol.FindSocket(AFamily,AStruct,AProtocol:Word; ALocalAddress,ARemoteAddress:Pointer; ALocalPort,ARemotePort:Word; ABroadcast,AListen,ALock:Boolean; AState:LongWord):TProtocolSocket;
Description: Find a protocol socket based on all relevant parameters
Family | Socket address family (eg AF_INET) |
---|---|
Struct | Socket type (eg SOCK_DGRAM) |
Protocol | Socket protocol (eg IPPROTO_UDP) |
LocalAddress | Local transport address to match (Host Order) |
RemoteAddress | Remote transport address to match (Host Order) |
LocalPort | Local port to match (Host Order) |
RemotePort | Remote port to match (Host Order) |
Broadcast | If True then match broadcast addresses |
Listen | If True then match only listening sockets |
Lock | If True then lock the found entry before returning |
procedure TUDPProtocol.FlushSockets(All:Boolean);
Description: Flush sockets from the socket cache
All | If True flush all sockets, otherwise flush expired sockets. |
---|
function TUDPProtocol.StartProtocol:Boolean;
Description: Start this protocol ready for sending and receiving
Note | None documented |
---|
function TUDPProtocol.StopProtocol:Boolean;
Description: Stop this protocol ready for removal
Note | None documented |
---|
function TUDPProtocol.ProcessProtocol:Boolean;
Description: Process periodic tasks for this protocol
Note | None documented |
---|
Return to Unit Reference