# HG changeset patch # User cmlenz # Date 1127835111 0 # Node ID 5f2249bef2e79edb58ce3e49cf744e0036e46368 # Parent 067bde207c2338c6bb185510c64202560b211a15 Some BEEP interoperability fixes: * Use `CRLF` for separating MIME headers in message payload. * The length of the payload includes the `CRLF` between payload and trailer. diff --git a/bitten/util/beep.py b/bitten/util/beep.py --- a/bitten/util/beep.py +++ b/bitten/util/beep.py @@ -287,6 +287,7 @@ This parses the frame header and decides which channel to pass it to. """ log.debug('Handling frame [%s]', ' '.join(header)) + log.debug(' with payload:\n%s', payload) msgno = None channel = None try: @@ -739,7 +740,7 @@ hdrs.append('Content-Transfer-Encoding: ' + self.content_encoding) hdrs.append('') - self._hdr_buf = '\n'.join(hdrs) + '\n' + self._hdr_buf = '\r\n'.join(hdrs) + '\r\n' ret_buf = '' if len(self._hdr_buf): @@ -805,14 +806,14 @@ headerbits = [self.cmd, self.channel.channelno, self.msgno, self.done and '.' or '*', self.channel.seqno[1].value, - len(data)] + len(data) + 2] if self.cmd == 'ANS': assert self.ansno is not None headerbits.append(self.ansno) header = ' '.join([str(bit) for bit in headerbits]) log.debug('Sending frame [%s]', header) frame = '\r\n'.join((header, data, 'END', '')) - self.channel.seqno[1] += len(data) + self.channel.seqno[1] += len(data) + 2 return frame diff --git a/bitten/util/tests/beep.py b/bitten/util/tests/beep.py --- a/bitten/util/tests/beep.py +++ b/bitten/util/tests/beep.py @@ -51,7 +51,7 @@ rest = rest[size:] self.sent_messages.append((cmd, channel, msgno, more, seqno, ansno, payload.strip())) - assert rest == '\r\nEND\r\n' + assert rest == 'END\r\n' class MockProfileHandler(object): @@ -175,9 +175,9 @@ channel = beep.Channel(self.session, 0, MockProfileHandler) channel.send_msg(beep.Payload('foo bar', None)) channel.send_rpy(0, beep.Payload('nil', None)) - self.assertEqual(('MSG', 0, 0, False, 0L, None, 'foo bar'), + self.assertEqual(('MSG', 0, 0, False, 0, None, 'foo bar'), self.session.sent_messages[0]) - self.assertEqual(('RPY', 0, 0, False, 8L, None, 'nil'), + self.assertEqual(('RPY', 0, 0, False, 11, None, 'nil'), self.session.sent_messages[1]) def test_send_message_msgno_incrementing(self): @@ -188,12 +188,12 @@ channel = beep.Channel(self.session, 0, MockProfileHandler) msgno = channel.send_msg(beep.Payload('foo bar', None)) assert msgno == 0 - self.assertEqual(('MSG', 0, msgno, False, 0L, None, 'foo bar'), + self.assertEqual(('MSG', 0, msgno, False, 0, None, 'foo bar'), self.session.sent_messages[0]) assert msgno in channel.msgnos msgno = channel.send_msg(beep.Payload('foo baz', None)) assert msgno == 1 - self.assertEqual(('MSG', 0, msgno, False, 8L, None, 'foo baz'), + self.assertEqual(('MSG', 0, msgno, False, 11, None, 'foo baz'), self.session.sent_messages[1]) assert msgno in channel.msgnos @@ -271,16 +271,16 @@ channel = beep.Channel(self.session, 0, MockProfileHandler) ansno = channel.send_ans(0, beep.Payload('foo bar', None)) assert ansno == 0 - self.assertEqual(('ANS', 0, 0, False, 0L, ansno, 'foo bar'), + self.assertEqual(('ANS', 0, 0, False, 0, ansno, 'foo bar'), self.session.sent_messages[0]) assert 0 in channel.ansnos ansno = channel.send_ans(0, beep.Payload('foo baz', None)) assert ansno == 1 - self.assertEqual(('ANS', 0, 0, False, 8L, ansno, 'foo baz'), + self.assertEqual(('ANS', 0, 0, False, 11, ansno, 'foo baz'), self.session.sent_messages[1]) assert 0 in channel.ansnos channel.send_nul(0) - self.assertEqual(('NUL', 0, 0, False, 16L, None, ''), + self.assertEqual(('NUL', 0, 0, False, 22, None, ''), self.session.sent_messages[2]) assert 0 not in channel.ansnos