def test_binary_body(self): body = b'\xf0\x00\x0a\x09' headers = {StompSpec.CONTENT_LENGTH_HEADER: textType(len(body))} frame = StompFrame(StompSpec.MESSAGE, body=body) frame.setContentLength() frameBytes = binaryType(frame) self.assertTrue(frameBytes.endswith(b'\x00')) parser = StompParser() for _ in range(2): for (j, _) in enumerate(frameBytes): parser.add(frameBytes[j:j + 1]) frame = parser.get() self.assertEqual(StompSpec.MESSAGE, frame.command) self.assertEqual(headers, frame.headers) self.assertEqual(body, frame.body) self.assertEqual(parser.get(), None) frames = 2 * frameBytes split = len(frameBytes) - 1 chunks = [frames[:split], frames[split:]] parser.add(chunks.pop(0)) self.assertEqual(parser.get(), None) parser.add(chunks.pop(0)) self.assertEqual(parser.get(), frame) self.assertEqual(parser.get(), frame) self.assertEqual(parser.get(), None) split = len(frameBytes) + 1 chunks = [frames[:split], frames[split:]] parser.add(chunks.pop(0)) self.assertEqual(parser.get(), frame) self.assertEqual(parser.get(), None) parser.add(chunks.pop(0)) self.assertEqual(parser.get(), frame) self.assertEqual(parser.get(), None)
def _headlines(self): yield self.command escape = self._escape for header in (sorted(self.headers.items()) if self.rawHeaders is None else self.rawHeaders): yield ':'.join(escape(textType(field)) for field in header) yield '' yield ''
def _addReceiptHeader(frame, receipt): if not receipt: return try: frame.headers[StompSpec.RECEIPT_HEADER] = textType(receipt) except: raise StompProtocolError('Invalid receipt (not a string): %s' % repr(receipt))
def cloneFrame(frame, persistent=None): frame = copy.deepcopy(frame) frame.unraw() headers = filterReservedHeaders(frame.headers) if persistent is not None: headers['persistent'] = textType(bool(persistent)).lower() frame.headers = headers return frame
def setContentLength(self): item = (StompSpec.CONTENT_LENGTH_HEADER, textType(len(self.body))) if self.rawHeaders is None: self.headers.update([item]) else: self.rawHeaders.insert(0, item)