From 4fdd55288d85b0500b88a56b384d9b433b42bc39 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Thu, 30 Oct 2014 22:47:19 -0400 Subject: [PATCH] Added ntop4(), ntop6(), and ntop() to Jupiter::Socket. --- Jupiter/Socket.cpp | 29 +++++++++++++++++++++++++++++ Jupiter/Socket.h | 27 +++++++++++++++++++++++++++ Release/Jupiter.lib | Bin 251718 -> 252918 bytes 3 files changed, 56 insertions(+) diff --git a/Jupiter/Socket.cpp b/Jupiter/Socket.cpp index cf8f448..c1bd591 100644 --- a/Jupiter/Socket.cpp +++ b/Jupiter/Socket.cpp @@ -316,6 +316,35 @@ in_addr6 Jupiter::Socket::pton6(const char *str) return r; } +Jupiter::StringS Jupiter::Socket::ntop4(uint32_t ip) +{ + static char buf[16]; + if (inet_ntop(AF_INET, &ip, buf, sizeof(buf)) == nullptr) + return Jupiter::StringS::empty; + return Jupiter::String(buf); +} + +Jupiter::StringS Jupiter::Socket::ntop6(in_addr6 ip) +{ + static char buf[46]; + if (inet_ntop(AF_INET6, &ip, buf, sizeof(buf)) == nullptr) + return Jupiter::StringS::empty; + return Jupiter::String(buf); +} + +Jupiter::StringS Jupiter::Socket::ntop(void *ip, size_t size) +{ + switch (size) + { + case 4: + return ntop4(*reinterpret_cast(ip)); + case 16: + return ntop6(*reinterpret_cast(ip)); + default: + return Jupiter::StringS::empty; + } +} + Jupiter::Socket *Jupiter::Socket::acceptConnection() { SOCKET tSock = accept(Socket::data_->rawSock, 0, 0); diff --git a/Jupiter/Socket.h b/Jupiter/Socket.h index 06498c0..a6c0522 100644 --- a/Jupiter/Socket.h +++ b/Jupiter/Socket.h @@ -26,6 +26,7 @@ #include #include "Jupiter.h" #include "Readable_String.h" +#include "String.h" struct addrinfo; struct in_addr6; @@ -180,6 +181,32 @@ namespace Jupiter */ static in_addr6 pton6(const char *str); + /** + * @brief Formats an IPv4 address in its string presentation format. + * + * @param ip IP to format + * @return String containing the address's string presentation. + */ + static Jupiter::StringS ntop4(uint32_t ip); + + /** + * @brief Formats an IPv6 address in its string presentation format. + * + * @param ip IP to format + * @return String containing the address's string presentation. + */ + static Jupiter::StringS ntop6(in_addr6 ip); + + /** + * @brief Formats an IPvX address in its string presentation format. + * Currently supports: IPv4, IPv6. + * + * @param ip IP to format + * @param size Size of the input type + * @return String containing the address's string presentation. + */ + static Jupiter::StringS ntop(void *ip, size_t size); + /** * @brief Interface to provide simple connection establishing. * Note: When using this method, the hostname and port are NOT stored; thus getHost(), getHostname(), diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index ec0085b17256223e359a5491963a9c0350ef2f58..810108f5c4908e8080297d204999ca0df2d6d454 100644 GIT binary patch delta 30115 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 Af&c&j delta 29464 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 gIO&p;&q);YW%H>D(HOz)64Ziw9f2NVOw6951J