
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1549 8e941d3f-bd1b-0410-a28a-d453659cc2b4
67 lines
1.3 KiB
ObjectPascal
67 lines
1.3 KiB
ObjectPascal
unit chesstcputils;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF MSWINDOWS}
|
|
Winsock,
|
|
{$ENDIF}
|
|
Classes, SysUtils, Process;
|
|
|
|
function ChessGetLocalIP(): string;
|
|
|
|
implementation
|
|
|
|
const
|
|
CFormatIPMask = '%d.%d.%d.%d';
|
|
|
|
function ChessGetLocalIP(): string;
|
|
var
|
|
I, VAttempt: Integer;
|
|
VStrTemp, VSitesToTry: TStringList;
|
|
{$IFDEF UNIX}
|
|
VProcess: TProcess;
|
|
{$ENDIF}
|
|
{$IFDEF MSWINDOWS}
|
|
var
|
|
VWSAData: TWSAData;
|
|
VHostEnt: PHostEnt;
|
|
VName: string;
|
|
{$ENDIF}
|
|
begin
|
|
Result := '';
|
|
{$IFDEF UNIX}
|
|
VStrTemp := TStringList.Create;
|
|
VProcess := TProcess.Create(nil);
|
|
try
|
|
VProcess.CommandLine :=
|
|
'sh -c "ifconfig eth0 | awk ''/inet end/ {print $3}''"';
|
|
VProcess.Options := [poWaitOnExit, poUsePipes];
|
|
VProcess.Execute;
|
|
VStrTemp.LoadFromStream(VProcess.Output);
|
|
Result := Trim(VStrTemp.Text);
|
|
finally
|
|
VStrTemp.Free;
|
|
VProcess.Free;
|
|
end;
|
|
{$ENDIF}
|
|
{$IFDEF MSWINDOWS}
|
|
{$HINTS OFF}
|
|
WSAStartup(2, VWSAData);
|
|
{$HINTS ON}
|
|
SetLength(VName, 255);
|
|
GetHostName(PChar(VName), 255);
|
|
SetLength(VName, StrLen(PChar(VName)));
|
|
VHostEnt := GetHostByName(PChar(VName));
|
|
with VHostEnt^ do
|
|
Result := Format(CFormatIPMask, [Byte(h_addr^[0]), Byte(h_addr^[1]),
|
|
Byte(h_addr^[2]), Byte(h_addr^[3])]);
|
|
WSACleanup;
|
|
{$ENDIF}
|
|
end;
|
|
|
|
end.
|
|
|