Search in sources :

Example 11 with ReadableBuffer

use of org.apache.qpid.proton.codec.ReadableBuffer in project vertx-proton by vert-x3.

the class ProtonReadableBufferImplTest method testDuplicate.

@Test
public void testDuplicate() {
    byte[] data = new byte[] { 0, 1, 2, 3, 4 };
    ByteBuf byteBuffer = Unpooled.wrappedBuffer(data);
    ProtonReadableBufferImpl buffer = new ProtonReadableBufferImpl(byteBuffer);
    ReadableBuffer duplicate = buffer.duplicate();
    for (int i = 0; i < data.length; i++) {
        assertEquals(data[i], duplicate.get());
    }
    assertFalse(duplicate.hasRemaining());
}
Also used : ByteBuf(io.netty.buffer.ByteBuf) ReadableBuffer(org.apache.qpid.proton.codec.ReadableBuffer) Test(org.junit.Test)

Example 12 with ReadableBuffer

use of org.apache.qpid.proton.codec.ReadableBuffer in project vertx-proton by vert-x3.

the class ProtonReceiverImpl method handlePartial.

private void handlePartial(final Receiver receiver, final Delivery delivery) {
    if (sessionIncomingCapacity <= 0 || maxFrameSize <= 0 || session.getIncomingBytes() < windowFullThreshhold) {
    // No window, or there is still capacity, so do nothing.
    } else {
        // room made for receiving more of the delivery.
        if (delivery.available() > 0) {
            ReadableBuffer buff = receiver.recv();
            if (splitContent == null && buff instanceof CompositeReadableBuffer) {
                // Its a composite and there is no prior partial content, use it.
                splitContent = (CompositeReadableBuffer) buff;
            } else {
                int remaining = buff.remaining();
                if (remaining > 0) {
                    if (splitContent == null) {
                        splitContent = new CompositeReadableBuffer();
                    }
                    byte[] chunk = new byte[remaining];
                    buff.get(chunk);
                    splitContent.append(chunk);
                }
            }
        }
    }
}
Also used : CompositeReadableBuffer(org.apache.qpid.proton.codec.CompositeReadableBuffer) CompositeReadableBuffer(org.apache.qpid.proton.codec.CompositeReadableBuffer) ReadableBuffer(org.apache.qpid.proton.codec.ReadableBuffer)

Example 13 with ReadableBuffer

use of org.apache.qpid.proton.codec.ReadableBuffer in project vertx-proton by vert-x3.

the class ProtonReceiverImpl method onDelivery.

void onDelivery() {
    if (this.handler == null) {
        return;
    }
    Receiver receiver = getReceiver();
    Delivery delivery = receiver.current();
    if (delivery != null) {
        if (delivery.isAborted()) {
            handleAborted(receiver, delivery);
            return;
        }
        UnsignedLong maxMessageSize = getMaxMessageSize();
        if (maxMessageSize != null) {
            if (checkMaxMessageSize(maxMessageSize, delivery, receiver)) {
                return;
            }
            ;
        }
        if (delivery.isPartial()) {
            handlePartial(receiver, delivery);
            // return and allow further frames to arrive.
            return;
        }
        // Complete prior partial content if needed, or grab it all.
        ReadableBuffer data = receiver.recv();
        if (splitContent != null) {
            data = completePartial(data);
        }
        receiver.advance();
        MessageImpl msg = (MessageImpl) Proton.message();
        ProtonDeliveryImpl delImpl = new ProtonDeliveryImpl(delivery);
        try {
            msg.decode(data);
        } catch (Throwable t) {
            LOG.debug("Unable to decode message, undeliverable", t);
            handleDecodeFailure(receiver, delImpl);
            return;
        }
        handler.handle(delImpl, msg);
        if (autoAccept && delivery.getLocalState() == null) {
            accepted(delImpl, true);
        }
        if (prefetch > 0) {
            // Replenish credit if prefetch is configured.
            // TODO: batch credit replenish, optionally flush if exceeding a given threshold?
            flow(1, false);
        } else {
            processForDrainCompletion();
        }
    }
}
Also used : UnsignedLong(org.apache.qpid.proton.amqp.UnsignedLong) ProtonReceiver(io.vertx.proton.ProtonReceiver) Receiver(org.apache.qpid.proton.engine.Receiver) Delivery(org.apache.qpid.proton.engine.Delivery) CompositeReadableBuffer(org.apache.qpid.proton.codec.CompositeReadableBuffer) ReadableBuffer(org.apache.qpid.proton.codec.ReadableBuffer) MessageImpl(org.apache.qpid.proton.message.impl.MessageImpl)

Example 14 with ReadableBuffer

use of org.apache.qpid.proton.codec.ReadableBuffer in project azure-iot-sdk-java by Azure.

the class AmqpFeedbackReceivedHandlerTest method createProtonObjects.

private void createProtonObjects() {
    final String exceptionMessage = "Not expected function called";
    message = Proton.message();
    receiver = new Receiver() {

        @Override
        public void flow(int i) {
        }

        @Override
        public int recv(byte[] bytes, int i, int i1) {
            return 0;
        }

        @Override
        public ReadableBuffer recv() {
            return readBuf;
        }

        @Override
        public int recv(WritableBuffer writableBuffer) {
            return 0;
        }

        @Override
        public void drain(int i) {
        }

        @Override
        public boolean advance() {
            return false;
        }

        @Override
        public boolean draining() {
            return false;
        }

        @Override
        public void setDrain(boolean b) {
        }

        @Override
        public String getName() {
            return RECEIVE_TAG;
        }

        @Override
        public Delivery delivery(byte[] bytes) {
            return null;
        }

        @Override
        public Delivery delivery(byte[] bytes, int i, int i1) {
            return null;
        }

        @Override
        public Delivery head() {
            return null;
        }

        @Override
        public Delivery current() {
            return delivery;
        }

        @Override
        public org.apache.qpid.proton.amqp.transport.Source getSource() {
            return null;
        }

        @Override
        public org.apache.qpid.proton.amqp.transport.Target getTarget() {
            return null;
        }

        @Override
        public void setSource(org.apache.qpid.proton.amqp.transport.Source source) {
        }

        @Override
        public void setTarget(org.apache.qpid.proton.amqp.transport.Target target) {
        }

        @Override
        public org.apache.qpid.proton.amqp.transport.Source getRemoteSource() {
            return null;
        }

        @Override
        public org.apache.qpid.proton.amqp.transport.Target getRemoteTarget() {
            return null;
        }

        @Override
        public Link next(EnumSet<EndpointState> enumSet, EnumSet<EndpointState> enumSet1) {
            return null;
        }

        @Override
        public int getCredit() {
            return 0;
        }

        @Override
        public int getQueued() {
            return 0;
        }

        @Override
        public int getUnsettled() {
            return 0;
        }

        @Override
        public Session getSession() {
            return session;
        }

        @Override
        public SenderSettleMode getSenderSettleMode() {
            return null;
        }

        @Override
        public void setSenderSettleMode(SenderSettleMode senderSettleMode) {
        }

        @Override
        public SenderSettleMode getRemoteSenderSettleMode() {
            return null;
        }

        @Override
        public ReceiverSettleMode getReceiverSettleMode() {
            return null;
        }

        @Override
        public void setReceiverSettleMode(ReceiverSettleMode receiverSettleMode) {
        }

        @Override
        public ReceiverSettleMode getRemoteReceiverSettleMode() {
            return null;
        }

        @Override
        public void setRemoteSenderSettleMode(SenderSettleMode senderSettleMode) {
        }

        @Override
        public Map<Symbol, Object> getProperties() {
            return null;
        }

        @Override
        public void setProperties(Map<Symbol, Object> map) {
        }

        @Override
        public Map<Symbol, Object> getRemoteProperties() {
            return null;
        }

        @Override
        public int drained() {
            return 0;
        }

        @Override
        public int getRemoteCredit() {
            return 0;
        }

        @Override
        public boolean getDrain() {
            return false;
        }

        @Override
        public void detach() {
        }

        @Override
        public boolean detached() {
            return false;
        }

        @Override
        public void setOfferedCapabilities(Symbol[] symbols) {
        }

        @Override
        public Symbol[] getOfferedCapabilities() {
            return new Symbol[0];
        }

        @Override
        public Symbol[] getRemoteOfferedCapabilities() {
            return new Symbol[0];
        }

        @Override
        public void setDesiredCapabilities(Symbol[] symbols) {
        }

        @Override
        public Symbol[] getDesiredCapabilities() {
            return new Symbol[0];
        }

        @Override
        public Symbol[] getRemoteDesiredCapabilities() {
            return new Symbol[0];
        }

        @Override
        public void setMaxMessageSize(UnsignedLong unsignedLong) {
        }

        @Override
        public UnsignedLong getMaxMessageSize() {
            return null;
        }

        @Override
        public UnsignedLong getRemoteMaxMessageSize() {
            return null;
        }

        @Override
        public EndpointState getLocalState() {
            return null;
        }

        @Override
        public EndpointState getRemoteState() {
            return null;
        }

        @Override
        public ErrorCondition getCondition() {
            return null;
        }

        @Override
        public void setCondition(ErrorCondition errorCondition) {
        }

        @Override
        public ErrorCondition getRemoteCondition() {
            return null;
        }

        @Override
        public void free() {
        }

        @Override
        public void open() {
        }

        @Override
        public void close() {
        }

        @Override
        public void setContext(Object o) {
        }

        @Override
        public Object getContext() {
            return null;
        }

        @Override
        public Record attachments() {
            return null;
        }
    };
    event = new Event() {

        @Override
        public EventType getEventType() {
            return null;
        }

        @Override
        public Event.Type getType() {
            throw new UnsupportedOperationException(exceptionMessage);
        }

        @Override
        public Object getContext() {
            throw new UnsupportedOperationException(exceptionMessage);
        }

        @Override
        public Handler getRootHandler() {
            return null;
        }

        @Override
        public void dispatch(Handler hndlr) throws HandlerException {
            throw new UnsupportedOperationException(exceptionMessage);
        }

        @Override
        public void redispatch(EventType eventType, Handler handler) throws HandlerException {
        }

        @Override
        public void delegate() throws HandlerException {
        }

        @Override
        public Connection getConnection() {
            return connection;
        }

        @Override
        public Session getSession() {
            throw new UnsupportedOperationException(exceptionMessage);
        }

        @Override
        public Link getLink() {
            return receiver;
        }

        @Override
        public Sender getSender() {
            return null;
        }

        @Override
        public Receiver getReceiver() {
            return null;
        }

        @Override
        public Delivery getDelivery() {
            return delivery;
        }

        @Override
        public Transport getTransport() {
            throw new UnsupportedOperationException(exceptionMessage);
        }

        @Override
        public Reactor getReactor() {
            throw new UnsupportedOperationException(exceptionMessage);
        }

        @Override
        public Selectable getSelectable() {
            throw new UnsupportedOperationException(exceptionMessage);
        }

        @Override
        public Task getTask() {
            throw new UnsupportedOperationException(exceptionMessage);
        }

        @Override
        public Event copy() {
            throw new UnsupportedOperationException(exceptionMessage);
        }

        @Override
        public Record attachments() {
            throw new UnsupportedOperationException(exceptionMessage);
        }
    };
    delivery = new Delivery() {

        @Override
        public byte[] getTag() {
            return new byte[0];
        }

        @Override
        public Link getLink() {
            return receiver;
        }

        @Override
        public DeliveryState getLocalState() {
            return null;
        }

        @Override
        public DeliveryState getRemoteState() {
            return null;
        }

        @Override
        public int getMessageFormat() {
            return 0;
        }

        @Override
        public int available() {
            return 0;
        }

        @Override
        public void disposition(DeliveryState deliveryState) {
        }

        @Override
        public void settle() {
        }

        @Override
        public boolean isSettled() {
            return false;
        }

        @Override
        public boolean isAborted() {
            return false;
        }

        @Override
        public boolean remotelySettled() {
            return false;
        }

        @Override
        public void free() {
        }

        @Override
        public Delivery getWorkNext() {
            return null;
        }

        @Override
        public Delivery next() {
            return null;
        }

        @Override
        public boolean isWritable() {
            return false;
        }

        @Override
        public boolean isReadable() {
            return true;
        }

        @Override
        public void setContext(Object o) {
        }

        @Override
        public Object getContext() {
            return null;
        }

        @Override
        public boolean isUpdated() {
            return false;
        }

        @Override
        public void clear() {
        }

        @Override
        public boolean isPartial() {
            return false;
        }

        @Override
        public int pending() {
            return 0;
        }

        @Override
        public boolean isBuffered() {
            return false;
        }

        @Override
        public void setDefaultDeliveryState(DeliveryState deliveryState) {
        }

        @Override
        public DeliveryState getDefaultDeliveryState() {
            return null;
        }

        @Override
        public void setMessageFormat(int i) {
        }

        @Override
        public Record attachments() {
            return null;
        }
    };
}
Also used : Symbol(org.apache.qpid.proton.amqp.Symbol) ReadableBuffer(org.apache.qpid.proton.codec.ReadableBuffer) Source(org.apache.qpid.proton.amqp.messaging.Source) ReceiverSettleMode(org.apache.qpid.proton.amqp.transport.ReceiverSettleMode) Target(org.apache.qpid.proton.amqp.messaging.Target) UnsignedLong(org.apache.qpid.proton.amqp.UnsignedLong) ErrorCondition(org.apache.qpid.proton.amqp.transport.ErrorCondition) AmqpFeedbackReceivedHandler(com.microsoft.azure.sdk.iot.service.transport.amqps.AmqpFeedbackReceivedHandler) SenderSettleMode(org.apache.qpid.proton.amqp.transport.SenderSettleMode) WritableBuffer(org.apache.qpid.proton.codec.WritableBuffer) DeliveryState(org.apache.qpid.proton.amqp.transport.DeliveryState) AmqpFeedbackReceivedEvent(com.microsoft.azure.sdk.iot.service.transport.amqps.AmqpFeedbackReceivedEvent) Map(java.util.Map)

Aggregations

ReadableBuffer (org.apache.qpid.proton.codec.ReadableBuffer)14 UnsignedLong (org.apache.qpid.proton.amqp.UnsignedLong)7 Delivery (org.apache.qpid.proton.engine.Delivery)5 Message (org.apache.qpid.proton.message.Message)5 Test (org.junit.Test)5 ProtonDelivery (io.vertx.proton.ProtonDelivery)4 ProtonReceiver (io.vertx.proton.ProtonReceiver)4 Symbol (org.apache.qpid.proton.amqp.Symbol)4 Target (org.apache.qpid.proton.amqp.messaging.Target)4 Receiver (org.apache.qpid.proton.engine.Receiver)4 ByteBuf (io.netty.buffer.ByteBuf)3 Vertx (io.vertx.core.Vertx)3 ContextInternal (io.vertx.core.impl.ContextInternal)3 ProtonMessageHandler (io.vertx.proton.ProtonMessageHandler)3 ErrorCondition (org.apache.qpid.proton.amqp.transport.ErrorCondition)3 CompositeReadableBuffer (org.apache.qpid.proton.codec.CompositeReadableBuffer)3 WritableBuffer (org.apache.qpid.proton.codec.WritableBuffer)3 Connection (org.apache.qpid.proton.engine.Connection)3 Session (org.apache.qpid.proton.engine.Session)3 Transport (org.apache.qpid.proton.engine.Transport)3