Einzelnen Beitrag anzeigen

ajz

Registriert seit: 9. Mai 2004
4 Beiträge
 
#1

record an procedure übergeben

  Alt 18. Mai 2004, 06:13
Delphi-Quellcode:
unit WSock;

interface

uses WinSock;

type
  PIcmpHeader = ^TIcmpHeader;
  TIcmpHeader = record
    MT : Char; // ICMP Message Typ
    MC : Char; // Message Interner (Fehler-)Code
    CS : Byte; // Checksum, muss vor berechnung selbiger auf "00" gesetzt werden.
    ID : Byte; // ID des Pakets
    Se : Byte; // Sequenznummer, bei mehreren typgleichen, (sinn-)zusammenhängenden Paketen
    TS : Cardinal; // Zeitstempel beim Abesenden
  end;

var Header: TIcmpHeader;
    hd_addr: PIcmpHeader;


implementation

uses Unit1;

end.
das ist der anfang einer unit zum erzeugen von icmp-packeten.
meine frage:
wie kann ich folgender procedure beibiegen, das sie mir eine checksumme
aus dem o.g. record liefert?


Delphi-Quellcode:
{*******************************************************************
** das original dieser procedure ist in c geschrieben und wurde, **
** soweit ich weiß, von Peter Below nach Delphi übersetzt.      **
** bei von mir angepassten stellen folgt der original code      **
** gekennzeichnet mit //[o]                                      **
*******************************************************************}

procedure Checksum(PData: PWord; Count: Integer);
//[o] procedure Checksum(PData: PWord; Count: Integer): Word;
var
  sum: Longword;
  i: Integer;
begin
  sum := 0;
  for i:= 1 to Count do begin
    sum := sum + PData^;
    Inc(PData);
    if (sum and $FFFF0000) <> 0 then
      sum := (sum and $FFFF)+1;
  end;
  Header.usCheckSum:= not (sum and $FFFF);
  //[o] result:= not (sum and $FFFF);
end;
wie die checksumme genau berechnet werden kann steht hier.

danke!
mfg
  Mit Zitat antworten Zitat