Closed

Delphi/FPC: Port Windows WinSock-based Socket classes to Mac

This project received 2 bids from talented freelancers with an average bid price of $630 USD.

Get free quotes for a project like this
Employer working
Skills Required
Project Budget
$30 - $250 USD
Total Bids
2
Project Description

Port existing Windows Sockets-based Pascal language classes library to Mac OS (Delphi or Lazarus programming environment). Need support for both TCP and UDP protocols (SOCK_STREAM/SOCK_DGRAM), blocking and non-blocking sockets; don't using Indy. Non blocking sockets should not use separate thread per each socket.

Classes to port:
//private fields/methods are omitted
------------------- >8 ----------------------------
type
//events
TIPSocketOnAccept = procedure (socket:TIPSocket);
TIPSocketOnConnecting = TIPSocketOnAccept;
TIPSocketOnRead = TIPSocketOnAccept;
TIPSocketOnConnect = TIPSocketOnAccept;

//base class for TCP/UDP sockets
TIPSocket = class
public
property Addr:sockaddr_in read GetAddr write FAddr;
property Host:string read GetHost write SetHost;
property Address:string read GetAddress write SetAddress;
property Port:integer read GetPort write SetPort;

property RemoteIP:string read GetRemoteIp;

property Error:cardinal read FError;

property Socket:TSocket read FSocket;

function NoAddr:boolean; // true if address/port is not set
constructor Create(const asynchronous:boolean = true);
destructor Destroy;override;

function EnableAsync:boolean;virtual; //enable non-blocking mode
function DisableAsync:boolean;virtual; //disable non-blocking mode

function Send(data:pointer; cb:cardinal):integer;virtual;abstract;
function Rece(data:pointer; cb:cardinal):integer;virtual;abstract;

procedure Close;

function BytesReceived:cardinal;
procedure SendReadSignal; // for non-blocking sockets sends FD_READ event to enforce reading data from the non-blocking socket.
class function GetRemoteComputerName(ip:ansistring):string; static;
class function ResolveHostName(s:ansistring):ansistring; static;
class function StrToAddr(s:ansistring):integer;static;
class function Select(nfds:Integer; readFDS, writeFDS, exceptFDS:PFDSet; timeout:PTimeVal):integer;
end;



TTCPSocket = class(TIPSocket)
private
public
property OnRead:TIPSocketOnRead read FOnRead write FOnRead;
property OnClose:TIPSocketOnRead read FOnClose write FOnClose;
constructor Create(const asynchronous:boolean = true; const basesock:TSocket = -1);
function EnableAsync:boolean;override;
function Connect:boolean;virtual;
function Send(data:pointer; cb:cardinal):integer;override;
function Rece(data:pointer; cb:cardinal):integer;override;

function SendBlock(data:pointer; cb:cardinal; const asynctimeout:integer = -1):integer;virtual; //sends long blocks (more than IO buffer size)
function ReceBlock(data:pointer; cb:cardinal; const asynctimeout:integer = -1):integer;virtual; //receives long blocks (more than IO buffer size)
end;


TTCPServerSocket = class(TTCPSocket)
private
public
property OnAccept:TIPSocketOnAccept read FOnAccept write FOnAccept;
property Error:cardinal read FError;
constructor Create(port:integer; const bindaddress:integer = INADDR_ANY; const asynchronous:boolean = true);
function Listen:integer;
function Accept:TTCPSocket;
function EnableAsync:boolean;override;
end;

TUDPSocket = class(TIPSocket)
private
public
constructor Create(const asynchronous:boolean = true);
property OnRead:TIPSocketOnRead read FOnRead write FOnRead;
function Broadcast(enable:boolean):boolean; //enables UDP Broadcast
function MulticastTTL(value:integer):boolean;
function Multicast(address:ansistring):boolean; //enables multicast for the specified address, adds itself to Multicast group
function Send(data:pointer; cb:cardinal; _toaddr:integer; _toport:word):integer;
function Rece(data:pointer; cb:cardinal; fromaddr:pinteger; fromport:pword):integer;
function EnableAsync:boolean;override;
end;

TUDPServerSocket = class(TUDPSocket)
private
public
constructor Create(port:integer; const bindaddress:integer = INADDR_ANY; const asynchronous:boolean = true);
end;

Looking to make some money?

  • Set your budget and the timeframe
  • Outline your proposal
  • Get paid for your work

Hire Freelancers who also bid on this project

    • Forbes
    • The New York Times
    • Time
    • Wall Street Journal
    • Times Online