Example usage for io.netty.buffer ByteBuf indexOf

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

Introduction

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

Prototype

public abstract int indexOf(int fromIndex, int toIndex, byte value);

Source Link

Document

Locates the first occurrence of the specified value in this buffer.

Usage

From source file:org.traccar.protocol.ItsFrameDecoder.java

License:Apache License

private ByteBuf readFrame(ByteBuf buf, int delimiterIndex, int skip) {
    int headerIndex = buf.indexOf(buf.readerIndex() + 1, buf.writerIndex(), (byte) '$');
    if (headerIndex > 0 && headerIndex < delimiterIndex) {
        return buf.readRetainedSlice(headerIndex - buf.readerIndex());
    } else {// w ww . j  a  va 2s  . c  om
        ByteBuf frame = buf.readRetainedSlice(delimiterIndex - buf.readerIndex());
        buf.skipBytes(skip);
        return frame;
    }
}

From source file:org.traccar.protocol.ItsFrameDecoder.java

License:Apache License

@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ByteBuf buf) throws Exception {

    while (buf.isReadable() && buf.getByte(buf.readerIndex()) != '$') {
        buf.skipBytes(1);/*  ww w . j  a  va2 s  . co m*/
    }

    int delimiterIndex = BufferUtil.indexOf("\r\n", buf);
    if (delimiterIndex > MINIMUM_LENGTH) {
        return readFrame(buf, delimiterIndex, 2);
    } else {
        delimiterIndex = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) '*');
        if (delimiterIndex > MINIMUM_LENGTH) {
            if (buf.writerIndex() > delimiterIndex + 1 && buf.getByte(delimiterIndex + 1) == '*') {
                delimiterIndex += 1;
            }
            if (buf.getByte(delimiterIndex - 2) == ',') {
                return readFrame(buf, delimiterIndex - 1, 2); // skip binary checksum
            } else {
                return readFrame(buf, delimiterIndex, 1);
            }
        }
    }

    return null;
}

From source file:org.traccar.protocol.JpKorjarFrameDecoder.java

License:Apache License

@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ByteBuf buf) throws Exception {

    if (buf.readableBytes() < 80) {
        return null;
    }/*from  w w w.j av  a2s . c o m*/

    int spaceIndex = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) ' ');
    if (spaceIndex == -1) {
        return null;
    }

    int endIndex = buf.indexOf(spaceIndex, buf.writerIndex(), (byte) ',');
    if (endIndex == -1) {
        return null;
    }

    return buf.readRetainedSlice(endIndex + 1);
}

From source file:org.traccar.protocol.Jt600FrameDecoder.java

License:Apache License

@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ByteBuf buf) throws Exception {

    if (buf.readableBytes() < 10) {
        return null;
    }/*from www  .ja  v a 2 s .  c  o  m*/

    char type = (char) buf.getByte(buf.readerIndex());

    if (type == '$') {
        boolean longFormat = buf.getUnsignedByte(buf.readerIndex() + 1) == 0x75;
        int length = buf.getUnsignedShort(buf.readerIndex() + (longFormat ? 8 : 7)) + 10;
        if (length <= buf.readableBytes()) {
            return buf.readRetainedSlice(length);
        }
    } else if (type == '(') {
        int endIndex = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) ')');
        if (endIndex != -1) {
            return buf.readRetainedSlice(endIndex + 1);
        }
    } else {
        throw new ParseException(null, 0); // unknown message
    }

    return null;
}

From source file:org.traccar.protocol.L100FrameDecoder.java

License:Apache License

private Object decodeOld(ByteBuf buf) {

    int header = buf.getByte(buf.readerIndex());
    boolean obd = header == 'L' || header == 'H';

    int index;/*from   w ww . j av  a2  s .c  o  m*/
    if (obd) {
        index = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) '*');
    } else {
        index = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) 0x02);
        if (index < 0) {
            index = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) 0x04);
            if (index < 0) {
                return null;
            }
        }
    }

    index += 2; // checksum

    if (buf.writerIndex() >= index) {
        if (!obd) {
            buf.skipBytes(2); // header
        }
        ByteBuf frame = buf.readRetainedSlice(index - buf.readerIndex() - 2);
        buf.skipBytes(2); // footer
        return frame;
    }

    return null;
}

From source file:org.traccar.protocol.L100FrameDecoder.java

License:Apache License

private Object decodeNew(ByteBuf buf) {

    int index = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) '@');
    if (index < 0) {
        return null;
    }/*from w ww  . j a  v a  2 s.  c  o  m*/

    if (buf.writerIndex() >= index + 1) {
        ByteBuf frame = buf.readRetainedSlice(index - buf.readerIndex());
        buf.skipBytes(1); // delimiter
        return frame;
    }

    return null;
}

From source file:org.traccar.protocol.MegastekFrameDecoder.java

License:Apache License

@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ByteBuf buf) throws Exception {

    if (buf.readableBytes() < 10) {
        return null;
    }/*  ww w.ja  v  a2  s . c  o m*/

    if (Character.isDigit(buf.getByte(buf.readerIndex()))) {
        int length = 4 + Integer.parseInt(buf.toString(buf.readerIndex(), 4, StandardCharsets.US_ASCII));
        if (buf.readableBytes() >= length) {
            return buf.readRetainedSlice(length);
        }
    } else {
        while (buf.getByte(buf.readerIndex()) == '\r' || buf.getByte(buf.readerIndex()) == '\n') {
            buf.skipBytes(1);
        }
        int delimiter = BufferUtil.indexOf("\r\n", buf);
        if (delimiter == -1) {
            delimiter = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) '!');
        }
        if (delimiter != -1) {
            ByteBuf result = buf.readRetainedSlice(delimiter - buf.readerIndex());
            buf.skipBytes(1);
            return result;
        }
    }

    return null;
}

From source file:org.traccar.protocol.MeiligaoProtocolDecoder.java

License:Apache License

private List<Position> decodeRetransmission(ByteBuf buf, DeviceSession deviceSession) {
    List<Position> positions = new LinkedList<>();

    int count = buf.readUnsignedByte();
    for (int i = 0; i < count; i++) {

        buf.readUnsignedByte(); // alarm

        int endIndex = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) '\\');
        if (endIndex < 0) {
            endIndex = buf.writerIndex() - 4;
        }/*from  www  .j  a v a2  s . c o m*/

        String sentence = buf.readSlice(endIndex - buf.readerIndex()).toString(StandardCharsets.US_ASCII);

        Position position = new Position(getProtocolName());
        position.setDeviceId(deviceSession.getDeviceId());

        position = decodeRegular(position, sentence);

        if (position != null) {
            positions.add(position);
        }

        if (buf.readableBytes() > 4) {
            buf.readUnsignedByte(); // delimiter
        }

    }

    return positions;
}

From source file:org.traccar.protocol.MeitrackFrameDecoder.java

License:Apache License

@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ByteBuf buf) throws Exception {

    if (buf.readableBytes() < 10) {
        return null;
    }//from   w w w .  j a va2s .  co m

    int index = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) ',');
    if (index != -1) {
        int length = index - buf.readerIndex() + Integer.parseInt(
                buf.toString(buf.readerIndex() + 3, index - buf.readerIndex() - 3, StandardCharsets.US_ASCII));
        if (buf.readableBytes() >= length) {
            return buf.readRetainedSlice(length);
        }
    }

    return null;
}

From source file:org.traccar.protocol.MeitrackProtocolDecoder.java

License:Apache License

private List<Position> decodeBinaryC(Channel channel, SocketAddress remoteAddress, ByteBuf buf) {
    List<Position> positions = new LinkedList<>();

    String flag = buf.toString(2, 1, StandardCharsets.US_ASCII);
    int index = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) ',');

    String imei = buf.toString(index + 1, 15, StandardCharsets.US_ASCII);
    DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, imei);
    if (deviceSession == null) {
        return null;
    }/*  w w w . j  a  v a 2  s  .co m*/

    buf.skipBytes(index + 1 + 15 + 1 + 3 + 1 + 2 + 2 + 4);

    while (buf.readableBytes() >= 0x34) {

        Position position = new Position(getProtocolName());
        position.setDeviceId(deviceSession.getDeviceId());

        position.set(Position.KEY_EVENT, buf.readUnsignedByte());

        position.setLatitude(buf.readIntLE() * 0.000001);
        position.setLongitude(buf.readIntLE() * 0.000001);

        position.setTime(new Date((946684800 + buf.readUnsignedIntLE()) * 1000)); // 946684800 = 2000-01-01

        position.setValid(buf.readUnsignedByte() == 1);

        position.set(Position.KEY_SATELLITES, buf.readUnsignedByte());
        int rssi = buf.readUnsignedByte();

        position.setSpeed(UnitsConverter.knotsFromKph(buf.readUnsignedShortLE()));
        position.setCourse(buf.readUnsignedShortLE());

        position.set(Position.KEY_HDOP, buf.readUnsignedShortLE() * 0.1);

        position.setAltitude(buf.readUnsignedShortLE());

        position.set(Position.KEY_ODOMETER, buf.readUnsignedIntLE());
        position.set("runtime", buf.readUnsignedIntLE());

        position.setNetwork(new Network(CellTower.from(buf.readUnsignedShortLE(), buf.readUnsignedShortLE(),
                buf.readUnsignedShortLE(), buf.readUnsignedShortLE(), rssi)));

        position.set(Position.KEY_STATUS, buf.readUnsignedShortLE());

        position.set(Position.PREFIX_ADC + 1, buf.readUnsignedShortLE());
        position.set(Position.KEY_BATTERY, buf.readUnsignedShortLE() * 0.01);
        position.set(Position.KEY_POWER, buf.readUnsignedShortLE());

        buf.readUnsignedIntLE(); // geo-fence

        positions.add(position);
    }

    if (channel != null) {
        StringBuilder command = new StringBuilder("@@");
        command.append(flag).append(27 + positions.size() / 10).append(",");
        command.append(imei).append(",CCC,").append(positions.size()).append("*");
        int checksum = 0;
        for (int i = 0; i < command.length(); i += 1) {
            checksum += command.charAt(i);
        }
        command.append(String.format("%02x", checksum & 0xff).toUpperCase());
        command.append("\r\n");
        channel.writeAndFlush(new NetworkMessage(command.toString(), remoteAddress)); // delete processed data
    }

    return positions;
}