summaryrefslogtreecommitdiff
path: root/java/common
diff options
context:
space:
mode:
authorArnaud Simon <arnaudsimon@apache.org>2008-01-04 13:49:10 +0000
committerArnaud Simon <arnaudsimon@apache.org>2008-01-04 13:49:10 +0000
commitd66a9d83a468e1f25da0c0964d800d9a7db632ea (patch)
tree6e3216a8af15b0252e85064323f9fdf92e96fb9a /java/common
parent4d6bc403d256623972b74279a5a2f20470a4fae2 (diff)
downloadqpid-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')
-rwxr-xr-xjava/common/generate5
-rw-r--r--java/common/src/main/java/org/apache/qpidity/api/Message.java8
-rw-r--r--java/common/src/main/java/org/apache/qpidity/transport/Connection.java2
-rw-r--r--java/common/src/main/java/org/apache/qpidity/transport/Header.java11
-rw-r--r--java/common/src/main/java/org/apache/qpidity/transport/Session.java12
-rw-r--r--java/common/src/main/java/org/apache/qpidity/transport/Struct.java12
-rw-r--r--java/common/src/main/java/org/apache/qpidity/transport/network/Disassembler.java30
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);
}