]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
move netstring() and split_netstring() into a separate util.netstring module
authorBrian Warner <warner@allmydata.com>
Fri, 26 Sep 2008 04:38:24 +0000 (21:38 -0700)
committerBrian Warner <warner@allmydata.com>
Fri, 26 Sep 2008 04:38:24 +0000 (21:38 -0700)
src/allmydata/dirnode.py
src/allmydata/util/hashutil.py
src/allmydata/util/netstring.py [new file with mode: 0644]

index 6945bdec2c85f1a006f0d0a53363cdc5e00cfacd..58245100019d4d66c3fa168dfdaad12c531e3244 100644 (file)
@@ -14,34 +14,10 @@ from allmydata.checker_results import DeepCheckResults, \
 from allmydata.util import hashutil, mathutil, base32, log
 from allmydata.util.hashutil import netstring
 from allmydata.util.limiter import ConcurrencyLimiter
+from allmydata.util.netstring import split_netstring
 from allmydata.uri import NewDirectoryURI
 from pycryptopp.cipher.aes import AES
 
-def split_netstring(data, numstrings, allow_leftover=False):
-    """like string.split(), but extracts netstrings. If allow_leftover=False,
-    returns numstrings elements, and throws ValueError if there was leftover
-    data. If allow_leftover=True, returns numstrings+1 elements, in which the
-    last element is the leftover data (possibly an empty string)"""
-    elements = []
-    assert numstrings >= 0
-    while data:
-        colon = data.index(":")
-        length = int(data[:colon])
-        string = data[colon+1:colon+1+length]
-        assert len(string) == length
-        elements.append(string)
-        assert data[colon+1+length] == ","
-        data = data[colon+1+length+1:]
-        if len(elements) == numstrings:
-            break
-    if len(elements) < numstrings:
-        raise ValueError("ran out of netstrings")
-    if allow_leftover:
-        return tuple(elements + [data])
-    if data:
-        raise ValueError("leftover data in netstrings")
-    return tuple(elements)
-
 class Deleter:
     def __init__(self, node, name, must_exist=True):
         self.node = node
index 4e762ecf31376da03d3be46731ae8f3560e8e09b..750543c7f77e4216da1e5e64abf433bdb236cf7d 100644 (file)
@@ -1,5 +1,6 @@
 from pycryptopp.hash.sha256 import SHA256
 import os
+from allmydata.util.netstring import netstring
 
 # Be very very cautious when modifying this file. Almost any change will
 # cause a compatibility break, invalidating all outstanding URIs and making
@@ -15,10 +16,6 @@ CRYPTO_VAL_SIZE=32
 class IntegrityCheckError(Exception):
     pass
 
-def netstring(s):
-    assert isinstance(s, str), s # no unicode here
-    return "%d:%s," % (len(s), s,)
-
 class _SHA256d_Hasher:
     # use SHA-256d, as defined by Ferguson and Schneier: hash the output
     # again to prevent length-extension attacks
diff --git a/src/allmydata/util/netstring.py b/src/allmydata/util/netstring.py
new file mode 100644 (file)
index 0000000..70a14e0
--- /dev/null
@@ -0,0 +1,31 @@
+
+
+def netstring(s):
+    assert isinstance(s, str), s # no unicode here
+    return "%d:%s," % (len(s), s,)
+
+def split_netstring(data, numstrings, allow_leftover=False):
+    """like string.split(), but extracts netstrings. If allow_leftover=False,
+    returns numstrings elements, and throws ValueError if there was leftover
+    data. If allow_leftover=True, returns numstrings+1 elements, in which the
+    last element is the leftover data (possibly an empty string)"""
+    elements = []
+    assert numstrings >= 0
+    while data:
+        colon = data.index(":")
+        length = int(data[:colon])
+        string = data[colon+1:colon+1+length]
+        assert len(string) == length
+        elements.append(string)
+        assert data[colon+1+length] == ","
+        data = data[colon+1+length+1:]
+        if len(elements) == numstrings:
+            break
+    if len(elements) < numstrings:
+        raise ValueError("ran out of netstrings")
+    if allow_leftover:
+        return tuple(elements + [data])
+    if data:
+        raise ValueError("leftover data in netstrings")
+    return tuple(elements)
+