diff options
Diffstat (limited to 'lib/pure')
-rw-r--r-- | lib/pure/net.nim | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/pure/net.nim b/lib/pure/net.nim index cac10d11c..ddfb3460d 100644 --- a/lib/pure/net.nim +++ b/lib/pure/net.nim @@ -405,33 +405,40 @@ proc isIpAddress*(address_str: string): bool {.tags: [].} = return false return true -proc toSockAddr*(address: IpAddress, port: Port, sa: var Sockaddr_storage, sl: var Socklen) = +proc toSockAddr*(address: IpAddress, port: Port, sa: var Sockaddr_storage, + sl: var Socklen) = ## Converts `IpAddress` and `Port` to `SockAddr` and `Socklen` let port = htons(uint16(port)) case address.family of IpAddressFamily.IPv4: sl = sizeof(Sockaddr_in).Socklen let s = cast[ptr Sockaddr_in](addr sa) - s.sin_family = type(s.sin_family)(AF_INET) + s.sin_family = type(s.sin_family)(toInt(AF_INET)) s.sin_port = port - copyMem(addr s.sin_addr, unsafeAddr address.address_v4[0], sizeof(s.sin_addr)) + copyMem(addr s.sin_addr, unsafeAddr address.address_v4[0], + sizeof(s.sin_addr)) of IpAddressFamily.IPv6: sl = sizeof(Sockaddr_in6).Socklen let s = cast[ptr Sockaddr_in6](addr sa) - s.sin6_family = type(s.sin6_family)(AF_INET6) + s.sin6_family = type(s.sin6_family)(toInt(AF_INET6)) s.sin6_port = port - copyMem(addr s.sin6_addr, unsafeAddr address.address_v6[0], sizeof(s.sin6_addr)) + copyMem(addr s.sin6_addr, unsafeAddr address.address_v6[0], + sizeof(s.sin6_addr)) -proc fromSockAddrAux(sa: ptr Sockaddr_storage, sl: Socklen, address: var IpAddress, port: var Port) = +proc fromSockAddrAux(sa: ptr Sockaddr_storage, sl: Socklen, + address: var IpAddress, port: var Port) = if sa.ss_family.int == AF_INET.int and sl == sizeof(Sockaddr_in).Socklen: address = IpAddress(family: IpAddressFamily.IPv4) let s = cast[ptr Sockaddr_in](sa) - copyMem(addr address.address_v4[0], addr s.sin_addr, sizeof(address.address_v4)) + copyMem(addr address.address_v4[0], addr s.sin_addr, + sizeof(address.address_v4)) port = ntohs(s.sin_port).Port - elif sa.ss_family.int == AF_INET6.int and sl == sizeof(Sockaddr_in6).Socklen: + elif sa.ss_family.int == toInt(AF_INET6) and + sl == sizeof(Sockaddr_in6).Socklen: address = IpAddress(family: IpAddressFamily.IPv6) let s = cast[ptr Sockaddr_in6](sa) - copyMem(addr address.address_v6[0], addr s.sin6_addr, sizeof(address.address_v6)) + copyMem(addr address.address_v6[0], addr s.sin6_addr, + sizeof(address.address_v6)) port = ntohs(s.sin6_port).Port else: raise newException(ValueError, "Neither IPv4 nor IPv6") |