aboutsummaryrefslogtreecommitdiff
path: root/src/ifaddr/private/utils.nim
blob: ee84b7039681ef73d233d32b3794ea313fc6fc5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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")