diff --git a/src/client_backend/.vs/client_backend/v17/.suo b/src/client_backend/.vs/client_backend/v17/.suo index 1160428..ccd8983 100644 Binary files a/src/client_backend/.vs/client_backend/v17/.suo and b/src/client_backend/.vs/client_backend/v17/.suo differ diff --git a/src/client_backend/.vs/client_backend/v17/Browse.VC.db b/src/client_backend/.vs/client_backend/v17/Browse.VC.db index 2c3808c..4e84432 100644 Binary files a/src/client_backend/.vs/client_backend/v17/Browse.VC.db and b/src/client_backend/.vs/client_backend/v17/Browse.VC.db differ diff --git a/src/client_backend/.vs/client_backend/v17/DocumentLayout.json b/src/client_backend/.vs/client_backend/v17/DocumentLayout.json index 8bdfae0..426ec87 100644 --- a/src/client_backend/.vs/client_backend/v17/DocumentLayout.json +++ b/src/client_backend/.vs/client_backend/v17/DocumentLayout.json @@ -3,20 +3,32 @@ "WorkspaceRootPath": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\", "Documents": [ { - "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\scan.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:scan.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:check_dir.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\client_backend.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:client_backend.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_schedule.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:local_schedule.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, { "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\virus_ctrl.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:virus_ctrl.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { - "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\well_known.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:well_known.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:connect.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:connect.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\update.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:update.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, { "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", @@ -26,18 +38,22 @@ "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:log.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:md5hash.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\scan.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:scan.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\well_known.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:well_known.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, { "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\settings.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:settings.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, - { - "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\update.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:update.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" - }, - { - "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_schedule.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:local_schedule.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" - }, { "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:security.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" @@ -54,14 +70,6 @@ "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_com.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:local_com.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, - { - "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:check_dir.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" - }, - { - "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:connect.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" - }, { "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:security.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" @@ -74,10 +82,6 @@ "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:check_dir.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" }, - { - "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", - "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:md5hash.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" - }, { "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\thread_ctrl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:thread_ctrl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" @@ -126,48 +130,24 @@ "DocumentGroups": [ { "DockedWidth": 200, - "SelectedChildIndex": 11, + "SelectedChildIndex": 6, "Children": [ { "$type": "Document", - "DocumentIndex": 2, - "Title": "virus_ctrl.cpp", - "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\virus_ctrl.cpp", - "RelativeDocumentMoniker": "virus_ctrl.cpp", - "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\virus_ctrl.cpp", - "RelativeToolTip": "virus_ctrl.cpp", - "ViewState": "AQIAAAcAAAAAAAAAAAAAAAcAAAAAAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-02-18T12:49:41.861Z", + "DocumentIndex": 5, + "Title": "connect.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.h", + "RelativeDocumentMoniker": "connect.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.h", + "RelativeToolTip": "connect.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAcAAAASAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-02-22T13:21:36.025Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 15, - "Title": "security.h", - "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.h", - "RelativeDocumentMoniker": "security.h", - "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.h", - "RelativeToolTip": "security.h", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAFAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-02-17T09:05:01.412Z" - }, - { - "$type": "Document", - "DocumentIndex": 9, - "Title": "security.cpp", - "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.cpp", - "RelativeDocumentMoniker": "security.cpp", - "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.cpp", - "RelativeToolTip": "security.cpp", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAEIAAAAMAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-02-17T09:04:52.66Z" - }, - { - "$type": "Document", - "DocumentIndex": 16, + "DocumentIndex": 18, "Title": "settings.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\settings.h", "RelativeDocumentMoniker": "settings.h", @@ -175,23 +155,25 @@ "RelativeToolTip": "settings.h", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAkAAAAXAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.248Z" + "WhenOpened": "2024-01-28T20:40:06.248Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 6, + "DocumentIndex": 12, "Title": "settings.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\settings.cpp", "RelativeDocumentMoniker": "settings.cpp", "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\settings.cpp", "RelativeToolTip": "settings.cpp", - "ViewState": "AQIAAA8AAAAAAAAAAAAAAFMAAAA1AAAA", + "ViewState": "AQIAAA0AAAAAAAAAAABBwFMAAAA1AAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.264Z" + "WhenOpened": "2024-01-28T20:40:06.264Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 19, + "DocumentIndex": 20, "Title": "thread_ctrl.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\thread_ctrl.h", "RelativeDocumentMoniker": "thread_ctrl.h", @@ -199,23 +181,25 @@ "RelativeToolTip": "thread_ctrl.h", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAkAAAAlAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.264Z" + "WhenOpened": "2024-01-28T20:40:06.264Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 11, + "DocumentIndex": 15, "Title": "thread_ctrl.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\thread_ctrl.cpp", "RelativeDocumentMoniker": "thread_ctrl.cpp", "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\thread_ctrl.cpp", "RelativeToolTip": "thread_ctrl.cpp", - "ViewState": "AQIAABUAAAAAAAAAAAAAACAAAAAnAAAA", + "ViewState": "AQIAABMAAAAAAAAAAABBwCAAAAAnAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.264Z" + "WhenOpened": "2024-01-28T20:40:06.264Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 17, + "DocumentIndex": 19, "Title": "check_dir.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.h", "RelativeDocumentMoniker": "check_dir.h", @@ -223,19 +207,21 @@ "RelativeToolTip": "check_dir.h", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAcAAAAqAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.264Z" + "WhenOpened": "2024-01-28T20:40:06.264Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 13, + "DocumentIndex": 0, "Title": "check_dir.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.cpp", "RelativeDocumentMoniker": "check_dir.cpp", "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.cpp", "RelativeToolTip": "check_dir.cpp", - "ViewState": "AQIAAH4AAAAAAAAAAAAAAI0AAAAAAAAA", + "ViewState": "AQIAAAIBAAAAAAAAAAAkwCYBAABeAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.279Z" + "WhenOpened": "2024-01-28T20:40:06.279Z", + "EditorCaption": "" }, { "$type": "Document", @@ -245,14 +231,14 @@ "RelativeDocumentMoniker": "client_backend.cpp", "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\client_backend.cpp", "RelativeToolTip": "client_backend.cpp", - "ViewState": "AQIAABUAAAAAAAAAAAAAACwAAAAAAAAA", + "ViewState": "AQIAAAIAAAAAAAAAAAAAADAAAAA5AAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", "WhenOpened": "2024-01-28T20:40:06.279Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 3, + "DocumentIndex": 11, "Title": "well_known.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\well_known.h", "RelativeDocumentMoniker": "well_known.h", @@ -260,36 +246,38 @@ "RelativeToolTip": "well_known.h", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAoAAAAAAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.295Z" + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 0, + "DocumentIndex": 10, "Title": "scan.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\scan.cpp", "RelativeDocumentMoniker": "scan.cpp", "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\scan.cpp", "RelativeToolTip": "scan.cpp", - "ViewState": "AQIAAEwAAAAAAAAAAAAIwFcAAAAqAAAA", + "ViewState": "AQIAAK0AAAAAAAAAAAAkwM0AAAAhAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", "WhenOpened": "2024-01-28T20:40:06.248Z", "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 7, + "DocumentIndex": 6, "Title": "update.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\update.cpp", "RelativeDocumentMoniker": "update.cpp", "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\update.cpp", "RelativeToolTip": "update.cpp", - "ViewState": "AQIAAAAAAAAAAAAAAAAAABgAAABPAAAA", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAYAAAAAAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.248Z" + "WhenOpened": "2024-01-28T20:40:06.248Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 8, + "DocumentIndex": 2, "Title": "local_schedule.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_schedule.cpp", "RelativeDocumentMoniker": "local_schedule.cpp", @@ -297,11 +285,12 @@ "RelativeToolTip": "local_schedule.cpp", "ViewState": "AQIAAHIAAAAAAAAAAAAjwJcAAABKAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.279Z" + "WhenOpened": "2024-01-28T20:40:06.279Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 10, + "DocumentIndex": 14, "Title": "update.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\update.h", "RelativeDocumentMoniker": "update.h", @@ -309,35 +298,38 @@ "RelativeToolTip": "update.h", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAUAAAAlAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.279Z" + "WhenOpened": "2024-01-28T20:40:06.279Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 4, + "DocumentIndex": 7, "Title": "log.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.h", "RelativeDocumentMoniker": "log.h", "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.h", "RelativeToolTip": "log.h", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAFYAAAASAAAA", + "ViewState": "AQIAAAAAAAAAAAAAAAAAADoAAAAtAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.279Z" + "WhenOpened": "2024-01-28T20:40:06.279Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 5, + "DocumentIndex": 8, "Title": "log.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.cpp", "RelativeDocumentMoniker": "log.cpp", "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.cpp", "RelativeToolTip": "log.cpp", - "ViewState": "AQIAAAAAAAAAAAAAAAAAAA4AAAAYAAAA", + "ViewState": "AQIAAAAAAAAAAAAAAAAAABkAAAAGAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.295Z" + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 20, + "DocumentIndex": 21, "Title": "local_schedule.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_schedule.h", "RelativeDocumentMoniker": "local_schedule.h", @@ -345,11 +337,12 @@ "RelativeToolTip": "local_schedule.h", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAoAAAAvAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.295Z" + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 21, + "DocumentIndex": 22, "Title": "scan.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\scan.h", "RelativeDocumentMoniker": "scan.h", @@ -357,11 +350,12 @@ "RelativeToolTip": "scan.h", "ViewState": "AQIAAAAAAAAAAAAAAAAAAA4AAAAdAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.295Z" + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 22, + "DocumentIndex": 23, "Title": "queue_ctrl.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\queue_ctrl.h", "RelativeDocumentMoniker": "queue_ctrl.h", @@ -369,11 +363,12 @@ "RelativeToolTip": "queue_ctrl.h", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAXAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.295Z" + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 23, + "DocumentIndex": 24, "Title": "queue _ctrl.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\queue _ctrl.cpp", "RelativeDocumentMoniker": "queue _ctrl.cpp", @@ -381,11 +376,12 @@ "RelativeToolTip": "queue _ctrl.cpp", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAUAAAAaAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.295Z" + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 24, + "DocumentIndex": 25, "Title": "app_ctrl.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\app_ctrl.h", "RelativeDocumentMoniker": "app_ctrl.h", @@ -393,11 +389,12 @@ "RelativeToolTip": "app_ctrl.h", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAbAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.31Z" + "WhenOpened": "2024-01-28T20:40:06.31Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 25, + "DocumentIndex": 26, "Title": "app_ctrl.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\app_ctrl.cpp", "RelativeDocumentMoniker": "app_ctrl.cpp", @@ -405,11 +402,12 @@ "RelativeToolTip": "app_ctrl.cpp", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAAPAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.31Z" + "WhenOpened": "2024-01-28T20:40:06.31Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 26, + "DocumentIndex": 27, "Title": "md5hash.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.h", "RelativeDocumentMoniker": "md5hash.h", @@ -417,11 +415,12 @@ "RelativeToolTip": "md5hash.h", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAxAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.315Z" + "WhenOpened": "2024-01-28T20:40:06.315Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 27, + "DocumentIndex": 28, "Title": "permissions.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\permissions.cpp", "RelativeDocumentMoniker": "permissions.cpp", @@ -429,23 +428,77 @@ "RelativeToolTip": "permissions.cpp", "ViewState": "AQIAAAAAAAAAAAAAAAAAABYAAAABAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.315Z" + "WhenOpened": "2024-01-28T20:40:06.315Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 14, + "DocumentIndex": 4, "Title": "connect.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.cpp", "RelativeDocumentMoniker": "connect.cpp", "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.cpp", "RelativeToolTip": "connect.cpp", - "ViewState": "AQIAACoAAAAAAAAAAAAAADkAAAARAAAA", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAB0AAAAUAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.315Z" + "WhenOpened": "2024-01-28T20:40:06.315Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 12, + "DocumentIndex": 9, + "Title": "md5hash.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.cpp", + "RelativeDocumentMoniker": "md5hash.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.cpp", + "RelativeToolTip": "md5hash.cpp", + "ViewState": "AQIAAEAAAAAAAAAAAAAkwFQAAAAOAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.248Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "virus_ctrl.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\virus_ctrl.cpp", + "RelativeDocumentMoniker": "virus_ctrl.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\virus_ctrl.cpp", + "RelativeToolTip": "virus_ctrl.cpp", + "ViewState": "AQIAADkAAAAAAAAAAAAAAGEAAAAvAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-02-18T12:49:41.861Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 13, + "Title": "security.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.cpp", + "RelativeDocumentMoniker": "security.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.cpp", + "RelativeToolTip": "security.cpp", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAEIAAAAMAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-02-17T09:04:52.66Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 17, + "Title": "security.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.h", + "RelativeDocumentMoniker": "security.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.h", + "RelativeToolTip": "security.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAFAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-02-17T09:05:01.412Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 16, "Title": "local_com.cpp", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_com.cpp", "RelativeDocumentMoniker": "local_com.cpp", @@ -453,23 +506,12 @@ "RelativeToolTip": "local_com.cpp", "ViewState": "AQIAAAAAAAAAAAAAAAAAAAQAAAAXAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.217Z" + "WhenOpened": "2024-01-28T20:40:06.217Z", + "EditorCaption": "" }, { "$type": "Document", - "DocumentIndex": 18, - "Title": "md5hash.cpp", - "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.cpp", - "RelativeDocumentMoniker": "md5hash.cpp", - "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.cpp", - "RelativeToolTip": "md5hash.cpp", - "ViewState": "AQIAAEYAAAAAAAAAAABBwFYAAABdAAAA", - "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", - "WhenOpened": "2024-01-28T20:40:06.248Z" - }, - { - "$type": "Document", - "DocumentIndex": 28, + "DocumentIndex": 29, "Title": "permissions.h", "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\permissions.h", "RelativeDocumentMoniker": "permissions.h", @@ -477,7 +519,8 @@ "RelativeToolTip": "permissions.h", "ViewState": "AQIAAAAAAAAAAAAAAAAAAA4AAAASAAAA", "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", - "WhenOpened": "2024-01-28T20:40:06.315Z" + "WhenOpened": "2024-01-28T20:40:06.315Z", + "EditorCaption": "" } ] } diff --git a/src/client_backend/.vs/client_backend/v17/DocumentLayout.json~RF18bb3dd.TMP b/src/client_backend/.vs/client_backend/v17/DocumentLayout.json~RF18bb3dd.TMP new file mode 100644 index 0000000..a83c2b1 --- /dev/null +++ b/src/client_backend/.vs/client_backend/v17/DocumentLayout.json~RF18bb3dd.TMP @@ -0,0 +1,530 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\virus_ctrl.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:virus_ctrl.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:connect.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\client_backend.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:client_backend.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:connect.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\update.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:update.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:log.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:log.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:md5hash.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\scan.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:scan.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\well_known.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:well_known.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\settings.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:settings.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_schedule.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:local_schedule.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:security.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\update.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:update.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\thread_ctrl.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:thread_ctrl.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_com.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:local_com.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:check_dir.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:security.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\settings.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:settings.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:check_dir.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\thread_ctrl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:thread_ctrl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_schedule.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:local_schedule.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\scan.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:scan.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\queue_ctrl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:queue_ctrl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\queue _ctrl.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:queue _ctrl.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\app_ctrl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:app_ctrl.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\app_ctrl.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:app_ctrl.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:md5hash.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\permissions.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:permissions.cpp||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + }, + { + "AbsoluteMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\permissions.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}", + "RelativeMoniker": "D:0:0:{56E65283-AAC9-43F6-9613-72BE8D648AC4}|client_backend.vcxproj|solutionrelative:permissions.h||{D0E1A5C6-B359-4E41-9B60-3365922C2A22}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 25, + "Children": [ + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "connect.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.h", + "RelativeDocumentMoniker": "connect.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.h", + "RelativeToolTip": "connect.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAcAAAASAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-02-22T13:21:36.025Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 18, + "Title": "settings.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\settings.h", + "RelativeDocumentMoniker": "settings.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\settings.h", + "RelativeToolTip": "settings.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAkAAAAXAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.248Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 10, + "Title": "settings.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\settings.cpp", + "RelativeDocumentMoniker": "settings.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\settings.cpp", + "RelativeToolTip": "settings.cpp", + "ViewState": "AQIAAA0AAAAAAAAAAABBwFMAAAA1AAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.264Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 20, + "Title": "thread_ctrl.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\thread_ctrl.h", + "RelativeDocumentMoniker": "thread_ctrl.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\thread_ctrl.h", + "RelativeToolTip": "thread_ctrl.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAkAAAAlAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.264Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 14, + "Title": "thread_ctrl.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\thread_ctrl.cpp", + "RelativeDocumentMoniker": "thread_ctrl.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\thread_ctrl.cpp", + "RelativeToolTip": "thread_ctrl.cpp", + "ViewState": "AQIAABMAAAAAAAAAAABBwCAAAAAnAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.264Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 19, + "Title": "check_dir.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.h", + "RelativeDocumentMoniker": "check_dir.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.h", + "RelativeToolTip": "check_dir.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAcAAAAqAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.264Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 16, + "Title": "check_dir.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.cpp", + "RelativeDocumentMoniker": "check_dir.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\check_dir.cpp", + "RelativeToolTip": "check_dir.cpp", + "ViewState": "AQIAAHwAAAAAAAAAAABBwI0AAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.279Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "client_backend.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\client_backend.cpp", + "RelativeDocumentMoniker": "client_backend.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\client_backend.cpp", + "RelativeToolTip": "client_backend.cpp", + "ViewState": "AQIAAGIAAAAAAAAAAAAAAGIAAAAoAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.279Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 9, + "Title": "well_known.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\well_known.h", + "RelativeDocumentMoniker": "well_known.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\well_known.h", + "RelativeToolTip": "well_known.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAoAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 8, + "Title": "scan.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\scan.cpp", + "RelativeDocumentMoniker": "scan.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\scan.cpp", + "RelativeToolTip": "scan.cpp", + "ViewState": "AQIAAK0AAAAAAAAAAAAkwM0AAAAhAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.248Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "update.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\update.cpp", + "RelativeDocumentMoniker": "update.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\update.cpp", + "RelativeToolTip": "update.cpp", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAYAAAAAAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.248Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 11, + "Title": "local_schedule.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_schedule.cpp", + "RelativeDocumentMoniker": "local_schedule.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_schedule.cpp", + "RelativeToolTip": "local_schedule.cpp", + "ViewState": "AQIAAHIAAAAAAAAAAAAjwJcAAABKAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.279Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 13, + "Title": "update.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\update.h", + "RelativeDocumentMoniker": "update.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\update.h", + "RelativeToolTip": "update.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAUAAAAlAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.279Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 5, + "Title": "log.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.h", + "RelativeDocumentMoniker": "log.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.h", + "RelativeToolTip": "log.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAADoAAAAtAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.279Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 6, + "Title": "log.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.cpp", + "RelativeDocumentMoniker": "log.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\log.cpp", + "RelativeToolTip": "log.cpp", + "ViewState": "AQIAAAAAAAAAAAAAAAAAABkAAAAGAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 21, + "Title": "local_schedule.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_schedule.h", + "RelativeDocumentMoniker": "local_schedule.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_schedule.h", + "RelativeToolTip": "local_schedule.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAoAAAAvAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 22, + "Title": "scan.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\scan.h", + "RelativeDocumentMoniker": "scan.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\scan.h", + "RelativeToolTip": "scan.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAA4AAAAdAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 23, + "Title": "queue_ctrl.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\queue_ctrl.h", + "RelativeDocumentMoniker": "queue_ctrl.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\queue_ctrl.h", + "RelativeToolTip": "queue_ctrl.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAXAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 24, + "Title": "queue _ctrl.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\queue _ctrl.cpp", + "RelativeDocumentMoniker": "queue _ctrl.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\queue _ctrl.cpp", + "RelativeToolTip": "queue _ctrl.cpp", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAUAAAAaAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.295Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 25, + "Title": "app_ctrl.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\app_ctrl.h", + "RelativeDocumentMoniker": "app_ctrl.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\app_ctrl.h", + "RelativeToolTip": "app_ctrl.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAbAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.31Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 26, + "Title": "app_ctrl.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\app_ctrl.cpp", + "RelativeDocumentMoniker": "app_ctrl.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\app_ctrl.cpp", + "RelativeToolTip": "app_ctrl.cpp", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAwAAAAPAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.31Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 27, + "Title": "md5hash.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.h", + "RelativeDocumentMoniker": "md5hash.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.h", + "RelativeToolTip": "md5hash.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAxAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.315Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 28, + "Title": "permissions.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\permissions.cpp", + "RelativeDocumentMoniker": "permissions.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\permissions.cpp", + "RelativeToolTip": "permissions.cpp", + "ViewState": "AQIAAAAAAAAAAAAAAAAAABYAAAABAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.315Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "connect.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.cpp", + "RelativeDocumentMoniker": "connect.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\connect.cpp", + "RelativeToolTip": "connect.cpp", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAB0AAAAUAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.315Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 7, + "Title": "md5hash.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.cpp", + "RelativeDocumentMoniker": "md5hash.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\md5hash.cpp", + "RelativeToolTip": "md5hash.cpp", + "ViewState": "AQIAAEAAAAAAAAAAAAAkwFQAAAAOAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.248Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "virus_ctrl.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\virus_ctrl.cpp", + "RelativeDocumentMoniker": "virus_ctrl.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\virus_ctrl.cpp", + "RelativeToolTip": "virus_ctrl.cpp", + "ViewState": "AQIAADkAAAAAAAAAAAAAAGEAAAAvAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-02-18T12:49:41.861Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 12, + "Title": "security.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.cpp", + "RelativeDocumentMoniker": "security.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.cpp", + "RelativeToolTip": "security.cpp", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAEIAAAAMAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-02-17T09:04:52.66Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 17, + "Title": "security.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.h", + "RelativeDocumentMoniker": "security.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\security.h", + "RelativeToolTip": "security.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAgAAAAFAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-02-17T09:05:01.412Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 15, + "Title": "local_com.cpp", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_com.cpp", + "RelativeDocumentMoniker": "local_com.cpp", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\local_com.cpp", + "RelativeToolTip": "local_com.cpp", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAAQAAAAXAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000677|", + "WhenOpened": "2024-01-28T20:40:06.217Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 29, + "Title": "permissions.h", + "DocumentMoniker": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\permissions.h", + "RelativeDocumentMoniker": "permissions.h", + "ToolTip": "C:\\Users\\janis\\Documents\\Projekte_mit_c\\ma\\ma\\src\\client_backend\\permissions.h", + "RelativeToolTip": "permissions.h", + "ViewState": "AQIAAAAAAAAAAAAAAAAAAA4AAAASAAAA", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000680|", + "WhenOpened": "2024-01-28T20:40:06.315Z", + "EditorCaption": "" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/client_backend/check_dir.cpp b/src/client_backend/check_dir.cpp index ce418be..e6d76b9 100644 --- a/src/client_backend/check_dir.cpp +++ b/src/client_backend/check_dir.cpp @@ -292,7 +292,7 @@ void monitor_directory(LPCSTR directory) { buffer, bufferSize, TRUE, - FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE, + FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_SIZE, NULL, &overlapped, NULL) == 0) { diff --git a/src/client_backend/check_dir.cpp~RF18b756d.TMP b/src/client_backend/check_dir.cpp~RF18b756d.TMP new file mode 100644 index 0000000..ce418be --- /dev/null +++ b/src/client_backend/check_dir.cpp~RF18b756d.TMP @@ -0,0 +1,373 @@ +#ifndef CHECK_DIR_CPP +#define CHECK_DIR_CPP +#include "check_dir.h" +#include "well_known.h" +#include "log.h" +#include "md5hash.h" +#include "scan.h" +#include "app_ctrl.h" +#include "virus_ctrl.h" +#include "scan.h" +#include "settings.h" +/* old implementation. used up a lot of resource and did not work properly. +void add_to_temp_db(const char*hash) { + //PERIODIC_FOLDER_SCAN_TEMP_DB + FILE*fp; + if (fopen_s(&fp, PERIODIC_FOLDER_SCAN_TEMP_DB, "a") != 0) { + log(LOGLEVEL::ERR, "[add_to_temp_db()]: Error opening temp db: ", PERIODIC_FOLDER_SCAN_TEMP_DB); + return; + } + else { + //log(LOGLEVEL::INFO, "[add_to_temp_db()]: Adding hash: ", hash, " to temp db: ", PERIODIC_FOLDER_SCAN_TEMP_DB); + fprintf_s(fp, "%s\n", hash); + fclose(fp); + } +} +void scan_folder_recursive(const std::string& directory, int thread_id,const std::string&db_file) { + std::string search_path = directory + "\\*.*"; + WIN32_FIND_DATA find_file_data; + HANDLE hFind = FindFirstFile(search_path.c_str(), &find_file_data); + + if (hFind == INVALID_HANDLE_VALUE) { + //std::cerr << "Error opening directory: " << directory << std::endl; + log(LOGLEVEL::ERR, "[scan_folder_recursive()]: Error opening directory: ", directory ," while scanning folder for new files"); + return; + } + + do { + if (strcmp(find_file_data.cFileName, ".") == 0 || strcmp(find_file_data.cFileName, "..") == 0) { + continue; // Skip the current and parent directories + } + + + std::string full_path = directory + "\\" + find_file_data.cFileName; + if (find_file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + // If it's a directory, recurse into it + scan_folder_recursive(full_path, thread_id,db_file); + } + else { + // If it's a file, check if it is in db, else scan it and add it to db + char*hash = new char[300]; + md5_file(full_path.c_str(), hash); + //now find hash in db + if (scan_hash(db_file.c_str(), hash)==1) { + //file is allready in db, skipping + //in order to not keep hashes that are not present anymore in the db, we have to write this hash into a temp dir, which is at the end copied into the main db + add_to_temp_db(hash); + } + else { + //scan the file and add it to db + //scan for virus + + switch (scan_hash(hash)) { + case 1: + //virus found + //log it + log(LOGLEVEL::VIRUS, "[scan_folder_recursive()]: Virus found in file: ", full_path, " while scanning ", directory, " for new files"); + //virus_ctrl_store(full_path.c_str(), hash, "fs"); + break; + case 2: + //error + log(LOGLEVEL::ERR, "[scan_folder_recursive()]: Error while scanning file: ", full_path, " while scanning ", directory, " for new files"); + break; + default: + //not a virus + add_to_temp_db(hash); + break; + } + } + + } + } while (FindNextFile(hFind, &find_file_data) != 0); + + FindClose(hFind); +} +int check_scan_dir(char*dirpath,char*dirname) { + if (can_scan_folder()) { + scan_folder_init(); + //FOLDER_DATABASE_DIR <= the folder where the database for folder checking is stored + //the database is stored in the following format: + /* a file per folder (and its subfolders) + in this db file the hashes of all the files in the folder (and its subfolders) are stored + If a file is detected, which hash is not known, it gets scanned and added to the db. if a hash is inside the db, which is not present in the folder, the hash is rempved from the db + + */ + /* + FILE* fp; + char* path = new char[300]; + path[0] = '\0'; + //build up the path for the db file. + strcpy_s(path, 295, FOLDER_DATABASE_DIR); + strcat_s(path, 295, "\\"); + strcat_s(path, 295, dirname); + strcat_s(path, 295, ".jdbf"); + + //check if the file exists. else we cannot scan the folder + if ((fopen_s(&fp, path, "r")) != 0) { + log(LOGLEVEL::ERR, "[check_scan_dir()]: Error opening database: ", path, " while scanning folder for new files; aborting"); + //try to create the file + if (fopen_s(&fp, path, "w") != 0) { + log(LOGLEVEL::ERR, "[check_scan_dir()]: Error creating new database: ", path, " while scanning folder for new files; aborting"); + } + else { + fprintf_s(fp, "%s\n", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");//write A 32 times A into the file. So the algorithm ha ssomething to map into memory. else it might throw an error + fclose(fp); + } + scan_folder_shutdown(); + return 1; + } + else { + fclose(fp); + //process the files of the folder. + //first: calculate hash of file + //second: check if hash is in db + //if not, scan file and add it to db (only add it if it is not detected as a virus) + scan_folder_recursive(dirpath, 0,path); + //process the found viruses + virus_ctrl_process("fs"); + } + delete[] path; + scan_folder_shutdown(); + return 0; + } + else { + + //there is already a folder scan happening + } +} + +*/ +bool is_directory(const std::string& path) { + DWORD attributes = GetFileAttributes(path.c_str()); + + if (attributes == INVALID_FILE_ATTRIBUTES) { + // Handle the error, e.g., by printing an error message + return false; + } + + return (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; +} +void process_changes(const FILE_NOTIFY_INFORMATION* pInfo) { + // Allocate a buffer for the file name and copy the content + std::wstring fileName(pInfo->FileName, pInfo->FileNameLength / sizeof(wchar_t)); + + //convert wstring to string + std::string filename_str(fileName.begin(), fileName.end()); + filename_str = "c:\\" + filename_str; + //scan the file and send it to virus_ctrl if it is a virus and then process it + std::transform(filename_str.begin(), filename_str.end(), filename_str.begin(), ::tolower); + if (!is_folder_included(filename_str.c_str()) or is_directory(filename_str.c_str()) or is_folder_excluded(filename_str.c_str())) { + //dont scan excluded files or folders + return; + } + else { + std::thread scan_thread(scan_file_t, filename_str); + scan_thread.detach(); + } + //log(LOGLEVEL::INFO, "[process_changes()]: File change: ", filename_str.c_str(), " while monitoring directory for changes"); +} +/* this was the old algorithm. it was slower and used up more resources, because it used a database to track which files have been modified instead of using the windows internal functions +void monitor_directory(LPCSTR directory) { + // Open the directory for monitoring + HANDLE hDir = CreateFile( + directory, + FILE_LIST_DIRECTORY, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, + NULL + ); + + if (hDir == INVALID_HANDLE_VALUE) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error opening directory: ", directory, " while monitoring directory for changes"); + return; + } + + // Create a buffer for file change notifications + constexpr DWORD bufferSize = 4096; + BYTE buffer[bufferSize]; + + // Monitor the directory for changes + OVERLAPPED overlapped; + memset(&overlapped, 0, sizeof(overlapped)); + overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + + if (ReadDirectoryChangesW( + hDir, + buffer, + bufferSize, + TRUE, + FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_SIZE, + NULL, + &overlapped, + NULL) == 0) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error reading directory changes: ", GetLastError(), " while monitoring directory for changes"); + CloseHandle(hDir); + return; + } + + log(LOGLEVEL::INFO, "[monitor_directory()]: Monitoring directory: ", directory, " for changes"); + //print_exclusions(); + + // Wait for changes + while (true) { + DWORD bytesReturned; + if (GetOverlappedResult(hDir, &overlapped, &bytesReturned, TRUE)) { + // Process the changes in the buffer + FILE_NOTIFY_INFORMATION* pInfo = reinterpret_cast(buffer); + + do { + process_changes(pInfo); + + pInfo = reinterpret_cast( + reinterpret_cast(pInfo) + pInfo->NextEntryOffset); + + } while (pInfo->NextEntryOffset != 0); + + // Reset the event for the next wait + ResetEvent(overlapped.hEvent); + + // Continue monitoring + if (ReadDirectoryChangesW( + hDir, + buffer, + bufferSize, + TRUE, + FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_SIZE, + NULL, + &overlapped, + NULL) == 0) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error reading directory changes: ", GetLastError(), " while monitoring directory for changes"); + break; + } + } + else { + DWORD error = GetLastError(); + if (error != ERROR_IO_PENDING) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error reading directory changes: ", error, " while monitoring directory for changes"); + break; + } + } + + // Wait for the event to be signaled (infinite timeout) + WaitForSingleObject(overlapped.hEvent, INFINITE); + } + + // Cleanup + CloseHandle(overlapped.hEvent); + CloseHandle(hDir); +} +*/ + +void monitor_directory(LPCSTR directory) { + // Open the directory for monitoring + HANDLE hDir = CreateFile( + directory, + FILE_LIST_DIRECTORY, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, + NULL + ); + + if (hDir == INVALID_HANDLE_VALUE) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error opening directory: ", directory, " while monitoring directory for changes"); + return; + } + + // Create a buffer for file change notifications + constexpr DWORD bufferSize = 4096; + BYTE buffer[bufferSize]; + + // Monitor the directory for changes + OVERLAPPED overlapped; + memset(&overlapped, 0, sizeof(overlapped)); + memset(buffer, 0, bufferSize); + overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + + if (ReadDirectoryChangesW( + hDir, + buffer, + bufferSize, + TRUE, + FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE, + NULL, + &overlapped, + NULL) == 0) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error reading directory changes: ", GetLastError(), " while monitoring directory for changes"); + CloseHandle(hDir); + return; + } + + log(LOGLEVEL::INFO, "[monitor_directory()]: Monitoring directory: ", directory, " for changes"); + + // Wait for changes + while (!app_stop()) { + DWORD bytesReturned; + DWORD waitStatus = WaitForSingleObject(overlapped.hEvent, INFINITE); + + if (waitStatus == WAIT_OBJECT_0) { + if (GetOverlappedResult(hDir, &overlapped, &bytesReturned, FALSE)) { + // Process the changes in the buffer + FILE_NOTIFY_INFORMATION* pInfo = reinterpret_cast(buffer); + + do { + process_changes(pInfo); + + pInfo = reinterpret_cast( + reinterpret_cast(pInfo) + pInfo->NextEntryOffset); + + } while (pInfo->NextEntryOffset != 0); + + // Reset the event for the next wait + ResetEvent(overlapped.hEvent); + memset(buffer, 0, bufferSize); + + // Continue monitoring + if (ReadDirectoryChangesW( + hDir, + buffer, + bufferSize, + TRUE, + FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE, + NULL, + &overlapped, + NULL) == 0) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error reading directory changes: ", GetLastError(), " while monitoring directory for changes"); + break; + } + } + else { + log(LOGLEVEL::ERR, "[monitor_directory()]: GetOverlappedResult failed: ", GetLastError()); + break; + } + } + else { + log(LOGLEVEL::ERR, "[monitor_directory()]: WaitForSingleObject failed: ", GetLastError()); + break; + } + } + + // Cleanup + CloseHandle(overlapped.hEvent); + CloseHandle(hDir); +} + +void folder_scanner() { + + //we are in a completely seperate thread then the main thread; unlimited resources wuhuii + FILE*fp; + char* path = new char[300]; + char* foldername = new char[300]; + + //start the watch dir function used to monitor the dir for new files + monitor_directory("C:\\"); + + + delete[] path; + delete[] foldername; +} + +#endif // !CHECK_DIR_CPP \ No newline at end of file diff --git a/src/client_backend/check_dir.cpp~RF18b83f4.TMP b/src/client_backend/check_dir.cpp~RF18b83f4.TMP new file mode 100644 index 0000000..dcd341f --- /dev/null +++ b/src/client_backend/check_dir.cpp~RF18b83f4.TMP @@ -0,0 +1,373 @@ +#ifndef CHECK_DIR_CPP +#define CHECK_DIR_CPP +#include "check_dir.h" +#include "well_known.h" +#include "log.h" +#include "md5hash.h" +#include "scan.h" +#include "app_ctrl.h" +#include "virus_ctrl.h" +#include "scan.h" +#include "settings.h" +/* old implementation. used up a lot of resource and did not work properly. +void add_to_temp_db(const char*hash) { + //PERIODIC_FOLDER_SCAN_TEMP_DB + FILE*fp; + if (fopen_s(&fp, PERIODIC_FOLDER_SCAN_TEMP_DB, "a") != 0) { + log(LOGLEVEL::ERR, "[add_to_temp_db()]: Error opening temp db: ", PERIODIC_FOLDER_SCAN_TEMP_DB); + return; + } + else { + //log(LOGLEVEL::INFO, "[add_to_temp_db()]: Adding hash: ", hash, " to temp db: ", PERIODIC_FOLDER_SCAN_TEMP_DB); + fprintf_s(fp, "%s\n", hash); + fclose(fp); + } +} +void scan_folder_recursive(const std::string& directory, int thread_id,const std::string&db_file) { + std::string search_path = directory + "\\*.*"; + WIN32_FIND_DATA find_file_data; + HANDLE hFind = FindFirstFile(search_path.c_str(), &find_file_data); + + if (hFind == INVALID_HANDLE_VALUE) { + //std::cerr << "Error opening directory: " << directory << std::endl; + log(LOGLEVEL::ERR, "[scan_folder_recursive()]: Error opening directory: ", directory ," while scanning folder for new files"); + return; + } + + do { + if (strcmp(find_file_data.cFileName, ".") == 0 || strcmp(find_file_data.cFileName, "..") == 0) { + continue; // Skip the current and parent directories + } + + + std::string full_path = directory + "\\" + find_file_data.cFileName; + if (find_file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { + // If it's a directory, recurse into it + scan_folder_recursive(full_path, thread_id,db_file); + } + else { + // If it's a file, check if it is in db, else scan it and add it to db + char*hash = new char[300]; + md5_file(full_path.c_str(), hash); + //now find hash in db + if (scan_hash(db_file.c_str(), hash)==1) { + //file is allready in db, skipping + //in order to not keep hashes that are not present anymore in the db, we have to write this hash into a temp dir, which is at the end copied into the main db + add_to_temp_db(hash); + } + else { + //scan the file and add it to db + //scan for virus + + switch (scan_hash(hash)) { + case 1: + //virus found + //log it + log(LOGLEVEL::VIRUS, "[scan_folder_recursive()]: Virus found in file: ", full_path, " while scanning ", directory, " for new files"); + //virus_ctrl_store(full_path.c_str(), hash, "fs"); + break; + case 2: + //error + log(LOGLEVEL::ERR, "[scan_folder_recursive()]: Error while scanning file: ", full_path, " while scanning ", directory, " for new files"); + break; + default: + //not a virus + add_to_temp_db(hash); + break; + } + } + + } + } while (FindNextFile(hFind, &find_file_data) != 0); + + FindClose(hFind); +} +int check_scan_dir(char*dirpath,char*dirname) { + if (can_scan_folder()) { + scan_folder_init(); + //FOLDER_DATABASE_DIR <= the folder where the database for folder checking is stored + //the database is stored in the following format: + /* a file per folder (and its subfolders) + in this db file the hashes of all the files in the folder (and its subfolders) are stored + If a file is detected, which hash is not known, it gets scanned and added to the db. if a hash is inside the db, which is not present in the folder, the hash is rempved from the db + + */ + /* + FILE* fp; + char* path = new char[300]; + path[0] = '\0'; + //build up the path for the db file. + strcpy_s(path, 295, FOLDER_DATABASE_DIR); + strcat_s(path, 295, "\\"); + strcat_s(path, 295, dirname); + strcat_s(path, 295, ".jdbf"); + + //check if the file exists. else we cannot scan the folder + if ((fopen_s(&fp, path, "r")) != 0) { + log(LOGLEVEL::ERR, "[check_scan_dir()]: Error opening database: ", path, " while scanning folder for new files; aborting"); + //try to create the file + if (fopen_s(&fp, path, "w") != 0) { + log(LOGLEVEL::ERR, "[check_scan_dir()]: Error creating new database: ", path, " while scanning folder for new files; aborting"); + } + else { + fprintf_s(fp, "%s\n", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");//write A 32 times A into the file. So the algorithm ha ssomething to map into memory. else it might throw an error + fclose(fp); + } + scan_folder_shutdown(); + return 1; + } + else { + fclose(fp); + //process the files of the folder. + //first: calculate hash of file + //second: check if hash is in db + //if not, scan file and add it to db (only add it if it is not detected as a virus) + scan_folder_recursive(dirpath, 0,path); + //process the found viruses + virus_ctrl_process("fs"); + } + delete[] path; + scan_folder_shutdown(); + return 0; + } + else { + + //there is already a folder scan happening + } +} + +*/ +bool is_directory(const std::string& path) { + DWORD attributes = GetFileAttributes(path.c_str()); + + if (attributes == INVALID_FILE_ATTRIBUTES) { + // Handle the error, e.g., by printing an error message + return false; + } + + return (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0; +} +void process_changes(const FILE_NOTIFY_INFORMATION* pInfo) { + // Allocate a buffer for the file name and copy the content + std::wstring fileName(pInfo->FileName, pInfo->FileNameLength / sizeof(wchar_t)); + + //convert wstring to string + std::string filename_str(fileName.begin(), fileName.end()); + filename_str = "c:\\" + filename_str; + //scan the file and send it to virus_ctrl if it is a virus and then process it + std::transform(filename_str.begin(), filename_str.end(), filename_str.begin(), ::tolower); + if (!is_folder_included(filename_str.c_str()) or is_directory(filename_str.c_str()) or is_folder_excluded(filename_str.c_str())) { + //dont scan excluded files or folders + return; + } + else { + std::thread scan_thread(scan_file_t, filename_str); + scan_thread.detach(); + } + //log(LOGLEVEL::INFO, "[process_changes()]: File change: ", filename_str.c_str(), " while monitoring directory for changes"); +} +/* this was the old algorithm. it was slower and used up more resources, because it used a database to track which files have been modified instead of using the windows internal functions +void monitor_directory(LPCSTR directory) { + // Open the directory for monitoring + HANDLE hDir = CreateFile( + directory, + FILE_LIST_DIRECTORY, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, + NULL + ); + + if (hDir == INVALID_HANDLE_VALUE) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error opening directory: ", directory, " while monitoring directory for changes"); + return; + } + + // Create a buffer for file change notifications + constexpr DWORD bufferSize = 4096; + BYTE buffer[bufferSize]; + + // Monitor the directory for changes + OVERLAPPED overlapped; + memset(&overlapped, 0, sizeof(overlapped)); + overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + + if (ReadDirectoryChangesW( + hDir, + buffer, + bufferSize, + TRUE, + FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_SIZE, + NULL, + &overlapped, + NULL) == 0) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error reading directory changes: ", GetLastError(), " while monitoring directory for changes"); + CloseHandle(hDir); + return; + } + + log(LOGLEVEL::INFO, "[monitor_directory()]: Monitoring directory: ", directory, " for changes"); + //print_exclusions(); + + // Wait for changes + while (true) { + DWORD bytesReturned; + if (GetOverlappedResult(hDir, &overlapped, &bytesReturned, TRUE)) { + // Process the changes in the buffer + FILE_NOTIFY_INFORMATION* pInfo = reinterpret_cast(buffer); + + do { + process_changes(pInfo); + + pInfo = reinterpret_cast( + reinterpret_cast(pInfo) + pInfo->NextEntryOffset); + + } while (pInfo->NextEntryOffset != 0); + + // Reset the event for the next wait + ResetEvent(overlapped.hEvent); + + // Continue monitoring + if (ReadDirectoryChangesW( + hDir, + buffer, + bufferSize, + TRUE, + FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_SIZE, + NULL, + &overlapped, + NULL) == 0) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error reading directory changes: ", GetLastError(), " while monitoring directory for changes"); + break; + } + } + else { + DWORD error = GetLastError(); + if (error != ERROR_IO_PENDING) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error reading directory changes: ", error, " while monitoring directory for changes"); + break; + } + } + + // Wait for the event to be signaled (infinite timeout) + WaitForSingleObject(overlapped.hEvent, INFINITE); + } + + // Cleanup + CloseHandle(overlapped.hEvent); + CloseHandle(hDir); +} +*/ + +void monitor_directory(LPCSTR directory) { + // Open the directory for monitoring + HANDLE hDir = CreateFile( + directory, + FILE_LIST_DIRECTORY, + FILE_SHARE_READ | FILE_SHARE_WRITE + NULL, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, + NULL + ); + + if (hDir == INVALID_HANDLE_VALUE) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error opening directory: ", directory, " while monitoring directory for changes"); + return; + } + + // Create a buffer for file change notifications + constexpr DWORD bufferSize = 4096; + BYTE buffer[bufferSize]; + + // Monitor the directory for changes + OVERLAPPED overlapped; + memset(&overlapped, 0, sizeof(overlapped)); + memset(buffer, 0, bufferSize); + overlapped.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); + + if (ReadDirectoryChangesW( + hDir, + buffer, + bufferSize, + TRUE, + FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE, + NULL, + &overlapped, + NULL) == 0) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error reading directory changes: ", GetLastError(), " while monitoring directory for changes"); + CloseHandle(hDir); + return; + } + + log(LOGLEVEL::INFO, "[monitor_directory()]: Monitoring directory: ", directory, " for changes"); + + // Wait for changes + while (!app_stop()) { + DWORD bytesReturned; + DWORD waitStatus = WaitForSingleObject(overlapped.hEvent, INFINITE); + + if (waitStatus == WAIT_OBJECT_0) { + if (GetOverlappedResult(hDir, &overlapped, &bytesReturned, FALSE)) { + // Process the changes in the buffer + FILE_NOTIFY_INFORMATION* pInfo = reinterpret_cast(buffer); + + do { + process_changes(pInfo); + + pInfo = reinterpret_cast( + reinterpret_cast(pInfo) + pInfo->NextEntryOffset); + + } while (pInfo->NextEntryOffset != 0); + + // Reset the event for the next wait + ResetEvent(overlapped.hEvent); + memset(buffer, 0, bufferSize); + + // Continue monitoring + if (ReadDirectoryChangesW( + hDir, + buffer, + bufferSize, + TRUE, + FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_WRITE, + NULL, + &overlapped, + NULL) == 0) { + log(LOGLEVEL::ERR, "[monitor_directory()]: Error reading directory changes: ", GetLastError(), " while monitoring directory for changes"); + break; + } + } + else { + log(LOGLEVEL::ERR, "[monitor_directory()]: GetOverlappedResult failed: ", GetLastError()); + break; + } + } + else { + log(LOGLEVEL::ERR, "[monitor_directory()]: WaitForSingleObject failed: ", GetLastError()); + break; + } + } + + // Cleanup + CloseHandle(overlapped.hEvent); + CloseHandle(hDir); +} + +void folder_scanner() { + + //we are in a completely seperate thread then the main thread; unlimited resources wuhuii + FILE*fp; + char* path = new char[300]; + char* foldername = new char[300]; + + //start the watch dir function used to monitor the dir for new files + monitor_directory("C:\\"); + + + delete[] path; + delete[] foldername; +} + +#endif // !CHECK_DIR_CPP \ No newline at end of file diff --git a/src/client_backend/client_backend.cpp b/src/client_backend/client_backend.cpp index 52fb12b..ac0bbd3 100644 --- a/src/client_backend/client_backend.cpp +++ b/src/client_backend/client_backend.cpp @@ -22,16 +22,16 @@ int main() { log(LOGLEVEL::INFO, "[main()]:Starting main thread."); printf("welcome to the jakach security tool main thread\n"); if (load_settings() == 0) {//load the settings from the settings file - if (update_settings("settings")) { //update the settings from the server + if (update_settings("settings")!=0) { //update the settings from the server log(LOGLEVEL::ERR, "[main()]:Could not update settings from server."); } - if (update_settings("rtp_included")) { //update the settings from the server + if (update_settings("rtp_included")!=0) { //update the settings from the server log(LOGLEVEL::ERR, "[main()]:Could not update settings from server."); } - if (update_settings("rtp_excluded")) { //update the settings from the server + if (update_settings("rtp_excluded")!=0) { //update the settings from the server log(LOGLEVEL::ERR, "[main()]:Could not update settings from server."); } - if (update_settings("sched")) { //update the settings from the server + if (update_settings("sched")!=0) { //update the settings from the server log(LOGLEVEL::ERR, "[main()]:Could not update settings from server."); } load_settings(); //load the updated settings from the settings file diff --git a/src/client_backend/client_backend/x64/Debug/client_backend.ilk b/src/client_backend/client_backend/x64/Debug/client_backend.ilk index f600e92..134461a 100644 Binary files a/src/client_backend/client_backend/x64/Debug/client_backend.ilk and b/src/client_backend/client_backend/x64/Debug/client_backend.ilk differ diff --git a/src/client_backend/client_backend/x64/Debug/client_backend.log b/src/client_backend/client_backend/x64/Debug/client_backend.log index 304b2cc..381765d 100644 --- a/src/client_backend/client_backend/x64/Debug/client_backend.log +++ b/src/client_backend/client_backend/x64/Debug/client_backend.log @@ -34,24 +34,4 @@ C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.39.3351 _SizeTy=unsigned __int64 ] - client_backend.cpp -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\client_backend.cpp(88,24): warning C4244: "Argument": Konvertierung von "_Rep" in "DWORD", möglicher Datenverlust -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\client_backend.cpp(88,24): warning C4244: with -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\client_backend.cpp(88,24): warning C4244: [ -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\client_backend.cpp(88,24): warning C4244: _Rep=__int64 -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\client_backend.cpp(88,24): warning C4244: ] - connect.cpp -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\connect.cpp(118,65): warning C4267: "Argument": Konvertierung von "size_t" nach "int", Datenverlust möglich - local_com.cpp - local_schedule.cpp - log.cpp - md5hash.cpp - scan.cpp -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\scan.cpp(153,32): warning C4018: ">=": Konflikt zwischen "signed" und "unsigned" - settings.cpp - thread_ctrl.cpp - update.cpp - virus_ctrl.cpp - Code wird generiert... -C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\md5hash.cpp(36,1): warning C4715: "md5_file": Nicht alle Codepfade geben einen Wert zurück. client_backend.vcxproj -> C:\Users\janis\Documents\Projekte_mit_c\ma\ma\src\client_backend\x64\Debug\client_backend.exe diff --git a/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.command.1.tlog b/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.command.1.tlog index e894e55..30a610d 100644 Binary files a/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.command.1.tlog and b/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.command.1.tlog differ diff --git a/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.read.1.tlog b/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.read.1.tlog index 30c0944..6ff3208 100644 Binary files a/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.read.1.tlog and b/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.read.1.tlog differ diff --git a/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.write.1.tlog b/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.write.1.tlog index fce1de6..111fc7b 100644 Binary files a/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.write.1.tlog and b/src/client_backend/client_backend/x64/Debug/client_backend.tlog/CL.write.1.tlog differ diff --git a/src/client_backend/client_backend/x64/Debug/client_backend.tlog/client_backend.write.1u.tlog b/src/client_backend/client_backend/x64/Debug/client_backend.tlog/client_backend.write.1u.tlog index bb0df9f..68ac61e 100644 Binary files a/src/client_backend/client_backend/x64/Debug/client_backend.tlog/client_backend.write.1u.tlog and b/src/client_backend/client_backend/x64/Debug/client_backend.tlog/client_backend.write.1u.tlog differ diff --git a/src/client_backend/client_backend/x64/Debug/client_backend.tlog/link.read.1.tlog b/src/client_backend/client_backend/x64/Debug/client_backend.tlog/link.read.1.tlog index d81366e..4e838be 100644 Binary files a/src/client_backend/client_backend/x64/Debug/client_backend.tlog/link.read.1.tlog and b/src/client_backend/client_backend/x64/Debug/client_backend.tlog/link.read.1.tlog differ diff --git a/src/client_backend/client_backend/x64/Debug/vc143.idb b/src/client_backend/client_backend/x64/Debug/vc143.idb index 9651c32..9afee5d 100644 Binary files a/src/client_backend/client_backend/x64/Debug/vc143.idb and b/src/client_backend/client_backend/x64/Debug/vc143.idb differ diff --git a/src/client_backend/client_backend/x64/Debug/vc143.pdb b/src/client_backend/client_backend/x64/Debug/vc143.pdb index 4fd1d21..c5ea16d 100644 Binary files a/src/client_backend/client_backend/x64/Debug/vc143.pdb and b/src/client_backend/client_backend/x64/Debug/vc143.pdb differ diff --git a/src/client_backend/connect.cpp b/src/client_backend/connect.cpp index 74f505a..6280584 100644 --- a/src/client_backend/connect.cpp +++ b/src/client_backend/connect.cpp @@ -27,7 +27,7 @@ int connect_to_srv(const char*url,char*out,int max_len, bool ignore_insecure) { curl_easy_cleanup(curl); if (max_len > (int)strlen(readBuffer.c_str())) { strcpy(out, readBuffer.c_str()); - return res; + return 0; } else return 1; @@ -43,7 +43,7 @@ size_t write_callback(void* contents, size_t size, size_t nmemb, void* userp) { return totalSize; } -int download_file_from_srv(const char* url, const char* output_file_path) { +int download_file_from_srv(const char* url, const char* output_file_path, bool ignore_insecure) { //use curl to download a file from a server char*temp_path = new char[515]; char* buf = new char[505]; @@ -71,6 +71,8 @@ int download_file_from_srv(const char* url, const char* output_file_path) { // Set the write callback function curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, output_file); + if (ignore_insecure == true) + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); // Perform the download res = curl_easy_perform(curl); @@ -104,29 +106,4 @@ int download_file_from_srv(const char* url, const char* output_file_path) { delete[] temp_path; return 0; } - - -int call_srv(const char*server_url,const char*get_request,const char*additional) { - CURL* curl; - CURLcode res; - std::string readBuffer; - char*url=new char[1000]; - url[0] = '\0'; - - curl = curl_easy_init(); - if (curl) { - char* output = curl_easy_escape(curl, additional, strlen(additional)); - sprintf_s(url, 995, "%s%s%s", server_url, get_request,output); - curl_easy_setopt(curl, CURLOPT_URL, url); - curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); - curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer); - res = curl_easy_perform(curl); - curl_free(output); - curl_easy_cleanup(curl); - delete[] url; - return res; - } - delete[] url; - return 0; -} #endif \ No newline at end of file diff --git a/src/client_backend/connect.h b/src/client_backend/connect.h index 137391d..104ce2c 100644 --- a/src/client_backend/connect.h +++ b/src/client_backend/connect.h @@ -6,5 +6,4 @@ #include #include int connect_to_srv(const char* url, char* out, int max_len, bool ignore_insecure); -int download_file_from_srv(const char* url, const char* outputFileName); -int call_srv(const char*, const char*,const char*); \ No newline at end of file +int download_file_from_srv(const char* url, const char* outputFileName,bool ignore_insecure); \ No newline at end of file diff --git a/src/client_backend/md5hash.cpp b/src/client_backend/md5hash.cpp index b9cf8fd..0636624 100644 --- a/src/client_backend/md5hash.cpp +++ b/src/client_backend/md5hash.cpp @@ -83,7 +83,7 @@ std::string md5_file_t(const std::string& path_) { thread_local std::string path (path_); thread_local FILE* fp = fopen(path.c_str(), "rb"); if (!fp) { - log(LOGLEVEL::ERR, "[md5_file_t()]: Could not open file for scanning ", path.c_str()); + log(LOGLEVEL::WARN, "[md5_file_t()]: Could not open file for scanning ", path.c_str()); return path; //we return the path because else it moight crash ()if we sen da nullptr } diff --git a/src/client_backend/scan.cpp b/src/client_backend/scan.cpp index 992840a..4fca330 100644 --- a/src/client_backend/scan.cpp +++ b/src/client_backend/scan.cpp @@ -130,7 +130,7 @@ void scan_folder(const std::string& directory) { HANDLE hFind = FindFirstFile(search_path.c_str(), &find_file_data); if (hFind == INVALID_HANDLE_VALUE) { - log(LOGLEVEL::ERR, "[scan_folder()]: Error opening directory: ", search_path.c_str() , " while scanning files inside folder."); + log(LOGLEVEL::WARN, "[scan_folder()]: Could not open directory: ", search_path.c_str() , " while scanning files inside directory."); return; } diff --git a/src/client_backend/update.cpp b/src/client_backend/update.cpp index f866cf1..b479330 100644 --- a/src/client_backend/update.cpp +++ b/src/client_backend/update.cpp @@ -29,7 +29,7 @@ int update_db(const char* folder_path) { strcat_s(output_path, 295, "\\"); strcat_s(output_path, 295, file_name); printf("%s\n", url); - int res = download_file_from_srv(url, output_path); + int res = download_file_from_srv(url, output_path,0); if (res != 0) { return 10; } @@ -57,13 +57,13 @@ int update_settings(const char*settings_type) { strcat_s(url, 1000, get_apikey(SECRETS)); int res = 1; if (strcmp(settings_type, "settings") == 0) - res = download_file_from_srv(url, SETTINGS_DB); + res = download_file_from_srv(url, SETTINGS_DB,0); else if (strcmp(settings_type, "rtp_included") == 0) - res = download_file_from_srv(url, INCLUDED_FOLDERS); + res = download_file_from_srv(url, INCLUDED_FOLDERS,0); else if (strcmp(settings_type, "rtp_excluded") == 0) - res = download_file_from_srv(url, EXCLUDED_FOLDERS); + res = download_file_from_srv(url, EXCLUDED_FOLDERS,0); else if (strcmp(settings_type, "sched") == 0) - res = download_file_from_srv(url, SCHED_PATH); + res = download_file_from_srv(url, SCHED_PATH,0); //int res = 0; if (res != 0) { log(LOGLEVEL::ERR, "[update_settings()]: Error downloading settings database file from server", url, " ERROR:", res); diff --git a/src/client_backend/virus_ctrl.cpp b/src/client_backend/virus_ctrl.cpp index 2ebed6f..7200bf9 100644 --- a/src/client_backend/virus_ctrl.cpp +++ b/src/client_backend/virus_ctrl.cpp @@ -5,6 +5,7 @@ #include "log.h" #include "settings.h" #include "connect.h" +#include "security.h" int virus_ctrl_store( const char*path, const char*hash, const char*id) { FILE* fp; @@ -17,7 +18,7 @@ int virus_ctrl_store( const char*path, const char*hash, const char*id) { return 1; } else { - fprintf(fp, "\"%s\" \"%s\"\n", path, hash); + fprintf(fp, "\"%s\" %s\n", path, hash); fclose(fp); delete[] db_path; return 0; @@ -40,7 +41,7 @@ int virus_ctrl_process( const char* id) { while (!feof(fp)) { //get a fulll path (enclosed with "") char* path = new char[300]; - char*hash = new char[300]; + char* hash = new char[300]; path[0] = '\0'; //search for starting ", then loop until ending " int cnt = 0; @@ -57,9 +58,8 @@ int virus_ctrl_process( const char* id) { } fscanf_s(fp, "%s", hash, 295); // get the hash of the file char* quarantine_path = new char[300]; - char* url = new char[300]; - char* url_path = new char[300]; - char* additional = new char[600]; + char* url = new char[1005]; + char* server_response = new char[100]; switch (get_setting("virus_ctrl:virus_found:action")) { case 1://remove if(remove(path)!=0) @@ -83,24 +83,30 @@ int virus_ctrl_process( const char* id) { //call the server and say him that we have found a virus. //we shoulkd also log it log(LOGLEVEL::VIRUS, "[virus_ctrl_process()]:Virus found in file: ", path, " ", hash, " but only notified due to settings"); - url_path[0] = '\0'; url[0] = '\0'; - strcpy_s(url_path, 295, "/api/add_log.php?entry="); - strcpy_s(additional, 600, "Virus found in file: "); - strcat_s(additional, 600, path); - strcat_s(additional, 600, " "); - strcat_s(additional, 600, hash); - get_setting("server:server_url", url); - if(call_srv(url,url_path,additional)!=0) - log(LOGLEVEL::ERR, "[virus_ctrl_process()]:Error while notifying server about virus: ", path," ",hash); - + if (get_setting("server:server_url", url) == 0 or strcmp(url, "nan") == 0) { + strcat_s(url, 1000, "/api/php/virus/notify_virus.php?"); + strcat_s(url, 1000, "file="); + strcat_s(url, 1000, path); + strcat_s(url, 1000, "&hash="); + strcat_s(url, 1000, hash); + strcat_s(url, 1000, "&action="); + strcat_s(url, 1000, "notify"); + strcat_s(url, 1000, "&machine_id="); + strcat_s(url, 1000, get_machineid(SECRETS)); + strcat_s(url, 1000, "&apikey="); + strcat_s(url, 1000, get_apikey(SECRETS)); + if (connect_to_srv(url, server_response, 100, 0) != 0 or strcmp("wrt_ok", server_response) != 0 ) + log(LOGLEVEL::ERR, "[virus_ctrl_process()]:Error while notifying server about virus: ", path, " ", hash); + }else { + log(LOGLEVEL::ERR, "[virus_ctrl_process()]:Error while notifying server about virus: ", path, " ", hash); + } break; } delete[] quarantine_path; delete[] url; - delete[] url_path; - delete[] additional; + delete[] server_response; } //else { creates to many log entrys => entrys are not needed // log(LOGLEVEL::ERR, "[virus_ctrl_process()]:Error while processing virus control database. Expected \" but got ", chr); diff --git a/src/client_backend/x64/Debug/client_backend.pdb b/src/client_backend/x64/Debug/client_backend.pdb index 953fecf..365975c 100644 Binary files a/src/client_backend/x64/Debug/client_backend.pdb and b/src/client_backend/x64/Debug/client_backend.pdb differ diff --git a/src/server/cyberhex-code/api/php/database/compile_database.php b/src/server/cyberhex-code/api/php/database/compile_database.php index c7b7e79..ca41b6c 100644 --- a/src/server/cyberhex-code/api/php/database/compile_database.php +++ b/src/server/cyberhex-code/api/php/database/compile_database.php @@ -29,7 +29,7 @@ function sort_hashes($inputFile) { // Close the file handle fclose($fileHandle); - } + } // Close the input file handle fclose($handle); diff --git a/src/server/cyberhex-code/api/php/virus/notify_virus.php b/src/server/cyberhex-code/api/php/virus/notify_virus.php new file mode 100644 index 0000000..3f26932 --- /dev/null +++ b/src/server/cyberhex-code/api/php/virus/notify_virus.php @@ -0,0 +1,35 @@ + apikey +//put auth code here afterwards +include "../accessctrl/check_apikey.php"; +if(check_apikey()!==true){ + die("no_auth"); +} + +//add the entry to the log db +//this page has no gui, it may return ok or error +if(!isset($_GET["machine_id"]) or !isset($_GET["hash"]) or !isset($_GET["path"]) or !isset($_GET["action"])) + echo("syn_err"); +else{ + $hash=htmlspecialchars($_GET["hash"]); + $path=htmlspecialchars($_GET["path"]); + $machine_id=htmlspecialchars($_GET["machine_id"]); + $action=htmlspecialchars($_GET["action"]); + //include db pw + include "../../../config.php"; + $conn = new mysqli($DB_SERVERNAME, $DB_USERNAME, $DB_PASSWORD, $DB_DATABASE); + if ($conn->connect_error) { + die("conn_err"); + } + $sql = "INSERT INTO vir_notify (hash,machine_id,path,action) VALUES (?,?,?,?);"; + $stmt = $conn->prepare($sql); + $stmt->bind_param("ssss", $hash,$machine_id,$path,$action); + // Execute the statement + if(!$stmt->execute()) + echo("wrt_err"); + else + echo("wrt_ok"); + $stmt->close(); + $conn->close(); +} +?> \ No newline at end of file diff --git a/src/server/cyberhex-code/install/create_db.php b/src/server/cyberhex-code/install/create_db.php index 485137d..4d8be57 100644 --- a/src/server/cyberhex-code/install/create_db.php +++ b/src/server/cyberhex-code/install/create_db.php @@ -234,6 +234,26 @@ '; } + // Create vir_notify messages table + $sql = "CREATE TABLE IF NOT EXISTS vir_notify ( + id INT AUTO_INCREMENT PRIMARY KEY, + machine_id VARCHAR(255) NOT NULL, + path VARCHAR(255) NOT NULL, + hash VARCHAR(255) NOT NULL, + action VARCHAR(255) NOT NULL + )"; + + if ($conn->query($sql) === TRUE) { + echo '
'; + } else { + $success=0; + echo '
'; + } + // Attempt to create the directory where export files will be stored later on if (mkdir("/var/www/html/export", 0777, true)) { echo '