BSOne.SFC/eCrmHE/EXE_eCrmHomeEdition/Thread/ThdRouteMon.pas

94 lines
2.6 KiB
Plaintext

{*******************************************************}
{ }
{ ThdRouteMon }
{ }
{ Copyright (C) 2022 kku }
{ }
{*******************************************************}
unit ThdRouteMon;
interface
uses
Tocsg.Thread, System.SysUtils, System.Classes, Winapi.Windows;
type
TThdRouteMon = class(TTgThread)
protected
procedure Execute; override;
end;
implementation
uses
Tocsg.Network, Tocsg.Exception, ManagerService, GlobalDefine;
{ TThdRouteMon }
procedure TThdRouteMon.Execute;
var
ChkList,
RouteList: TRouteEntList;
i: Integer;
sDestIp, sNextHop, sMask: String;
begin
ChkList := nil;
RouteList := nil;
try
while not Terminated and not GetWorkStop do
begin
try
if RouteList = nil then
begin
RouteList := TRouteEntList.Create;
GetRouteTables(RouteList);
end else begin
if ChkList = nil then
ChkList := TRouteEntList.Create;
GetRouteTables(ChkList);
if RouteList.Count < ChkList.Count then
begin
for i := ChkList.Count - 1 downto 0 do
begin
if RouteList.GetEntByDestIp(ChkList[i].sDestIp) = nil then
begin
if DeleteIpForwardEntry(@ChkList[i].Info) = NO_ERROR then
begin
sDestIp := ChkList[i].sDestIp;
sNextHop := DWORDToIP(ChkList[i].Info.dwForwardNextHop, false);
sMask := DWORDToIP(ChkList[i].Info.dwForwardMask, false);
ChkList.Delete(i);
gMgSvc.SendEventLog(URI_USER_ACTION,
LOGCODE_PREVENT_ROUTE,
Format('Routing table Prevented : %s, %s (%s)',
[sDestIp, sNextHop, sMask]));
gMgSvc.PopupMessage(TYPE_MSG_PREVENT_ROUTERCHANGE, sDestIp + '|' + sNextHop + '|' + sMask);
end;
end;
end;
FreeAndNil(RouteList);
RouteList := ChkList;
ChkList := nil;
end;
end;
except
on E: Exception do
ETgException.TraceException(Self, E, 'Fail .. Execute()');
end;
Sleep(1000);
end;
finally
if RouteList <> nil then
FreeAndNil(RouteList);
if ChkList <> nil then
FreeAndNil(ChkList);
end;
end;
end.