From f09f774813043aa1abc696c4fc21a49928334978 Mon Sep 17 00:00:00 2001 From: "Rafael H. Schloming" Date: Fri, 23 May 2008 20:22:13 +0000 Subject: 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 --- python/qpid/codec010.py | 6 +++--- python/qpid/datatypes.py | 47 ++++++++++++++++++++++++++++++++++++++++++++--- python/qpid/session.py | 4 ++-- 3 files changed, 49 insertions(+), 8 deletions(-) (limited to 'python/qpid') 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() -- cgit v1.2.1