More flexible fromSockAddr interface
This commit is contained in:
parent
1bd0efb067
commit
b52de1fcee
1 changed files with 9 additions and 5 deletions
|
|
@ -431,22 +431,26 @@ proc toSockAddr*(address: IpAddress, port: Port, sa: var Sockaddr_storage, sl: v
|
||||||
s.sin6_port = port
|
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 fromSockAddr*(sa: Sockaddr_storage, sl: Socklen, address: var IpAddress, port: var Port) =
|
proc fromSockAddrAux(sa: ptr Sockaddr_storage, sl: Socklen, address: var IpAddress, port: var Port) =
|
||||||
## Converts `SockAddr` and `Socklen` to `IpAddress` and `Port`. Raises
|
|
||||||
## `ObjectConversionError` in case of invalid `sa` and `sl` arguments.
|
|
||||||
if sa.ss_family.int == AF_INET.int and sl == sizeof(Sockaddr_in).Socklen:
|
if sa.ss_family.int == AF_INET.int and sl == sizeof(Sockaddr_in).Socklen:
|
||||||
address = IpAddress(family: IpAddressFamily.IPv4)
|
address = IpAddress(family: IpAddressFamily.IPv4)
|
||||||
let s = cast[ptr Sockaddr_in](unsafeAddr sa)
|
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
|
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 == AF_INET6.int and sl == sizeof(Sockaddr_in6).Socklen:
|
||||||
address = IpAddress(family: IpAddressFamily.IPv6)
|
address = IpAddress(family: IpAddressFamily.IPv6)
|
||||||
let s = cast[ptr Sockaddr_in6](unsafeAddr sa)
|
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
|
port = ntohs(s.sin6_port).Port
|
||||||
else:
|
else:
|
||||||
raise newException(ObjectConversionError, "Unexpected SockAddr/Socklen")
|
raise newException(ObjectConversionError, "Unexpected SockAddr/Socklen")
|
||||||
|
|
||||||
|
proc fromSockAddr*(sa: Sockaddr_storage | SockAddr | Sockaddr_in | Sockaddr_in6,
|
||||||
|
sl: Socklen, address: var IpAddress, port: var Port) {.inline.} =
|
||||||
|
## Converts `SockAddr` and `Socklen` to `IpAddress` and `Port`. Raises
|
||||||
|
## `ObjectConversionError` in case of invalid `sa` and `sl` arguments.
|
||||||
|
fromSockAddrAux(unsafeAddr sa, sl, address, port)
|
||||||
|
|
||||||
when defineSsl:
|
when defineSsl:
|
||||||
CRYPTO_malloc_init()
|
CRYPTO_malloc_init()
|
||||||
doAssert SslLibraryInit() == 1
|
doAssert SslLibraryInit() == 1
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue