From 2ed5e8aefbc21bde4d7d16ff1f91dc0c4552c718 Mon Sep 17 00:00:00 2001
From: Roxanne Skelly <roxanne@highfidelity.io>
Date: Wed, 19 Jun 2019 13:53:38 -0700
Subject: [PATCH 1/2] add OS type to connect message

---
 domain-server/src/DomainGatekeeper.cpp         |  3 ++-
 domain-server/src/NodeConnectionData.cpp       |  3 +++
 domain-server/src/NodeConnectionData.h         |  2 +-
 libraries/networking/src/NodeList.cpp          | 14 ++++++++++++++
 libraries/networking/src/udt/PacketHeaders.cpp |  2 +-
 libraries/networking/src/udt/PacketHeaders.h   |  3 ++-
 6 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/domain-server/src/DomainGatekeeper.cpp b/domain-server/src/DomainGatekeeper.cpp
index 709c5810e2..915fec68aa 100644
--- a/domain-server/src/DomainGatekeeper.cpp
+++ b/domain-server/src/DomainGatekeeper.cpp
@@ -127,7 +127,8 @@ void DomainGatekeeper::processConnectRequestPacket(QSharedPointer<ReceivedMessag
             << "and machine fingerprint" << nodeConnection.machineFingerprint 
             << "user" << username 
             << "reason" << QString(nodeConnection.connectReason ? "SilentDomainDisconnect" : "Connect")
-            << "previous connection uptime" << nodeConnection.previousConnectionUpTime/USECS_PER_MSEC << "msec";
+            << "previous connection uptime" << nodeConnection.previousConnectionUpTime/USECS_PER_MSEC << "msec"
+            << "\nsysinfo" << nodeConnection.SystemInfo;
 
         // signal that we just connected a node so the DomainServer can get it a list
         // and broadcast its presence right away
diff --git a/domain-server/src/NodeConnectionData.cpp b/domain-server/src/NodeConnectionData.cpp
index b4aaacd749..9703db39c8 100644
--- a/domain-server/src/NodeConnectionData.cpp
+++ b/domain-server/src/NodeConnectionData.cpp
@@ -36,6 +36,9 @@ NodeConnectionData NodeConnectionData::fromDataStream(QDataStream& dataStream, c
         // now the machine fingerprint
         dataStream >> newHeader.machineFingerprint;
 
+        // and the operating system type
+        dataStream >> newHeader.SystemInfo;
+
         dataStream >> newHeader.connectReason;
 
         dataStream >> newHeader.previousConnectionUpTime;
diff --git a/domain-server/src/NodeConnectionData.h b/domain-server/src/NodeConnectionData.h
index 23eceb0dca..3833f5afd3 100644
--- a/domain-server/src/NodeConnectionData.h
+++ b/domain-server/src/NodeConnectionData.h
@@ -31,9 +31,9 @@ public:
     QString placeName;
     QString hardwareAddress;
     QUuid machineFingerprint;
+    QString SystemInfo;
     quint32 connectReason;
     quint64 previousConnectionUpTime;
-
     QByteArray protocolVersion;
 };
 
diff --git a/libraries/networking/src/NodeList.cpp b/libraries/networking/src/NodeList.cpp
index 3d367bc761..96b713c583 100644
--- a/libraries/networking/src/NodeList.cpp
+++ b/libraries/networking/src/NodeList.cpp
@@ -418,6 +418,20 @@ void NodeList::sendDomainServerCheckIn() {
             auto accountManager = DependencyManager::get<AccountManager>();
             packetStream << FingerprintUtils::getMachineFingerprint();
 
+            QString systemInfo;
+#if defined Q_OS_WIN
+            systemInfo = "OS:Windows";
+#elif defined Q_OS_OSX
+            systemInfo = "OS:OSX";
+#elif defined Q_OS_LINUX
+            systemInfo = "OS:Linux";
+#elif defined Q_OS_ANDROID
+            systemInfo = "OS:Android";
+#else
+            systemInfo = "OS:Unknown";
+#endif
+            packetStream << systemInfo;
+
             packetStream << _connectReason;
 
             if (_nodeDisconnectTimestamp < _nodeConnectTimestamp) {
diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp
index 30066b68e8..e434867c9a 100644
--- a/libraries/networking/src/udt/PacketHeaders.cpp
+++ b/libraries/networking/src/udt/PacketHeaders.cpp
@@ -72,7 +72,7 @@ PacketVersion versionForPacketType(PacketType packetType) {
             return static_cast<PacketVersion>(DomainConnectionDeniedVersion::IncludesExtraInfo);
 
         case PacketType::DomainConnectRequest:
-            return static_cast<PacketVersion>(DomainConnectRequestVersion::HasReason);
+            return static_cast<PacketVersion>(DomainConnectRequestVersion::HasSystemInfo);
 
         case PacketType::DomainServerAddedNode:
             return static_cast<PacketVersion>(DomainServerAddedNodeVersion::PermissionsGrid);
diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h
index 93a5d4e2b4..a244399c5a 100644
--- a/libraries/networking/src/udt/PacketHeaders.h
+++ b/libraries/networking/src/udt/PacketHeaders.h
@@ -346,7 +346,8 @@ enum class DomainConnectRequestVersion : PacketVersion {
     HasMachineFingerprint,
     AlwaysHasMachineFingerprint,
     HasTimestamp,
-    HasReason
+    HasReason,
+    HasSystemInfo
 };
 
 enum class DomainConnectionDeniedVersion : PacketVersion {

From 0576e6ae3e0fcd37613122d9e3499ff2e91b6d46 Mon Sep 17 00:00:00 2001
From: Roxanne Skelly <roxanne@highfidelity.io>
Date: Wed, 19 Jun 2019 15:10:02 -0700
Subject: [PATCH 2/2] remove newline for sysinfo to make splunk queries easier

---
 domain-server/src/DomainGatekeeper.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/domain-server/src/DomainGatekeeper.cpp b/domain-server/src/DomainGatekeeper.cpp
index 915fec68aa..6d339852d5 100644
--- a/domain-server/src/DomainGatekeeper.cpp
+++ b/domain-server/src/DomainGatekeeper.cpp
@@ -128,7 +128,7 @@ void DomainGatekeeper::processConnectRequestPacket(QSharedPointer<ReceivedMessag
             << "user" << username 
             << "reason" << QString(nodeConnection.connectReason ? "SilentDomainDisconnect" : "Connect")
             << "previous connection uptime" << nodeConnection.previousConnectionUpTime/USECS_PER_MSEC << "msec"
-            << "\nsysinfo" << nodeConnection.SystemInfo;
+            << "sysinfo" << nodeConnection.SystemInfo;
 
         // signal that we just connected a node so the DomainServer can get it a list
         // and broadcast its presence right away