diff options
author | Matthias Einwag <matthias.einwag@live.com> | 2014-03-04 22:41:53 +0100 |
---|---|---|
committer | Matthias Einwag <matthias.einwag@live.com> | 2014-03-04 22:41:53 +0100 |
commit | 0f88ee7d0c17852cbd622b65f1b02422b006a81b (patch) | |
tree | a332df27b2c5a78f250c12eb650648e4495f047b /lib/pure | |
parent | e328d015f12c03a1f8391360d5dafc09596d0b72 (diff) | |
download | Nim-0f88ee7d0c17852cbd622b65f1b02422b006a81b.tar.gz |
Use character ranges from strutils.
Diffstat (limited to 'lib/pure')
-rw-r--r-- | lib/pure/net.nim | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/lib/pure/net.nim b/lib/pure/net.nim index cf5b4634e..90e21c644 100644 --- a/lib/pure/net.nim +++ b/lib/pure/net.nim @@ -55,6 +55,17 @@ proc IPv6_loopback*(): TIpAddress = family: IpAddressFamily.IPv6, address_v6: [0'u8,0'u8,0'u8,0'u8,0'u8,0'u8,0'u8,0'u8,0'u8,0'u8,0'u8,0'u8,0'u8,0'u8,0'u8,1'u8]) +proc `==`*(lhs, rhs: TIpAddress): bool = + ## Compares two IpAddresses for Equality. Returns two if the addresses are equal + if lhs.family != rhs.family: return false + if lhs.family == IpAddressFamily.IPv4: + for i in low(lhs.address_v4) .. high(lhs.address_v4): + if lhs.address_v4[i] != rhs.address_v4[i]: return false + else: # IPv6 + for i in low(lhs.address_v6) .. high(lhs.address_v6): + if lhs.address_v6[i] != rhs.address_v6[i]: return false + return true + proc `$`*(address: TIpAddress): string = ## Converts an TIpAddress into the textual representation result = "" @@ -115,7 +126,7 @@ proc parseIPv4Address(address_str: string): TIpAddress = result.family = IpAddressFamily.IPv4 for i in 0 .. high(address_str): - if address_str[i] in {'0'..'9'}: # Character is a number + if address_str[i] in strutils.Digits: # Character is a number currentByte = currentByte * 10 + cast[uint16](ord(address_str[i]) - ord('0')) if currentByte > 255'u16: raise new EInvalidValue seperatorValid = true @@ -175,8 +186,8 @@ proc parseIPv6Address(address_str: string): TIpAddress = currentShort = 0 seperatorValid = false break - elif c in {'0'..'9','a'..'f','A'..'F'}: - if c in {'0'..'9'}: # Normal digit + elif c in strutils.HexDigits: + if c in strutils.Digits: # Normal digit currentShort = (currentShort shl 4) + cast[uint32](ord(c) - ord('0')) elif c >= 'a' and c <= 'f': # Lower case hex currentShort = (currentShort shl 4) + cast[uint32](ord(c) - ord('a')) + 10 @@ -197,7 +208,7 @@ proc parseIPv6Address(address_str: string): TIpAddress = groupCount.inc() else: # Must parse IPv4 address for i,c in address_str[v4StartPos..high(address_str)]: - if c in {'0'..'9'}: # Character is a number + if c in strutils.Digits: # Character is a number currentShort = currentShort * 10 + cast[uint32](ord(c) - ord('0')) if currentShort > 255'u32: raise new EInvalidValue seperatorValid = true @@ -232,7 +243,7 @@ proc parseIPv6Address(address_str: string): TIpAddress = proc parseIpAddress*(address_str: string): TIpAddress = ## Parses an IP address - ## Throws EInvalidValue on error + ## Raises EInvalidValue on error if address_str == nil: raise new EInvalidValue if address_str.contains(':'): @@ -282,4 +293,4 @@ proc setBlocking*(s: TSocket, blocking: bool) {.tags: [].} = else: var mode = if blocking: x and not O_NONBLOCK else: x or O_NONBLOCK if fcntl(s, F_SETFL, mode) == -1: - osError(osLastError()) \ No newline at end of file + osError(osLastError()) |