From bc959288f76cc859fb220857b06c10c8d58c23c4 Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Sat, 24 Nov 2018 20:59:39 +0000 Subject: [PATCH] [v1.0.0] BosMon-Webserver Init... --- BosMon-Webserver.sln | 31 +++++ BosMon-Webserver/App.config | 6 + BosMon-Webserver/BosMon-Webserver.csproj | 100 ++++++++++++++ BosMon-Webserver/Class1.manifest | 76 +++++++++++ BosMon-Webserver/License.txt | 108 +++++++++++++++ BosMon-Webserver/POCSAG.cs | 64 +++++++++ BosMon-Webserver/Program.cs | 21 +++ BosMon-Webserver/Properties/AssemblyInfo.cs | 37 +++++ .../Properties/Resources.Designer.cs | 73 ++++++++++ BosMon-Webserver/Properties/Resources.resx | 124 +++++++++++++++++ BosMon-Webserver/Resources/Icon.ico | Bin 0 -> 270398 bytes BosMon-Webserver/XMLWebserver.cs | 128 ++++++++++++++++++ .../bin/Release/BosMon-Webserver.exe | Bin 0 -> 15360 bytes BosMon-Webserver/bin/Release/Utils.dll | Bin 0 -> 31232 bytes .../config-example/settings.conf.example | 9 ++ .../config-example/settings.conf.example | 9 ++ BosMon-Webserver/dpkg/bmweb-logrotate | 12 ++ BosMon-Webserver/dpkg/bmweb.service | 25 ++++ BosMon-Webserver/dpkg/control | 9 ++ BosMon-Webserver/dpkg/create-Builds.bat | 3 + BosMon-Webserver/dpkg/make-deb.sh | 49 +++++++ BosMon-Webserver/dpkg/make-exe.nsi | 94 +++++++++++++ BosMon-Webserver/dpkg/make-exe.sh | 14 ++ BosMon-Webserver/dpkg/postinst | 8 ++ BosMon-Webserver/dpkg/preinst | 6 + BosMon-Webserver/dpkg/prerm | 3 + 26 files changed, 1009 insertions(+) create mode 100644 BosMon-Webserver.sln create mode 100644 BosMon-Webserver/App.config create mode 100644 BosMon-Webserver/BosMon-Webserver.csproj create mode 100644 BosMon-Webserver/Class1.manifest create mode 100644 BosMon-Webserver/License.txt create mode 100644 BosMon-Webserver/POCSAG.cs create mode 100644 BosMon-Webserver/Program.cs create mode 100644 BosMon-Webserver/Properties/AssemblyInfo.cs create mode 100644 BosMon-Webserver/Properties/Resources.Designer.cs create mode 100644 BosMon-Webserver/Properties/Resources.resx create mode 100644 BosMon-Webserver/Resources/Icon.ico create mode 100644 BosMon-Webserver/XMLWebserver.cs create mode 100644 BosMon-Webserver/bin/Release/BosMon-Webserver.exe create mode 100644 BosMon-Webserver/bin/Release/Utils.dll create mode 100644 BosMon-Webserver/bin/Release/config-example/settings.conf.example create mode 100644 BosMon-Webserver/config-example/settings.conf.example create mode 100644 BosMon-Webserver/dpkg/bmweb-logrotate create mode 100644 BosMon-Webserver/dpkg/bmweb.service create mode 100644 BosMon-Webserver/dpkg/control create mode 100644 BosMon-Webserver/dpkg/create-Builds.bat create mode 100644 BosMon-Webserver/dpkg/make-deb.sh create mode 100644 BosMon-Webserver/dpkg/make-exe.nsi create mode 100644 BosMon-Webserver/dpkg/make-exe.sh create mode 100644 BosMon-Webserver/dpkg/postinst create mode 100644 BosMon-Webserver/dpkg/preinst create mode 100644 BosMon-Webserver/dpkg/prerm diff --git a/BosMon-Webserver.sln b/BosMon-Webserver.sln new file mode 100644 index 0000000..a06d834 --- /dev/null +++ b/BosMon-Webserver.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2026 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BosMon-Webserver", "BosMon-Webserver\BosMon-Webserver.csproj", "{FE41C96A-2341-4064-B90C-7FCC40A29685}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Utils", "..\Utils\Utils\Utils.csproj", "{FAC8CE64-BF13-4ECE-8097-AEB5DD060098}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FE41C96A-2341-4064-B90C-7FCC40A29685}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FE41C96A-2341-4064-B90C-7FCC40A29685}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FE41C96A-2341-4064-B90C-7FCC40A29685}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FE41C96A-2341-4064-B90C-7FCC40A29685}.Release|Any CPU.Build.0 = Release|Any CPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FAC8CE64-BF13-4ECE-8097-AEB5DD060098}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2E47F886-F24F-469D-AC0F-18CD0FA00C3B} + EndGlobalSection +EndGlobal diff --git a/BosMon-Webserver/App.config b/BosMon-Webserver/App.config new file mode 100644 index 0000000..4bba09a --- /dev/null +++ b/BosMon-Webserver/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BosMon-Webserver/BosMon-Webserver.csproj b/BosMon-Webserver/BosMon-Webserver.csproj new file mode 100644 index 0000000..f881a76 --- /dev/null +++ b/BosMon-Webserver/BosMon-Webserver.csproj @@ -0,0 +1,100 @@ + + + + + Debug + AnyCPU + {FE41C96A-2341-4064-B90C-7FCC40A29685} + Exe + BlubbFish.BosMon.Webserver + BosMon-Webserver + v4.7.1 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + Class1.manifest + + + Resources\Icon.ico + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + + + + + + + + + + + + + + + {fac8ce64-bf13-4ece-8097-aeb5dd060098} + Utils + + + + + PreserveNewest + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + \ No newline at end of file diff --git a/BosMon-Webserver/Class1.manifest b/BosMon-Webserver/Class1.manifest new file mode 100644 index 0000000..f21a980 --- /dev/null +++ b/BosMon-Webserver/Class1.manifest @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BosMon-Webserver/License.txt b/BosMon-Webserver/License.txt new file mode 100644 index 0000000..6acc673 --- /dev/null +++ b/BosMon-Webserver/License.txt @@ -0,0 +1,108 @@ +Namensnennung-Nicht kommerziell-Share Alike 4.0 International + +Die Creative Commons Corporation (“Creative Commons”) ist keine Rechtsanwaltskanzlei und bietet weder Rechtsdienstleistungen noch Rechtsberatung. Die Verbreitung von Creative Commons Public Licenses führt zu keinem Mandatsverhältnis und keiner sonstigen Rechtsbeziehung. Creative Commons macht seine Lizenzen und die dazugehörigen Informationen so zugänglich, wie sie sind. Creative Commons übernimmt keinerlei Gewährleistung hinsichtlich seiner Lizenzen, jedweder unter deren Bedingungen lizenzierter Materialien oder darauf bezogener Informationen. Creative Commons schließt jegliche Haftung für Schäden, die aus ihrer Verwendung resultieren, so weit wie möglich aus. + +Verwendung der Creative Commons Public Licenses + +Creative Commons Public Licenses sind standardisierte Zusammenstellungen rechtlicher Bedingungen, die Urheber und andere Rechteinhaber verwenden können, um ihre selbst geschaffenen Werke und andere Materialien, die urheberrechtlich oder durch bestimmte andere Rechte geschützt sind, die unten in der Public License genauer benannt werden, zur Nutzung freizugeben. Die folgenden Überlegungen haben lediglich informativen Charakter, sind keineswegs vollständig und nicht Teil unserer Lizenzen. + +Überlegungen für Lizenzgeber: Unsere Public Licenses sind zur Verwendung durch diejenigen gedacht, die rechtlich befugt sind, der Allgemeinheit solche Nutzungen von Material zu erlauben, die sonst durch das Urheberrecht oder bestimmte andere Rechte untersagt wären. Unsere Lizenzen sind unwiderruflich. Lizenzgeber sollten die Bedingungen der Lizenz, die sie auswählen, lesen und verstehen, bevor sie die Lizenz verwenden. Lizenzgeber sollten zudem alle erforderlichen Rechte einholen, die für die Verwendung unserer Lizenzen notwendig sind, damit die Allgemeinheit das lizenzierte Material wie erwartet nutzen kann. Lizenzgeber sollten jegliches Material, für welches die Lizenz nicht gilt, klar kenntlich machen. Das gilt auch für anderes CC-lizenziertes Material und für Material, das gemäß einer urheberrechtlichen Beschränkung oder Ausnahme genutzt wird. Weitere Überlegungen für Lizenzgeber finden Sie im Creative Commons Wiki (in Englisch). +Überlegungen für die Allgemeinheit: Durch die Verwendung einer unserer Public Licenses gibt ein Lizenzgeber der Allgemeinheit die Erlaubnis, das lizenzierte Material unter bestimmten Bedingungen zu nutzen. Falls die Erlaubnis des Lizenzgebers aus irgendwelchen Gründen gar nicht erforderlich ist – beispielsweise wegen einer urheberrechtlichen Ausnahme oder Beschränkung – dann wird die entsprechende Nutzung auch nicht durch die Lizenz geregelt. Die Erlaubnisse in unseren Lizenzen beziehen sich nur auf das Urheberrecht und bestimmte andere Rechte, hinsichtlich derer der Lizenzgeber Erlaubnisse geben kann. Die Nutzung des lizenzierten Materials kann aber dennoch aus anderen Gründen untersagt sein, etwa weil Dritte Urheber- oder andere Rechte am Material haben. Ein Lizenzgeber kann auch besondere Wünsche haben, etwa indem er dazu auffordert, alle Veränderungen zu kennzeichnen oder zu beschreiben. Obwohl dies dann nicht verpflichtend im Sinne unserer Lizenzen ist, sollten Sie sich bemühen, derlei Wünschen nach Möglichkeit nachzukommen. Weitere Überlegungen für die Allgemeinheit finden Sie im Creative Commons Wiki (in Englisch). +Creative Commons Namensnennung-Nicht kommerziell-Share Alike 4.0 International Public License +Durch die Ausübung der lizenzierten Rechte (wie unten definiert) erklären Sie sich rechtsverbindlich mit den Bedingungen dieser Creative Commons Namensnennung – Nicht kommerziell – Share Alike 4.0 International Public License (“Public License”) einverstanden. Soweit die vorliegende Public License als Lizenzvertrag anzusehen ist, gewährt Ihnen der Lizenzgeber die in der Public License genannten lizenzierten Rechte im Gegenzug dafür, dass Sie die Lizenzbedingungen akzeptieren, und gewährt Ihnen die entsprechenden Rechte in Hinblick auf Vorteile, die der Lizenzgeber durch das Verfügbarmachen des lizenzierten Materials unter diesen Bedingungen hat. + +Abschnitt 1 – Definitionen + +Abgewandeltes Material bezeichnet Material, welches durch Urheberrechte oder ähnliche Rechte geschützt ist und vom lizenzierten Material abgeleitet ist oder darauf aufbaut und in welchem das lizenzierte Material übersetzt, verändert, umarrangiert, umgestaltet oder anderweitig modifiziert in einer Weise enthalten ist, die aufgrund des Urheberrechts oder ähnlicher Rechte des Lizenzgebers eine Zustimmung erfordert. Im Sinne der vorliegenden Public License entsteht immer abgewandeltes Material, wenn das lizenzierte Material ein Musikwerk, eine Darbietung oder eine Tonaufnahme ist und zur Vertonung von Bewegtbildern verwendet wird. +Abwandlungslizenz bezeichnet die Lizenz, die Sie in Bezug auf Ihr Urheberrecht oder ähnliche Rechte an Ihren Beiträgen zum abgewandelten Material in Übereinstimmng mit den Bedingungen der vorliegenden Public License erteilen. +BY-NC-SA-kompatible Lizenz bezeichnet eine unter creativecommons.org/compatiblelicenses genannte Lizenz, die Creative Commons als der vorliegenden Public License im Wesentlichen gleichwertig anerkannt hat. +Urheberrecht und ähnliche Rechte bezeichnet das Urheberrecht und/oder ähnliche, dem Urheberrecht eng verwandte Rechte, einschließlich insbesondere des Rechts des ausübenden Künstlers, des Rechts zur Sendung, zur Tonaufnahme und des Sui-generis-Datenbankrechts, unabhängig davon, wie diese Rechte genannt oder kategorisiert werden. Im Sinne der vorliegenden Public License werden die in Abschnitt 2(b)(1)-(2) aufgeführten Rechte nicht als Urheberrecht und ähnliche Rechte angesehen. +Wirksame technische Schutzmaßnahmen bezeichnet solche Maßnahmen, die gemäß gesetzlichen Regelungen auf der Basis des Artikels 11 des WIPO Copyright Treaty vom 20. Dezember 1996 und/oder ähnlicher internationaler Vereinbarungen ohne entsprechende Erlaubnis nicht umgangen werden dürfen. +Ausnahmen und Beschränkungen bezeichnet Fair Use, Fair Dealing und/oder jegliche andere Ausnahme oder Beschränkung des Urheberrechts oder ähnlicher Rechte, die auf Ihre Nutzung des lizenzierten Materials Anwendung findet. +Lizenzelemente bezeichnet die Lizenzeigenschaften, die in der Bezeichnung einer Creative Commons Public License aufgeführt werden. Die Lizenzelemente der vorliegenden Public License sind Namensnennung, Nicht kommerziell und Share Alike. +Lizenziertes Material bezeichnet das Werk der Literatur oder Kunst, die Datenbank oder das sonstige Material, welches der Lizenzgeber unter die vorliegende Public License gestellt hat. +Lizenzierte Rechte bezeichnet die Ihnen unter den Bedingungen der vorliegenden Public License gewährten Rechte, welche auf solche Urheberrechte und ähnlichen Rechte beschränkt sind, die Ihre Nutzung des lizenzierten Materials betreffen und die der Lizenzgeber zu lizenzieren berechtigt ist. +Lizenzgeber bezeichnet die natürliche(n) oder juristische(n) Person(en), die unter der vorliegenden Public License Rechte gewährt (oder gewähren). +Nicht kommerziell meint nicht vorrangig auf einen geschäftlichen Vorteil oder eine geldwerte Vergütung gerichtet. Der Austausch von lizenziertem Material gegen anderes unter Urheberrecht oder ähnlichen Rechten geschütztes Material durch digitales File-Sharing oder ähnliche Mittel ist nicht kommerziell im Sinne der vorliegenden Public License, sofern in Verbindung damit keine geldwerte Vergütung erfolgt. +Weitergabe meint, Material der Öffentlichkeit bereitzustellen durch beliebige Mittel oder Verfahren, die gemäß der lizenzierten Rechte Zustimmung erfordern, wie zum Beispiel Vervielfältigung, öffentliche Vorführung, öffentliche Darbietung, Vertrieb, Verbreitung, Wiedergabe oder Übernahme und öffentliche Zugänglichmachung bzw. Verfügbarmachung in solcher Weise, dass Mitglieder der Öffentlichkeit auf das Material von Orten und zu Zeiten ihrer Wahl zugreifen können. +Sui-generis Datenbankrechte bezeichnet Rechte, die keine Urheberrechte sind, sondern gegründet sind auf die Richtlinie 96/9/EG des Europäischen Parlaments und des Rates vom 11. März 1996 über den rechtlichen Schutz von Datenbanken in der jeweils gültigen Fassung bzw. deren Nachfolgeregelungen, sowie andere im Wesentlichen funktionsgleiche Rechte anderswo auf der Welt. +Sie bezeichnet die natürliche oder juristische Person, die von lizenzierten Rechten unter der vorliegenden Public License Gebrauch macht. Ihr bzw. Ihre hat die entsprechende Bedeutung. +Abschnitt 2 – Umfang + +Lizenzgewährung +Unter den Bedingungen der vorliegenden Public License gewährt der Lizenzgeber Ihnen eine weltweite, vergütungsfreie, nicht unterlizenzierbare, nicht-ausschließliche, unwiderrufliche Lizenz zur Ausübung der lizenzierten Rechte am lizenzierten Material, um: +das lizenzierte Material ganz oder in Teilen zu vervielfältigen und weiterzugeben, jedoch nur für nicht kommerzielle Zwecke; und +abgewandeltes Material zu erstellen, zu vervielfältigen und weiterzugeben, jedoch nur für nicht kommerzielle Zwecke. +Ausnahmen und Beschränkungen. Es sei klargestellt, dass, wo immer gesetzliche Ausnahmen und Beschränkungen auf Ihre Nutzung Anwendung finden, die vorliegende Public License nicht anwendbar ist und Sie insoweit ihre Bedingungen nicht einhalten müssen. +Laufzeit. Die Laufzeit der vorliegenden Public License wird in Abschnitt 6(a) geregelt. +Medien und Formate; Gestattung technischer Modifikationen. Der Lizenzgeber erlaubt Ihnen, die lizenzierten Rechte in allen bekannten und zukünftig entstehenden Medien und Formaten auszuüben und die dafür notwendigen technischen Modifikationen vorzunehmen. Der Lizenzgeber verzichtet auf jegliche und/oder versichert die Nichtausübung jeglicher Rechte und Befugnisse, Ihnen zu verbieten, technische Modifikationen vorzunehmen, die notwendig sind, um die lizenzierten Rechte ausüben zu können, einschließlich solcher, die zur Umgehung wirksamer technischer Schutzmaßnahmen erforderlich sind. Im Sinne der vorliegenden Public License entsteht kein abgewandeltes Material, soweit lediglich Modifikationen vorgenommen werden, die nach diesem Abschnitt 2(a)(4) zulässig sind. +Nachfolgende Empfänger +Angebot des Lizenzgebers – Lizenziertes Material. Jeder Empfänger des lizenzierten Materials erhält automatisch ein Angebot des Lizenzgebers, die lizenzierten Rechte unter den Bedingungen der vorliegenden Public License auzuüben. +Zusätzliches Angebot des Lizenzgebers – Abgewandeltes Material. Jeder, der abgewandeltes Material von Ihnen erhält, erhält automatisch vom Lizenzgeber ein Angebot, die lizenzierten Rechte am abgewandelten Material unter den Bedingungen der durch Sie vergebenen Abwandlungslizenz auszuüben. +Keine Beschränkungen für nachfolgende Empfänger. Sie dürfen keine zusätzlichen oder abweichenden Bedingungen fordern oder das lizenzierte Material mit solchen belegen oder darauf wirksame technische Maßnahmen anwenden, sofern dadurch die Ausübung der lizenzierten Rechte durch Empfänger des lizenzierten Materials eingeschränkt wird. +Inhaltliche Indifferenz. Die vorliegende Public License begründet nicht die Erlaubnis, zu behaupten oder den Eindruck zu erwecken, dass Sie oder Ihre Nutzung des lizenzierten Materials mit dem Lizenzgeber oder den Zuschreibungsempfängern gemäß Abschnitt 3(a)(1)(A)(i) in Verbindung stehen oder durch ihn gefördert, gutgeheißen oder offiziell anerkannt werden. +Sonstige Rechte + +Urheberpersönlichkeitsrechte, wie etwa zum Schutz vor Werkentstellungen, werden durch die vorliegende Public License ebenso wenig mitlizenziert wie das Recht auf Privatheit, auf Datenschutz und/oder ähnliche Persönlichkeitsrechte; gleichwohl verzichtet der Lizenzgeber auf derlei Rechte bzw. ihre Durchsetzung, soweit dies für Ihre Ausübung der lizenzierten Rechte erforderlich und möglich ist, jedoch nicht darüber hinaus. +Patent- und Kennzeichenrechte werden durch die vorliegende Public License nicht lizenziert. +Soweit wie möglich verzichtet der Lizenzgeber auf Vergütung durch Sie für die Ausübung der lizenzierten Rechte, sowohl direkt als auch durch eine Verwertungsgesellschaft unter welchem freiwilligen oder abdingbaren gesetzlichen oder Pflichtlizenzmechanismus auch immer eingezogen. In allen übrigen Fällen behält sich der Lizenzgeber ausdrücklich jedes Recht vor, Vergütungen zu fordern, einschließlich für Nutzungen des lizenzierten Materials für andere als nicht kommerzielle Zwecke. +Abschnitt 3 – Lizenzbedingungen + +Ihre Ausübung der lizenzierten Rechte unterliegt ausdrücklich folgenden Bedingungen. + +Namensnennung + +Wenn Sie das lizenzierte Material weitergeben (auch in veränderter Form), müssen Sie: + +die folgenden Angaben beibehalten, soweit sie vom Lizenzgeber dem lizenzierten Material beigefügt wurden: +die Bezeichnung der/des Ersteller(s) des lizenzierten Materials und anderer, die für eine Namensnennung vorgesehen sind (auch durch Pseudonym, falls angegeben), in jeder durch den Lizenzgeber verlangten Form, die angemessen ist; +einen Copyright-Vermerk; +einen Hinweis auf die vorliegende Public License; +einen Hinweis auf den Haftungsausschluss; +soweit vernünftigerweise praktikabel einen URI oder Hyperlink zum lizenzierten Material; +angeben, ob Sie das lizenzierte Material verändert haben, und alle vorherigen Änderungsangaben beibehalten; und +angeben, dass das lizenzierte Material unter der vorliegenden Public License steht, und deren Text oder URI oder einen Hyperlink darauf beifügen. +Sie dürfen die Bedingungen des Abschnitts 3(a)(1) in jeder angemessenen Form erfüllen, je nach Medium, Mittel und Kontext in bzw. mit dem Sie das lizenzierte Material weitergeben. Es kann zum Beispiel angemessen sein, die Bedingungen durch Angabe eines URI oder Hyperlinks auf eine Quelle zu erfüllen, die die erforderlichen Informationen enthält. +Falls der Lizenzgeber es verlangt, müssen Sie die gemäß Abschnitt 3(a)(1)(A) erforderlichen Informationen entfernen, soweit dies vernünftigerweise praktikabel ist. +Share Alike +Zusätzlich zu den Bedingungen in Abschnitt 3(a) gelten die folgenden Bedingungen, falls Sie abgewandeltes Material weitergeben, welches Sie selbst erstellt haben. + +Die Abwandlungslizenz, die Sie vergeben, muss eine Creative-Commons-Lizenz der vorliegenden oder einer späteren Version mit den gleichen Lizenzelementen oder eine BY-NC-SA-kompatible Lizenz sein. +Sie müssen den Text oder einen URI oder Hyperlink auf die von Ihnen gewählte Abwandlungslizenz beifügen. Diese Bedingung dürfen Sie in jeder angemessenen Form erfüllen, je nach Medium, Mittel und Kontext in bzw. mit dem Sie abgewandeltes Material weitergeben. +Sie dürfen keine zusätzlichen oder abweichenden Bedingungen anbieten oder das abgewandelte Material mit solchen belegen oder darauf wirksame technische Maßnahmen anwenden, sofern dadurch die Ausübung der Rechte am abgewandelten Material eingeschränkt wird, die Sie unter der Abwandlungslizenz gewähren. +Abschnitt 4 – Sui-generis-Datenbankrechte + +Soweit die lizenzierten Rechte Sui-generis-Datenbankrechte beinhalten, die auf Ihre Nutzung des lizenzierten Materials Anwendung finden, gilt: + +es sei klargestellt, dass Abschnitt 2(a)(1) Ihnen lediglich zu nicht kommerziellen Zwecken das Recht gewährt, die gesamten Inhalte der Datenbank oder wesentliche Teile davon zu entnehmen, weiterzuverwenden, zu vervielfältigen und weiterzugeben; +sofern Sie alle Inhalte der Datenbank oder wesentliche Teile davon in eine Datenbank aufnehmen, an der Sie Sui-generis-Datenbankrechte haben, dann gilt die Datenbank, an der Sie Sui-generis-Datenbankrechte haben (aber nicht ihre einzelnen Inhalte) als abgewandeltes Material, insbesondere in Bezug auf Abschnitt 3(b); und +Sie müssen die Bedingungen des Abschnitts 3(a) einhalten, wenn sie alle Datenbankinhalte oder wesentliche Teile davon weitergeben. +Es sei ferner klargestellt, dass dieser Abschnitt 4 Ihre Verpflichtungen aus der vorliegenden Public License nur ergänzt und nicht ersetzt, soweit die lizenzierten Rechte andere Urheberrechte oder ähnliche Rechte enthalten. +Abschnitt 5 – Gewährleistungsausschluss und Haftungsbeschränkung + +Sofern der Lizenzgeber nicht separat anderes erklärt und so weit wie möglich, bietet der Lizenzgeber das lizenzierte Material so wie es ist und verfügbar ist an und sagt in Bezug auf das lizenzierte Material keine bestimmten Eigenschaften zu, weder ausdrücklich noch konkludent oder anderweitig, und schließt jegliche Gewährleistung aus, einschließlich der gesetzlichen. Dies umfasst insbesondere das Freisein von Rechtsmängeln, Verkehrsfähigkeit, Eignung für einen bestimmten Zweck, Wahrung der Rechte Dritter, Freisein von (auch verdeckten) Sachmängeln, Richtigkeit und das Vorliegen oder Nichtvorliegen von Irrtümern, gleichviel ob sie bekannt, unbekannt oder erkennbar sind. Dort, wo Gewährleistungsausschlüsse ganz oder teilweise unzulässig sind, gilt der vorliegende Ausschluss möglicherweise für Sie nicht. +Soweit wie möglich, haftet der Lizenzgeber Ihnen gegenüber nach keinem rechtlichen Konstrukt (einschließlich insbesondere Fahrlässigkeit) oder anderweitig für irgendwelche direkten, speziellen, indirekten, zufälligen, Folge-, Straf- exemplarischen oder anderen Verluste, Kosten, Aufwendungen oder Schäden, die sich aus der vorliegenden Public License oder der Nutzung des lizenzierten Materials ergeben, selbst wenn der Lizenzgeber auf die Möglichkeit solcher Verluste, Kosten, Aufwendungen oder Schäden hingewiesen wurde. Dort, wo Haftungsbeschränkungen ganz oder teilweise unzulässig sind, gilt die vorliegende Beschränkung möglicherweise für Sie nicht. +Der Gewährleistungsausschluss und die Haftungsbeschränkung oben sollen so ausgelegt werden, dass sie soweit wie möglich einem absoluten Haftungs- und Gewährleistungsausschluss nahe kommen. +Abschnitt 6 – Laufzeit und Beendigung + +Die vorliegende Public License gilt bis zum Ablauf der Schutzfrist des Urheberrechts und der ähnlichen Rechte, die hiermit lizenziert werden. Gleichwohl erlöschen Ihre Rechte aus dieser Public License automatisch, wenn Sie die Bestimmungen dieser Public License nicht einhalten. +Soweit Ihr Recht, das lizenzierte Material zu nutzen, gemäß Abschnitt 6(a) erloschen ist, lebt es wieder auf: + +automatisch zu dem Zeitpunkt, an welchem die Verletzung abgestellt ist, sofern dies innerhalb von 30 Tagen seit Ihrer Kenntnis der Verletzung geschieht; oder +durch ausdrückliche Wiedereinsetzung durch den Lizenzgeber. +Es sei klargestellt, dass dieser Abschnitt 6(b) die Rechte des Lizenzgebers, Ausgleich für Ihre Verletzung der vorliegenden Public License zu verlangen, nicht einschränkt. +Es sei klargestellt, dass der Lizenzgeber das lizenzierte Material auch unter anderen Bedingungen anbieten oder den Vertrieb des lizenzierten Materials jederzeit einstellen darf; gleichwohl erlischt dadurch die vorliegende Public License nicht. +Die Abschnitte 1, 5, 6, 7 und 8 gelten auch nach Erlöschen der vorliegenden Public License fort. +Abschnitt 7 – Sonstige Bedingungen + +Der Lizenzgeber ist nicht an durch Sie gestellte zusätzliche oder abweichende Bedingungen gebunden, wenn diese nicht ausdrücklich vereinbart wurden. +Jedwede das lizenzierte Material betreffenden und hier nicht genannten Umstände, Annahmen oder Vereinbarungen sind getrennt und unabhängig von den Bedingungen der vorliegenden Public License. +Abschnitt 8 – Auslegung + +Es sei klargestellt, dass die vorliegende Public License weder besagen noch dahingehend ausgelegt werden soll, dass sie solche Nutzungen des lizenzierten Materials verringert, begrenzt, einschränkt oder mit Bedingungen belegt, die ohne eine Erlaubnis aus dieser Public License zulässig sind. +Soweit wie möglich soll, falls eine Klausel der vorliegenden Public License als nicht durchsetzbar anzusehen ist, diese Klausel automatisch im geringst erforderlichen Maße angepasst werden, um sie durchsetzbar zu machen. Falls die Klausel nicht anpassbar ist, soll sie von der vorliegenden Public License abgeschieden werden, ohne dass die Durchsetzbarkeit der verbleibenden Bedingungen tangiert wird. +Auf keine Bedingung der vorliegenden Public License wird verzichtet und kein Verstoß dagegen soll als hingenommen gelten, außer der Lizenzgeber hat sich damit ausdrücklich einverstanden erklärt. +Nichts in der vorliegenden Public License soll zu einer Beschränkung oder Aufhebung von Privilegien und Immunitäten führen, die dem Lizenzgeber oder Ihnen insbesondere aufgrund rechtlicher Regelungen irgendeiner Rechtsordnung oder Rechtsposition zustehen, oder dahingehend interpretiert werden. +Creative Commons ist keine Vertragspartei seiner Public Licenses. Dennoch kann Creative Commons sich dazu entscheiden, eine seiner Public Licenses für selbst publiziertes Material zu verwenden, und ist in diesen Fällen als „Lizenzgeber” zu betrachten. Der Text der Creative Commons Public Licenses selbst wird mittels der CC0 Verzichtserklärung der Gemeinfreiheit überantwortet. Abgesehen vom begrenzten Zweck, darauf hinzuweisen, dass Material unter einer Creative Commons Public License freigegeben ist, und falls es nicht anderweitig erlaubt wird durch die Creative-Commons-Policies, die unter creativecommons.org/policies veröffentlicht sind, erlaubt Creative Commons es nicht, dass die Marke “Creative Commons” oder eine andere Marke oder ein anderes Logo von Creative Commons ohne vorherige schriftliche Zustimmung genutzt werden, insbesondere in Verbindung mit nicht autorisierten Veränderungen seiner Public Licenses oder sonstigen Regelungen, Übereinkünften oder Vereinbarungen in Bezug auf die Nutzung lizenzierten Materials. Es sei klargestellt, dass dieser Absatz nicht Teil der Public Licenses ist. + +Creative Commons kann kontaktiert werden unter creativecommons.org. \ No newline at end of file diff --git a/BosMon-Webserver/POCSAG.cs b/BosMon-Webserver/POCSAG.cs new file mode 100644 index 0000000..260ad3c --- /dev/null +++ b/BosMon-Webserver/POCSAG.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Web; + +namespace BlubbFish.BosMon.Webserver { + class POCSAG { + public POCSAG(Dictionary data) { + if(data.ContainsKey("function")) { + if(Char.TryParse(data["function"], out Char function)) { + this.Function = function; + } + } + if (data.ContainsKey("flags")) { + if (Int32.TryParse(data["flags"], out Int32 flags)) { + this.Flags = flags; + } + } + if (data.ContainsKey("message")) { + this.Message = data["message"]; + } + if (data.ContainsKey("address")) { + if (Int32.TryParse(data["address"], out Int32 address)) { + this.Address = address; + } + } + if (data.ContainsKey("time")) { + if (DateTime.TryParse(data["time"], out DateTime time)) { + this.Time = time; + } + } + } + + public Char Function { get; private set; } + public Int32 Flags { get; private set; } + public String Message { get; private set; } + public Int32 Address { get; private set; } + public DateTime Time { get; private set; } + + /* + * + * a + * <DLE><DLE> + * 3 + *
1300888
+ * 1542446759960 + * 0 + *
+ */ + internal String ToXML() { + String ret = "\r\n"; + ret += ""+this.Function+ "\r\n"; + ret += ""+ HttpUtility.HtmlEncode(this.Message) + "\r\n"; + ret += "3\r\n"; + ret += "
"+this.Address.ToString("D7")+ "
\r\n"; + ret += ""+((DateTimeOffset)this.Time).ToUnixTimeMilliseconds()+ "\r\n"; + ret += ""+this.Flags+ "\r\n"; + ret += "
\r\n"; + return ret; + } + } +} diff --git a/BosMon-Webserver/Program.cs b/BosMon-Webserver/Program.cs new file mode 100644 index 0000000..5f52e26 --- /dev/null +++ b/BosMon-Webserver/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using BlubbFish.Utils; + +namespace BlubbFish.BosMon.Webserver { + class Program { + static void Main(String[] args) { + ProgramLogger logger = new ProgramLogger(); + InIReader.SetSearchPath(new List() { "/etc/bmweb", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\bmweb" }); + if (!InIReader.ConfigExist("settings")) { + Helper.WriteError("No settings.ini found. Abord!"); + return; + } + logger.SetPath(InIReader.GetInstance("settings").GetValue("logging", "path")); + new XMLWebserver(InIReader.GetInstance("settings").GetSection("server")); + while(true) { + System.Threading.Thread.Sleep(1000); + } + } + } +} diff --git a/BosMon-Webserver/Properties/AssemblyInfo.cs b/BosMon-Webserver/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5e6398e --- /dev/null +++ b/BosMon-Webserver/Properties/AssemblyInfo.cs @@ -0,0 +1,37 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("BosMon-Webserver")] +[assembly: AssemblyDescription("BosMon-Webserver a Webserver for Bosmon Telegrafs")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("BlubbFish")] +[assembly: AssemblyProduct("BosMon-Webserver")] +[assembly: AssemblyCopyright("Copyright © 2018 - 24.11.2018")] +[assembly: AssemblyTrademark("BlubbFish")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("fe41c96a-2341-4064-b90c-7fcc40a29685")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, +// übernehmen, indem Sie "*" eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0")] +[assembly: AssemblyFileVersion("1.0.0")] +[assembly: NeutralResourcesLanguage("de-DE")] \ No newline at end of file diff --git a/BosMon-Webserver/Properties/Resources.Designer.cs b/BosMon-Webserver/Properties/Resources.Designer.cs new file mode 100644 index 0000000..a045795 --- /dev/null +++ b/BosMon-Webserver/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.42000 +// +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. +// +//------------------------------------------------------------------------------ + +namespace BlubbFish.BosMon.Webserver.Properties { + using System; + + + /// + /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// + // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert + // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. + // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BlubbFish.BosMon.Webserver.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Ãœberschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol). + /// + internal static System.Drawing.Icon Icon { + get { + object obj = ResourceManager.GetObject("Icon", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/BosMon-Webserver/Properties/Resources.resx b/BosMon-Webserver/Properties/Resources.resx new file mode 100644 index 0000000..653c9e8 --- /dev/null +++ b/BosMon-Webserver/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/BosMon-Webserver/Resources/Icon.ico b/BosMon-Webserver/Resources/Icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c39c919f2f6c4944e639c419986fd74b43d6d7cd GIT binary patch literal 270398 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 config; + private readonly Queue pOCSAGs = new Queue(); + + public XMLWebserver(Dictionary settings) { + this.config = settings; + this._listener.Prefixes.Add(this.config["prefix"]); + this._listener.Start(); + this.Run(); + } + + private void Run() { + ThreadPool.QueueUserWorkItem((o) => { + Console.WriteLine("Webserver is Running..."); + try { + while (this._listener.IsListening) { + ThreadPool.QueueUserWorkItem((c) => { + HttpListenerContext ctx = c as HttpListenerContext; + if (ctx.Request.RawUrl == "/telegramin/" + this.config["upload_path"] + "/input.xml") { + try { + this.ParseInput(ctx); + } catch { } finally { ctx.Response.OutputStream.Close(); } + } else if(ctx.Request.RawUrl == "/telegramio/" + this.config["download_path"] + "/index.xml?loop=true") { + try { + this.SendResponse(ctx); + } catch { } finally { + Console.WriteLine("Output Connection Closed!"); + ctx.Response.OutputStream.Close(); + } + } else { + ctx.Response.StatusCode = 404; + ctx.Response.OutputStream.Close(); + ctx.Response.Close(); + } + }, this._listener.GetContext()); + } + } catch { }; + }); + } + + private void SendResponse(HttpListenerContext ctx) { + if (this.CheckAuth(ctx.Request)) { + ctx.Response.ContentType = "text/xml"; + ctx.Response.Headers.Add(HttpResponseHeader.Server, "BM Webserver 1.3"); + ctx.Response.SendChunked = true; + ctx.Response.Headers.Add(HttpResponseHeader.Date, DateTime.Now.ToString("ddd, dd MMM yyy HH':'mm':'ss 'GMT'")); + ctx.Response.Headers.Add(HttpResponseHeader.Connection, "close"); + Byte[] start = Encoding.UTF8.GetBytes("\r\n\r\n"); + ctx.Response.OutputStream.Write(start, 0, start.Length); + ctx.Response.OutputStream.Flush(); + start = Encoding.UTF8.GetBytes("" + ((DateTimeOffset)DateTime.Now).ToUnixTimeMilliseconds() + "\r\n"); + ctx.Response.OutputStream.Write(start, 0, start.Length); + ctx.Response.OutputStream.Flush(); + while (true) { + List submit = new List(); + while (this.pOCSAGs.Count > 0) { + submit.Add(this.pOCSAGs.Dequeue()); + } + if (submit.Count > 0) { + Console.WriteLine("<- Send " + submit.Count + " Items"); + } + foreach (POCSAG item in submit) { + Byte[] buf = Encoding.UTF8.GetBytes(item.ToXML()); + ctx.Response.OutputStream.Write(buf, 0, buf.Length); + ctx.Response.OutputStream.Flush(); + } + Thread.Sleep(100); + } + } + ctx.Response.StatusCode = 403; + } + + private void ParseInput(HttpListenerContext request) { + if(this.CheckAuth(request.Request)) { + String text; + using (StreamReader reader = new StreamReader(request.Request.InputStream, request.Request.ContentEncoding)) { + text = reader.ReadToEnd(); + } + Dictionary input = new Dictionary(); + String[] items = text.Split('&'); + foreach (String item in items) { + String[] kv = item.Split('='); + if (kv.Length == 2) { + kv[1] = HttpUtility.UrlDecode(kv[1]); + input.Add(kv[0], kv[1]); + } + } + input.Add("time", DateTime.Now.ToString("o")); + Console.WriteLine("-> " + input["address"] + ": " + input["message"]); + this.pOCSAGs.Enqueue(new POCSAG(input)); + if(this.pOCSAGs.Count > 1000) { + for(Int32 i = 0; i<5;i++) { + if(this.pOCSAGs.Count > 1000) { + this.pOCSAGs.Dequeue(); + } + } + } + request.Response.StatusCode = 200; + } + request.Response.StatusCode = 403; + } + + private Boolean CheckAuth(HttpListenerRequest request) { + if (this.config.ContainsKey("auth_user") && this.config.ContainsKey("auth_pass")) { + Int32 authindex = Array.IndexOf(request.Headers.AllKeys, "Authorization"); + if (authindex > -1) { + if (request.Headers[authindex].StartsWith("Basic ")) { + if (Encoding.UTF8.GetString(Convert.FromBase64String(request.Headers[authindex].Substring(6))) == this.config["auth_user"] + ":" + this.config["auth_pass"]) { + return true; + } + } + } + return false; + } + return true; + } + } +} \ No newline at end of file diff --git a/BosMon-Webserver/bin/Release/BosMon-Webserver.exe b/BosMon-Webserver/bin/Release/BosMon-Webserver.exe new file mode 100644 index 0000000000000000000000000000000000000000..b1c29fbbcc9bbc4f12b1ebeb6941622aad775e56 GIT binary patch literal 15360 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 A`Tzg` literal 0 HcmV?d00001 diff --git a/BosMon-Webserver/bin/Release/Utils.dll b/BosMon-Webserver/bin/Release/Utils.dll new file mode 100644 index 0000000000000000000000000000000000000000..5825e56d9ea1d8951e02cce128a03274073e8c98 GIT binary patch literal 31232 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 5.16.0) +Maintainer: BlubbFish +Description: Bosmon-Webserver + A Webserver for Bosmon Telegrafs diff --git a/BosMon-Webserver/dpkg/create-Builds.bat b/BosMon-Webserver/dpkg/create-Builds.bat new file mode 100644 index 0000000..beffeb9 --- /dev/null +++ b/BosMon-Webserver/dpkg/create-Builds.bat @@ -0,0 +1,3 @@ +bash.exe -c "./make-deb.sh armhf" +bash.exe -c "./make-exe.sh" +pause \ No newline at end of file diff --git a/BosMon-Webserver/dpkg/make-deb.sh b/BosMon-Webserver/dpkg/make-deb.sh new file mode 100644 index 0000000..3a364c0 --- /dev/null +++ b/BosMon-Webserver/dpkg/make-deb.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +HOMEDIR="/home/blubb" +ROOT="$HOMEDIR/deb" +OUTPUT="../bin/Release" + +EXEC="$ROOT/usr/local/bin/bmweb" +CONFIG="$ROOT/etc/bmweb" +SYSTEMD="$ROOT/lib/systemd/system" +LOGROTATE="$ROOT/etc/logrotate.d" + +DEBIAN="$ROOT/DEBIAN" +VMAJOR=$(grep -e "^\[assembly: AssemblyVersion(\"" ../Properties/AssemblyInfo.cs | cut -d'"' -f 2 | cut -d'.' -f 1) +VMINOR=$(grep -e "^\[assembly: AssemblyVersion(\"" ../Properties/AssemblyInfo.cs | cut -d'"' -f 2 | cut -d'.' -f 2) +VBUILD=$(grep -e "^\[assembly: AssemblyVersion(\"" ../Properties/AssemblyInfo.cs | cut -d'"' -f 2 | cut -d'.' -f 3) +ARCHT=$1 + +mkdir -p $EXEC +mkdir -p $CONFIG +mkdir -p $DEBIAN +mkdir -p $SYSTEMD +mkdir -p $LOGROTATE + +cp control $DEBIAN +cp preinst $DEBIAN +cp postinst $DEBIAN +cp prerm $DEBIAN +sed -i s/Version:\ x\.x-x/"Version: $VMAJOR.$VMINOR-$VBUILD"/ $DEBIAN/control +sed -i s/Architecture:\ any/"Architecture: $ARCHT"/ $DEBIAN/control +chmod 755 $DEBIAN -R + +cp bmweb.service $SYSTEMD +chmod 644 $SYSTEMD/bmweb.service + +cp $OUTPUT/*.exe $EXEC/ +find $OUTPUT -name \*.dll ! -name Mono.Posix.dll -exec cp {} $EXEC/ \; +chmod 644 $EXEC/* +chmod 755 $EXEC + +cp $OUTPUT/config-example/* $CONFIG +chmod 644 $CONFIG/* +chmod 755 $CONFIG + +cp bmweb-logrotate $LOGROTATE/bmweb +chmod 644 $LOGROTATE/* + +dpkg-deb --build $ROOT +mv $HOMEDIR/deb.deb ../../../Builds/"$ARCHT-bmweb_$VMAJOR.$VMINOR-$VBUILD.deb" +rm $HOMEDIR/deb -r \ No newline at end of file diff --git a/BosMon-Webserver/dpkg/make-exe.nsi b/BosMon-Webserver/dpkg/make-exe.nsi new file mode 100644 index 0000000..825823c --- /dev/null +++ b/BosMon-Webserver/dpkg/make-exe.nsi @@ -0,0 +1,94 @@ +;-------------------------------- +;Include Modern UI + !include "MUI2.nsh" +;-------------------------------- +;General + Name "BosMon-Webserver x.x.x" + OutFile "BosMon-Webserver x.x.x.exe" + + InstallDir "$LOCALAPPDATA\BosMon-Webserver" + InstallDirRegKey HKCU "Software\BosMon-Webserver" "" + RequestExecutionLevel user + ShowInstDetails show + ShowUninstDetails show + SetCompressor lzma + SetDateSave off + VIAddVersionKey "ProductName" "BosMon-Webserver" + VIAddVersionKey "CompanyName" "BlubbFish" + VIAddVersionKey "LegalTrademarks" "BlubbFish" + VIProductVersion x.x.x +;-------------------------------- +;Variables + Var StartMenuFolder +;-------------------------------- +;Interface Settings + !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\BosMon-Webserver" + !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" + !define MUI_ICON "..\Resources\Icon.ico" + !define MUI_UNICON "..\Resources\Icon.ico" + !define MUI_FINISHPAGE_NOAUTOCLOSE + !define MUI_UNFINISHPAGE_NOAUTOCLOSE + !define MUI_STARTMENUPAGE_DEFAULTFOLDER "BosMon-Webserver" +;-------------------------------- +;Pages + !insertmacro MUI_PAGE_WELCOME + !insertmacro MUI_PAGE_LICENSE "..\License.txt" + !insertmacro MUI_PAGE_COMPONENTS + !insertmacro MUI_PAGE_DIRECTORY + !insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder + !insertmacro MUI_PAGE_INSTFILES + !insertmacro MUI_PAGE_FINISH + + !insertmacro MUI_UNPAGE_WELCOME + !insertmacro MUI_UNPAGE_CONFIRM + !insertmacro MUI_UNPAGE_INSTFILES + !insertmacro MUI_UNPAGE_FINISH +;-------------------------------- +;Languages + !insertmacro MUI_LANGUAGE "German" +;-------------------------------- +;Installer Sections + InstType /NOCUSTOM + InstType Vollständig + InstType Minimal + Section "!Programm" SecProg + SectionIn 1 2 + !insertmacro MUI_STARTMENU_WRITE_BEGIN Application + CreateDirectory "$SMPROGRAMS\$StartMenuFolder" + CreateShortcut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + CreateShortcut "$SMPROGRAMS\$StartMenuFolder\BosMon-Webserver.lnk" "$INSTDIR\BosMon-Webserver.exe" + !insertmacro MUI_STARTMENU_WRITE_END + WriteRegStr HKCU "Software\BosMon-Webserver" "" $INSTDIR + SetOutPath "$INSTDIR" + File /r /x Mono.Posix.dll ..\bin\Release\*.dll + File /r ..\bin\Release\*.exe + WriteUninstaller "$INSTDIR\Uninstall.exe" + SectionEnd + Section "Konfigurationsdateien" SecConf + SectionIn 1 + CreateDirectory "$APPDATA\bmweb" + SetOutPath "$APPDATA\bmweb" + File /r ..\bin\Release\config-example\*.example + SectionEnd + Section "Uninstall" + ;ADD YOUR OWN FILES HERE... + Delete "$INSTDIR\*.exe" + Delete "$INSTDIR\*.dll" + Delete "$APPDATA\bmweb\*.example" + RMDir "$INSTDIR" + RMDir "$APPDATA\bmweb" + !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder + Delete "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" + RMDir "$SMPROGRAMS\$StartMenuFolder" + DeleteRegKey /ifempty HKCU "Software\BosMon-Webserver" + SectionEnd +;-------------------------------- +;Descriptions + LangString DESC_SecProg ${LANG_GERMAN} "Das BosMon-Webserver Programm" + LangString DESC_SecConf ${LANG_GERMAN} "Beispiel Konfigurationsdateien" + !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${SecProg} $(DESC_SecProg) + !insertmacro MUI_DESCRIPTION_TEXT ${Secconf} $(DESC_SecConf) + !insertmacro MUI_FUNCTION_DESCRIPTION_END +;-------------------------------- \ No newline at end of file diff --git a/BosMon-Webserver/dpkg/make-exe.sh b/BosMon-Webserver/dpkg/make-exe.sh new file mode 100644 index 0000000..69d80f7 --- /dev/null +++ b/BosMon-Webserver/dpkg/make-exe.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +VMAJOR=$(grep -e "^\[assembly: AssemblyVersion(\"" ../Properties/AssemblyInfo.cs | cut -d'"' -f 2 | cut -d'.' -f 1) +VMINOR=$(grep -e "^\[assembly: AssemblyVersion(\"" ../Properties/AssemblyInfo.cs | cut -d'"' -f 2 | cut -d'.' -f 2) +VBUILD=$(grep -e "^\[assembly: AssemblyVersion(\"" ../Properties/AssemblyInfo.cs | cut -d'"' -f 2 | cut -d'.' -f 3) + +cp make-exe.nsi make.nsi +sed -i s/Name\ \"BosMon-Webserver\ x\.x\.x\"/"Name \"BosMon-Webserver $VMAJOR.$VMINOR.$VBUILD\""/ make.nsi +sed -i s/OutFile\ \"BosMon-Webserver\ x\.x\.x\.exe\"/"OutFile \"BosMon-Webserver $VMAJOR.$VMINOR.$VBUILD.exe\""/ make.nsi +sed -i s/VIProductVersion\ x\.x\.x/"VIProductVersion $VMAJOR.$VMINOR.$VBUILD.0"/ make.nsi + +makensis make.nsi +rm make.nsi +mv "BosMon-Webserver $VMAJOR.$VMINOR.$VBUILD.exe" ../../../Builds/"BosMon-Webserver $VMAJOR.$VMINOR.$VBUILD.exe" \ No newline at end of file diff --git a/BosMon-Webserver/dpkg/postinst b/BosMon-Webserver/dpkg/postinst new file mode 100644 index 0000000..44983ad --- /dev/null +++ b/BosMon-Webserver/dpkg/postinst @@ -0,0 +1,8 @@ +#!/bin/bash + +systemctl enable bmweb.service +systemctl daemon-reload +if [[ $(systemctl is-active bmweb || true) == "active" ]] +then + service bmweb restart +fi diff --git a/BosMon-Webserver/dpkg/preinst b/BosMon-Webserver/dpkg/preinst new file mode 100644 index 0000000..3e778de --- /dev/null +++ b/BosMon-Webserver/dpkg/preinst @@ -0,0 +1,6 @@ +#!/bin/bash + +useradd -M bmweb +usermod -L bmweb +groupadd bmweb +usermod -G bmweb,adm bmweb diff --git a/BosMon-Webserver/dpkg/prerm b/BosMon-Webserver/dpkg/prerm new file mode 100644 index 0000000..5314209 --- /dev/null +++ b/BosMon-Webserver/dpkg/prerm @@ -0,0 +1,3 @@ +#!/bin/bash + +service bmweb stop