Search in sources :

Example 41 with Header

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

the class Disassembler method method.

private void method(Method method, SegmentType type) {
    BBEncoder enc = _encoder.get();
    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) {
        ByteBuffer buf = enc.underlyingBuffer();
        buf.flip();
        ByteBuffer copy = ByteBuffer.allocate(buf.remaining());
        copy.put(buf.duplicate());
        copy.flip();
        final ByteBuffer methodBuf = view(copy, 0, methodLimit);
        fragment(flags, type, method, methodBuf);
        if (payload) {
            QpidByteBuffer qpidByteBuffer = method.getBody();
            ByteBuffer body = null;
            if (qpidByteBuffer != null) {
                body = ByteBuffer.allocate(qpidByteBuffer.remaining());
                qpidByteBuffer.copyTo(body);
                body.flip();
            }
            ByteBuffer headerBuf = view(copy, methodLimit, headerLimit);
            fragment(body == null ? LAST_SEG : 0x0, SegmentType.HEADER, method, headerBuf);
            if (body != null) {
                fragment(LAST_SEG, SegmentType.BODY, method, body.duplicate());
            }
        }
    }
}
Also used : BBEncoder(org.apache.qpid.server.protocol.v0_10.transport.BBEncoder) ProtocolHeader(org.apache.qpid.server.protocol.v0_10.transport.ProtocolHeader) Header(org.apache.qpid.server.protocol.v0_10.transport.Header) QpidByteBuffer(org.apache.qpid.server.bytebuffer.QpidByteBuffer) ByteBuffer(java.nio.ByteBuffer) QpidByteBuffer(org.apache.qpid.server.bytebuffer.QpidByteBuffer) Struct(org.apache.qpid.server.protocol.v0_10.transport.Struct)

Example 42 with Header

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

the class FrameDecoder method next.

private State next(int pos) {
    input.order(ByteOrder.BIG_ENDIAN);
    switch(_state) {
        case PROTO_HDR:
            if (input.get(pos) != 'A' && input.get(pos + 1) != 'M' && input.get(pos + 2) != 'Q' && input.get(pos + 3) != 'P') {
                error("bad protocol header: %s", str(input));
                return State.ERROR;
            }
            byte protoClass = input.get(pos + 4);
            byte instance = input.get(pos + 5);
            byte major = input.get(pos + 6);
            byte minor = input.get(pos + 7);
            _assembler.received(new ProtocolHeader(protoClass, instance, major, minor));
            _needed = Frame.HEADER_SIZE;
            return State.FRAME_HDR;
        case FRAME_HDR:
            _flags = input.get(pos);
            _type = SegmentType.get(input.get(pos + 1));
            int size = (0xFFFF & input.getShort(pos + 2));
            size -= Frame.HEADER_SIZE;
            _maxFrameSize = 64 * 1024;
            if (size < 0 || size > (_maxFrameSize - 12)) {
                error("bad frame size: %d", size);
                return State.ERROR;
            }
            byte b = input.get(pos + 5);
            if ((b & 0xF0) != 0) {
                error("non-zero reserved bits in upper nibble of " + "frame header byte 5: '%x'", b);
                return State.ERROR;
            } else {
                _track = (byte) (b & 0xF);
            }
            _channel = (0xFFFF & input.getShort(pos + 6));
            if (size == 0) {
                Frame frame = new Frame(_flags, _type, _track, _channel, EMPTY_BYTE_BUFFER);
                _assembler.received(frame);
                _needed = Frame.HEADER_SIZE;
                return State.FRAME_HDR;
            } else {
                _needed = size;
                return State.FRAME_BODY;
            }
        case FRAME_BODY:
            Frame frame = new Frame(_flags, _type, _track, _channel, input.slice());
            _assembler.received(frame);
            _needed = Frame.HEADER_SIZE;
            return State.FRAME_HDR;
        default:
            throw new IllegalStateException();
    }
}
Also used : Frame(org.apache.qpid.server.protocol.v0_10.transport.Frame) ProtocolHeader(org.apache.qpid.server.protocol.v0_10.transport.ProtocolHeader)

Example 43 with Header

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

the class Interaction method copyPerformative.

private <T extends Method> T copyPerformative(final T src) {
    T dst = (T) Method.create(src.getStructType());
    final BBEncoder encoder = new BBEncoder(4096);
    encoder.init();
    src.write(encoder);
    ByteBuffer buffer = encoder.buffer();
    final BBDecoder decoder = new BBDecoder();
    decoder.init(buffer);
    dst.read(decoder);
    dst.setChannel(src.getChannel());
    if (src.getHeader() != null) {
        Header srcHeader = src.getHeader();
        MessageProperties dstMessageProperties = null;
        DeliveryProperties dstDeliveryProperties = null;
        if (srcHeader.getMessageProperties() != null) {
            MessageProperties properties = srcHeader.getMessageProperties();
            dstMessageProperties = new MessageProperties();
            encoder.init();
            properties.write(encoder);
            decoder.init(encoder.buffer());
            dstMessageProperties.read(decoder);
        }
        if (srcHeader.getDeliveryProperties() != null) {
            DeliveryProperties properties = srcHeader.getDeliveryProperties();
            dstDeliveryProperties = new DeliveryProperties();
            encoder.init();
            properties.write(encoder);
            decoder.init(encoder.buffer());
            dstDeliveryProperties.read(decoder);
        }
        if (dstMessageProperties != null || dstDeliveryProperties != null) {
            dst.setHeader(new Header(dstDeliveryProperties, dstMessageProperties));
        }
    }
    if (src.getBody() != null) {
        dst.setBody(src.getBody());
    }
    return dst;
}
Also used : BBEncoder(org.apache.qpid.server.protocol.v0_10.transport.BBEncoder) Header(org.apache.qpid.server.protocol.v0_10.transport.Header) MessageProperties(org.apache.qpid.server.protocol.v0_10.transport.MessageProperties) DeliveryProperties(org.apache.qpid.server.protocol.v0_10.transport.DeliveryProperties) ByteBuffer(java.nio.ByteBuffer) BBDecoder(org.apache.qpid.server.protocol.v0_10.transport.BBDecoder)

Example 44 with Header

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

the class ConnectionTest method authenticationBypassAfterSendingStartOk.

@Test
@SpecificationTest(section = "9", description = "open-connection = C:protocol-header S:START C:START-OK *challenge S:TUNE C:TUNE-OK C:OPEN S:OPEN-OK")
public void authenticationBypassAfterSendingStartOk() throws Exception {
    InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
    try (FrameTransport transport = new FrameTransport(brokerAddress).connect()) {
        final Interaction interaction = transport.newInteraction();
        interaction.negotiateProtocol().consumeResponse().consumeResponse(ConnectionStart.class).connection().startOkMechanism(ConnectionInteraction.SASL_MECHANISM_PLAIN).startOk().consumeResponse(ConnectionSecure.class).connection().tuneOk().connection().open().consumeResponse(ConnectionClose.class, ChannelClosedResponse.class);
    }
}
Also used : InetSocketAddress(java.net.InetSocketAddress) ConnectionStart(org.apache.qpid.server.protocol.v0_10.transport.ConnectionStart) ConnectionSecure(org.apache.qpid.server.protocol.v0_10.transport.ConnectionSecure) Test(org.junit.Test) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest) SpecificationTest(org.apache.qpid.tests.protocol.SpecificationTest)

Example 45 with Header

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

the class ConsumerTarget_0_10 method doSend.

@Override
public void doSend(final MessageInstanceConsumer consumer, final MessageInstance entry, boolean batch) {
    ServerMessage serverMsg = entry.getMessage();
    MessageTransfer xfr;
    DeliveryProperties deliveryProps;
    MessageProperties messageProps = null;
    MessageTransferMessage msg;
    MessageConverter<? super ServerMessage, MessageTransferMessage> converter = null;
    if (serverMsg instanceof MessageTransferMessage) {
        msg = (MessageTransferMessage) serverMsg;
    } else {
        converter = (MessageConverter<? super ServerMessage, MessageTransferMessage>) MessageConverterRegistry.getConverter(serverMsg.getClass(), MessageTransferMessage.class);
        msg = converter.convert(serverMsg, _session.getAddressSpace());
    }
    DeliveryProperties origDeliveryProps = msg.getHeader() == null ? null : msg.getHeader().getDeliveryProperties();
    messageProps = msg.getHeader() == null ? null : msg.getHeader().getMessageProperties();
    deliveryProps = new DeliveryProperties();
    if (origDeliveryProps != null) {
        if (origDeliveryProps.hasDeliveryMode()) {
            deliveryProps.setDeliveryMode(origDeliveryProps.getDeliveryMode());
        }
        if (origDeliveryProps.hasExchange()) {
            deliveryProps.setExchange(origDeliveryProps.getExchange());
        }
        if (origDeliveryProps.hasExpiration()) {
            deliveryProps.setExpiration(origDeliveryProps.getExpiration());
        }
        if (origDeliveryProps.hasPriority()) {
            deliveryProps.setPriority(origDeliveryProps.getPriority());
        }
        if (origDeliveryProps.hasRoutingKey()) {
            deliveryProps.setRoutingKey(origDeliveryProps.getRoutingKey());
        }
        if (origDeliveryProps.hasTimestamp()) {
            deliveryProps.setTimestamp(origDeliveryProps.getTimestamp());
        }
        if (origDeliveryProps.hasTtl()) {
            deliveryProps.setTtl(origDeliveryProps.getTtl());
        }
    }
    deliveryProps.setRedelivered(entry.isRedelivered());
    boolean msgCompressed = messageProps != null && GZIPUtils.GZIP_CONTENT_ENCODING.equals(messageProps.getContentEncoding());
    QpidByteBuffer bodyBuffer = msg.getBody();
    boolean compressionSupported = _session.getConnection().getConnectionDelegate().isCompressionSupported();
    if (msgCompressed && !compressionSupported && bodyBuffer != null) {
        QpidByteBuffer uncompressedBuffer = inflateIfPossible(bodyBuffer);
        messageProps.setContentEncoding(null);
        bodyBuffer.dispose();
        bodyBuffer = uncompressedBuffer;
    } else if (!msgCompressed && compressionSupported && (messageProps == null || messageProps.getContentEncoding() == null) && bodyBuffer != null && bodyBuffer.remaining() > _session.getConnection().getMessageCompressionThreshold()) {
        QpidByteBuffer compressedBuffers = deflateIfPossible(bodyBuffer);
        if (messageProps == null) {
            messageProps = new MessageProperties();
        }
        messageProps.setContentEncoding(GZIPUtils.GZIP_CONTENT_ENCODING);
        bodyBuffer.dispose();
        bodyBuffer = compressedBuffers;
    }
    Header header = new Header(deliveryProps, messageProps, msg.getHeader() == null ? null : msg.getHeader().getNonStandardProperties());
    xfr = batch ? new MessageTransfer(_name, _acceptMode, _acquireMode, header, bodyBuffer, BATCHED) : new MessageTransfer(_name, _acceptMode, _acquireMode, header, bodyBuffer);
    if (bodyBuffer != null) {
        bodyBuffer.dispose();
        bodyBuffer = null;
    }
    if (_acceptMode == MessageAcceptMode.NONE && _acquireMode != MessageAcquireMode.PRE_ACQUIRED) {
        xfr.setCompletionListener(new MessageAcceptCompletionListener(this, consumer, _session, entry, _flowMode == MessageFlowMode.WINDOW));
    } else if (_flowMode == MessageFlowMode.WINDOW) {
        final long messageSize = entry.getMessage().getSize();
        xfr.setCompletionListener(new Method.CompletionListener() {

            @Override
            public void onComplete(Method method) {
                deferredAddCredit(1, messageSize);
            }
        });
    }
    _postIdSettingAction.setXfr(xfr);
    _postIdSettingAction.setAction(null);
    if (_acquireMode == MessageAcquireMode.PRE_ACQUIRED) {
        entry.incrementDeliveryCount();
    }
    if (_acceptMode == MessageAcceptMode.EXPLICIT) {
        _postIdSettingAction.setAction(new ExplicitAcceptDispositionChangeListener(entry, this, consumer));
    } else if (_acquireMode != MessageAcquireMode.PRE_ACQUIRED) {
        _postIdSettingAction.setAction(new ImplicitAcceptDispositionChangeListener(entry, this, consumer));
    }
    _session.sendMessage(xfr, _postIdSettingAction);
    xfr.dispose();
    if (converter != null) {
        converter.dispose(msg);
    }
    _postIdSettingAction.setAction(null);
    _postIdSettingAction.setXfr(null);
    if (_acceptMode == MessageAcceptMode.NONE && _acquireMode == MessageAcquireMode.PRE_ACQUIRED) {
        forceDequeue(entry, false);
    } else if (_acquireMode == MessageAcquireMode.PRE_ACQUIRED) {
        addUnacknowledgedMessage(entry);
    }
}
Also used : ServerMessage(org.apache.qpid.server.message.ServerMessage) DeliveryProperties(org.apache.qpid.server.protocol.v0_10.transport.DeliveryProperties) Method(org.apache.qpid.server.protocol.v0_10.transport.Method) Header(org.apache.qpid.server.protocol.v0_10.transport.Header) MessageProperties(org.apache.qpid.server.protocol.v0_10.transport.MessageProperties) QpidByteBuffer(org.apache.qpid.server.bytebuffer.QpidByteBuffer) MessageTransfer(org.apache.qpid.server.protocol.v0_10.transport.MessageTransfer)

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