Changeset 533:d7f2025ab6a0
Legend:
- Unmodified
- Added
- Removed
-
kraken-rpc/src/main/java/org/krakenapps/rpc/impl/RpcDecoder.java
r373 r533 29 29 logger.debug("kraken-rpc: current readable length {}", buf.readableBytes()); 30 30 31 buf.markReaderIndex(); 31 32 if (buf.readableBytes() < 2) 32 33 return null; 33 34 35 // read type byte 34 36 buf.readByte(); 37 38 // read length bytes 39 int lengthBytes = 0; 35 40 byte b = 0; 36 41 boolean eon = false; … … 40 45 41 46 b = buf.readByte(); 47 lengthBytes++; 48 42 49 if ((b & 0x80) != 0x80) { 43 50 eon = true; … … 52 59 53 60 buf.resetReaderIndex(); 61 62 // read type byte 54 63 buf.readByte(); 64 65 // byte buffer read does not modify readable index 55 66 long length = EncodingRule.decodeRawNumber(buf.toByteBuffer()); 56 67 57 if (buf.readableBytes() > length) {68 if (buf.readableBytes() >= lengthBytes + length) { 58 69 buf.resetReaderIndex(); 59 int numLength = EncodingRule.lengthOfRawNumber(int.class, length); 60 ByteBuffer bb = ByteBuffer.allocate((int) length + numLength + 1); 70 ByteBuffer bb = ByteBuffer.allocate((int) length + lengthBytes + 1); 61 71 buf.readBytes(bb); 62 72 bb.flip(); … … 65 75 if (logger.isDebugEnabled()) 66 76 logger.debug("kraken-rpc: decoded one message, remaining {}", buf.readableBytes()); 67 68 buf.markReaderIndex(); 77 69 78 return decoded; 70 79 }
Note: See TracChangeset
for help on using the changeset viewer.
