diff options
Diffstat (limited to 'src/ifaddr/private/utils.nim')
| -rw-r--r-- | src/ifaddr/private/utils.nim | 26 |
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") |
