152 lines
3.4 KiB
ObjectPascal

unit netutils;
interface
uses
tracer, util, nettypes, console, lmemorymanager, lists, strings;
procedure copyMAC(src : puint8; dst : puint8);
procedure copyIPv4(src : puint8; dst : puint8);
function stringToMAC(str : pchar) : puint8;
function stringToIPv4(str : pchar) : puint8;
procedure writeMACAddress(mac : puint8; WND : HWND);
procedure writeIPv4Address(ip : puint8; WND : HWND);
function MACEqual(mac1 : puint8; mac2 : puint8) : boolean;
function IPEqual(ip1 : puint8; ip2 : puint8) : boolean;
function newPacketContext : PPacketContext;
procedure freePacketContext(p_context : PPacketContext);
implementation
function stringToMAC(str : pchar) : puint8;
var
Mac_Delim : PLinkedListBase;
i : uint32;
begin
stringToMac:= puint8(kalloc(6));
Mac_Delim:= STRLL_FromString(str, ':');
if STRLL_Size(Mac_Delim) >= 6 then begin
for i:=0 to 5 do begin
stringToMAC[i]:= stringToInt(STRLL_Get(Mac_Delim, i));
end;
end;
end;
function stringToIPv4(str : pchar) : puint8;
var
IP_Delim : PLinkedListBase;
i : uint32;
begin
stringToIPv4:= puint8(kalloc(6));
IP_Delim:= STRLL_FromString(str, '.');
if STRLL_Size(IP_Delim) >= 4 then begin
for i:=0 to 3 do begin
stringToIPv4[i]:= stringToInt(STRLL_Get(IP_Delim, i));
end;
end;
end;
function IPEqual(ip1 : puint8; ip2 : puint8) : boolean;
var
i : uint8;
begin
push_trace('netutils.IPEqual');
IPEqual:= true;
for i:=0 to 3 do begin
if ip1[i] <> ip2[i] then begin
IPEqual:= false;
break;
end;
end;
pop_trace;
end;
function MACEqual(mac1 : puint8; mac2 : puint8) : boolean;
var
i : uint8;
begin
push_trace('netutils.MACEqual');
MACEqual:= true;
for i:=0 to 5 do begin
if mac1[i] <> mac2[i] then begin
MACEqual:= false;
break;
end;
end;
pop_trace;
end;
procedure writeIPv4Address(ip : puint8; WND : HWND);
var
i : integer;
begin
push_trace('netutils.writeIPv4Address');
console.writeintWND(ip[0], WND);
for i:=1 to 3 do begin
console.writestringWND('.', WND);
console.writeintWND(ip[i], WND);
end;
console.writestringlnWND(' ', WND);
pop_trace;
end;
procedure writeMACAddress(mac : puint8; WND : HWND);
var
i : integer;
begin
push_trace('netutils.writeMACAddress');
console.writehexpairWND(mac[0], WND);
for i:=1 to 5 do begin
console.writestringWND(':', WND);
console.writehexpairWND(mac[i], WND);
end;
console.writestringlnWND(' ', WND);
pop_trace;
end;
function newPacketContext : PPacketContext;
begin
push_trace('netutils.newPacketContext');
newPacketContext:= PPacketContext(kalloc(sizeof(TPacketContext)));
memset(uint32(newPacketContext), 0, sizeof(TPacketContext));
pop_trace;
end;
procedure freePacketContext(p_context : PPacketContext);
begin
push_trace('netutils.freePacketContext');
kfree(void(p_context));
pop_trace;
end;
procedure copyMAC(src : puint8; dst : puint8);
var
i : uint8;
begin
push_trace('netutils.copyMAC');
for i:=0 to 5 do begin
dst[i]:= src[i];
end;
pop_trace;
end;
procedure copyIPv4(src : puint8; dst : puint8);
var
i : uint8;
begin
push_trace('netutils.copyIPv4');
for i:=0 to 3 do begin
dst[i]:= src[i];
end;
pop_trace;
end;
end.