List of usage examples for io.netty.buffer ByteBuf indexOf
public abstract int indexOf(int fromIndex, int toIndex, byte value);
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; }