Unfiltered object is now a struct.

This commit is contained in:
2024-11-28 14:24:33 +01:00
parent eedca27a11
commit 3d8f903d30
14 changed files with 149 additions and 77 deletions
+75 -30
View File
@@ -1,3 +1,4 @@
using System.Collections;
using System.Collections.Concurrent;
using Microsoft.Data.Sqlite;
using Models.Model.Backend;
@@ -16,8 +17,8 @@ public class DbHandler
private readonly string _resumeConnectionString;
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 (Ip, ResponseCode, Port1, Port2, Filtered) VALUES (@ip, @responseCode, @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 (Ip, 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 (@ip, @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 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 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 (Ip, ResponseCode) VALUES (@ip, @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);";
@@ -25,7 +26,7 @@ public class DbHandler
private const string ReadUnfilteredIdsStatement = "SELECT Id FROM Unfiltered WHERE Id != 0 ORDER BY Id DESC LIMIT 1;";
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 ReadFilteredIpStatement = "SELECT Ip FROM Filtered WHERE Ip == @ip ORDER BY Ip 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 ReadDiscardedSeqIdsStatement = "SELECT seq FROM sqlite_sequence;";
private const string ReadAndDeleteResumeStatement = "SELECT * FROM Resume WHERE ThreadNumber == @threadNumber; DELETE FROM RESUME WHERE ThreadNumber == @threadNumber;";
@@ -90,20 +91,24 @@ public class DbHandler
if (queueItem is null) { continue; }
switch (queueItem.Operations)
if (queueItem.Operations == Operations.Insert && queueItem.DbType == DbType.Unfiltered)
{
case Operations.Insert when queueItem.Unfiltered is not null:
InsertUnfiltered(queueItem.Unfiltered);
break;
case Operations.Insert when queueItem.Filtered is not null:
InsertFiltered(queueItem.Filtered);
break;
case Operations.Insert when queueItem.ResumeObject is not null:
InsertResumeObject(queueItem.ResumeObject);
break;
case Operations.Update when queueItem.Unfiltered is not null:
UpdateUnfiltered(queueItem.Unfiltered);
break;
InsertUnfiltered(queueItem.Unfiltered);
}
else if (queueItem.Operations == Operations.Insert && queueItem.DbType == DbType.Filtered)
{
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);
}
}
@@ -170,8 +175,10 @@ public class DbHandler
using SqliteCommand command = new(InsertStatement, connection);
command.Parameters.AddWithValue("@ip", unfiltered.Ip);
command.Parameters.AddWithValue("@responseCode", unfiltered.ResponseCode);
command.Parameters.AddWithValue("@ip1", unfiltered.Ip.Ip1);
command.Parameters.AddWithValue("@ip2", unfiltered.Ip.Ip2);
command.Parameters.AddWithValue("@ip3", unfiltered.Ip.Ip3);
command.Parameters.AddWithValue("@ip4", unfiltered.Ip.Ip4);
command.Parameters.AddWithValue("@port1", unfiltered.Port1);
command.Parameters.AddWithValue("@port2", unfiltered.Port2);
command.Parameters.AddWithValue("@filtered", unfiltered.Filtered);
@@ -201,7 +208,10 @@ public class DbHandler
using SqliteCommand command = new(InsertIntoFiltered, connection);
command.Parameters.AddWithValue("@ip", filtered.Ip);
command.Parameters.AddWithValue("@ip1", filtered.Ip.Ip1);
command.Parameters.AddWithValue("@ip2", filtered.Ip.Ip2);
command.Parameters.AddWithValue("@ip3", filtered.Ip.Ip3);
command.Parameters.AddWithValue("@ip4", filtered.Ip.Ip4);
command.Parameters.AddWithValue("@port1", filtered.Port1);
command.Parameters.AddWithValue("@port2", filtered.Port2);
command.Parameters.AddWithValue("@url1", filtered.Url1);
@@ -267,7 +277,7 @@ public class DbHandler
connection.Close();
}
public Unfiltered? ReadUnfilteredWithId(long id)
public Unfiltered ReadUnfilteredWithId(long id)
{
using SqliteConnection connection = new(_unfilteredConnectionString);
connection.Open();
@@ -276,19 +286,28 @@ public class DbHandler
command.Parameters.AddWithValue("@id", id);
using SqliteDataReader reader = command.ExecuteReader();
if (!reader.HasRows) return null;
if (!reader.HasRows) return new();
Unfiltered unfiltered = new();
Ip ip = new();
while (reader.Read())
{
unfiltered.Id = reader.GetInt32(0);
unfiltered.Ip = reader.GetString(1);
unfiltered.Port1 = reader.GetInt32(3);
unfiltered.Port2 = reader.GetInt32(4);
unfiltered.Filtered = reader.GetInt32(5);
ip.Ip1 = reader.GetInt32(1);
ip.Ip2 = reader.GetInt32(2);
ip.Ip3 = reader.GetInt32(3);
ip.Ip4 = reader.GetInt32(4);
//Console.WriteLine(ip + "lmo");
unfiltered.Port1 = reader.GetInt32(5);
unfiltered.Port2 = reader.GetInt32(6);
unfiltered.Filtered = reader.GetBoolean(7);
}
//Console.WriteLine(ip + "aaaaa");
unfiltered.Ip = ip;
//Console.WriteLine(unfiltered.Ip + "adfgdgfdgfsdfgs");
return unfiltered;
}
@@ -364,13 +383,16 @@ public class DbHandler
return rowId;
}
public bool GetFilteredIp(string ip)
public bool FilteredIpExists(Ip ip)
{
using SqliteConnection connection = new(_filteredConnectionString);
connection.Open();
using SqliteCommand command = new(ReadFilteredIpStatement, connection);
command.Parameters.AddWithValue("@ip", ip);
command.Parameters.AddWithValue("@ip1", ip.Ip1);
command.Parameters.AddWithValue("@ip2", ip.Ip2);
command.Parameters.AddWithValue("@ip3", ip.Ip3);
command.Parameters.AddWithValue("@ip4", ip.Ip4);
using SqliteDataReader reader = command.ExecuteReader();
@@ -379,14 +401,37 @@ public class DbHandler
return false;
}
string ipAddress = "";
Ip tempIp = new();
while (reader.Read())
{
ipAddress = reader.GetString(0);
tempIp.Ip1 = reader.GetInt32(0);
tempIp.Ip2 = reader.GetInt32(1);
tempIp.Ip3 = reader.GetInt32(2);
tempIp.Ip4 = reader.GetInt32(3);
}
return ipAddress == ip;
if (tempIp.Ip1 != ip.Ip1)
{
return false;
}
if (tempIp.Ip2 != ip.Ip2)
{
return false;
}
if (tempIp.Ip3 != ip.Ip3)
{
return false;
}
if (tempIp.Ip4 != ip.Ip4)
{
return false;
}
return true;
}
public List<SearchResult?> GetSearchResults()