public AppCtrlEvent[] GetAppCtrlEvents(Client client) { lock (client.SyncAccess) { int lastId = 0; if (client.AppCtrlEvents != null && client.AppCtrlEvents.Length != 0) { lastId = client.AppCtrlEvents[0].EventID; } else { client.AppCtrlEvents = new AppCtrlEvent[0]; } AppCtrlEvent[] newAppEvents = server.GetAppCtrlEvents(client, lastId); if (newAppEvents == null || newAppEvents.Length == 0) { return(client.AppCtrlEvents); } AppCtrlEvent[] oldAppEvents = client.AppCtrlEvents; int finalLen = oldAppEvents.Length + newAppEvents.Length; AppCtrlEvent[] finalAppEvents = new AppCtrlEvent[finalLen]; Array.Copy(newAppEvents, 0, finalAppEvents, 0, newAppEvents.Length); Array.Copy(oldAppEvents, 0, finalAppEvents, newAppEvents.Length, oldAppEvents.Length); client.AppCtrlEvents = finalAppEvents; return(finalAppEvents); } }
public AppCtrlEvent[] GetAppCtrlEvents(Client client, int lastID) { soc.SendDWORD(client.Socket, (int)IceServerCommand.GetAppCtrlEvents); soc.SendDWORD(client.Socket, lastID); IceServerCommandResult cmdResult = (IceServerCommandResult)soc.RecvDWORD(client.Socket); if (cmdResult != IceServerCommandResult.Success) { throw new Exception("Failed to get AppCtrl Events for client " + client.Name); } int len = soc.RecvDWORD(client.Socket); if (len == 0) { return(new AppCtrlEvent[0]); } AppCtrlEvent[] appEvents = new AppCtrlEvent[len]; for (int i = 0; i < len; i++) { appEvents[i] = new AppCtrlEvent(); appEvents[i].EventID = soc.RecvDWORD(client.Socket); appEvents[i].ProcessPath = soc.RecvString(client.Socket); appEvents[i].PID = soc.RecvDWORD(client.Socket); appEvents[i].ParentPath = soc.RecvString(client.Socket); appEvents[i].ParentPID = soc.RecvDWORD(client.Socket); appEvents[i].Verdict = (IceScanVerdict)soc.RecvDWORD(client.Socket); appEvents[i].MatchedRuleID = soc.RecvDWORD(client.Socket); appEvents[i].EventTime = soc.RecvDWORD(client.Socket); } return(appEvents); }