Эх сурвалжийг харах

Add SocketAddressMapper class (incomplete)

Patrick-Christopher Mattulat 2 жил өмнө
parent
commit
eb58c8119e

+ 3 - 1
CMakeLists.txt

@@ -182,7 +182,8 @@ set(SOURCE_FILES_IO
 set(SOURCE_FILES_NETWORK
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/network/core/ProtocolFamilyMapper.cpp
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/network/core/ProtocolMapper.cpp
-        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/network/socket/Socket.cpp)
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/network/socket/Socket.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/network/socket/SocketAddressMapper.cpp)
 
 set(SOURCE_FILES_TIME
         ${CMAKE_CURRENT_SOURCE_DIR}/source/ls_std/time/Date.cpp)
@@ -263,6 +264,7 @@ if (${LS_STD_BUILD_WITH_TESTS})
     set(TEST_FILES_NETWORK
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/network/core/ProtocolFamilyMapperTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/network/core/ProtocolMapperTest.cpp
+            ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/network/socket/SocketAddressMapperTest.cpp
             ${CMAKE_CURRENT_SOURCE_DIR}/test/cases/network/socket/SocketTest.cpp)
 
     set(TEST_FILES_SERIALIZATION

+ 4 - 1
include/ls_std/ls_std_network.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-11-16
- * Changed:         2022-11-17
+ * Changed:         2022-11-18
  *
  * */
 
@@ -16,8 +16,11 @@
 #include <ls_std/network/core/ProtocolFamilyType.hpp>
 #include <ls_std/network/core/ProtocolMapper.hpp>
 #include <ls_std/network/core/ProtocolType.hpp>
+#include <ls_std/network/socket/ConvertedSocketAddress.hpp>
 #include <ls_std/network/socket/Socket.hpp>
 #include <ls_std/network/socket/SocketAddress.hpp>
+#include <ls_std/network/socket/SocketAddressMapper.hpp>
+#include <ls_std/network/socket/SocketAddressMapperParameter.hpp>
 #include <ls_std/network/socket/SocketParameter.hpp>
 
 #endif

+ 27 - 0
include/ls_std/network/socket/ConvertedSocketAddress.hpp

@@ -0,0 +1,27 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2022-11-18
+ * Changed:         2022-11-18
+ *
+ * */
+
+#ifndef LS_STD_CONVERTED_SOCKET_ADDRESS_HPP
+#define LS_STD_CONVERTED_SOCKET_ADDRESS_HPP
+
+#if defined(unix) || defined(__APPLE__)
+#include <netinet/in.h>
+#endif
+
+namespace ls::std::network
+{
+  struct ConvertedSocketAddress
+  {
+    #if defined(unix) || defined(__APPLE__)
+    ::sockaddr_in socketAddressUnix{};
+    #endif
+  };
+}
+
+#endif

+ 40 - 0
include/ls_std/network/socket/SocketAddressMapper.hpp

@@ -0,0 +1,40 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2022-11-18
+ * Changed:         2022-11-18
+ *
+ * */
+
+#ifndef LS_STD_SOCKET_ADDRESS_MAPPER_HPP
+#define LS_STD_SOCKET_ADDRESS_MAPPER_HPP
+
+#include <ls_std/core/Class.hpp>
+#include <ls_std/os/dynamic_goal.hpp>
+#include "ConvertedSocketAddress.hpp"
+#include "SocketAddressMapperParameter.hpp"
+#if defined(unix) || defined(__APPLE__)
+#include <netinet/in.h>
+#endif
+
+namespace ls::std::network
+{
+  class LS_STD_DYNAMIC_GOAL SocketAddressMapper : public ls::std::core::Class // TODO: does this make sense, since all methods are static
+  {
+    public:
+
+      SocketAddressMapper();
+      ~SocketAddressMapper() override = default;
+
+      [[nodiscard]] static ls::std::network::ConvertedSocketAddress from(const ls::std::network::SocketAddressMapperParameter& _parameter);
+
+    private:
+
+      #if defined(unix) || defined(__APPLE__)
+      [[nodiscard]] static ::sockaddr_in _toSockAddressUnix(const ls::std::network::SocketAddressMapperParameter& _parameter);
+      #endif
+  };
+}
+
+#endif

+ 25 - 0
include/ls_std/network/socket/SocketAddressMapperParameter.hpp

@@ -0,0 +1,25 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2022-11-18
+ * Changed:         2022-11-18
+ *
+ * */
+
+#ifndef LS_STD_SOCKET_ADDRESS_MAPPER_PARAMETER_HPP
+#define LS_STD_SOCKET_ADDRESS_MAPPER_PARAMETER_HPP
+
+#include "SocketAddress.hpp"
+#include <ls_std/network/core/ProtocolFamilyType.hpp>
+
+namespace ls::std::network
+{
+  struct SocketAddressMapperParameter
+  {
+    ls::std::network::SocketAddress socketAddress{};
+    ls::std::network::ProtocolFamilyType protocolFamilyType{};
+  };
+}
+
+#endif

+ 44 - 0
source/ls_std/network/socket/SocketAddressMapper.cpp

@@ -0,0 +1,44 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2022-11-18
+ * Changed:         2022-11-18
+ *
+ * */
+
+#include <ls_std/network/socket/SocketAddressMapper.hpp>
+#include <ls_std/network/core/ProtocolFamily.hpp>
+#include <ls_std/network/core/ProtocolFamilyMapper.hpp>
+#if defined(unix) || defined(__APPLE__)
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#endif
+
+ls::std::network::SocketAddressMapper::SocketAddressMapper() : ls::std::core::Class("SocketAddressMapper")
+{}
+
+ls::std::network::ConvertedSocketAddress ls::std::network::SocketAddressMapper::from(const ls::std::network::SocketAddressMapperParameter &_parameter)
+{
+  ls::std::network::ConvertedSocketAddress convertedSocketAddress{};
+
+  #if defined(unix) || defined(__APPLE__)
+  convertedSocketAddress.socketAddressUnix = ls::std::network::SocketAddressMapper::_toSockAddressUnix(_parameter);
+  #endif
+
+  return convertedSocketAddress;
+}
+
+#if defined(unix) || defined(__APPLE__)
+::sockaddr_in ls::std::network::SocketAddressMapper::_toSockAddressUnix(const ls::std::network::SocketAddressMapperParameter &_parameter)
+{
+  ::sockaddr_in socketAddressUnix{};
+  socketAddressUnix.sin_port = htons(_parameter.socketAddress.port);
+
+  ls::std::network::ProtocolFamily protocolFamily = ls::std::network::ProtocolFamilyMapper::from(_parameter.protocolFamilyType);
+  socketAddressUnix.sin_family = protocolFamily.unixDomain;
+  ::inet_aton(_parameter.socketAddress.ipAddress.c_str(), &socketAddressUnix.sin_addr);
+
+  return socketAddressUnix;
+}
+#endif

+ 43 - 0
test/cases/network/socket/SocketAddressMapperTest.cpp

@@ -0,0 +1,43 @@
+/*
+ * Author:          Patrick-Christopher Mattulat
+ * Company:         Lynar Studios
+ * E-Mail:          webmaster@lynarstudios.com
+ * Created:         2020-11-18
+ * Changed:         2022-11-18
+ *
+ * */
+
+#include <gtest/gtest.h>
+#include <ls_std/ls_std_network.hpp>
+
+using namespace ls::std::network;
+
+namespace
+{
+  class SocketAddressMapperTest : public ::testing::Test
+  {
+    protected:
+
+      SocketAddressMapperTest() = default;
+      ~SocketAddressMapperTest() override = default;
+
+      void SetUp() override
+      {}
+
+      void TearDown() override
+      {}
+  };
+
+  TEST_F(SocketAddressMapperTest, getClassName)
+  {
+    ASSERT_STREQ("SocketAddressMapper", SocketAddressMapper{}.getClassName().c_str());
+  }
+
+  TEST_F(SocketAddressMapperTest, from)
+  {
+    SocketAddressMapperParameter parameter{};
+    parameter.protocolFamilyType = ProtocolFamilyType::PROTOCOL_FAMILY_TYPE_IPV4;
+
+    ConvertedSocketAddress convertedSocketAddress = SocketAddressMapper::from();
+  }
+}