Ignore:
Timestamp:
Dec 26, 2011, 12:07:37 PM (13 years ago)
Author:
chronos
Message:
  • Upraveno: Testování varianty HTTP serveru jako přímé obsluhy přes TCP. Momentálně není odděleno generování stránek pro použití z více vláken.
  • Upraveno: Třída uchování jména počítač nyní pro převod do IPv4 používá ověření správnosti namísto přímého převodu a zahlášení výjimky.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Components/CoolWeb/Common/UHtmlClasses.pas

    r67 r68  
    99
    1010type
     11
     12  { TDomainAddress }
     13
    1114  TDomainAddress = class(TPersistent)
    1215  private
     
    1417    procedure SetAsString(const Value: string);
    1518  public
    16     Levels: array of string;
     19    Levels: TListString;
     20    constructor Create;
     21    destructor Destroy; override;
    1722    property AsString: string read GetAsString write SetAsString;
    1823  end;
    1924
    2025  TAddrClass = (acA, acB, acC, acD, acE);
     26
     27  { TIpAddress }
    2128
    2229  TIpAddress = class(TPersistent)
     
    3239    Octets: array[0..3] of Byte;
    3340    procedure Assign(Source: TPersistent); override;
     41    function IsAddressString(Value: string): Boolean;
    3442    property AsCardinal: Cardinal read GetAsCardinal write SetAsCardinal;
    3543    property AsString: string read GetAsString write SetAsString;
     
    589597end;
    590598
     599function TIpAddress.IsAddressString(Value: string): Boolean;
     600var
     601  Parts: TListString;
     602begin
     603  Result := True;
     604  try
     605    Parts := TListString.Create;
     606    Parts.Explode(Value, '.', StrToStr);
     607    if Parts.Count = 4 then begin
     608      if (StrToInt(Parts[3]) < 0) or (StrToInt(Parts[3]) > 255) then Result := False;
     609      if (StrToInt(Parts[2]) < 0) or (StrToInt(Parts[2]) > 255) then Result := False;
     610      if (StrToInt(Parts[1]) < 0) or (StrToInt(Parts[1]) > 255) then Result := False;
     611      if (StrToInt(Parts[0]) < 0) or (StrToInt(Parts[0]) > 255) then Result := False;
     612    end else Result := False;
     613  finally
     614    Parts.Free;
     615  end;
     616end;
     617
    591618function TIpAddress.GetAddrClass: TAddrClass;
    592619begin
     
    704731
    705732function TDomainAddress.GetAsString: string;
    706 var
    707   I: Integer;
    708 begin
    709   Result := '';
    710   for I := High(Levels) downto 0 do Result := Result + '.' + Levels[I];
    711   Delete(Result, 1, 1);
     733begin
     734  try
     735    Levels.Reverse;
     736    Result := Levels.Implode('.', StrToStr);
     737  finally
     738    Levels.Reverse;
     739  end;
    712740end;
    713741
    714742procedure TDomainAddress.SetAsString(const Value: string);
    715 var
    716   StrArray: TListString;
    717   I: Integer;
    718 begin
    719   try
    720     StrArray := TListString.Create;
    721     StrArray.Explode(Value, '.', StrToStr);
    722     SetLength(Levels, StrArray.Count);
    723     for I := 0 to StrArray.Count - 1 do
    724       Levels[StrArray.Count - 1 - I] := StrArray[I];
    725   finally
    726     StrArray.Free;
    727   end;
     743begin
     744  Levels.Explode(Value, '.', StrToStr);
     745  Levels.Reverse;
     746end;
     747
     748constructor TDomainAddress.Create;
     749begin
     750  Levels := TListString.Create;
     751end;
     752
     753destructor TDomainAddress.Destroy;
     754begin
     755  Levels.Free;
     756  inherited Destroy;
    728757end;
    729758
     
    792821procedure THostAddress.SetAsString(const Value: string);
    793822begin
    794   State := asIpAddress;
    795   try
     823  if IpAddress.IsAddressString(Value) then begin
     824    State := asIpAddress;
    796825    IpAddress.AsString := Value;
    797   except
    798     on EConvertError do State := asDomainName;
    799   end;
    800   if State = asDomainName then DomainName.AsString := Value;
     826  end else begin
     827    State := asDomainName;
     828    DomainName.AsString := Value;
     829  end;
    801830end;
    802831
Note: See TracChangeset for help on using the changeset viewer.