summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorMatthias Einwag <matthias.einwag@live.com>2014-03-04 22:41:53 +0100
committerMatthias Einwag <matthias.einwag@live.com>2014-03-04 22:41:53 +0100
commit0f88ee7d0c17852cbd622b65f1b02422b006a81b (patch)
treea332df27b2c5a78f250c12eb650648e4495f047b /lib/pure
parente328d015f12c03a1f8391360d5dafc09596d0b72 (diff)
downloadNim-0f88ee7d0c17852cbd622b65f1b02422b006a81b.tar.gz
Use character ranges from strutils.
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/net.nim23
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())