summaryrefslogtreecommitdiff
path: root/M4-RCs/qpid/python/qpid/framer.py
diff options
context:
space:
mode:
Diffstat (limited to 'M4-RCs/qpid/python/qpid/framer.py')
-rw-r--r--M4-RCs/qpid/python/qpid/framer.py159
1 files changed, 0 insertions, 159 deletions
diff --git a/M4-RCs/qpid/python/qpid/framer.py b/M4-RCs/qpid/python/qpid/framer.py
deleted file mode 100644
index f6363b2291..0000000000
--- a/M4-RCs/qpid/python/qpid/framer.py
+++ /dev/null
@@ -1,159 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-import struct, socket
-from exceptions import Closed
-from packer import Packer
-from threading import RLock
-from logging import getLogger
-
-raw = getLogger("qpid.io.raw")
-frm = getLogger("qpid.io.frm")
-
-FIRST_SEG = 0x08
-LAST_SEG = 0x04
-FIRST_FRM = 0x02
-LAST_FRM = 0x01
-
-class Frame:
-
- HEADER = "!2BHxBH4x"
- MAX_PAYLOAD = 65535 - struct.calcsize(HEADER)
-
- def __init__(self, flags, type, track, channel, payload):
- if len(payload) > Frame.MAX_PAYLOAD:
- raise ValueError("max payload size exceeded: %s" % len(payload))
- self.flags = flags
- self.type = type
- self.track = track
- self.channel = channel
- self.payload = payload
-
- def isFirstSegment(self):
- return bool(FIRST_SEG & self.flags)
-
- def isLastSegment(self):
- return bool(LAST_SEG & self.flags)
-
- def isFirstFrame(self):
- return bool(FIRST_FRM & self.flags)
-
- def isLastFrame(self):
- return bool(LAST_FRM & self.flags)
-
- def __str__(self):
- return "%s%s%s%s %s %s %s %r" % (int(self.isFirstSegment()),
- int(self.isLastSegment()),
- int(self.isFirstFrame()),
- int(self.isLastFrame()),
- self.type,
- self.track,
- self.channel,
- self.payload)
-
-class FramingError(Exception): pass
-
-class Framer(Packer):
-
- HEADER="!4s4B"
-
- def __init__(self, sock):
- self.sock = sock
- self.sock_lock = RLock()
- self._buf = ""
-
- def aborted(self):
- return False
-
- def write(self, buf):
- self._buf += buf
-
- def flush(self):
- self.sock_lock.acquire()
- try:
- self._write(self._buf)
- self._buf = ""
- frm.debug("FLUSHED")
- finally:
- self.sock_lock.release()
-
- def _write(self, buf):
- while buf:
- try:
- n = self.sock.send(buf)
- except socket.timeout:
- if self.aborted():
- raise Closed()
- else:
- continue
- raw.debug("SENT %r", buf[:n])
- buf = buf[n:]
-
- def read(self, n):
- data = ""
- while len(data) < n:
- try:
- s = self.sock.recv(n - len(data))
- except socket.timeout:
- if self.aborted():
- raise Closed()
- else:
- continue
- except socket.error, e:
- if data != "":
- raise e
- else:
- raise Closed()
- if len(s) == 0:
- raise Closed()
- data += s
- raw.debug("RECV %r", s)
- return data
-
- def read_header(self):
- return self.unpack(Framer.HEADER)
-
- def write_header(self, major, minor):
- self.sock_lock.acquire()
- try:
- self.pack(Framer.HEADER, "AMQP", 1, 1, major, minor)
- self.flush()
- finally:
- self.sock_lock.release()
-
- def write_frame(self, frame):
- self.sock_lock.acquire()
- try:
- size = len(frame.payload) + struct.calcsize(Frame.HEADER)
- track = frame.track & 0x0F
- self.pack(Frame.HEADER, frame.flags, frame.type, size, track, frame.channel)
- self.write(frame.payload)
- if frame.isLastSegment() and frame.isLastFrame():
- self.flush()
- frm.debug("SENT %s", frame)
- finally:
- self.sock_lock.release()
-
- def read_frame(self):
- flags, type, size, track, channel = self.unpack(Frame.HEADER)
- if flags & 0xF0: raise FramingError()
- payload = self.read(size - struct.calcsize(Frame.HEADER))
- frame = Frame(flags, type, track, channel, payload)
- frm.debug("RECV %s", frame)
- return frame