[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