constructor Create(AManager:TProtocolManager; const AName:String);
|
|
destructor Destroy; override;
|
|
private
|
FLock:TSynchronizerHandle;
|
|
FLocalLock:TMutexHandle;
|
|
protected
|
FManager:TProtocolManager;
|
|
FName:String;
|
|
|
FProtocol:Word;
|
|
FSocketType:Word;
|
|
FTransports:TNetworkList;
|
List of TProtocolTransport objects
|
|
FTimer:TSocketTimer;
|
Timer for socket processing
|
FThread:TSocketThread;
|
Thread for socket processing
|
FPorts:TNetworkList;
|
List of TProtocolPort objects
|
FSockets:TNetworkList;
|
List of TProtocolSocket objects
|
|
FStatistics:TProtocolStatistics;
|
|
|
function GetName:String;
|
|
|
function AcquireLock:Boolean;
|
|
function ReleaseLock:Boolean;
|
|
|
function OpenPort(ASocket:TProtocolSocket; APort:Word):Boolean; virtual;
|
|
function ClosePort(ASocket:TProtocolSocket):Boolean; virtual;
|
|
function FindPort(APort:Word; AWrite,ALock:Boolean):TProtocolPort; virtual;
|
|
|
function SelectGet(AReadfds,AWritefds,AExceptfds:PFDSet; var ACode:Integer):TProtocolSocket; virtual;
|
|
|
function SelectStart(ASource,ADest:PFDSet):Boolean; virtual;
|
|
function SelectCheck(ASource,ADest:PFDSet;ACode:Integer):Integer; virtual;
|
|
function SelectWait(ASocket:TProtocolSocket; ACode:Integer; ATimeout:LongWord):Integer; virtual;
|
|
|
function SendPacket(ASocket:TProtocolSocket; ASource,ADest:Pointer; ASourcePort,ADestPort:Word; APacket:PPacketFragment; ASize,AFlags:Integer):Integer; virtual;
|
|
public
|
property Manager:TProtocolManager read FManager;
|
|
property Name:String read FName;
|
|
|
property Protocol:Word read FProtocol;
|
|
property SocketType:Word read FSocketType;
|
|
|
function Accept(ASocket:TProtocolSocket; ASockAddr:PSockAddr; AAddrLength:PInteger):TProtocolSocket; virtual;
|
|
function Bind(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; AAddrLength:Integer):Integer; virtual;
|
|
function CloseSocket(ASocket:TProtocolSocket):Integer; virtual;
|
|
function Connect(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; AAddrLength:Integer):Integer; virtual;
|
|
function IoctlSocket(ASocket:TProtocolSocket; ACmd:DWORD; var AArg:u_long):Integer; virtual;
|
|
function GetPeerName(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; var AAddrLength:Integer):Integer; virtual;
|
|
function GetSockName(ASocket:TProtocolSocket; var ASockAddr:TSockAddr; var AAddrLength:Integer):Integer; virtual;
|
|
function GetSockOpt(ASocket:TProtocolSocket; ALevel,AOptName:Integer; AOptValue:PChar; var AOptLength:Integer):Integer; virtual;
|
|
function Listen(ASocket:TProtocolSocket; ABacklog:Integer):Integer; virtual;
|
|
function Recv(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer):Integer; virtual;
|
|
function RecvFrom(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer; var AFromAddr:TSockAddr; var AFromLength:Integer):Integer; virtual;
|
|
function Select(ANfds:Integer; AReadfds,AWritefds,AExceptfds:PFDSet; ATimeout:PTimeVal):LongInt; virtual;
|
|
function Send(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer):Integer; virtual;
|
|
function SendTo(ASocket:TProtocolSocket; var ABuffer; ALength,AFlags:Integer; var AToAddr:TSockAddr; AToLength:Integer):Integer; virtual;
|
|
function SetSockOpt(ASocket:TProtocolSocket; ALevel,AOptName:Integer; AOptValue:PChar; AOptLength:Integer):Integer; virtual;
|
|
function Shutdown(ASocket:TProtocolSocket; AHow:Integer):Integer; virtual;
|
|
function Socket(AFamily,AStruct,AProtocol:Integer):TProtocolSocket; virtual;
|
|
|
function ReaderLock:Boolean;
|
|
function ReaderUnlock:Boolean;
|
|
function WriterLock:Boolean;
|
|
function WriterUnlock:Boolean;
|
|
|
function GetStatistics:TProtocolStatistics; virtual;
|
|
|
function GetTransportByHandle(AHandle:THandle; ALock:Boolean; AState:LongWord):TProtocolTransport;
|
|
function GetTransportByFamily(AFamily:Word; ALock:Boolean; AState:LongWord):TProtocolTransport;
|
|
function GetTransportByTransport(ATransport:TNetworkTransport; ALock:Boolean; AState:LongWord):TProtocolTransport;
|
|
function GetTransportByNext(APrevious:TProtocolTransport; ALock,AUnlock:Boolean; AState:LongWord):TProtocolTransport;
|
|
|
function AddTransport(ATransport:TNetworkTransport):Boolean; virtual;
|
|
function RemoveTransport(ATransport:TNetworkTransport):Boolean; virtual;
|
|
|
function GetSocketByNext(APrevious:TProtocolSocket; ALock,AUnlock:Boolean; AState:LongWord):TProtocolSocket;
|
|
function CheckSocket(ASocket:TProtocolSocket; ALock:Boolean; AState:LongWord):Boolean; virtual;
|
|
function FindSocket(AFamily,AStruct,AProtocol:Word; ALocalAddress,ARemoteAddress:Pointer; ALocalPort,ARemotePort:Word; ABroadcast,AListen,ALock:Boolean; AState:LongWord):TProtocolSocket; virtual;
|
|
procedure FlushSockets(All:Boolean); virtual;
|
|
|
function StartProtocol:Boolean; virtual;
|
|
function StopProtocol:Boolean; virtual;
|
|
function ProcessProtocol:Boolean; virtual;
|
|
|
function ProcessSockets:Boolean; virtual;
|
|
function ProcessSocket(ASocket:TProtocolSocket):Boolean; virtual;
|
|
|
function BindProtocol(ATransport:TNetworkTransport):Boolean; virtual;
|
|
function UnbindProtocol(ATransport:TNetworkTransport):Boolean; virtual;
|
|
|
function CheckTimer:Boolean; virtual;
|
|
function ProcessTimer:Boolean; virtual;
|
|
|
function SendSocket(ASocket:TProtocolSocket):Boolean; virtual;
|
|
|
function ScheduleSocket(ASocket:TProtocolSocket; ATimeout:LongWord):Boolean; virtual;
|
|
function UnscheduleSocket(ASocket:TProtocolSocket):Boolean; virtual;
|
|
|
function ScheduleSocketItem(ASocket:TProtocolSocket; AItem:PSocketTimerItem; ATimeout:LongWord):Boolean; virtual;
|
|
function UnscheduleSocketItem(ASocket:TProtocolSocket; AItem:PSocketTimerItem):Boolean; virtual;
|
|