Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1f5b08ac3 | ||
|
|
2cff817044 | ||
|
|
407bbc1556 | ||
|
|
f2ace6f571 | ||
|
|
3034e66126 | ||
|
|
701ffff27e |
@@ -8,7 +8,8 @@ namespace Backend.Handler;
|
|||||||
|
|
||||||
public class ContentFilter
|
public class ContentFilter
|
||||||
{
|
{
|
||||||
private readonly ConcurrentQueue<QueueItem> _queue;
|
private readonly ConcurrentQueue<Filtered> _queue;
|
||||||
|
private readonly ConcurrentQueue<UnfilteredQueueItem> _unfilteredQueue;
|
||||||
private readonly DbHandler _dbHandler;
|
private readonly DbHandler _dbHandler;
|
||||||
private readonly string _getDomainPort80;
|
private readonly string _getDomainPort80;
|
||||||
private readonly string _getDomainPort443;
|
private readonly string _getDomainPort443;
|
||||||
@@ -16,11 +17,12 @@ public class ContentFilter
|
|||||||
private int _timeOut;
|
private int _timeOut;
|
||||||
private readonly string _basePath;
|
private readonly string _basePath;
|
||||||
|
|
||||||
public ContentFilter(ConcurrentQueue<QueueItem> queue, DbHandler dbHandler, string basePath)
|
public ContentFilter(ConcurrentQueue<Filtered> queue, ConcurrentQueue<UnfilteredQueueItem> unfilteredQueue, DbHandler dbHandler, string basePath)
|
||||||
{
|
{
|
||||||
_queue = queue;
|
_queue = queue;
|
||||||
_dbHandler = dbHandler;
|
_dbHandler = dbHandler;
|
||||||
_basePath = basePath;
|
_basePath = basePath;
|
||||||
|
_unfilteredQueue = unfilteredQueue;
|
||||||
|
|
||||||
_getDomainPort80 = $"{basePath}/Backend/Scripts/GetDomainNamePort80.sh";
|
_getDomainPort80 = $"{basePath}/Backend/Scripts/GetDomainNamePort80.sh";
|
||||||
_getDomainPort443 = $"{basePath}/Backend/Scripts/GetDomainNamePort443.sh";
|
_getDomainPort443 = $"{basePath}/Backend/Scripts/GetDomainNamePort443.sh";
|
||||||
@@ -49,13 +51,13 @@ public class ContentFilter
|
|||||||
{
|
{
|
||||||
while (!_stop)
|
while (!_stop)
|
||||||
{
|
{
|
||||||
long indexes = _dbHandler.GetUnfilteredIndexes();
|
List<long> indexes = _dbHandler.GetUnfilteredIndexes();
|
||||||
|
|
||||||
for (long i = 0; i < indexes; i++)
|
for (int i = 0; i < indexes.Count; i++)
|
||||||
{
|
{
|
||||||
if (_stop) break;
|
if (_stop) break;
|
||||||
|
|
||||||
Unfiltered unfiltered = _dbHandler.ReadUnfilteredWithId(i);
|
Unfiltered unfiltered = _dbHandler.ReadUnfilteredWithId(indexes[i]);
|
||||||
|
|
||||||
if (unfiltered.Filtered) continue;
|
if (unfiltered.Filtered) continue;
|
||||||
|
|
||||||
@@ -63,14 +65,13 @@ public class ContentFilter
|
|||||||
|
|
||||||
unfiltered.Filtered = true;
|
unfiltered.Filtered = true;
|
||||||
|
|
||||||
QueueItem superUnfilteredObject = new()
|
UnfilteredQueueItem superUnfilteredObject = new()
|
||||||
{
|
{
|
||||||
Unfiltered = unfiltered,
|
Unfiltered = unfiltered,
|
||||||
Operations = Operations.Update,
|
Operations = Operations.Update
|
||||||
DbType = DbType.Unfiltered
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_queue.Enqueue(superUnfilteredObject);
|
_unfilteredQueue.Enqueue(superUnfilteredObject);
|
||||||
|
|
||||||
if (_dbHandler.FilteredIpExists(unfiltered.Ip))
|
if (_dbHandler.FilteredIpExists(unfiltered.Ip))
|
||||||
{
|
{
|
||||||
@@ -82,14 +83,7 @@ public class ContentFilter
|
|||||||
filtered.Port1 = unfiltered.Port1;
|
filtered.Port1 = unfiltered.Port1;
|
||||||
filtered.Port2 = unfiltered.Port2;
|
filtered.Port2 = unfiltered.Port2;
|
||||||
|
|
||||||
QueueItem superFilteredObject = new()
|
_queue.Enqueue(filtered);
|
||||||
{
|
|
||||||
Filtered = filtered,
|
|
||||||
Operations = Operations.Insert,
|
|
||||||
DbType = DbType.Filtered
|
|
||||||
};
|
|
||||||
|
|
||||||
_queue.Enqueue(superFilteredObject);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Thread.Sleep(_timeOut);
|
Thread.Sleep(_timeOut);
|
||||||
@@ -229,7 +223,7 @@ public class ContentFilter
|
|||||||
private void StartProcess(Ip ip, int port)
|
private void StartProcess(Ip ip, int port)
|
||||||
{
|
{
|
||||||
string fileName = port == 80 ? _getDomainPort80 : _getDomainPort443;
|
string fileName = port == 80 ? _getDomainPort80 : _getDomainPort443;
|
||||||
//Console.WriteLine($"{ip.Ip1}.{ip.Ip2}.{ip.Ip3}.{ip.Ip4}");
|
|
||||||
Process proc = new();
|
Process proc = new();
|
||||||
proc.StartInfo = new()
|
proc.StartInfo = new()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,19 +17,23 @@ public class ScanSettings
|
|||||||
|
|
||||||
public class IpScanner
|
public class IpScanner
|
||||||
{
|
{
|
||||||
private readonly ConcurrentQueue<QueueItem> _queue;
|
|
||||||
private readonly ConcurrentQueue<Discarded> _discardedQueue;
|
private readonly ConcurrentQueue<Discarded> _discardedQueue;
|
||||||
|
private readonly ConcurrentQueue<UnfilteredQueueItem> _unfilteredQueue;
|
||||||
|
private readonly ConcurrentQueue<ScannerResumeObject> _resumeQueue;
|
||||||
private readonly DbHandler _dbHandler;
|
private readonly DbHandler _dbHandler;
|
||||||
private bool _stop;
|
private bool _stop;
|
||||||
private int _timeout;
|
private int _timeout;
|
||||||
|
|
||||||
public IpScanner(ConcurrentQueue<QueueItem> queue, DbHandler dbHandler, ConcurrentQueue<Discarded> discardedQueue)
|
public IpScanner(ConcurrentQueue<UnfilteredQueueItem> unfilteredQueue, ConcurrentQueue<Discarded> discardedQueue,
|
||||||
|
ConcurrentQueue<ScannerResumeObject> resumeQueue, DbHandler dbHandler
|
||||||
|
)
|
||||||
{
|
{
|
||||||
_queue = queue;
|
|
||||||
_dbHandler = dbHandler;
|
_dbHandler = dbHandler;
|
||||||
_discardedQueue = discardedQueue;
|
_discardedQueue = discardedQueue;
|
||||||
|
_unfilteredQueue = unfilteredQueue;
|
||||||
|
_resumeQueue = resumeQueue;
|
||||||
|
|
||||||
SetTimeout(128);
|
SetTimeout(64);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetTimeout(int milliseconds)
|
public void SetTimeout(int milliseconds)
|
||||||
@@ -167,7 +171,7 @@ public class IpScanner
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
_queue.Enqueue(CreateUnfilteredQueueItem(ip, ports));
|
_unfilteredQueue.Enqueue(CreateUnfilteredQueueItem(ip, ports));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_stop)
|
if (_stop)
|
||||||
@@ -192,29 +196,21 @@ public class IpScanner
|
|||||||
//Console.WriteLine($"Thread ({scanSettings.ThreadNumber}) is at index ({i}) out of ({scanSettings.End}). Remaining ({scanSettings.End - i})");
|
//Console.WriteLine($"Thread ({scanSettings.ThreadNumber}) is at index ({i}) out of ({scanSettings.End}). Remaining ({scanSettings.End - i})");
|
||||||
}
|
}
|
||||||
|
|
||||||
QueueItem resume = new()
|
_resumeQueue.Enqueue(resumeObject);
|
||||||
{
|
|
||||||
ResumeObject = resumeObject,
|
|
||||||
Operations = Operations.Insert
|
|
||||||
};
|
|
||||||
|
|
||||||
_queue.Enqueue(resume);
|
|
||||||
|
|
||||||
scanSettings.Handle!.Set();
|
scanSettings.Handle!.Set();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Discarded CreateDiscardedQueueItem(Ip ip, int responseCode)
|
private static Discarded CreateDiscardedQueueItem(Ip ip, int responseCode)
|
||||||
{
|
{
|
||||||
Discarded discarded = new()
|
return new()
|
||||||
{
|
{
|
||||||
Ip = ip,
|
Ip = ip,
|
||||||
ResponseCode = responseCode
|
ResponseCode = responseCode
|
||||||
};
|
};
|
||||||
|
|
||||||
return discarded;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static QueueItem CreateUnfilteredQueueItem(Ip ip, (int, int) ports)
|
private static UnfilteredQueueItem CreateUnfilteredQueueItem(Ip ip, (int, int) ports)
|
||||||
{
|
{
|
||||||
Unfiltered unfiltered = new()
|
Unfiltered unfiltered = new()
|
||||||
{
|
{
|
||||||
@@ -224,14 +220,11 @@ public class IpScanner
|
|||||||
Filtered = false
|
Filtered = false
|
||||||
};
|
};
|
||||||
|
|
||||||
QueueItem superUnfilteredObject = new()
|
return new()
|
||||||
{
|
{
|
||||||
Unfiltered = unfiltered,
|
Unfiltered = unfiltered,
|
||||||
Operations = Operations.Insert,
|
Operations = Operations.Insert
|
||||||
DbType = DbType.Unfiltered
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return superUnfilteredObject;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Stop()
|
public void Stop()
|
||||||
|
|||||||
@@ -17,12 +17,14 @@ public class ThreadHandler
|
|||||||
|
|
||||||
public ThreadHandler(string path)
|
public ThreadHandler(string path)
|
||||||
{
|
{
|
||||||
ConcurrentQueue<QueueItem> contentQueue = new();
|
ConcurrentQueue<Filtered> filteredQueue = new();
|
||||||
ConcurrentQueue<Discarded> discardedQueue = new();
|
ConcurrentQueue<Discarded> discardedQueue = new();
|
||||||
|
ConcurrentQueue<UnfilteredQueueItem> unfilteredQueue = new();
|
||||||
|
ConcurrentQueue<ScannerResumeObject> scannerResumeQueue = new();
|
||||||
|
|
||||||
_dbHandler = new(contentQueue, discardedQueue, path);
|
_dbHandler = new(filteredQueue, discardedQueue, unfilteredQueue, scannerResumeQueue, path);
|
||||||
_ipScanner = new(contentQueue, _dbHandler, discardedQueue);
|
_ipScanner = new(unfilteredQueue, discardedQueue, scannerResumeQueue, _dbHandler);
|
||||||
_contentFilter = new(contentQueue, _dbHandler, path);
|
_contentFilter = new(filteredQueue, unfilteredQueue, _dbHandler, path);
|
||||||
_communication = new(_dbHandler, this, _ipScanner, _contentFilter, path);
|
_communication = new(_dbHandler, this, _ipScanner, _contentFilter, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,18 +34,24 @@ public class ThreadHandler
|
|||||||
Thread indexer = new(StartContentFilter);
|
Thread indexer = new(StartContentFilter);
|
||||||
Thread database = new(StartDbHandler);
|
Thread database = new(StartDbHandler);
|
||||||
Thread discarded = new(StartDiscardedDbHandler);
|
Thread discarded = new(StartDiscardedDbHandler);
|
||||||
|
Thread filtered = new(StartFilteredDbHandler);
|
||||||
|
Thread resume = new(StartResumeDbHandler);
|
||||||
Thread communication = new(StartCommunicationHandler);
|
Thread communication = new(StartCommunicationHandler);
|
||||||
|
|
||||||
scanner.Start();
|
scanner.Start();
|
||||||
indexer.Start();
|
indexer.Start();
|
||||||
database.Start();
|
database.Start();
|
||||||
discarded.Start();
|
discarded.Start();
|
||||||
|
filtered.Start();
|
||||||
|
resume.Start();
|
||||||
communication.Start();
|
communication.Start();
|
||||||
|
|
||||||
scanner.Join();
|
scanner.Join();
|
||||||
indexer.Join();
|
indexer.Join();
|
||||||
database.Join();
|
database.Join();
|
||||||
discarded.Join();
|
discarded.Join();
|
||||||
|
filtered.Join();
|
||||||
|
resume.Join();
|
||||||
communication.Join();
|
communication.Join();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,7 +81,17 @@ public class ThreadHandler
|
|||||||
|
|
||||||
private void StartDbHandler()
|
private void StartDbHandler()
|
||||||
{
|
{
|
||||||
_dbHandler.StartContent();
|
_dbHandler.UnfilteredDbHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StartFilteredDbHandler()
|
||||||
|
{
|
||||||
|
_dbHandler.FilteredDbHandler();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void StartResumeDbHandler()
|
||||||
|
{
|
||||||
|
_dbHandler.ResumeDbHandler();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StartDiscardedDbHandler()
|
private void StartDiscardedDbHandler()
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace Backend.Helper;
|
namespace Backend.Helper;
|
||||||
|
|
||||||
public static class HttpClientHelper
|
public static class HttpClientHelper
|
||||||
@@ -16,6 +18,7 @@ public static class HttpClientHelper
|
|||||||
}
|
}
|
||||||
|
|
||||||
client.DefaultRequestHeaders.Accept.Clear();
|
client.DefaultRequestHeaders.Accept.Clear();
|
||||||
|
client.Timeout = TimeSpan.FromSeconds(30);
|
||||||
|
|
||||||
HttpResponseMessage? response = null;
|
HttpResponseMessage? response = null;
|
||||||
|
|
||||||
@@ -54,8 +57,8 @@ public static class HttpClientHelper
|
|||||||
HttpResponseMessage? response = null;
|
HttpResponseMessage? response = null;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{//
|
||||||
response = await client.GetAsync("/robots.txt");
|
response = await client.SendAsync(new(HttpMethod.Head, "/robots.txt"));
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
|||||||
+101
-41
@@ -1,4 +1,3 @@
|
|||||||
using System.Collections;
|
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using Microsoft.Data.Sqlite;
|
using Microsoft.Data.Sqlite;
|
||||||
using Models.Model.Backend;
|
using Models.Model.Backend;
|
||||||
@@ -8,8 +7,10 @@ namespace Models.Handler;
|
|||||||
|
|
||||||
public class DbHandler
|
public class DbHandler
|
||||||
{
|
{
|
||||||
private readonly ConcurrentQueue<QueueItem> _contentQueue;
|
private readonly ConcurrentQueue<Filtered> _filteredQueue;
|
||||||
|
private readonly ConcurrentQueue<UnfilteredQueueItem> _unfilteredQueue;
|
||||||
private readonly ConcurrentQueue<Discarded> _discardedQueue;
|
private readonly ConcurrentQueue<Discarded> _discardedQueue;
|
||||||
|
private readonly ConcurrentQueue<ScannerResumeObject> _resumeQueue;
|
||||||
|
|
||||||
private readonly string _unfilteredConnectionString;
|
private readonly string _unfilteredConnectionString;
|
||||||
private readonly string _discardedConnectionString;
|
private readonly string _discardedConnectionString;
|
||||||
@@ -17,13 +18,37 @@ public class DbHandler
|
|||||||
private readonly string _resumeConnectionString;
|
private readonly string _resumeConnectionString;
|
||||||
private readonly List<string> _discardedConnectionStrings = [];
|
private readonly List<string> _discardedConnectionStrings = [];
|
||||||
|
|
||||||
private const string InsertStatement = "PRAGMA synchronous = OFF; PRAGMA temp_store = MEMORY; PRAGMA journal_mode = MEMORY; PRAGMA foreign_keys = off; INSERT INTO Unfiltered (Ip1, Ip2, Ip3, Ip4, Port1, Port2, Filtered) VALUES (@ip1, @ip2, @ip3, @ip4, @port1, @port2, @filtered)";
|
private const string InsertStatement = "PRAGMA synchronous = OFF; PRAGMA temp_store = MEMORY;" +
|
||||||
private const string InsertIntoFiltered = "PRAGMA synchronous = OFF; PRAGMA temp_store = MEMORY; PRAGMA journal_mode = MEMORY; PRAGMA foreign_keys = off; INSERT INTO Filtered (Ip1, Ip2, Ip3, Ip4, Port1, Port2, Title1, Title2, Description1, Description2, Url1, Url2, ServerType1, ServerType2, RobotsTXT1, RobotsTXT2, HttpVersion1, HttpVersion2, CertificateIssuerCountry, CertificateOrganizationName, IpV6, TlsVersion, CipherSuite, KeyExchangeAlgorithm, PublicKeyType1, PublicKeyType2, PublicKeyType3, AcceptEncoding1, AcceptEncoding2, ALPN, Connection1, Connection2) VALUES (@ip1, @ip2, @ip3, @ip4, @port1, @port2, @title1, @title2, @description1, @description2, @url1, @url2, @serverType1, @serverType2, @robotsTXT1, @robotsTXT2, @httpVersion1, @httpVersion2, @certificateIssuerCountry, @certificateOrganizationName, @ipV6, @tlsVersion, @cipherSuite, @keyExchangeAlgorithm, @publicKeyType1, @publicKeyType2, @publicKeyType3, @acceptEncoding1, @acceptEncoding2, @aLPN, @connection1, @connection2)";
|
" PRAGMA journal_mode = MEMORY; PRAGMA foreign_keys = off;" +
|
||||||
private const string InsertIntoDiscarded = "PRAGMA synchronous = OFF; PRAGMA temp_store = MEMORY; PRAGMA journal_mode = MEMORY; PRAGMA foreign_keys = off; INSERT INTO Discarded (Ip1, Ip2, Ip3, Ip4, ResponseCode) VALUES (@ip1, @ip2, @ip3, @ip4, @responseCode)";
|
" INSERT INTO Unfiltered (Ip1, Ip2, Ip3, Ip4, Port1, Port2, Filtered)" +
|
||||||
private const string InsertIntoResume = "PRAGMA synchronous = OFF; PRAGMA temp_store = MEMORY; PRAGMA journal_mode = MEMORY; PRAGMA foreign_keys = off; INSERT INTO Resume (ThreadNumber, StartRange, EndRange, FirstByte, SecondByte, ThirdByte, FourthByte) VALUES (@threadNumber, @startRange, @endRange, @firstByte, @secondByte, @thirdByte, @fourthByte);";
|
" VALUES (@ip1, @ip2, @ip3, @ip4, @port1, @port2, @filtered)";
|
||||||
|
|
||||||
|
private const string InsertIntoFiltered = "PRAGMA synchronous = OFF; PRAGMA temp_store = MEMORY;" +
|
||||||
|
" PRAGMA journal_mode = MEMORY; PRAGMA foreign_keys = off;" +
|
||||||
|
" INSERT INTO Filtered (Ip1, Ip2, Ip3, Ip4, Port1, Port2, Title1, Title2," +
|
||||||
|
" Description1, Description2, Url1, Url2, ServerType1, ServerType2," +
|
||||||
|
" RobotsTXT1, RobotsTXT2, HttpVersion1, HttpVersion2, CertificateIssuerCountry," +
|
||||||
|
" CertificateOrganizationName, IpV6, TlsVersion, CipherSuite, KeyExchangeAlgorithm," +
|
||||||
|
" PublicKeyType1, PublicKeyType2, PublicKeyType3, AcceptEncoding1, AcceptEncoding2," +
|
||||||
|
" ALPN, Connection1, Connection2) VALUES (@ip1, @ip2, @ip3, @ip4, @port1, @port2," +
|
||||||
|
" @title1, @title2, @description1, @description2, @url1, @url2, @serverType1," +
|
||||||
|
" @serverType2, @robotsTXT1, @robotsTXT2, @httpVersion1, @httpVersion2," +
|
||||||
|
" @certificateIssuerCountry, @certificateOrganizationName, @ipV6, @tlsVersion," +
|
||||||
|
" @cipherSuite, @keyExchangeAlgorithm, @publicKeyType1, @publicKeyType2," +
|
||||||
|
" @publicKeyType3, @acceptEncoding1, @acceptEncoding2, @aLPN, @connection1, @connection2)";
|
||||||
|
|
||||||
|
private const string InsertIntoDiscarded = "PRAGMA synchronous = OFF; PRAGMA temp_store = MEMORY;" +
|
||||||
|
" PRAGMA journal_mode = MEMORY; PRAGMA foreign_keys = off;" +
|
||||||
|
" INSERT INTO Discarded (Ip1, Ip2, Ip3, Ip4, ResponseCode)" +
|
||||||
|
" VALUES (@ip1, @ip2, @ip3, @ip4, @responseCode)";
|
||||||
|
|
||||||
|
private const string InsertIntoResume = "PRAGMA synchronous = OFF; PRAGMA temp_store = MEMORY;" +
|
||||||
|
" PRAGMA journal_mode = MEMORY; PRAGMA foreign_keys = off;" +
|
||||||
|
" INSERT INTO Resume (ThreadNumber, StartRange, EndRange, FirstByte, SecondByte, ThirdByte, FourthByte)" +
|
||||||
|
" VALUES (@threadNumber, @startRange, @endRange, @firstByte, @secondByte, @thirdByte, @fourthByte);";
|
||||||
|
|
||||||
private const string ReadUnfilteredStatement = "SELECT * FROM Unfiltered WHERE Id = @id;";
|
private const string ReadUnfilteredStatement = "SELECT * FROM Unfiltered WHERE Id = @id;";
|
||||||
private const string ReadUnfilteredIdsStatement = "SELECT Id FROM Unfiltered WHERE Id != 0 ORDER BY Id DESC LIMIT 1;";
|
private const string ReadUnfilteredIdsStatement = "SELECT Id FROM Unfiltered WHERE Filtered == 0;";
|
||||||
private const string ReadFilteredStatement = "SELECT Title2, Url2 FROM Filtered WHERE (Url2 NOT NULL AND Url2 != '') AND (Title2 NOT NULL AND Title2 != '') ORDER BY Url2 DESC;";
|
private const string ReadFilteredStatement = "SELECT Title2, Url2 FROM Filtered WHERE (Url2 NOT NULL AND Url2 != '') AND (Title2 NOT NULL AND Title2 != '') ORDER BY Url2 DESC;";
|
||||||
private const string ReadFilteredIdsStatement = "SELECT Id FROM Filtered WHERE Id != 0 ORDER BY Id DESC LIMIT 1;";
|
private const string ReadFilteredIdsStatement = "SELECT Id FROM Filtered WHERE Id != 0 ORDER BY Id DESC LIMIT 1;";
|
||||||
private const string ReadFilteredIpStatement = "SELECT Ip1, Ip2, Ip3, Ip4 FROM Filtered WHERE Ip1 == @ip1 AND Ip2 == @ip1 AND Ip3 == @ip1 AND Ip4 == @ip1 ORDER BY Ip1 DESC LIMIT 1;";
|
private const string ReadFilteredIpStatement = "SELECT Ip1, Ip2, Ip3, Ip4 FROM Filtered WHERE Ip1 == @ip1 AND Ip2 == @ip1 AND Ip3 == @ip1 AND Ip4 == @ip1 ORDER BY Ip1 DESC LIMIT 1;";
|
||||||
@@ -48,12 +73,17 @@ public class DbHandler
|
|||||||
|
|
||||||
private readonly string _basePath;
|
private readonly string _basePath;
|
||||||
|
|
||||||
public DbHandler(ConcurrentQueue<QueueItem> contentQueue, ConcurrentQueue<Discarded> discardedQueue, string basePath)
|
public DbHandler(ConcurrentQueue<Filtered> filteredQueue,
|
||||||
|
ConcurrentQueue<Discarded> discardedQueue,
|
||||||
|
ConcurrentQueue<UnfilteredQueueItem> unfilteredQueue,
|
||||||
|
ConcurrentQueue<ScannerResumeObject> resumeQueue, string basePath)
|
||||||
{
|
{
|
||||||
_contentQueue = contentQueue;
|
_filteredQueue = filteredQueue;
|
||||||
_discardedQueue = discardedQueue;
|
_discardedQueue = discardedQueue;
|
||||||
|
_unfilteredQueue = unfilteredQueue;
|
||||||
|
_resumeQueue = resumeQueue;
|
||||||
|
|
||||||
SetContentWaitTime(10);
|
SetContentWaitTime(100);
|
||||||
SetDiscardedWaitTime(10);
|
SetDiscardedWaitTime(10);
|
||||||
|
|
||||||
_basePath = basePath;
|
_basePath = basePath;
|
||||||
@@ -74,45 +104,78 @@ public class DbHandler
|
|||||||
_discardedWaitTime = waitTime;
|
_discardedWaitTime = waitTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StartContent()
|
public void UnfilteredDbHandler()
|
||||||
{
|
{
|
||||||
Console.WriteLine("Content DbHandler started");
|
Console.WriteLine("Unfiltered DbHandler started");
|
||||||
|
|
||||||
while (!_stop)
|
while (!_stop)
|
||||||
{
|
{
|
||||||
if (_contentQueue.IsEmpty || _pause)
|
if (_unfilteredQueue.IsEmpty || _pause)
|
||||||
{
|
{
|
||||||
Thread.Sleep(_contentWaitTime);
|
Thread.Sleep(_contentWaitTime);
|
||||||
_paused = true;
|
_paused = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
_contentQueue.TryDequeue(out QueueItem? queueItem);
|
_unfilteredQueue.TryDequeue(out UnfilteredQueueItem queueItem);
|
||||||
|
|
||||||
if (queueItem is null) { continue; }
|
if (queueItem.Operations == Operations.Insert)
|
||||||
|
|
||||||
if (queueItem.Operations == Operations.Insert && queueItem.DbType == DbType.Unfiltered)
|
|
||||||
{
|
{
|
||||||
InsertUnfiltered(queueItem.Unfiltered);
|
InsertUnfiltered(queueItem.Unfiltered);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (queueItem.Operations == Operations.Insert && queueItem.DbType == DbType.Filtered)
|
else if (queueItem.Operations == Operations.Update)
|
||||||
{
|
|
||||||
InsertFiltered(queueItem.Filtered!);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (queueItem.Operations == Operations.Insert && queueItem.ResumeObject is not null)
|
|
||||||
{
|
|
||||||
InsertResumeObject(queueItem.ResumeObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (queueItem.Operations == Operations.Update && queueItem.DbType == DbType.Unfiltered)
|
|
||||||
{
|
{
|
||||||
UpdateUnfiltered(queueItem.Unfiltered);
|
UpdateUnfiltered(queueItem.Unfiltered);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("Content DbHandler stopped.");
|
Console.WriteLine("Unfiltered DbHandler stopped.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void FilteredDbHandler()
|
||||||
|
{
|
||||||
|
Console.WriteLine("Filtered DB handler started");
|
||||||
|
|
||||||
|
while (!_stop)
|
||||||
|
{
|
||||||
|
if (_filteredQueue.IsEmpty || _pause)
|
||||||
|
{
|
||||||
|
Thread.Sleep(_contentWaitTime);
|
||||||
|
_paused = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
_filteredQueue.TryDequeue(out Filtered? queueItem);
|
||||||
|
|
||||||
|
InsertFiltered(queueItem!);
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("Filtered DbHandler stopped.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ResumeDbHandler()
|
||||||
|
{
|
||||||
|
Console.WriteLine("Resume DB handler started");
|
||||||
|
|
||||||
|
while (!_stop)
|
||||||
|
{
|
||||||
|
if (_resumeQueue.IsEmpty || _pause)
|
||||||
|
{
|
||||||
|
Thread.Sleep(_contentWaitTime);
|
||||||
|
_paused = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
_resumeQueue.TryDequeue(out ScannerResumeObject? queueItem);
|
||||||
|
|
||||||
|
if (queueItem is not null)
|
||||||
|
{
|
||||||
|
InsertResumeObject(queueItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("Resume DbHandler stopped.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public WaitHandle[] Start(int threads)
|
public WaitHandle[] Start(int threads)
|
||||||
@@ -131,7 +194,7 @@ public class DbHandler
|
|||||||
|
|
||||||
waitHandles[i] = handle;
|
waitHandles[i] = handle;
|
||||||
|
|
||||||
Thread f = new (RunDiscarded!);
|
Thread f = new (DiscardedDbHandler!);
|
||||||
f.Start(discardedDbHandlerSetting);
|
f.Start(discardedDbHandlerSetting);
|
||||||
|
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
@@ -140,7 +203,7 @@ public class DbHandler
|
|||||||
return waitHandles;
|
return waitHandles;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RunDiscarded(object obj)
|
private void DiscardedDbHandler(object obj)
|
||||||
{
|
{
|
||||||
DiscardedDbHandlerSetting discardedDbHandlerSetting = (DiscardedDbHandlerSetting)obj;
|
DiscardedDbHandlerSetting discardedDbHandlerSetting = (DiscardedDbHandlerSetting)obj;
|
||||||
Console.WriteLine($"Discarded DbHandler started with thread: ({discardedDbHandlerSetting.ThreadId})");
|
Console.WriteLine($"Discarded DbHandler started with thread: ({discardedDbHandlerSetting.ThreadId})");
|
||||||
@@ -163,7 +226,7 @@ public class DbHandler
|
|||||||
|
|
||||||
discardedDbHandlerSetting.Handle!.Set();
|
discardedDbHandlerSetting.Handle!.Set();
|
||||||
|
|
||||||
Console.WriteLine("Content DbHandler stopped.");
|
Console.WriteLine("Discarded DbHandler stopped.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InsertUnfiltered(Unfiltered unfiltered)
|
private void InsertUnfiltered(Unfiltered unfiltered)
|
||||||
@@ -299,23 +362,18 @@ public class DbHandler
|
|||||||
ip.Ip2 = reader.GetInt32(2);
|
ip.Ip2 = reader.GetInt32(2);
|
||||||
ip.Ip3 = reader.GetInt32(3);
|
ip.Ip3 = reader.GetInt32(3);
|
||||||
ip.Ip4 = reader.GetInt32(4);
|
ip.Ip4 = reader.GetInt32(4);
|
||||||
//Console.WriteLine(ip + "lmo");
|
|
||||||
unfiltered.Port1 = reader.GetInt32(5);
|
unfiltered.Port1 = reader.GetInt32(5);
|
||||||
unfiltered.Port2 = reader.GetInt32(6);
|
unfiltered.Port2 = reader.GetInt32(6);
|
||||||
unfiltered.Filtered = reader.GetBoolean(7);
|
unfiltered.Filtered = reader.GetBoolean(7);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Console.WriteLine(ip + "aaaaa");
|
|
||||||
unfiltered.Ip = ip;
|
unfiltered.Ip = ip;
|
||||||
//Console.WriteLine(unfiltered.Ip + "adfgdgfdgfsdfgs");
|
|
||||||
|
|
||||||
return unfiltered;
|
return unfiltered;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long GetUnfilteredIndexes()
|
public List<long> GetUnfilteredIndexes()
|
||||||
{
|
{
|
||||||
long rowId = 0;
|
|
||||||
|
|
||||||
using SqliteConnection connection = new(_unfilteredConnectionString);
|
using SqliteConnection connection = new(_unfilteredConnectionString);
|
||||||
connection.Open();
|
connection.Open();
|
||||||
|
|
||||||
@@ -324,15 +382,17 @@ public class DbHandler
|
|||||||
|
|
||||||
if (!reader.HasRows)
|
if (!reader.HasRows)
|
||||||
{
|
{
|
||||||
return 0;
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<long> ids = [];
|
||||||
|
|
||||||
while (reader.Read())
|
while (reader.Read())
|
||||||
{
|
{
|
||||||
rowId = reader.GetInt64(0);
|
ids.Add(reader.GetInt64(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
return rowId;
|
return ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long GetFilteredIndexes()
|
public long GetFilteredIndexes()
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
namespace Models.Model.Backend;
|
|
||||||
|
|
||||||
public enum DbType
|
|
||||||
{
|
|
||||||
Unfiltered,
|
|
||||||
Filtered,
|
|
||||||
}
|
|
||||||
@@ -4,5 +4,4 @@ public enum Operations
|
|||||||
{
|
{
|
||||||
Insert,
|
Insert,
|
||||||
Update,
|
Update,
|
||||||
Optimize,
|
|
||||||
}
|
}
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
namespace Models.Model.Backend;
|
|
||||||
|
|
||||||
public class QueueItem
|
|
||||||
{
|
|
||||||
public Unfiltered Unfiltered { get; init; }
|
|
||||||
public Filtered? Filtered { get; init; }
|
|
||||||
public ScannerResumeObject? ResumeObject { get; init; }
|
|
||||||
public Operations Operations { get; init; }
|
|
||||||
public DbType DbType { get; init; }
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
namespace Models.Model.Backend;
|
||||||
|
|
||||||
|
public struct UnfilteredQueueItem
|
||||||
|
{
|
||||||
|
public Unfiltered Unfiltered { get; init; }
|
||||||
|
public Operations Operations { get; init; }
|
||||||
|
}
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
|
||||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=models_005Cbackend/@EntryIndexedValue">False</s:Boolean>
|
|
||||||
<s:Boolean x:Key="/Default/CodeInspection/NamespaceProvider/NamespaceFoldersToSkip/=models_005Cinternal/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
|
||||||
@@ -1,29 +1,5 @@
|
|||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003A02000006pdb6Low_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003FILViewer_003Fd17d4b69379a42eb90f15b17ef6c846a5400_003F39_003F1eeed291_003F02000006pdb6Low_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003A0200000Cpdb6Low_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003FILViewer_003Fb53c196a821648e4ae3b142a6ae58d7b9400_003Fa8_003F21a43479_003F0200000Cpdb6Low_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003A02000007pdb1Low_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003FILViewer_003F096da63313a8436fb75089601a728c765200_003Fbb_003Ff6383783_003F02000007pdb1Low_002Ecs_002Fz_003A2_002D1/@EntryIndexedValue">ForceIncluded</s:String>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003A02000011pdb3Low_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003FILViewer_003F7c3ed02c2ce44598b7f304f8ac45e58f8600_003F6d_003F99b875d1_003F02000011pdb3Low_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003A02000007pdb1Low_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003FILViewer_003F357247e747614c8297021dd08d79da3d5200_003Ff2_003Fc4ae8c87_003F02000007pdb1Low_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ADirectoryInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fe4ec446cfe0489bc3ef68a45c6766d183e999ebdc657e94fb1ad059de2bb9_003FDirectoryInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003A02000010pdb3Low_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003FILViewer_003F80cf8253b0c2409096d0c0e368300af28200_003Fdd_003F8098fc19_003F02000010pdb3Low_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThread_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F693e634d7742afaf486acd69d84fe2a9e1ee1b11ba84f29cd1d67668d20dd59_003FThread_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003A02000011pdb4Low_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003FILViewer_003F1f6cfdd1e3a14f6390237f6ab98b06af8000_003F0d_003Febdca535_003F02000011pdb4Low_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAttributes_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F9a4cb3a98df697f884fa5f45bc79e4291fa3e948c7f42560e14678e12055e_003FAttributes_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAttribute_002ECoreCLR_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fbb9be2cb8efb72a7d2286fbdd10a293b55b3e2a912f49fac6a7719673268e4b_003FAttribute_002ECoreCLR_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AConcurrentQueue_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fb049a159646b52d2dd6ced21de315f79dff86421243e94ffd4f29c6f7e4df25_003FConcurrentQueue_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AConsole_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F2ccd2056ec55b7b67558d52e32a887ed5ac7e346fc429b218c188d0a99cb5be_003FConsole_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFormatters_002EMessagePack_002EGeneratedMessagePackResolver_002EModels_002EModel_002EExternal_002ECommunicationObjectFormatter_002Eg_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F5029ca69753a60cb407b1053f5834320dadee066_003FFormatters_002EMessagePack_002EGeneratedMessagePackResolver_002EModels_002EModel_002EExternal_002ECommunicationObjectFormatter_002Eg_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFormatters_002EMessagePack_002EGeneratedMessagePackResolver_002EModels_002EModel_002EExternal_002ESearchResultsFormatter_002Eg_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F99b5d033f8bfb58a6a753ca88a3d956f2228bd48_003FFormatters_002EMessagePack_002EGeneratedMessagePackResolver_002EModels_002EModel_002EExternal_002ESearchResultsFormatter_002Eg_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AFuture_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F13cbfe6856867dd1ed4e39575e46d816dae2a146a8ceec8f76b5897f5e0fe_003FFuture_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AHttpContent_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F5a55e5df9328b51021ba85b8f12ff49eca8772dba9772c0d61d5e28edf255c_003FHttpContent_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AHttpMethodAttribute_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F2e4732e712a98f9ac0d080ac68669b3db6d98781e0d5ad89886cb6bcc890b18_003FHttpMethodAttribute_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIFormatterResolver_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fc7d856f45ddf907f9face6c2bdba7836cc70fed4bb2b8ebd83ee6917584af3_003FIFormatterResolver_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIOThread_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F125fae6d49819da7be4fb21fbb4a936a7ec325971cf9264a24af55bf7111ad8_003FIOThread_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIPStatus_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F8fe420eaf60c4dfca87ce1d5f1cdfa4816200_003Fbd_003F71bcce16_003FIPStatus_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMessagePackReader_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F5cffb8c94881849b6aa8abe7ba5e7cafe05d991f859903020362d6aac371_003FMessagePackReader_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AMessagePackSerializer_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fe5f8b0187e62d74a4b9fefd657c192dab367bb342ef5ffbd90a4ed2ea428ec7a_003FMessagePackSerializer_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AOutgoingSocketExtensions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fc4824d483bf85fa615ad2125f13f6d75788d45d1510ec1cfb8226831da54f_003FOutgoingSocketExtensions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APingOptions_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F77bf2fbffc5491eadd62f1dbebc233798cd7fcb9b39ab7ee3bb35519f4d94ecc_003FPingOptions_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APing_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F3080b18e3637ea741b5b65abd6aee06e41494a82a58b3e2ed87d4ddb5cc62_003FPing_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APing_002ERawSocket_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F2f645da43e51b8be94c9217511b45c23384f041ffa9aad041f0ddc158d732f0_003FPing_002ERawSocket_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APing_002EUnix_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F8d57f5f5fd3290d6a89a5b767ad89988dd893c988eba430cd461b8b88d7ad9d_003FPing_002EUnix_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARep_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Feea8e921c916164ccc376e162da148b8215450dfae96e08bdd29119165c67f_003FRep_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AReq_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F33fafcc2bb6e91ae8abb5a52936d39cd93951ad9208861e758ca93efa619eaf3_003FReq_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATask_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F35f3a54f5acb408a3e219b2de039f1a39557b7e4515f11238cba07b60c0ce_003FTask_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATextWriter_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fdda89b2ed0975050b6847325357a756a5866a5435e3ddb4feff535ba36facb7_003FTextWriter_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>
|
|
||||||
Reference in New Issue
Block a user