diff options
| author | Arnaud Simon <arnaudsimon@apache.org> | 2008-01-04 13:49:10 +0000 |
|---|---|---|
| committer | Arnaud Simon <arnaudsimon@apache.org> | 2008-01-04 13:49:10 +0000 |
| commit | d66a9d83a468e1f25da0c0964d800d9a7db632ea (patch) | |
| tree | 6e3216a8af15b0252e85064323f9fdf92e96fb9a /java/common | |
| parent | 4d6bc403d256623972b74279a5a2f20470a4fae2 (diff) | |
| download | qpid-python-d66a9d83a468e1f25da0c0964d800d9a7db632ea.tar.gz | |
chshed headers: see QPID-720
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@608838 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/common')
7 files changed, 60 insertions, 20 deletions
diff --git a/java/common/generate b/java/common/generate index 701efe03a9..daf8475c54 100755 --- a/java/common/generate +++ b/java/common/generate @@ -370,11 +370,11 @@ class Struct: for type, name in self.fields: out.getter("boolean", camel(1, "has", name), "has_" + name) out.setter("boolean", camel(1, "clear", name), "has_" + name, "false", - post = "this.%s = %s" % (name, DEFAULTS.get(type, "null"))) + post = "this.%s = %s; this.dirty = true" % (name, DEFAULTS.get(type, "null"))) out.getter(jtype(type), camel(1, "get", name), name) for mname in (camel(1, "set", name), name): out.setter(jtype(type), mname, name, - post = "this.has_%s = true" % name) + post = "this.has_%s = true; this.dirty = true" % name) out.line() out.line(' static {') @@ -398,6 +398,7 @@ class Struct: (name, STRUCTS[type], STRUCTS[type])) else: raise Exception("unknown type: %s" % type) + out.line(' check(struct).dirty = true;') out.line(' }') out.line(' public void write(Encoder enc, Object struct) {') if TYPES.has_key(type): diff --git a/java/common/src/main/java/org/apache/qpidity/api/Message.java b/java/common/src/main/java/org/apache/qpidity/api/Message.java index afb17547ac..d4b8343ba5 100644 --- a/java/common/src/main/java/org/apache/qpidity/api/Message.java +++ b/java/common/src/main/java/org/apache/qpidity/api/Message.java @@ -5,6 +5,7 @@ import java.nio.ByteBuffer; import org.apache.qpidity.transport.MessageProperties; import org.apache.qpidity.transport.DeliveryProperties; +import org.apache.qpidity.transport.Header; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -27,7 +28,11 @@ import org.apache.qpidity.transport.DeliveryProperties; public interface Message { - public MessageProperties getMessageProperties(); + public Header getHeader(); + + public void setHeader(Header header); + + public MessageProperties getMessageProperties(); public DeliveryProperties getDeliveryProperties(); @@ -46,6 +51,7 @@ public interface Message */ public void appendData(byte[] src) throws IOException; + /** * This will abstract the underlying message data. * The Message implementation may not hold all message diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Connection.java b/java/common/src/main/java/org/apache/qpidity/transport/Connection.java index 7aee5a11ae..d7148cb532 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Connection.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Connection.java @@ -77,7 +77,7 @@ public class Connection public void received(ConnectionEvent event) { - log.debug("RECV: %s", event); + log.debug("RECV: %s", event); Channel channel = getChannel(event.getChannel()); channel.received(event.getProtocolEvent()); } diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Header.java b/java/common/src/main/java/org/apache/qpidity/transport/Header.java index 2384505cc4..b5bb428c0a 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Header.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Header.java @@ -23,6 +23,7 @@ package org.apache.qpidity.transport; import org.apache.qpidity.transport.network.Frame; import java.util.List; +import java.nio.ByteBuffer; /** @@ -34,6 +35,7 @@ import java.util.List; public class Header implements ProtocolEvent { private final List<Struct> structs; + private ByteBuffer _buf; public Header(List<Struct> structs) { @@ -45,6 +47,15 @@ public class Header implements ProtocolEvent { return structs; } + public void setBuf(ByteBuffer buf) + { + _buf = buf; + } + + public ByteBuffer getBuf() + { + return _buf; + } public <T> T get(Class<T> klass) { for (Struct st : structs) diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Session.java b/java/common/src/main/java/org/apache/qpidity/transport/Session.java index 5a8a92fcf4..1e630b69ca 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Session.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Session.java @@ -229,19 +229,21 @@ public class Session extends Invoker } } - public void header(Header header) + public void header(Header header) { channel.header(header); } - public void header(List<Struct> structs) + public Header header(List<Struct> structs) { - header(new Header(structs)); + Header res = new Header(structs); + header(res); + return res; } - public void header(Struct ... structs) + public Header header(Struct ... structs) { - header(Arrays.asList(structs)); + return header(Arrays.asList(structs)); } public void data(ByteBuffer buf) diff --git a/java/common/src/main/java/org/apache/qpidity/transport/Struct.java b/java/common/src/main/java/org/apache/qpidity/transport/Struct.java index d13af88127..200c3b68e3 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/Struct.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/Struct.java @@ -41,6 +41,18 @@ public abstract class Struct implements Encodable return StructFactory.create(type); } + boolean dirty = true; + + public boolean isDirty() + { + return dirty; + } + + public void setDirty(boolean dirty) + { + this.dirty = dirty; + } + public abstract int getStructType(); public abstract List<Field<?,?>> getFields(); diff --git a/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java b/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java index 4d99a76d7e..d38d8ded98 100644 --- a/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java +++ b/java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java @@ -153,21 +153,29 @@ public class Disassembler implements Sender<ConnectionEvent>, public void header(ConnectionEvent event, Header header) { - SizeEncoder sizer = new SizeEncoder(); - for (Struct st : header.getStructs()) + ByteBuffer buf; + if( header.getBuf() == null) { - sizer.writeLongStruct(st); - } + SizeEncoder sizer = new SizeEncoder(); + for (Struct st : header.getStructs()) + { + sizer.writeLongStruct(st); + } - ByteBuffer buf = ByteBuffer.allocate(sizer.size()); - BBEncoder enc = new BBEncoder(buf); - for (Struct st : header.getStructs()) + buf = ByteBuffer.allocate(sizer.size()); + BBEncoder enc = new BBEncoder(buf); + for (Struct st : header.getStructs()) + { + enc.writeLongStruct(st); + enc.flush(); + } + header.setBuf(buf); + } + else { - enc.writeLongStruct(st); - enc.flush(); + buf = header.getBuf(); } - buf.flip(); - + buf.flip(); fragment((byte) 0x0, HEADER, event, buf, true, true); } |
