Browse Source

Add mapper to Socket's connect implementation

Patrick-Christopher Mattulat 2 năm trước cách đây
mục cha
commit
67f32dcd94

+ 3 - 1
include/ls_std/network/socket/Socket.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-11-16
- * Changed:         2022-11-18
+ * Changed:         2022-12-09
  *
  * */
 
@@ -13,6 +13,7 @@
 #include <ls_std/os/dynamic_goal.hpp>
 #include <ls_std/core/Class.hpp>
 #include "SocketParameter.hpp"
+#include "SocketAddressMapperParameter.hpp"
 
 namespace ls::std::network
 {
@@ -37,6 +38,7 @@ namespace ls::std::network
       #if defined(unix) || defined(__APPLE__)
       [[nodiscard]] bool _connectUnix() const;
       #endif
+      [[nodiscard]] SocketAddressMapperParameter _createSocketAddressMapperParameter() const;
       [[nodiscard]] static bool _init(const ls::std::network::SocketParameter& _parameter);
       #if defined(unix) || defined(__APPLE__)
       [[nodiscard]] static bool _initUnix(const ls::std::network::SocketParameter& _parameter);

+ 13 - 10
source/ls_std/network/socket/Socket.cpp

@@ -3,18 +3,18 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-11-16
- * Changed:         2022-11-18
+ * Changed:         2022-12-09
  *
  * */
 
 #include <ls_std/network/socket/Socket.hpp>
 #if defined(unix) || defined(__APPLE__)
 #include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
 #endif
 #include <ls_std/network/core/ProtocolFamilyMapper.hpp>
 #include <ls_std/network/core/ProtocolMapper.hpp>
+#include <ls_std/network/socket/ConvertedSocketAddress.hpp>
+#include <ls_std/network/socket/SocketAddressMapper.hpp>
 
 ls::std::network::Socket::Socket(const ls::std::network::SocketParameter& _parameter) : ls::std::core::Class("Socket"),
 parameter(_parameter)
@@ -40,16 +40,19 @@ bool ls::std::network::Socket::isInitialized() const
 #if defined(unix) || defined(__APPLE__)
 bool ls::std::network::Socket::_connectUnix() const
 {
-  ::sockaddr_in socketAddressUnix{}; // TODO: put everything inside a dedicated mapper
-  socketAddressUnix.sin_port = htons(this->parameter.socketAddress.port);
+  ls::std::network::ConvertedSocketAddress convertedSocketAddress = ls::std::network::SocketAddressMapper::from(ls::std::network::Socket::_createSocketAddressMapperParameter());
+  return ::connect(this->unixDescriptor, reinterpret_cast<const sockaddr *>(&convertedSocketAddress.socketAddressUnix), sizeof(convertedSocketAddress.socketAddressUnix)) == 0;
+}
+#endif
 
-  ls::std::network::ProtocolFamily protocolFamily = ls::std::network::ProtocolFamilyMapper::from(this->parameter.protocolFamilyType);
-  socketAddressUnix.sin_family = protocolFamily.unixDomain;
-  ::inet_aton(this->parameter.socketAddress.ipAddress.c_str(), &socketAddressUnix.sin_addr);
+ls::std::network::SocketAddressMapperParameter ls::std::network::Socket::_createSocketAddressMapperParameter() const
+{
+  ls::std::network::SocketAddressMapperParameter mapperParameter{};
+  mapperParameter.socketAddress = this->parameter.socketAddress;
+  mapperParameter.protocolFamilyType = this->parameter.protocolFamilyType;
 
-  return ::connect(this->unixDescriptor, reinterpret_cast<const sockaddr *>(&socketAddressUnix), sizeof(socketAddressUnix)) == 0;
+  return mapperParameter;
 }
-#endif
 
 bool ls::std::network::Socket::_init(const ls::std::network::SocketParameter &_parameter)
 {