IVGCVSW-4732 Move NetworkSockets class needs to profiling/common

Signed-off-by: Finn Williams <Finn.Williams@arm.com>
Change-Id: Ie1bd73e6c1818277943e70eaf73b4d9a26da4758
diff --git a/profiling/common/include/NetworkSockets.hpp b/profiling/common/include/NetworkSockets.hpp
new file mode 100644
index 0000000..b9e58aa
--- /dev/null
+++ b/profiling/common/include/NetworkSockets.hpp
@@ -0,0 +1,59 @@
+//
+// Copyright © 2020 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+// This file (along with its corresponding .cpp) defines a very thin platform abstraction layer for the use of
+// networking sockets. Thankfully the underlying APIs on Windows and Linux are very similar so not much conversion
+// is needed (typically just forwarding the parameters to a differently named function).
+// Some of the APIs are in fact completely identical and so no forwarding function is needed.
+
+#pragma once
+
+#if defined(__unix__)
+#include <poll.h>
+#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#elif defined(_MSC_VER)
+#include <winsock2.h>
+#include <afunix.h>
+#endif
+
+namespace armnnUtils
+{
+namespace Sockets
+{
+
+#if defined(__unix__)
+
+using Socket = int;
+using PollFd = pollfd;
+
+#elif defined(_MSC_VER)
+
+using Socket = SOCKET;
+using PollFd = WSAPOLLFD;
+#define SOCK_CLOEXEC 0
+
+#endif
+
+/// Performs any required one-time setup.
+bool Initialize();
+
+int Close(Socket s);
+
+bool SetNonBlocking(Socket s);
+
+long Write(Socket s, const void* buf, size_t len);
+
+long Read(Socket s, void* buf, size_t len);
+
+int Ioctl(Socket s, unsigned long int cmd, void* arg);
+
+int Poll(PollFd* fds, nfds_t numFds, int timeout);
+
+Socket Accept(Socket s, sockaddr* addr, socklen_t* addrlen, int flags);
+
+}
+}
diff --git a/profiling/common/src/NetworkSockets.cpp b/profiling/common/src/NetworkSockets.cpp
new file mode 100644
index 0000000..8ce5f19
--- /dev/null
+++ b/profiling/common/src/NetworkSockets.cpp
@@ -0,0 +1,101 @@
+//
+// Copyright © 2020 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "common/include/NetworkSockets.hpp"
+
+#if defined(__unix__)
+#include <unistd.h>
+#include <fcntl.h>
+#endif
+
+namespace armnnUtils
+{
+namespace Sockets
+{
+
+bool Initialize()
+{
+#if defined(__unix__)
+    return true;
+#elif defined(_MSC_VER)
+    WSADATA wsaData;
+    return WSAStartup(MAKEWORD(2, 2), &wsaData) == 0;
+#endif
+}
+
+int Close(Socket s)
+{
+#if defined(__unix__)
+    return close(s);
+#elif defined(_MSC_VER)
+    return closesocket(s);
+#endif
+}
+
+
+bool SetNonBlocking(Socket s)
+{
+#if defined(__unix__)
+    const int currentFlags = fcntl(s, F_GETFL);
+    return fcntl(s, F_SETFL, currentFlags | O_NONBLOCK) == 0;
+#elif defined(_MSC_VER)
+    u_long mode = 1;
+    return ioctlsocket(s, FIONBIO, &mode) == 0;
+#endif
+}
+
+
+long Write(Socket s, const void* buf, size_t len)
+{
+#if defined(__unix__)
+    return write(s, buf, len);
+#elif defined(_MSC_VER)
+    return send(s, static_cast<const char*>(buf), len, 0);
+#endif
+}
+
+
+long Read(Socket s, void* buf, size_t len)
+{
+#if defined(__unix__)
+    return read(s, buf, len);
+#elif defined(_MSC_VER)
+    return recv(s, static_cast<char*>(buf), len, 0);
+#endif
+}
+
+int Ioctl(Socket s, unsigned long int cmd, void* arg)
+{
+#if defined(__ANDROID__)
+    return ioctl(s, static_cast<int>(cmd), arg);
+#elif defined(__unix__)
+    return ioctl(s, cmd, arg);
+#elif defined(_MSC_VER)
+    return ioctlsocket(s, cmd, static_cast<u_long*>(arg));
+#endif
+}
+
+
+int Poll(PollFd* fds, nfds_t numFds, int timeout)
+{
+#if defined(__unix__)
+    return poll(fds, numFds, timeout);
+#elif defined(_MSC_VER)
+    return WSAPoll(fds, numFds, timeout);
+#endif
+}
+
+
+armnnUtils::Sockets::Socket Accept(Socket s, sockaddr* addr, socklen_t* addrlen, int flags)
+{
+#if defined(__unix__)
+    return accept4(s, addr, addrlen, flags);
+#elif defined(_MSC_VER)
+    return accept(s, addr, reinterpret_cast<int*>(addrlen));
+#endif
+}
+
+}
+}
diff --git a/profiling/server/src/basePipeServer/BasePipeServer.cpp b/profiling/server/src/basePipeServer/BasePipeServer.cpp
index fde5684..1d5e0b6 100644
--- a/profiling/server/src/basePipeServer/BasePipeServer.cpp
+++ b/profiling/server/src/basePipeServer/BasePipeServer.cpp
@@ -3,11 +3,12 @@
 // SPDX-License-Identifier: MIT
 //
 
+#include "BasePipeServer.hpp"
+
 #include <iostream>
 #include <boost/cast.hpp>
 #include <vector>
 #include <iomanip>
-#include "BasePipeServer.hpp"
 
 using namespace armnnUtils;
 
diff --git a/profiling/server/src/basePipeServer/BasePipeServer.hpp b/profiling/server/src/basePipeServer/BasePipeServer.hpp
index a150d76..c03774e 100644
--- a/profiling/server/src/basePipeServer/BasePipeServer.hpp
+++ b/profiling/server/src/basePipeServer/BasePipeServer.hpp
@@ -5,13 +5,13 @@
 
 #pragma once
 
-//#include <NetworkSockets>
-#include <string>
-#include <atomic>
-#include "../../../../src/armnnUtils/NetworkSockets.hpp"
+#include "common/include/NetworkSockets.hpp"
 #include "../../../../src/profiling/Packet.hpp"
 #include "common/include/SocketConnectionException.hpp"
 
+#include <string>
+#include <atomic>
+
 namespace armnnProfiling
 {
 
diff --git a/profiling/server/src/basePipeServer/ConnectionHandler.hpp b/profiling/server/src/basePipeServer/ConnectionHandler.hpp
index e7317dc..661935b 100644
--- a/profiling/server/src/basePipeServer/ConnectionHandler.hpp
+++ b/profiling/server/src/basePipeServer/ConnectionHandler.hpp
@@ -5,7 +5,6 @@
 
 #pragma once
 
-#include "../../../../src/armnnUtils/NetworkSockets.hpp"
 #include "BasePipeServer.hpp"
 #include <string>