123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- function HostAddrToStr (Entry : THostAddr) : String;
- Var Dummy : String[4];
- I : Longint;
- begin
- HostAddrToStr:='';
- For I:=1 to 4 do
- begin
- Str(Entry[I],Dummy);
- HostAddrToStr:=HostAddrToStr+Dummy;
- If I<4 Then
- HostAddrToStr:=HostAddrToStr+'.';
- end;
- end;
- function StrToHostAddr(IP : String) : THostAddr ;
- Var
- Dummy : String;
- I : Longint;
- J : Integer;
- Temp : THostAddr;
- begin
- Result:=NoAddress;
- For I:=1 to 4 do
- begin
- If I<4 Then
- begin
- J:=Pos('.',IP);
- If J=0 then
- exit;
- Dummy:=Copy(IP,1,J-1);
- Delete (IP,1,J);
- end
- else
- Dummy:=IP;
- Val (Dummy,Temp[I],J);
- If J<>0 then Exit;
- end;
- Result:=Temp;
- end;
- function NetAddrToStr (Entry : TNetAddr) : String;
- Var Dummy : String[4];
- I : Longint;
- begin
- NetAddrToStr:='';
- For I:=4 downto 1 do
- begin
- Str(Entry[I],Dummy);
- NetAddrToStr:=NetAddrToStr+Dummy;
- If I>1 Then
- NetAddrToStr:=NetAddrToStr+'.';
- end;
- end;
- function StrToNetAddr(IP : String) : TNetAddr;
- begin
- StrToNetAddr:=TNetAddr(StrToHostAddr(IP));
- end;
- Function HostToNet (Host : ThostAddr) : THostAddr;
- begin
- {$Ifdef ENDIAN_LITTLE}
- Result[1]:=Host[4];
- Result[2]:=Host[3];
- Result[3]:=Host[2];
- Result[4]:=Host[1];
- {$ELSE}
- result:=host;
- {$endif}
- end;
- Function NetToHost (Net : TNetAddr) : TNetAddr;
- begin
- {$Ifdef ENDIAN_LITTLE}
- Result[1]:=Net[4];
- Result[2]:=Net[3];
- Result[3]:=Net[2];
- Result[4]:=Net[1];
- {$ELSE}
- result:=net;
- {$endif}
- end;
- Function HostToNet (Host : Longint) : Longint;
- begin
- {$Ifdef ENDIAN_LITTLE}
- Result:=Longint(HostToNet(THostAddr(host)));
- {$ELSE}
- result:=host;
- {$endif}
- end;
- Function NetToHost (Net : Longint) : Longint;
- begin
- {$Ifdef ENDIAN_LITTLE}
- Result:=Longint(NetToHost(TNetAddr(Net)));
- {$ELSE}
- result:=net;
- {$endif}
- end;
- Function ShortHostToNet (Host : Word) : Word;
- begin
- {$Ifdef ENDIAN_LITTLE}
- ShortHostToNet:=lo(host)*256+Hi(Host);
- {$ELSE}
- result:=host;
- {$endif}
- end;
- Function ShortNetToHost (Net : Word) : Word;
- begin
- {$Ifdef ENDIAN_LITTLE}
- ShortNetToHost:=lo(Net)*256+Hi(Net);
- {$ELSE}
- result:=net;
- {$endif}
- end;
- function HostAddrToStr6 (Entry : THostAddr6) : String;
- var
- i: byte;
- zr1,zr2: set of byte;
- zc1,zc2: byte;
- have_skipped: boolean;
- begin
- zr1 := [];
- zr2 := [];
- zc1 := 0;
- zc2 := 0;
- for i := 0 to 7 do begin
- if Entry[i] = 0 then begin
- include(zr2, i);
- inc(zc2);
- end else begin
- if zc1 < zc2 then begin
- zc1 := zc2;
- zr1 := zr2;
- zc2 := 0; zr2 := [];
- end;
- end;
- end;
- if zc1 < zc2 then begin
- zc1 := zc2;
- zr1 := zr2;
- end;
- SetLength(HostAddrToStr6, 8*5-1);
- SetLength(HostAddrToStr6, 0);
- have_skipped := false;
- for i := 0 to 7 do begin
- if not (i in zr1) then begin
- if have_skipped then begin
- if HostAddrToStr6 = ''
- then HostAddrToStr6 := '::'
- else HostAddrToStr6 := HostAddrToStr6 + ':';
- have_skipped := false;
- end;
- // FIXME: is that shortnettohost really proper there? I wouldn't be too sure...
- HostAddrToStr6 := HostAddrToStr6 + IntToHex(ShortNetToHost(Entry[i]), 1) + ':';
- end else begin
- have_skipped := true;
- end;
- end;
- if have_skipped then
- if HostAddrToStr6 = ''
- then HostAddrToStr6 := '::'
- else HostAddrToStr6 := HostAddrToStr6 + ':';
- if HostAddrToStr6 = '' then HostAddrToStr6 := '::';
- if not (7 in zr1) then
- SetLength(HostAddrToStr6, Length(HostAddrToStr6)-1);
- end;
- function StrToHostAddr6(IP : String) : THostAddr6;
- begin
- end;
- function NetAddrToStr6 (Entry : TNetAddr6) : String;
- begin
- Result := HostAddrToStr6(Entry);
- end;
- function StrToNetAddr6(IP : String) : TNetAddr6;
- begin
- Result := StrToHostAddr6(IP);
- end;
|