diff --git a/blcksock.pas b/blcksock.pas index 91c20d4..26ac333 100644 --- a/blcksock.pas +++ b/blcksock.pas @@ -1,5 +1,5 @@ {==============================================================================| -| Project : Ararat Synapse | 009.010.001 | +| Project : Ararat Synapse | 009.010.002 | |==============================================================================| | Content: Library base | |==============================================================================| @@ -102,7 +102,9 @@ interface uses SysUtils, Classes, +{$IFDEF FPC} synafpc, +{$ENDIF} synsock, synautil, synacode, synaip {$IFDEF CIL} ,System.Net @@ -3677,7 +3679,7 @@ begin begin ip6 := StrToIp6(MCastIP); for n := 0 to 15 do - Multicast6.ipv6mr_multiaddr.u6_addr8[n] := Ip6[n]; + Multicast6.ipv6mr_multiaddr.s6_addr[n] := Ip6[n]; Multicast6.ipv6mr_interface := 0; SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IPV6, IPV6_JOIN_GROUP, PAnsiChar(@Multicast6), SizeOf(Multicast6))); @@ -3704,7 +3706,7 @@ begin begin ip6 := StrToIp6(MCastIP); for n := 0 to 15 do - Multicast6.ipv6mr_multiaddr.u6_addr8[n] := Ip6[n]; + Multicast6.ipv6mr_multiaddr.s6_addr[n] := Ip6[n]; Multicast6.ipv6mr_interface := 0; SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IPV6, IPV6_LEAVE_GROUP, PAnsiChar(@Multicast6), SizeOf(Multicast6))); diff --git a/ssposix.inc b/ssposix.inc index 977462d..9d75e31 100644 --- a/ssposix.inc +++ b/ssposix.inc @@ -1,5 +1,5 @@ {==============================================================================| -| Project : Ararat Synapse | 001.001.004 | +| Project : Ararat Synapse | 001.001.005 | |==============================================================================| | Content: Socket Independent Platform Layer - Delphi Posix definition include | |==============================================================================| @@ -64,7 +64,6 @@ partially compatible with NextGen Delphi compiler - iOS } - interface uses @@ -89,10 +88,8 @@ const type TSocket = longint; TAddrFamily = integer; - TMemory = pointer; - type TFDSet = fd_set; PFDSet = Pfd_set; @@ -100,11 +97,17 @@ type Ttimeval = Posix.SysTime.timeval; const - // +{$IFDEF MACOS} FIONREAD = $4004667F; // oSX FIONREAD = Posix.StrOpts.FIONREAD; - FIONBIO = $8004667E; //OSX FIONBIO = Posix.StrOpts.FIONBIO; FIOASYNC = $8004667D; //OSX FIOASYNC = Posix.StrOpts.FIOASYNC; // not defined in XE2 +{$ELSE} + // LINUX + FIONREAD = $541B; + FIONBIO = $5421; + FIOASYNC = $5452; +{$ENDIF} + { FIONREAD = $541B; // LINUX? FIONBIO = $5421; @@ -352,7 +355,9 @@ var SockEnhancedApi: Boolean; SockWship6Api: Boolean; - {$DEFINE SOCK_HAS_SINLEN} // OSX +{$IFDEF MACOS} + {$DEFINE SOCK_HAS_SINLEN} // OSX +{$ENDIF} type TVarSin = packed record @@ -466,7 +471,7 @@ end; procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); begin FillChar(a^, sizeof(TInAddr6), 0); - a^.__s6_addr8[15] := 1; + a^.s6_addr[15] := 1; end; {$IFDEF NEXTGEN} @@ -733,7 +738,10 @@ var function GetAddr(const IP, port: string; Hints: AddrInfo; var Sin: TVarSin): integer; var Addr: PAddrInfo; + aIP,aPort : AnsiString; begin + aIP:=Utf8Encode(IP); + aPort:=Utf8Encode(Port); Addr := nil; try FillChar(Sin, Sizeof(Sin), 0); @@ -741,23 +749,23 @@ var begin Hints.ai_socktype := 0; Hints.ai_protocol := 0; - Result := GetAddrInfo(PAnsiChar(AnsiString(IP)), nil, Hints, Addr); + Result := GetAddrInfo(PAnsiChar(aIP), nil, Hints, Addr); end else begin if (IP = cAnyHost) or (IP = c6AnyHost) then begin Hints.ai_flags := AI_PASSIVE; - Result := GetAddrInfo(nil, PAnsiChar(AnsiString(Port)), Hints, Addr); + Result := GetAddrInfo(nil, PAnsiChar(aPort)), Hints, Addr); end else if (IP = cLocalhost) or (IP = c6Localhost) then begin - Result := GetAddrInfo(nil, PAnsiChar(AnsiString(Port)), Hints, Addr); + Result := GetAddrInfo(nil, PAnsiChar(aPort)), Hints, Addr); end else begin - Result := GetAddrInfo(PAnsiChar(AnsiString(IP)), PAnsiChar(AnsiString(Port)), Hints, Addr); + Result := GetAddrInfo(PAnsiChar(aIP), PAnsiChar(aPort), Hints, Addr); end; end; if Result = 0 then @@ -939,7 +947,7 @@ begin while PAdrPtr^[i] <> nil do begin InAddr := PAdrPtr^[i]^; - aby := TArray(InAddr); + aby := TArray(@InAddr); s := Format('%d.%d.%d.%d', [aby[0], aby[1], aby[2], aby[3]]); IPList.Add(s); @@ -1076,7 +1084,7 @@ begin try RemoteHost := GetHostByAddr(IPn, SizeOf(IPn), AF_INET); if RemoteHost <> nil then - Result := string(RemoteHost^.hname); + Result := string(RemoteHost^.h_name); finally SynSockCS.Leave; end; diff --git a/synachar.pas b/synachar.pas index ff00bd6..dd167ab 100644 --- a/synachar.pas +++ b/synachar.pas @@ -79,7 +79,11 @@ interface uses {$IFNDEF MSWINDOWS} {$IFNDEF FPC} - Libc, + {$IFNDEF POSIX} + Libc, + {$ELSE} + Posix.Langinfo, + {$ENDIF} {$ENDIF} {$ELSE} Windows, @@ -1501,7 +1505,11 @@ end; function GetCurCP: TMimeChar; begin {$IFNDEF FPC} + {$IFNDEF POSIX} Result := GetCPFromID(nl_langinfo(_NL_CTYPE_CODESET_NAME)); + {$ELSE} + Result := GetCPFromID(nl_langinfo(CODESET)); + {$ENDIF} {$ELSE} //How to get system codepage without LIBC? Result := UTF_8; diff --git a/synaicnv.pas b/synaicnv.pas index 8a51db5..38741f4 100644 --- a/synaicnv.pas +++ b/synaicnv.pas @@ -72,7 +72,9 @@ uses synafpc, {$IFNDEF MSWINDOWS} {$IFNDEF FPC} - Libc, + {$IFNDEF POSIX} + Libc, + {$ENDIF} {$ENDIF} SysUtils; {$ELSE} diff --git a/synamisc.pas b/synamisc.pas index 838c5c6..7848ccd 100644 --- a/synamisc.pas +++ b/synamisc.pas @@ -80,7 +80,9 @@ uses synautil, blcksock, SysUtils, Classes {$IFDEF UNIX} {$IFNDEF FPC} + {$IFNDEF POSIX} , Libc + {$ENDIF} {$ENDIF} {$ELSE} , Windows