From d66a9d83a468e1f25da0c0964d800d9a7db632ea Mon Sep 17 00:00:00 2001 From: Arnaud Simon Date: Fri, 4 Jan 2008 13:49:10 +0000 Subject: chshed headers: see QPID-720 git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@608838 13f79535-47bb-0310-9956-ffa450edef68 --- .../main/java/org/apache/qpidity/api/Message.java | 8 +++++- .../org/apache/qpidity/transport/Connection.java | 2 +- .../java/org/apache/qpidity/transport/Header.java | 11 ++++++++ .../java/org/apache/qpidity/transport/Session.java | 12 +++++---- .../java/org/apache/qpidity/transport/Struct.java | 12 +++++++++ .../qpidity/transport/network/Disassembler.java | 30 ++++++++++++++-------- 6 files changed, 57 insertions(+), 18 deletions(-) (limited to 'java/common/src') 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 structs; + private ByteBuffer _buf; public Header(List 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 get(Class 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 structs) + public Header header(List 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> 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, 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); } -- cgit v1.2.1