Example usage for io.netty.buffer ByteBuf release

List of usage examples for io.netty.buffer ByteBuf release

Introduction

In this page you can find the example usage for io.netty.buffer ByteBuf release.

Prototype

boolean release(int decrement);

Source Link

Document

Decreases the reference count by the specified decrement and deallocates this object if the reference count reaches at 0 .

Usage

From source file:com.github.milenkovicm.kafka.AbstractTest.java

License:Apache License

@After
public void after() {
    for (;;) {// w w w  .  ja  v  a  2 s . c  o  m
        final ByteBuf buf = freeLaterQueue.poll();
        if (buf == null) {
            break;
        }
        if (buf.refCnt() > 0) {
            buf.release(buf.refCnt());
        }
    }
}

From source file:com.github.sadikovi.netflowlib.NetFlowReader.java

License:Apache License

/** Prepare header using provided input stream */
private NetFlowHeader prepareHeader() throws IOException {
    NetFlowHeader internalHeader;// w  w  w  .  j  a va 2 s  . co m
    int numBytesRead = 0;
    int lenRead = 0;
    ByteBuf buf;
    byte[] headerArray;

    // Read header depending on stream version (different from flow version)
    if (streamVersion == 1) {
        // Version 1 has static header
        // TODO: verify header size for stream version 1
        lenRead = NetFlowHeader.S1_HEADER_SIZE - METADATA_LENGTH;
        internalHeader = new NetFlowHeader(streamVersion, byteOrder);
    } else {
        // Version 3 with dynamic header size
        headerArray = new byte[HEADER_OFFSET_LENGTH];
        numBytesRead = in.read(headerArray, 0, HEADER_OFFSET_LENGTH);
        if (numBytesRead != HEADER_OFFSET_LENGTH) {
            throw new UnsupportedOperationException("Short read while loading header offset");
        }

        buf = Unpooled.wrappedBuffer(headerArray).order(byteOrder);
        int headerSize = (int) buf.getUnsignedInt(0);
        if (headerSize <= 0) {
            throw new UnsupportedOperationException("Failed to load header of size " + headerSize);
        }

        // Actual header length, determine how many bytes to read
        lenRead = headerSize - METADATA_LENGTH - HEADER_OFFSET_LENGTH;
        internalHeader = new NetFlowHeader(streamVersion, byteOrder, headerSize);
    }

    // allocate buffer for length to read
    headerArray = new byte[lenRead];
    numBytesRead = in.read(headerArray, 0, lenRead);
    if (numBytesRead != lenRead) {
        throw new UnsupportedOperationException("Short read while loading header data");
    }
    // build buffer
    buf = Unpooled.wrappedBuffer(headerArray).order(byteOrder);

    // resolve stream version (either 1 or 3)
    if (streamVersion == 1) {
        internalHeader.setFlowVersion((short) buf.getUnsignedShort(0));
        internalHeader.setStartCapture(buf.getUnsignedInt(2));
        internalHeader.setEndCapture(buf.getUnsignedInt(6));
        internalHeader.setHeaderFlags(buf.getUnsignedInt(10));
        internalHeader.setRotation(buf.getUnsignedInt(14));
        internalHeader.setNumFlows(buf.getUnsignedInt(18));
        internalHeader.setNumDropped(buf.getUnsignedInt(22));
        internalHeader.setNumMisordered(buf.getUnsignedInt(26));
        // Read hostname fixed bytes
        byte[] hostnameBytes = new byte[NetFlowHeader.S1_HEADER_HN_LEN];
        buf.getBytes(30, hostnameBytes, 0, hostnameBytes.length);
        internalHeader.setHostname(new String(hostnameBytes));
        // Read comments fixed bytes
        byte[] commentsBytes = new byte[NetFlowHeader.S1_HEADER_CMNT_LEN];
        buf.getBytes(30 + hostnameBytes.length, commentsBytes, 0, commentsBytes.length);
        internalHeader.setComments(new String(commentsBytes));

        // Dereference arrays
        hostnameBytes = null;
        commentsBytes = null;
    } else {
        // Resolve TLV (type-length value)
        // Set decode pointer to first tlv
        int dp = 0;
        int left = lenRead;
        // Smallest TLV is 2+2+0 (null TLV)
        // tlv_t - TLV type, tlv_l - TLV length, tlv_v - TLV value
        int tlv_t = 0;
        int tlv_l = 0;
        int tlv_v = 0;

        // Byte array for holding Strings
        byte[] pr;

        while (left >= 4) {
            // Parse type, store in host byte order
            tlv_t = buf.getUnsignedShort(dp);
            dp += 2;
            left -= 2;

            // Parse len, store in host byte order
            tlv_l = buf.getUnsignedShort(dp);
            dp += 2;
            left -= 2;

            // Parse val
            tlv_v = dp;

            // Point decode buffer at next tlv
            dp += tlv_l;
            left -= tlv_l;

            // TLV length check
            if (left < 0) {
                break;
            }

            switch (tlv_t) {
            // FT_TLV_VENDOR
            case 0x1:
                internalHeader.setVendor(buf.getUnsignedShort(tlv_v));
                break;
            // FT_TLV_EX_VER
            case 0x2:
                internalHeader.setFlowVersion((short) buf.getUnsignedShort(tlv_v));
                break;
            // FT_TLV_AGG_VER
            case 0x3:
                internalHeader.setAggVersion(buf.getUnsignedByte(tlv_v));
                break;
            // FT_TLV_AGG_METHOD
            case 0x4:
                internalHeader.setAggMethod(buf.getUnsignedByte(tlv_v));
                break;
            // FT_TLV_EXPORTER_IP
            case 0x5:
                internalHeader.setExporterIP(buf.getUnsignedInt(tlv_v));
                break;
            // FT_TLV_CAP_START
            case 0x6:
                internalHeader.setStartCapture(buf.getUnsignedInt(tlv_v));
                break;
            // FT_TLV_CAP_END
            case 0x7:
                internalHeader.setEndCapture(buf.getUnsignedInt(tlv_v));
                break;
            // FT_TLV_HEADER_FLAGS
            case 0x8:
                internalHeader.setHeaderFlags(buf.getUnsignedInt(tlv_v));
                break;
            // FT_TLV_ROT_SCHEDULE
            case 0x9:
                internalHeader.setRotation(buf.getUnsignedInt(tlv_v));
                break;
            // FT_TLV_FLOW_COUNT
            case 0xA:
                internalHeader.setNumFlows(buf.getUnsignedInt(tlv_v));
                break;
            // FT_TLV_FLOW_LOST
            case 0xB:
                internalHeader.setNumDropped(buf.getUnsignedInt(tlv_v));
                break;
            // FT_TLV_FLOW_MISORDERED
            case 0xC:
                internalHeader.setNumMisordered(buf.getUnsignedInt(tlv_v));
                break;
            // FT_TLV_PKT_CORRUPT
            case 0xD:
                internalHeader.setNumCorrupt(buf.getUnsignedInt(tlv_v));
                break;
            // FT_TLV_SEQ_RESET
            case 0xE:
                internalHeader.setSeqReset(buf.getUnsignedInt(tlv_v));
                break;
            // FT_TLV_CAP_HOSTNAME
            case 0xF:
                pr = new byte[tlv_l];
                buf.getBytes(tlv_v, pr, 0, pr.length);
                // Expected null-terminated string
                if (pr[pr.length - 1] != 0) {
                    throw new UnsupportedOperationException("Char sequence is not null-terminated");
                }

                internalHeader.setHostname(new String(pr, 0, pr.length - 1));
                break;
            // FT_TLV_COMMENTS
            case 0x10:
                pr = new byte[tlv_l];
                buf.getBytes(tlv_v, pr, 0, pr.length);
                // Expected null-terminated string
                if (pr[pr.length - 1] != 0) {
                    throw new UnsupportedOperationException("Char sequence is not null-terminated");
                }
                internalHeader.setComments(new String(pr, 0, pr.length - 1));
                break;
            // FT_TLV_IF_NAME
            case 0x11:
                // uint32_t, uint16_t, string:
                // - IP address of device
                // - ifIndex of interface
                // - interface name
                long ip = buf.getUnsignedInt(tlv_v);
                int ifIndex = buf.getUnsignedShort(tlv_v + 4);
                pr = new byte[tlv_l - 4 - 2];
                buf.getBytes(tlv_v + 4 + 2, pr, 0, pr.length);
                if (pr[pr.length - 1] != 0) {
                    throw new UnsupportedOperationException("Char sequence is not null-terminated");
                }
                internalHeader.setInterfaceName(ip, ifIndex, new String(pr, 0, pr.length - 1));
                break;
            // FT_TLV_IF_ALIAS
            case 0x12:
                // uint32_t, uint16_t, uint16_t, string:
                // - IP address of device
                // - ifIndex count
                // - ifIndex of interface (count times)
                // - alias name
                long aliasIP = buf.getUnsignedInt(tlv_v);
                int aliasIfIndexCnt = buf.getUnsignedShort(tlv_v + 4);
                int aliasIfIndex = buf.getUnsignedShort(tlv_v + 4 + 2);
                pr = new byte[tlv_l - 4 - 2 - 2];
                buf.getBytes(tlv_v + 4 + 2 + 2, pr, 0, pr.length);
                if (pr[pr.length - 1] != 0) {
                    throw new UnsupportedOperationException("Char sequence is not null-terminated");
                }

                internalHeader.setInterfaceAlias(aliasIP, aliasIfIndexCnt, aliasIfIndex,
                        new String(pr, 0, pr.length - 1));
                break;
            // Case 0x0
            default:
                break;
            }
        }

        if (buf != null && buf.refCnt() > 0) {
            buf.release(buf.refCnt());
        }

        buf = null;
        pr = null;
    }
    return internalHeader;
}

From source file:io.grpc.alts.internal.TsiHandshakeHandler.java

License:Apache License

/** Sends as many bytes as are available from the handshaker to the remote peer. */
@SuppressWarnings("FutureReturnValueIgnored") // for addListener
private void sendHandshake(ChannelHandlerContext ctx) throws GeneralSecurityException {
    while (true) {
        boolean written = false;
        ByteBuf buf = ctx.alloc().buffer(HANDSHAKE_FRAME_SIZE).retain(); // refcnt = 2
        try {/*from w w w.  j av  a2 s .  c o m*/
            handshaker.getBytesToSendToPeer(buf);
            if (buf.isReadable()) {
                ctx.writeAndFlush(buf).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE);
                written = true;
            } else {
                break;
            }
        } catch (GeneralSecurityException e) {
            throw new GeneralSecurityException("TsiHandshakeHandler encountered exception", e);
        } finally {
            buf.release(written ? 1 : 2);
        }
    }
}