aboutsummaryrefslogtreecommitdiff
path: root/src/ifaddr/private/utils.nim
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2020-02-19 22:14:08 +0200
committerOskari Timperi <oskari.timperi@iki.fi>2020-02-19 22:14:08 +0200
commitb5665310e5c1e5d60893248ff146b1a60032dd87 (patch)
tree57e7eb9aea927f08c57879b452e82c3e6da4af14 /src/ifaddr/private/utils.nim
downloadifaddr-nim-b5665310e5c1e5d60893248ff146b1a60032dd87.tar.gz
ifaddr-nim-b5665310e5c1e5d60893248ff146b1a60032dd87.zip
initial commitHEADmaster
Diffstat (limited to 'src/ifaddr/private/utils.nim')
-rw-r--r--src/ifaddr/private/utils.nim26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/ifaddr/private/utils.nim b/src/ifaddr/private/utils.nim
new file mode 100644
index 0000000..ee84b70
--- /dev/null
+++ b/src/ifaddr/private/utils.nim
@@ -0,0 +1,26 @@
+from net import IpAddress
+
+when defined(windows) or defined(nimdoc):
+ from winlean import SockAddr, Sockaddr_in, Sockaddr_in6, AF_INET, AF_INET6, SockLen
+elif defined(linux) or defined(maxosx):
+ from posix import SockAddr, Sockaddr_in, Sockaddr_in6, AF_INET, AF_INET6, SockLen
+
+from nativesockets import Port
+from net import fromSockAddr
+
+
+proc fromSockAddrPtr*(sa: ptr SockAddr, address: var IpAddress, flowInfo: var uint32,
+ scopeId: var uint32) =
+ var port: Port
+ if sa.sa_family.uint32 == AF_INET.uint32:
+ let sa4 = cast[ptr Sockaddr_in](sa)[]
+ let size = sizeof(Sockaddr_in).SockLen
+ fromSockAddr(sa4, size, address, port)
+ elif sa.sa_family.uint32 == AF_INET6.uint32:
+ let sa6 = cast[ptr Sockaddr_in6](sa)[]
+ let size = sizeof(Sockaddr_in6).SockLen
+ fromSockAddr(sa6, size, address, port)
+ flowInfo = sa6.sin6_flowinfo.uint32
+ scopeId = sa6.sin6_scope_id.uint32
+ else:
+ raise newException(Exception, "unknown sa_family")