diff options
author | Rafael H. Schloming <rhs@apache.org> | 2008-05-23 20:22:13 +0000 |
---|---|---|
committer | Rafael H. Schloming <rhs@apache.org> | 2008-05-23 20:22:13 +0000 |
commit | f09f774813043aa1abc696c4fc21a49928334978 (patch) | |
tree | 24a9de794070640492dc3aa5f1a418c035c23bf6 /python/qpid | |
parent | 51db72d6d1fdbaebfc2f91fec611cf26d35ea8f5 (diff) | |
download | qpid-python-f09f774813043aa1abc696c4fc21a49928334978.tar.gz |
QPID-947: Switched over to using proper RFC 1982 serial numbers.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@659647 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'python/qpid')
-rw-r--r-- | python/qpid/codec010.py | 6 | ||||
-rw-r--r-- | python/qpid/datatypes.py | 47 | ||||
-rw-r--r-- | python/qpid/session.py | 4 |
3 files changed, 49 insertions, 8 deletions
diff --git a/python/qpid/codec010.py b/python/qpid/codec010.py index 68573921d7..3d67d42d43 100644 --- a/python/qpid/codec010.py +++ b/python/qpid/codec010.py @@ -18,7 +18,7 @@ # from packer import Packer -from datatypes import RangedSet, Struct +from datatypes import serial, RangedSet, Struct class CodecException(Exception): pass @@ -87,9 +87,9 @@ class Codec(Packer): self.pack("!f", f) def read_sequence_no(self): - return self.read_uint32() + return serial(self.read_uint32()) def write_sequence_no(self, n): - self.write_uint32(n) + self.write_uint32(n.value) def read_uint64(self): diff --git a/python/qpid/datatypes.py b/python/qpid/datatypes.py index 7bea1ccc19..7249d5621b 100644 --- a/python/qpid/datatypes.py +++ b/python/qpid/datatypes.py @@ -116,14 +116,55 @@ class Message: args.append("id=%s" % self.id) return "Message(%s)" % ", ".join(args) +def serial(o): + if isinstance(o, Serial): + return o + else: + return Serial(o) + +class Serial: + + def __init__(self, value): + self.value = value & 0xFFFFFFFF + + def __hash__(self): + return hash(self.value) + + def __cmp__(self, other): + if other is None: + return 1 + + other = serial(other) + + delta = (self.value - other.value) & 0xFFFFFFFF + neg = delta & 0x80000000 + mag = delta & 0x7FFFFFFF + + if neg: + return -mag + else: + return mag + + def __add__(self, other): + return Serial(self.value + other) + + def __sub__(self, other): + return Serial(self.value - other) + + def __repr__(self): + return "serial(%s)" % self.value + + def __str__(self): + return str(self.value) + class Range: def __init__(self, lower, upper = None): - self.lower = lower + self.lower = serial(lower) if upper is None: - self.upper = lower + self.upper = self.lower else: - self.upper = upper + self.upper = serial(upper) def __contains__(self, n): return self.lower <= n and n <= self.upper diff --git a/python/qpid/session.py b/python/qpid/session.py index 1b33a4a795..3d8c0aa7fd 100644 --- a/python/qpid/session.py +++ b/python/qpid/session.py @@ -23,7 +23,7 @@ from datatypes import RangedSet, Struct, Future from codec010 import StringCodec from assembler import Segment from queue import Queue -from datatypes import Message +from datatypes import Message, serial from util import wait, notify from exceptions import * from logging import getLogger @@ -304,7 +304,7 @@ class Sender: def __init__(self, session): self.session = session - self.next_id = 0 + self.next_id = serial(0) self.next_offset = 0 self.segments = [] self._completed = RangedSet() |