Search in sources :

Example 21 with Header

use of org.apache.qpid.server.protocol.v0_10.transport.Header in project qpid-broker-j by apache.

the class MessageFormat_0_10 method createMessage.

@Override
public MessageTransferMessage createMessage(final QpidByteBuffer payload, final MessageStore store, final Object connectionReference) {
    try {
        ServerDecoder serverDecoder = new ServerDecoder(payload);
        int headerCount = serverDecoder.readInt32();
        DeliveryProperties deliveryProperties = null;
        MessageProperties messageProperties = null;
        List<Struct> nonStandard = null;
        for (int i = 0; i < headerCount; i++) {
            final Struct struct = serverDecoder.readStruct32();
            switch(struct.getStructType()) {
                case DeliveryProperties.TYPE:
                    deliveryProperties = (DeliveryProperties) struct;
                    break;
                case MessageProperties.TYPE:
                    messageProperties = (MessageProperties) struct;
                    break;
                default:
                    if (nonStandard == null) {
                        nonStandard = new ArrayList<>();
                    }
                    nonStandard.add(struct);
            }
        }
        Header header = new Header(deliveryProperties, messageProperties, nonStandard);
        MessageMetaData_0_10 metaData = new MessageMetaData_0_10(header, payload.remaining(), System.currentTimeMillis());
        final MessageHandle<MessageMetaData_0_10> handle = store.addMessage(metaData);
        handle.addContent(payload);
        final StoredMessage<MessageMetaData_0_10> storedMessage = handle.allContentAdded();
        return new MessageTransferMessage(storedMessage, connectionReference);
    } catch (BufferUnderflowException e) {
        throw new ConnectionScopedRuntimeException("Error parsing AMQP 0-10 message format", e);
    }
}
Also used : DeliveryProperties(org.apache.qpid.server.protocol.v0_10.transport.DeliveryProperties) Struct(org.apache.qpid.server.protocol.v0_10.transport.Struct) Header(org.apache.qpid.server.protocol.v0_10.transport.Header) MessageProperties(org.apache.qpid.server.protocol.v0_10.transport.MessageProperties) ConnectionScopedRuntimeException(org.apache.qpid.server.util.ConnectionScopedRuntimeException) BufferUnderflowException(java.nio.BufferUnderflowException)

Example 22 with Header

use of org.apache.qpid.server.protocol.v0_10.transport.Header in project qpid-broker-j by apache.

the class MessageFormat_0_10 method convertToMessageFormat.

// format: <int header count> <headers> <body>
@Override
public QpidByteBuffer convertToMessageFormat(final MessageTransferMessage message) {
    ServerEncoder encoder = new ServerEncoder(4096, true);
    Struct[] structs = message.getHeader().getStructs();
    encoder.writeInt32(structs.length);
    for (Struct struct : structs) {
        encoder.writeStruct32(struct);
    }
    try (QpidByteBuffer headerBuf = encoder.getBuffer();
        QpidByteBuffer content = message.getContent()) {
        return QpidByteBuffer.concatenate(headerBuf, content);
    }
}
Also used : QpidByteBuffer(org.apache.qpid.server.bytebuffer.QpidByteBuffer) Struct(org.apache.qpid.server.protocol.v0_10.transport.Struct)

Example 23 with Header

use of org.apache.qpid.server.protocol.v0_10.transport.Header in project qpid-broker-j by apache.

the class MessageMetaData_0_10 method getStorableSize.

@Override
public int getStorableSize() {
    int len = 0;
    // arrival time
    len += 8;
    // body size
    len += 4;
    // headers length
    len += 4;
    if (_header != null) {
        if (_header.getDeliveryProperties() != null) {
            len += EncoderUtils.getStruct32Length(_header.getDeliveryProperties());
        }
        if (_header.getMessageProperties() != null) {
            len += EncoderUtils.getStruct32Length(_header.getMessageProperties());
        }
        if (_header.getNonStandardProperties() != null) {
            for (Struct header : _header.getNonStandardProperties()) {
                len += EncoderUtils.getStruct32Length(header);
            }
        }
    }
    return len;
}
Also used : Struct(org.apache.qpid.server.protocol.v0_10.transport.Struct)

Example 24 with Header

use of org.apache.qpid.server.protocol.v0_10.transport.Header in project qpid-broker-j by apache.

the class MessageMetaData_0_10 method encodeAsBuffer.

private QpidByteBuffer encodeAsBuffer() {
    ServerEncoder encoder = new ServerEncoder(ENCODER_SIZE, false);
    encoder.writeInt64(_messageHeader.getArrivalTime());
    encoder.writeInt32(_bodySize);
    int headersLength = 0;
    if (_header != null) {
        if (_header.getDeliveryProperties() != null) {
            headersLength++;
        }
        if (_header.getMessageProperties() != null) {
            headersLength++;
        }
        if (_header.getNonStandardProperties() != null) {
            headersLength += _header.getNonStandardProperties().size();
        }
    }
    encoder.writeInt32(headersLength);
    if (_header != null) {
        if (_header.getDeliveryProperties() != null) {
            encoder.writeStruct32(_header.getDeliveryProperties());
        }
        if (_header.getMessageProperties() != null) {
            encoder.writeStruct32(_header.getMessageProperties());
        }
        if (_header.getNonStandardProperties() != null) {
            for (Struct header : _header.getNonStandardProperties()) {
                encoder.writeStruct32(header);
            }
        }
    }
    QpidByteBuffer buf = encoder.getBuffer();
    encoder.close();
    return buf;
}
Also used : QpidByteBuffer(org.apache.qpid.server.bytebuffer.QpidByteBuffer) Struct(org.apache.qpid.server.protocol.v0_10.transport.Struct)

Example 25 with Header

use of org.apache.qpid.server.protocol.v0_10.transport.Header in project qpid-broker-j by apache.

the class ServerInputHandler method received.

public void received(QpidByteBuffer buf) {
    int position = buf.position();
    List<ServerFrame> frames = new ArrayList<>();
    while (buf.hasRemaining() && _state != ERROR) {
        buf.mark();
        switch(_state) {
            case PROTO_HDR:
                if (buf.remaining() < 8) {
                    break;
                }
                if (buf.get() != 'A' || buf.get() != 'M' || buf.get() != 'Q' || buf.get() != 'P') {
                    buf.reset();
                    error("bad protocol header: %s", str(buf));
                    _state = ERROR;
                } else {
                    byte protoClass = buf.get();
                    byte instance = buf.get();
                    byte major = buf.get();
                    byte minor = buf.get();
                    _serverAssembler.init(new ProtocolHeader(protoClass, instance, major, minor));
                    _state = FRAME_HDR;
                }
                break;
            case FRAME_HDR:
                if (buf.remaining() < ServerFrame.HEADER_SIZE) {
                    buf.reset();
                } else {
                    flags = buf.get();
                    type = SegmentType.get(buf.get());
                    int size = (0xFFFF & buf.getShort());
                    size -= ServerFrame.HEADER_SIZE;
                    if (size < 0 || size > (_maxFrameSize - ServerFrame.HEADER_SIZE)) {
                        error("bad frame size: %d", size);
                        _state = ERROR;
                    } else {
                        // skip unused byte
                        buf.get();
                        byte b = buf.get();
                        if ((b & 0xF0) != 0) {
                            error("non-zero reserved bits in upper nibble of " + "frame header byte 5: '%x'", b);
                            _state = ERROR;
                        } else {
                            track = (byte) (b & 0xF);
                            channel = (0xFFFF & buf.getShort());
                            buf.position(buf.position() + 4);
                            if (size == 0) {
                                ServerFrame frame = new ServerFrame(flags, type, track, channel, EMPTY_BYTE_BUFFER.duplicate());
                                frames.add(frame);
                            } else if (buf.remaining() < size) {
                                buf.reset();
                            } else {
                                final QpidByteBuffer body = buf.slice();
                                body.limit(size);
                                ServerFrame frame = new ServerFrame(flags, type, track, channel, body);
                                frames.add(frame);
                                buf.position(buf.position() + size);
                            }
                        }
                    }
                }
                break;
            default:
                throw new IllegalStateException();
        }
        int newPosition = buf.position();
        if (position == newPosition) {
            break;
        } else {
            position = newPosition;
        }
    }
    _serverAssembler.received(frames);
}
Also used : ArrayList(java.util.ArrayList) QpidByteBuffer(org.apache.qpid.server.bytebuffer.QpidByteBuffer) ProtocolHeader(org.apache.qpid.server.protocol.v0_10.transport.ProtocolHeader)

Aggregations

DeliveryProperties (org.apache.qpid.server.protocol.v0_10.transport.DeliveryProperties)28 MessageProperties (org.apache.qpid.server.protocol.v0_10.transport.MessageProperties)22 MessageTransferMessage (org.apache.qpid.server.protocol.v0_10.MessageTransferMessage)19 Header (org.apache.qpid.server.protocol.v1_0.type.messaging.Header)19 Message_1_0 (org.apache.qpid.server.protocol.v1_0.Message_1_0)17 Header (org.apache.qpid.server.protocol.v0_10.transport.Header)12 Properties (org.apache.qpid.server.protocol.v1_0.type.messaging.Properties)10 ReplyTo (org.apache.qpid.server.protocol.v0_10.transport.ReplyTo)8 Struct (org.apache.qpid.server.protocol.v0_10.transport.Struct)8 ApplicationProperties (org.apache.qpid.server.protocol.v1_0.type.messaging.ApplicationProperties)8 MessageAnnotations (org.apache.qpid.server.protocol.v1_0.type.messaging.MessageAnnotations)8 Matchers.anyString (org.mockito.Matchers.anyString)8 DeliveryAnnotations (org.apache.qpid.server.protocol.v1_0.type.messaging.DeliveryAnnotations)7 QpidByteBuffer (org.apache.qpid.server.bytebuffer.QpidByteBuffer)6 ProtocolHeader (org.apache.qpid.server.protocol.v0_10.transport.ProtocolHeader)6 AMQShortString (org.apache.qpid.server.protocol.v0_8.AMQShortString)6 AMQMessageHeader (org.apache.qpid.server.message.AMQMessageHeader)5 InternalMessage (org.apache.qpid.server.message.internal.InternalMessage)5 Date (java.util.Date)4 MessageMetaData_0_10 (org.apache.qpid.server.protocol.v0_10.MessageMetaData_0_10)4