blob: 25f3218a00983d648296471007a1e95909f4cd4a [file] [log] [blame]
Mark Sleecde2b612006-09-03 21:13:07 +00001from TProtocol import *
2from struct import pack, unpack
3
4class TBinaryProtocol(TProtocolBase):
5
6 """Binary implementation of the Thrift protocol driver."""
7
8 def writeMessageBegin(self, otrans, name, type, seqid):
9 self.writeString(otrans, name)
10 self.writeByte(otrans, type)
11 self.writeI32(otrans, seqid)
12
13 def writeMessageEnd(self, otrans):
14 pass
15
16 def writeStructBegin(self, otrans, name):
17 pass
18
19 def writeStructEnd(self, otrans):
20 pass
21
22 def writeFieldBegin(self, otrans, name, type, id):
23 self.writeByte(otrans, type)
24 self.writeI16(otrans, id)
25
26 def writeFieldEnd(self, otrans):
27 pass
28
29 def writeFieldStop(self, otrans):
30 self.writeByte(otrans, TType.STOP);
31
32 def writeMapBegin(self, otrans, ktype, vtype, size):
33 self.writeByte(otrans, ktype)
34 self.writeByte(otrans, vtype)
35 self.writeI32(otrans, size)
36
37 def writeMapEnd(self, otrans):
38 pass
39
40 def writeListBegin(self, otrans, etype, size):
41 self.writeByte(otrans, etype)
42 self.writeI32(otrans, size)
43
44 def writeListEnd(self, otrans):
45 pass
46
47 def writeSetBegin(self, otrans, etype, size):
48 self.writeByte(otrans, etype)
49 self.writeI32(otrans, size)
50
51 def writeSetEnd(self, otrans):
52 pass
53
54 def writeBool(self, otrans, bool):
55 if bool:
56 self.writeByte(otrans, 1)
57 else:
58 self.writeByte(otrans, 0)
59
60 def writeByte(self, otrans, byte):
61 buff = pack("!b", byte)
62 otrans.write(buff)
63
64 def writeI16(self, otrans, i16):
65 buff = pack("!h", i16)
66 otrans.write(buff)
67
68 def writeI32(self, otrans, i32):
69 buff = pack("!i", i32)
70 otrans.write(buff)
71
72 def writeI64(self, otrans, i64):
Mark Sleec9676562006-09-05 17:34:52 +000073 buff = pack("!q", i64)
Mark Sleecde2b612006-09-03 21:13:07 +000074 otrans.write(buff)
75
Mark Sleec98d0502006-09-06 02:42:25 +000076 def writeDouble(self, otrans, dub):
77 buff = pack("!d", dub)
78 otrans.write(buff)
79
Mark Sleecde2b612006-09-03 21:13:07 +000080 def writeString(self, otrans, str):
81 self.writeI32(otrans, len(str))
82 otrans.write(str)
83
84 def readMessageBegin(self, itrans):
85 name = self.readString(itrans)
86 type = self.readByte(itrans)
87 seqid = self.readI32(itrans)
88 return (name, type, seqid)
89
90 def readMessageEnd(self, itrans):
91 pass
92
93 def readStructBegin(self, itrans):
94 pass
95
96 def readStructEnd(self, itrans):
97 pass
98
99 def readFieldBegin(self, itrans):
100 type = self.readByte(itrans)
101 if type == TType.STOP:
102 return (None, type, 0)
103 id = self.readI16(itrans)
104 return (None, type, id)
105
106 def readFieldEnd(self, itrans):
107 pass
108
109 def readMapBegin(self, itrans):
110 ktype = self.readByte(itrans)
111 vtype = self.readByte(itrans)
112 size = self.readI32(itrans)
113 return (ktype, vtype, size)
114
115 def readMapEnd(self, itrans):
116 pass
117
118 def readListBegin(self, itrans):
119 etype = self.readByte(itrans)
120 size = self.readI32(itrans)
121 return (etype, size)
122
123 def readListEnd(self, itrans):
124 pass
125
126 def readSetBegin(self, itrans):
127 etype = self.readByte(itrans)
128 size = self.readI32(itrans)
129 return (etype, size)
130
131 def readSetEnd(self, itrans):
132 pass
133
134 def readBool(self, itrans):
135 byte = self.readByte(itrans)
136 if byte == 0:
137 return False
138 return True
139
140 def readByte(self, itrans):
141 buff = itrans.readAll(1)
142 val, = unpack('!b', buff)
143 return val
144
145 def readI16(self, itrans):
146 buff = itrans.readAll(2)
147 val, = unpack('!h', buff)
148 return val
149
150 def readI32(self, itrans):
151 buff = itrans.readAll(4)
152 val, = unpack('!i', buff)
153 return val
154
155 def readI64(self, itrans):
156 buff = itrans.readAll(8)
Mark Sleec9676562006-09-05 17:34:52 +0000157 val, = unpack('!q', buff)
Mark Sleecde2b612006-09-03 21:13:07 +0000158 return val
159
Mark Sleec98d0502006-09-06 02:42:25 +0000160 def readDouble(self, itrans):
161 buff = itrans.readAll(8)
162 val, = unpack('!d', buff)
163 return val
164
Mark Sleecde2b612006-09-03 21:13:07 +0000165 def readString(self, itrans):
166 len = self.readI32(itrans)
167 str = itrans.readAll(len)
168 return str