use of org.apache.qpid.server.protocol.v0_10.transport.Header in project qpid-broker-j by apache.
the class PropertyConverter_0_10_to_InternalTest method testApplicationHeadersConversion.
public void testApplicationHeadersConversion() {
Map<String, Object> headers = new HashMap<>();
headers.put("testProperty1", "testProperty1Value");
headers.put("intProperty", 1);
headers.put("nullProperty", null);
final MessageProperties messageProperties = new MessageProperties();
messageProperties.setApplicationHeaders(headers);
MessageTransferMessage message = createTestMessage(messageProperties);
final InternalMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
Map<String, Object> header = convertedMessage.getMessageHeader().getHeaderMap();
assertEquals("Unexpected headers", headers, new HashMap<>(header));
}
use of org.apache.qpid.server.protocol.v0_10.transport.Header in project qpid-broker-j by apache.
the class PropertyConverter_Internal_to_v0_10Test method testReplyToConversionWhenQueueIsSpecified.
public void testReplyToConversionWhenQueueIsSpecified() throws IOException {
final AMQMessageHeader header = mock(AMQMessageHeader.class);
final String replyTo = "myTestQueue";
final Queue queue = mock(Queue.class);
when(queue.getName()).thenReturn(replyTo);
when(_addressSpace.getAttainedMessageDestination(replyTo)).thenReturn(queue);
when(header.getReplyTo()).thenReturn(replyTo);
InternalMessage originalMessage = createTestMessage(header);
MessageTransferMessage convertedMessage = _messageConverter.convert(originalMessage, _addressSpace);
final ReplyTo convertedReplyTo = convertedMessage.getHeader().getMessageProperties().getReplyTo();
assertEquals("Unexpected exchange", "", convertedReplyTo.getExchange());
assertEquals("Unexpected routing key", replyTo, convertedReplyTo.getRoutingKey());
}
use of org.apache.qpid.server.protocol.v0_10.transport.Header in project qpid-broker-j by apache.
the class MessageConverter_v0_10 method convertMetaData.
private MessageMetaData_0_10 convertMetaData(ServerMessage serverMsg) {
DeliveryProperties deliveryProps = new DeliveryProperties();
MessageProperties messageProps = new MessageProperties();
int size = (int) serverMsg.getSize();
deliveryProps.setExpiration(serverMsg.getExpiration());
deliveryProps.setPriority(MessageDeliveryPriority.get(serverMsg.getMessageHeader().getPriority()));
deliveryProps.setRoutingKey(serverMsg.getInitialRoutingAddress());
deliveryProps.setTimestamp(serverMsg.getMessageHeader().getTimestamp());
messageProps.setContentEncoding(serverMsg.getMessageHeader().getEncoding());
messageProps.setContentLength(size);
messageProps.setContentType(serverMsg.getMessageHeader().getMimeType());
if (serverMsg.getMessageHeader().getCorrelationId() != null) {
messageProps.setCorrelationId(serverMsg.getMessageHeader().getCorrelationId().getBytes(UTF_8));
}
Header header = new Header(deliveryProps, messageProps, null);
return new MessageMetaData_0_10(header, size, serverMsg.getArrivalTime());
}
use of org.apache.qpid.server.protocol.v0_10.transport.Header in project qpid-broker-j by apache.
the class ServerAssembler method assemble.
private void assemble(ServerFrame frame, QpidByteBuffer frameBuffer) {
try {
ServerDecoder dec = new ServerDecoder(frameBuffer);
int channel = frame.getChannel();
Method command;
switch(frame.getType()) {
case CONTROL:
int controlType = dec.readUint16();
Method control = Method.create(controlType);
control.read(dec);
emit(channel, control);
break;
case COMMAND:
int commandType = dec.readUint16();
// read in the session header, right now we don't use it
int hdr = dec.readUint16();
command = Method.create(commandType);
command.setSync((0x0001 & hdr) != 0);
command.read(dec);
if (command.hasPayload() && !frame.isLastSegment()) {
setIncompleteCommand(channel, command);
} else {
emit(channel, command);
}
break;
case HEADER:
command = getIncompleteCommand(channel);
List<Struct> structs = null;
DeliveryProperties deliveryProps = null;
MessageProperties messageProps = null;
while (dec.hasRemaining()) {
Struct struct = dec.readStruct32();
if (struct instanceof DeliveryProperties && deliveryProps == null) {
deliveryProps = (DeliveryProperties) struct;
} else if (struct instanceof MessageProperties && messageProps == null) {
messageProps = (MessageProperties) struct;
} else {
if (structs == null) {
structs = new ArrayList<>(2);
}
structs.add(struct);
}
}
command.setHeader(new Header(deliveryProps, messageProps, structs));
if (frame.isLastSegment()) {
setIncompleteCommand(channel, null);
emit(channel, command);
}
break;
case BODY:
command = getIncompleteCommand(channel);
command.setBody(frameBuffer);
setIncompleteCommand(channel, null);
emit(channel, command);
break;
default:
throw new IllegalStateException("unknown frame type: " + frame.getType());
}
} finally {
frameBuffer.dispose();
}
}
use of org.apache.qpid.server.protocol.v0_10.transport.Header in project qpid-broker-j by apache.
the class ServerDisassembler method method.
private void method(Method method, SegmentType type) {
ServerEncoder enc = _encoder;
enc.init();
enc.writeUint16(method.getEncodedType());
if (type == SegmentType.COMMAND) {
if (method.isSync()) {
enc.writeUint16(0x0101);
} else {
enc.writeUint16(0x0100);
}
}
method.write(enc);
int methodLimit = enc.position();
byte flags = FIRST_SEG;
boolean payload = method.hasPayload();
if (!payload) {
flags |= LAST_SEG;
}
int headerLimit = -1;
if (payload) {
final Header hdr = method.getHeader();
if (hdr != null) {
if (hdr.getDeliveryProperties() != null) {
enc.writeStruct32(hdr.getDeliveryProperties());
}
if (hdr.getMessageProperties() != null) {
enc.writeStruct32(hdr.getMessageProperties());
}
if (hdr.getNonStandardProperties() != null) {
for (Struct st : hdr.getNonStandardProperties()) {
enc.writeStruct32(st);
}
}
}
headerLimit = enc.position();
}
synchronized (_sendLock) {
try (QpidByteBuffer buf = enc.getBuffer()) {
try (QpidByteBuffer duplicate = buf.view(0, methodLimit)) {
fragment(flags, type, method, duplicate);
}
if (payload) {
QpidByteBuffer body = method.getBody();
buf.limit(headerLimit);
buf.position(methodLimit);
try (QpidByteBuffer slice = buf.slice()) {
fragment(body == null ? LAST_SEG : 0x0, SegmentType.HEADER, method, slice);
}
if (body != null) {
try (QpidByteBuffer dup = body.duplicate()) {
fragment(LAST_SEG, SegmentType.BODY, method, dup);
}
}
}
}
}
}
Aggregations