From a76d96f7161b856113b15b256cd0faac15eaa648 Mon Sep 17 00:00:00 2001
From: Tim Felgentreff <timfelgentreff@gmail.com>
Date: Mon, 21 Dec 2020 20:40:08 +0100
Subject: [PATCH] add a function to get the local hostname

---
 src/include/net_lowlevel.h   |  2 ++
 src/network/net_lowlevel.cpp | 20 ++++++++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/src/include/net_lowlevel.h b/src/include/net_lowlevel.h
index 9c1a9b377..6d543b409 100644
--- a/src/include/net_lowlevel.h
+++ b/src/include/net_lowlevel.h
@@ -114,6 +114,8 @@ extern void NetExit();
 extern unsigned long NetResolveHost(const std::string &host);
 /// Get local IPs
 extern int NetSocketAddr(unsigned long *ips, int maxAddr);
+/// Get local hostname
+extern std::string NetGetHostname();
 
 /// Open a UDP Socket port. (param in network format)
 extern Socket NetOpenUDP(unsigned long ip, int port);
diff --git a/src/network/net_lowlevel.cpp b/src/network/net_lowlevel.cpp
index 976b72b67..05457d01c 100644
--- a/src/network/net_lowlevel.cpp
+++ b/src/network/net_lowlevel.cpp
@@ -206,6 +206,26 @@ unsigned long NetResolveHost(const std::string &host)
 	return INADDR_NONE;
 }
 
+/**
+ * Return the system hostname.
+ */
+std::string NetGetHostname()
+{
+	char hostname_buffer[256];
+#ifdef _WIN32
+	DWORD hostname_size = (DWORD)sizeof(hostname_buffer);
+	if (GetComputerNameA(hostname_buffer, &hostname_size)) {
+		return std::string(hostname_buffer);
+	}
+#else
+	size_t hostname_size = sizeof(hostname_buffer);
+	if (gethostname(hostname_buffer, hostname_size) == 0) {
+		return std::string(hostname_buffer);
+	}
+#endif
+	return "localhost";
+}
+
 /**
 **  Get IP-addrs of local interfaces from Network file descriptor
 **