[svn] commit: r53 - in /experiments/graff-ccapi/python: ISC/CC/Message.py ISC/CC/__init__.py ISC/Util/ ISC/Util/Hexdump.py ISC/Util/__init__.py ISC/__init__.py test.py

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Oct 5 16:40:19 UTC 2009


Author: mgraff
Date: Mon Oct  5 16:40:19 2009
New Revision: 53

Log:
checkpoint

Added:
    experiments/graff-ccapi/python/ISC/Util/
    experiments/graff-ccapi/python/ISC/Util/Hexdump.py
    experiments/graff-ccapi/python/ISC/Util/__init__.py
    experiments/graff-ccapi/python/test.py
Modified:
    experiments/graff-ccapi/python/ISC/CC/Message.py
    experiments/graff-ccapi/python/ISC/CC/__init__.py
    experiments/graff-ccapi/python/ISC/__init__.py

Modified: experiments/graff-ccapi/python/ISC/CC/Message.py
==============================================================================
--- experiments/graff-ccapi/python/ISC/CC/Message.py (original)
+++ experiments/graff-ccapi/python/ISC/CC/Message.py Mon Oct  5 16:40:19 2009
@@ -18,109 +18,86 @@
 
 class DecodeError(Exception): pass
 
-class Message:
-    PROTOCOL_VERSION = 0x536b616e
+PROTOCOL_VERSION = 0x536b616e
 
-    ITEM_DATA = 0x01
-    ITEM_HASH = 0x02
-    ITEM_LIST = 0x03
-    ITEM_NULL = 0x04
-    ITEM_MASK = 0x0f
+_ITEM_DATA = 0x01
+_ITEM_HASH = 0x02
+_ITEM_LIST = 0x03
+_ITEM_NULL = 0x04
+_ITEM_MASK = 0x0f
 
-    ITEM_LENGTH_32   = 0x00
-    ITEM_LENGTH_16   = 0x10
-    ITEM_LENGTH_8    = 0x20
-    ITEM_LENGTH_MASK = 0x30
+_ITEM_LENGTH_32   = 0x00
+_ITEM_LENGTH_16   = 0x10
+_ITEM_LENGTH_8    = 0x20
+_ITEM_LENGTH_MASK = 0x30
 
-    def to_wire(self, items):
-        ret = []
-        ret.append(struct.pack(">I", self.PROTOCOL_VERSION))
-        ret.append(self.encode_hash(items))
-        return (''.join(ret))
+def to_wire(self, items):
+    """Encode a dict into wire format"""
 
-    def encode_tag(self, tag):
-        return(struct.pack(">B", len(tag)) + tag)
+    ret = []
+    ret.append(struct.pack(">I", self.PROTOCOL_VERSION))
+    ret.append(self.encode_hash(items))
+    return (''.join(ret))
 
-    def encode_length_and_type(self, data, datatype):
-        if data == None:
-            return(struct.pack(">B", self.ITEM_NULL))
-        length = len(data)
-        if length < 0x0000100:
-            return(struct.pack(">B B", datatype | self.ITEM_LENGTH_8, length)
-                   + data)
-        elif length < 0x00010000:
-            return(struct.pack(">B H", datatype | self.ITEM_LENGTH_16, length)
-                   + data)
-        else:
-            return(struct.pack(">B I", datatype, length) + data)
+def _encode_tag(self, tag):
+    """Encode a single tag.  Private."""
 
-    def pack_string(self, item):
-        return (self.encode_length_and_type(item, self.ITEM_DATA))
+    return(struct.pack(">B", len(tag)) + bytes(tag, 'ascii'))
 
-    def pack_array(self, item):
-        return (self.encode_length_and_type(self.encode_array(item), self.ITEM_LIST))
+def _encode_length_and_type(self, data, datatype):
+    if data == None:
+        return(struct.pack(">B", self._ITEM_NULL))
+    length = len(data)
+    if length < 0x0000100:
+        return(struct.pack(">B B", datatype | self._ITEM_LENGTH_8, length)
+               + data)
+    elif length < 0x00010000:
+        return(struct.pack(">B H", datatype | self._ITEM_LENGTH_16, length)
+               + data)
+    else:
+        return(struct.pack(">B I", datatype, length) + data)
 
-    def pack_hash(self, item):
-        data = self.encode_hash(item)
-        return (self.encode_length_and_type(data, self.ITEM_HASH))
+def _pack_string(self, item):
+    return (self._encode_length_and_type(item, self._ITEM_DATA))
 
-    def encode_string(self, item):
-        return (item)
+def _pack_array(self, item):
+    return (self._encode_length_and_type(self._encode_array(item),
+                                         self._ITEM_LIST))
 
-    def pack_nil(self):
-        return self.encode_length_and_type(None, self.ITEM_NULL)
+def _pack_hash(self, item):
+    data = self._encode_hash(item)
+    return (self._encode_length_and_type(data, self._ITEM_HASH))
 
-    def encode_item(self, item):
-        if item == None:
-            return (self.pack_nil())
-        elif item.__class__ == dict:
-            return (self.pack_hash(item))
-        elif item.__class__ == list:
-            return (self.pack_array(item))
-        else:
-            return (self.pack_string(str(item)))
+def _encode_string(self, item):
+    return (item)
 
-    def encode_array(self, item):
-        ret = []
-        for i in item:
-            ret.append(self.encode_item(i))
-        return (''.join(ret))
+def _pack_nil(self):
+    return self._encode_length_and_type(None, None)
 
-    def encode_hash(self, item):
-        ret = []
-        for key, value in item.items():
-            ret.append(self.encode_tag(key))
-            ret.append(self.encode_item(value))
-        return (''.join(ret))
+def _encode_item(self, item):
+    if item == None:
+        return (self._pack_nil())
+    elif item.__class__ == dict:
+        return (self._pack_hash(item))
+    elif item.__class__ == list:
+        return (self._pack_array(item))
+    else:
+        return (self._pack_string(str(item)))
+
+def _encode_array(self, item):
+    ret = []
+    for i in item:
+        ret.append(self._encode_item(i))
+    return (''.join(ret))
+
+def _encode_hash(self, item):
+    ret = []
+    for key, value in item.items():
+        ret.append(self._encode_tag(key))
+        ret.append(self._encode_item(value))
+    return (''.join(ret))
 
 
 if __name__ == "__main__":
     import doctest
     doctest.testmod()
-
-FILTER=''.join([(len(repr(chr(x)))==3) and chr(x) or '.' for x in range(256)])
-
-def hexdump(src, length=16):
-    result=[]
-    for i in xrange(0, len(src), length):
-       s = src[i:i+length]
-       hexa = ' '.join(["%02X" % ord(x) for x in s])
-       printable = s.translate(FILTER)
-       item = "%08X   %-*s   %s\n" % (i, length * 3, hexa, printable)
-       result.append(item[0:34] + ' ' + item[34:])
-    print ''.join(result)
-
-
-cc = Message()
-s = cc.encode_item("This is a test")
-hexdump(s)
-s = cc.encode_item([1, 2, 3])
-hexdump(s)
-s = cc.encode_item({ "a": "b" })
-hexdump(s)
-ss = { "list": [ 1, 2, 3 ],
-       "hash": { "hash1": 1, "hash2": 2 },
-       "none": None,
-       "string": "samplestring" }
-s = cc.to_wire(ss)
-hexdump(s)

Modified: experiments/graff-ccapi/python/ISC/CC/__init__.py
==============================================================================
--- experiments/graff-ccapi/python/ISC/CC/__init__.py (original)
+++ experiments/graff-ccapi/python/ISC/CC/__init__.py Mon Oct  5 16:40:19 2009
@@ -1,0 +1,1 @@
+import Message

Modified: experiments/graff-ccapi/python/ISC/__init__.py
==============================================================================
--- experiments/graff-ccapi/python/ISC/__init__.py (original)
+++ experiments/graff-ccapi/python/ISC/__init__.py Mon Oct  5 16:40:19 2009
@@ -1,0 +1,2 @@
+import CC
+import Util




More information about the bind10-changes mailing list