diff options
| author | Gordon Sim <gsim@apache.org> | 2014-04-15 19:44:45 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2014-04-15 19:44:45 +0000 |
| commit | ffccd0abd6f8ffe3a6aec71f38015ffa460d1e19 (patch) | |
| tree | 2ec4c37968a5a2e83cb08b7621f7bf25af3a0fa2 /qpid/python | |
| parent | 2be29d43a76a7c8393bdd648f465eae8953e9d76 (diff) | |
| download | qpid-python-ffccd0abd6f8ffe3a6aec71f38015ffa460d1e19.tar.gz | |
QPID-5700: ensure interleaved segments on different tracks do not get confused
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1587710 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/python')
| -rw-r--r-- | qpid/python/qpid/framing.py | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/qpid/python/qpid/framing.py b/qpid/python/qpid/framing.py index 62fd38dfcd..389b607853 100644 --- a/qpid/python/qpid/framing.py +++ b/qpid/python/qpid/framing.py @@ -252,31 +252,35 @@ class OpEncoder: class OpDecoder: def __init__(self): - self.op = None + self.current_op = {} self.ops = [] def write(self, *segments): for seg in segments: + op = self.current_op.get(seg.track) if seg.first: if seg.type == segment_type.command: - self.op = self.decode_command(seg.payload) + op = self.decode_command(seg.payload) elif seg.type == segment_type.control: - self.op = self.decode_control(seg.payload) + op = self.decode_control(seg.payload) else: raise ValueError(seg) - self.op.channel = seg.channel + op.channel = seg.channel elif seg.type == segment_type.header: - if self.op.headers is None: - self.op.headers = [] - self.op.headers.extend(self.decode_headers(seg.payload)) + if op.headers is None: + op.headers = [] + op.headers.extend(self.decode_headers(seg.payload)) elif seg.type == segment_type.body: - if self.op.payload is None: - self.op.payload = seg.payload + if op.payload is None: + op.payload = seg.payload else: - self.op.payload += seg.payload + op.payload += seg.payload if seg.last: - self.ops.append(self.op) - self.op = None + self.ops.append(op) + if seg.track in self.current_op: + del self.current_op[seg.track] + else: + self.current_op[seg.track] = op def decode_command(self, encoded): sc = StringCodec(encoded) |
