Auto-add content-length to STOMP 1.1 frames too, inherit 1.2 from 1.1
This commit is contained in:
parent
2f6d3dc064
commit
851ac30f32
|
@ -29,7 +29,7 @@ import org.apache.activemq.artemis.core.protocol.stomp.StompFrame;
|
||||||
public class StompFrameV11 extends StompFrame
|
public class StompFrameV11 extends StompFrame
|
||||||
{
|
{
|
||||||
//stomp 1.1 talks about repetitive headers.
|
//stomp 1.1 talks about repetitive headers.
|
||||||
private final List<Header> allHeaders = new ArrayList<Header>();
|
protected final List<Header> allHeaders = new ArrayList<Header>();
|
||||||
|
|
||||||
public StompFrameV11(String command, Map<String, String> headers, byte[] content)
|
public StompFrameV11(String command, Map<String, String> headers, byte[] content)
|
||||||
{
|
{
|
||||||
|
@ -66,6 +66,13 @@ public class StompFrameV11 extends StompFrame
|
||||||
head.append(h.getEncodedValue());
|
head.append(h.getEncodedValue());
|
||||||
head.append(Stomp.NEWLINE);
|
head.append(Stomp.NEWLINE);
|
||||||
}
|
}
|
||||||
|
if (bytesBody != null && bytesBody.length > 0)
|
||||||
|
{
|
||||||
|
head.append(Stomp.Headers.CONTENT_LENGTH);
|
||||||
|
head.append(Stomp.Headers.SEPARATOR);
|
||||||
|
head.append(bytesBody.length);
|
||||||
|
head.append(Stomp.NEWLINE);
|
||||||
|
}
|
||||||
// Add a newline to separate the headers from the content.
|
// Add a newline to separate the headers from the content.
|
||||||
head.append(Stomp.NEWLINE);
|
head.append(Stomp.NEWLINE);
|
||||||
|
|
||||||
|
@ -95,6 +102,4 @@ public class StompFrameV11 extends StompFrame
|
||||||
allHeaders.add(new Header(key, val));
|
allHeaders.add(new Header(key, val));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,21 +16,12 @@
|
||||||
*/
|
*/
|
||||||
package org.apache.activemq.artemis.core.protocol.stomp.v12;
|
package org.apache.activemq.artemis.core.protocol.stomp.v12;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
|
import org.apache.activemq.artemis.core.protocol.stomp.v11.StompFrameV11;
|
||||||
import org.apache.activemq.artemis.api.core.ActiveMQBuffers;
|
|
||||||
import org.apache.activemq.artemis.core.protocol.stomp.Stomp;
|
|
||||||
import org.apache.activemq.artemis.core.protocol.stomp.StompFrame;
|
|
||||||
|
|
||||||
public class StompFrameV12 extends StompFrame
|
public class StompFrameV12 extends StompFrameV11
|
||||||
{
|
{
|
||||||
//stomp 1.1 talks about repetitive headers.
|
|
||||||
private final List<Header> allHeaders = new ArrayList<Header>();
|
|
||||||
|
|
||||||
public StompFrameV12(String command, Map<String, String> headers, byte[] content)
|
public StompFrameV12(String command, Map<String, String> headers, byte[] content)
|
||||||
{
|
{
|
||||||
super(command, headers, content);
|
super(command, headers, content);
|
||||||
|
@ -40,67 +31,4 @@ public class StompFrameV12 extends StompFrame
|
||||||
{
|
{
|
||||||
super(command);
|
super(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public ActiveMQBuffer toActiveMQBuffer() throws Exception
|
|
||||||
{
|
|
||||||
if (buffer == null)
|
|
||||||
{
|
|
||||||
if (bytesBody != null)
|
|
||||||
{
|
|
||||||
buffer = ActiveMQBuffers.dynamicBuffer(bytesBody.length + 512);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buffer = ActiveMQBuffers.dynamicBuffer(512);
|
|
||||||
}
|
|
||||||
|
|
||||||
StringBuffer head = new StringBuffer();
|
|
||||||
head.append(command);
|
|
||||||
head.append(Stomp.NEWLINE);
|
|
||||||
// Output the headers.
|
|
||||||
for (Header h : allHeaders)
|
|
||||||
{
|
|
||||||
head.append(h.getEncodedKey());
|
|
||||||
head.append(Stomp.Headers.SEPARATOR);
|
|
||||||
head.append(h.getEncodedValue());
|
|
||||||
head.append(Stomp.NEWLINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((bytesBody != null) && (bytesBody.length > 0))
|
|
||||||
{
|
|
||||||
head.append(Stomp.Headers.CONTENT_LENGTH);
|
|
||||||
head.append(Stomp.Headers.SEPARATOR);
|
|
||||||
head.append(bytesBody.length);
|
|
||||||
head.append(Stomp.NEWLINE);
|
|
||||||
}
|
|
||||||
// Add a newline to separate the headers from the content.
|
|
||||||
head.append(Stomp.NEWLINE);
|
|
||||||
|
|
||||||
buffer.writeBytes(head.toString().getBytes(StandardCharsets.UTF_8));
|
|
||||||
if (bytesBody != null)
|
|
||||||
{
|
|
||||||
buffer.writeBytes(bytesBody);
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer.writeBytes(END_OF_FRAME);
|
|
||||||
|
|
||||||
size = buffer.writerIndex();
|
|
||||||
}
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addHeader(String key, String val)
|
|
||||||
{
|
|
||||||
if (!headers.containsKey(key))
|
|
||||||
{
|
|
||||||
headers.put(key, val);
|
|
||||||
allHeaders.add(new Header(key, val));
|
|
||||||
}
|
|
||||||
else if (!key.equals(Stomp.Headers.CONTENT_LENGTH))
|
|
||||||
{
|
|
||||||
allHeaders.add(new Header(key, val));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue