X-Git-Url: http://www.lcore.org/git/lcore.git/blobdiff_plain/85ef2ce64f0cc31a063fccea69fdcc7281d51548..9a44a542cab11c03215fe3c844dde2529a87258d:/binipstuff.pas?ds=inline diff --git a/binipstuff.pas b/binipstuff.pas old mode 100755 new mode 100644 index 70ac401..8f28a27 --- a/binipstuff.pas +++ b/binipstuff.pas @@ -9,10 +9,8 @@ interface {$include lcoreconfig.inc} {$ifndef win32} -{$ifdef ipv6} uses sockets; {$endif} -{$endif} {$ifdef fpc} {$mode delphi} @@ -24,11 +22,15 @@ uses sockets; const hexchars:array[0..15] of char='0123456789abcdef'; - AF_INET=2; {$ifdef win32} + AF_INET=2; AF_INET6=23; {$else} - AF_INET6=10; + //redeclare these constants so units that use us can use them + //without using sockets directly + AF_INET=AF_INET; + AF_INET6=AF_INET6; + //AF_INET6=10; {$endif} type @@ -86,12 +88,19 @@ type - {$ifdef ipv6} + {$ifdef ipv6} {$ifdef ver1_0} cuint16=word; cuint32=dword; sa_family_t=word; + TInetSockAddr6 = packed record + sin6_family: word; + sin6_port: word; + sin6_flowinfo: uint32; + sin6_addr: tin6_addr; + sin6_scope_id: uint32; + end; {$endif} {$endif} TinetSockAddrv = packed record @@ -148,6 +157,7 @@ function longip(s:string):longint; function needconverttov4(const ip:tbinip):boolean; procedure converttov4(var ip:tbinip); +procedure converttov6(var ip:tbinip); function inaddrvtobinip(inaddrv:tinetsockaddrv):tbinip; function makeinaddrv(addr:tbinip;port:string;var inaddr:tinetsockaddrv):integer; @@ -317,7 +327,7 @@ end; { IPv6 address binary to/from string conversion routines -written by beware (steendijk at xs4all dot nl) +written by beware - implementation does not depend on other ipv6 code such as the tin6_addr type, the parameter can also be untyped. @@ -528,12 +538,33 @@ begin {$endif} end; + +{converts a binary IP to v6 if it is a v4 IP} +procedure converttov6(var ip:tbinip); +begin + {$ifdef ipv6} + if ip.family = AF_INET then begin + ip.family := AF_INET6; + ip.ip6.s6_addr32[3] := ip.ip; + ip.ip6.u6_addr32[0] := 0; + ip.ip6.u6_addr32[1] := 0; + ip.ip6.u6_addr16[4] := 0; + ip.ip6.u6_addr16[5] := $ffff; + end; + {$endif} +end; + + {-----------biniplist stuff--------------------------------------------------} const biniplist_prefix='bipl'#0; - biniplist_prefixlen=length(biniplist_prefix); + //fpc 1.0.x doesn't seem to like use of length function in a constant + //definition + //biniplist_prefixlen=length(biniplist_prefix); + biniplist_prefixlen=5; + function biniplist_new:tbiniplist; begin result := biniplist_prefix;