From 9267497ac683cb664444b7c36f8ff87e83500576 Mon Sep 17 00:00:00 2001 From: SASANO Takayoshi Date: Wed, 3 Nov 2021 05:37:51 +0900 Subject: [PATCH] add CIp::GetAddr(), CIp::GetPort(), CIp::SetPort() implementation original cip.h handles raw value from struct sockaddr_in/sockaddr_in6. this code follows this, but they should use network byte converter like ntohs(). --- src/cip.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/cip.cpp b/src/cip.cpp index dfd5ec1..bd4c469 100644 --- a/src/cip.cpp +++ b/src/cip.cpp @@ -93,6 +93,49 @@ struct sockaddr_storage *CIp::GetSockAddr(socklen_t &len) return &m_Addr; } +//////////////////////////////////////////////////////////////////////////////////////// +// get and set + +uint32 CIp::GetAddr(void) const +{ + switch (m_Addr.ss_family) + { + case AF_INET: + return ((struct sockaddr_in *)&m_Addr)->sin_addr.s_addr; + default: + return 0; /* not supported */ + } +} + +uint16 CIp::GetPort(void) const +{ + switch (m_Addr.ss_family) + { + case AF_INET: + return ((struct sockaddr_in *)&m_Addr)->sin_port; + case AF_INET6: + return ((struct sockaddr_in6 *)&m_Addr)->sin6_port; + default: + return 0; /* not supported */ + } +} + +void CIp::SetPort(uint16 port) +{ + switch (m_Addr.ss_family) + { + case AF_INET: + ((struct sockaddr_in *)&m_Addr)->sin_port = port; + break; + case AF_INET6: + ((struct sockaddr_in6 *)&m_Addr)->sin6_port = port; + break; + default: + /* not supported, do nothing */ + break; + } +} + //////////////////////////////////////////////////////////////////////////////////////// // operator