public void testPcinitMsg() throws IOException, PCEPDeserializerException {
try (InitiatedActivator a = new InitiatedActivator()) {
a.start(this.ctx);
- final byte[] result = ByteArray.fileToBytes("src/test/resources/Pcinit.bin");
+ final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
final PcinitiateMessageParser parser = new PcinitiateMessageParser(this.ctx.getObjectHandlerRegistry());
builder.setRequests(reqs);
assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- final ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ final ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
}
public void testUpdMsg() throws IOException, PCEPDeserializerException {
try (StatefulActivator a = new StatefulActivator()) {
a.start(this.ctx);
- byte[] result = ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin");
+ ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
final Stateful02PCUpdateRequestMessageParser parser = new Stateful02PCUpdateRequestMessageParser(this.ctx.getObjectHandlerRegistry());
builder.setUpdates(updates);
assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes()-4), Collections.<Message> emptyList()));
+ ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
- result = ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
final List<Updates> updates1 = Lists.newArrayList();
final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.pcupd.message.pcupd.message.updates.PathBuilder pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.pcupd.message.pcupd.message.updates.PathBuilder();
builder.setUpdates(updates1);
assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes()-4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
}
public void testRptMsg() throws IOException, PCEPDeserializerException {
try (StatefulActivator a = new StatefulActivator()) {
a.start(this.ctx);
- byte[] result = ByteArray.fileToBytes("src/test/resources/PCRpt.1.bin");
+ ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.1.bin"));
final Stateful02PCReportMessageParser parser = new Stateful02PCReportMessageParser(this.ctx.getObjectHandlerRegistry());
builder.setReports(reports);
assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes()-4), Collections.<Message> emptyList()));
+ ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
- result = ByteArray.fileToBytes("src/test/resources/PCRpt.2.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.2.bin"));
final List<Reports> reports1 = Lists.newArrayList();
reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath(
builder.setReports(reports1);
assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes()-4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
- result = ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
final List<Reports> reports2 = Lists.newArrayList();
final PathBuilder pBuilder = new PathBuilder();
builder.setReports(reports2);
assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes()-4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
- result = ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
final List<Reports> reports3 = Lists.newArrayList();
final PathBuilder pBuilder1 = new PathBuilder();
builder.setReports(reports3);
assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes()-4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
}
}
public void testOpenMsg() throws IOException, PCEPDeserializerException {
try (StatefulActivator a = new StatefulActivator()) {
a.start(this.ctx);
- final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin");
+ final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"));
final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry());
final OpenMessageBuilder builder = new OpenMessageBuilder();
builder.setOpen(b.build());
assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- final ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ final ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
}
public void testUpdMsg() throws IOException, PCEPDeserializerException {
try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
a.start(this.ctx);
- byte[] result = ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin");
+ ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(this.ctx.getObjectHandlerRegistry());
builder.setUpdates(updates);
assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
- result = ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
final List<Updates> updates1 = Lists.newArrayList();
final PathBuilder pBuilder1 = new PathBuilder();
builder.setUpdates(updates1);
assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
}
public void testRptMsg() throws IOException, PCEPDeserializerException {
try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
a.start(this.ctx);
- byte[] result = ByteArray.fileToBytes("src/test/resources/PCRpt.1.bin");
+ ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.1.bin"));
final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry());
builder.setReports(reports);
assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
- result = ByteArray.fileToBytes("src/test/resources/PCRpt.2.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.2.bin"));
final List<Reports> reports1 = Lists.newArrayList();
reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath(
builder.setReports(reports1);
assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
- result = ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
final List<Reports> reports2 = Lists.newArrayList();
final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder pBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder();
builder.setReports(reports2);
assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
- result = ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
final List<Reports> reports3 = Lists.newArrayList();
final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder();
builder.setReports(reports3);
assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
}
public void testPcinitMsg() throws IOException, PCEPDeserializerException {
try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
a.start(this.ctx);
- final byte[] result = ByteArray.fileToBytes("src/test/resources/Pcinit.bin");
+ final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(this.ctx.getObjectHandlerRegistry());
builder.setRequests(reqs);
assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- final ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ final ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
}
public void testErrorMsg() throws IOException, PCEPDeserializerException {
try (StatefulActivator a = new StatefulActivator()) {
a.start(this.ctx);
- byte[] result = ByteArray.fileToBytes("src/test/resources/PCErr.3.bin");
+ final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
final ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue(
(short) 1).build();
builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder().setOpen(this.open).build()).build());
assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ final ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
}
}
import org.opendaylight.protocol.pcep.spi.MessageRegistry;
import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.spi.PCEPMessageConstants;
-import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Preconditions;
-import com.google.common.primitives.UnsignedBytes;
/**
* A PCEP message parser which also does validation.
public final class PCEPByteToMessageDecoder extends ByteToMessageDecoder {
private static final Logger LOG = LoggerFactory.getLogger(PCEPByteToMessageDecoder.class);
- private static final int TYPE_SIZE = 1;
-
- private static final int LENGTH_SIZE = 2;
-
private final MessageRegistry registry;
public PCEPByteToMessageDecoder(final MessageRegistry registry) {
@Override
protected void decode(final ChannelHandlerContext ctx, final ByteBuf in, final List<Object> out) throws Exception {
- if (in.readableBytes() == 0) {
+ if (!in.isReadable()) {
LOG.debug("No more content in incoming buffer.");
return;
}
in.markReaderIndex();
LOG.trace("Received to decode: {}", ByteBufUtil.hexDump(in));
- final byte[] bytes = new byte[in.readableBytes()];
- in.readBytes(bytes);
final List<Message> errors = new ArrayList<>();
try {
- out.add(parse(bytes, errors));
+ out.add(parse(in.slice(), errors));
} catch (final PCEPDeserializerException e) {
LOG.debug("Failed to decode protocol message", e);
this.exceptionCaught(ctx, e);
}
}
- private Message parse(final byte[] bytes, final List<Message> errors) throws PCEPDeserializerException {
- final int type = UnsignedBytes.toInt(bytes[1]);
- final int msgLength = ByteArray.bytesToInt(ByteArray.subByte(bytes, TYPE_SIZE + 1, LENGTH_SIZE));
-
- final byte[] msgBody = ByteArray.cutBytes(bytes, TYPE_SIZE + 1 + LENGTH_SIZE);
- if (msgBody.length != msgLength - PCEPMessageConstants.COMMON_HEADER_LENGTH) {
- throw new PCEPDeserializerException("Body size " + msgBody.length + " does not match header size "
+ private Message parse(final ByteBuf buffer, final List<Message> errors) throws PCEPDeserializerException {
+ buffer.readerIndex(buffer.readerIndex() + 1);
+ final int type = buffer.readUnsignedByte();
+ final int msgLength = buffer.readUnsignedShort();
+ final int actualLength = buffer.readableBytes();
+ final ByteBuf msgBody = buffer.slice();
+ if (actualLength != msgLength - PCEPMessageConstants.COMMON_HEADER_LENGTH) {
+ throw new PCEPDeserializerException("Body size " + actualLength + " does not match header size "
+ (msgLength - PCEPMessageConstants.COMMON_HEADER_LENGTH));
}
return this.registry.parseMessage(type, msgBody, errors);
@Test
public void testOpenMsg() throws IOException, PCEPDeserializerException {
- final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin");
+ final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"));
final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry());
final OpenMessageBuilder builder = new OpenMessageBuilder();
builder.setOpen(b.build());
assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- final ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ final ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
@Test
public void testKeepAliveMsg() throws IOException, PCEPDeserializerException {
- final byte[] result = new byte[] {32, 2, 0, 4};
+ final ByteBuf result = Unpooled.wrappedBuffer(new byte[] {32, 2, 0, 4});
final PCEPKeepAliveMessageParser parser = new PCEPKeepAliveMessageParser(this.objectRegistry);
final KeepaliveBuilder builder = new KeepaliveBuilder().setKeepaliveMessage(new KeepaliveMessageBuilder().build());
- assertEquals(builder.build(), parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- final ByteBuf buf = Unpooled.buffer(result.length);
+ assertEquals(builder.build(), parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ final ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(builder.build(), buf);
- assertArrayEquals(result, buf.readBytes(buf.readableBytes()).array());
+ assertArrayEquals(result.array(), buf.array());
}
@Test
public void testCloseMsg() throws IOException, PCEPDeserializerException {
- final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPCloseMessage1.bin");
+ final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPCloseMessage1.bin"));
final PCEPCloseMessageParser parser = new PCEPCloseMessageParser(this.objectRegistry);
final CloseBuilder builder = new CloseBuilder().setCCloseMessage(new CCloseMessageBuilder().setCClose(
new CCloseBuilder().setIgnore(false).setProcessingRule(false).setReason((short) 5).build()).build());
- assertEquals(builder.build(), parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- final ByteBuf buf = Unpooled.buffer(result.length);
+ assertEquals(builder.build(), parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ final ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(builder.build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
@Test
public void testRequestMsg() throws IOException, PCEPDeserializerException {
- byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPRequestMessage1.bin");
+ ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPRequestMessage1.bin"));
final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(this.objectRegistry);
builder.setRequests(reqs1);
assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
- result = ByteArray.fileToBytes("src/test/resources/PCReq.3.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.3.bin"));
final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.Requests> reqs2 = Lists.newArrayList();
final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.RequestsBuilder rBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.RequestsBuilder();
this.svec).build()));
assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
@Test
public void testReplyMsg() throws IOException, PCEPDeserializerException {
// only RP
- byte[] result = ByteArray.fileToBytes("src/test/resources/PCRep.1.bin");
+ ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.1.bin"));
final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(this.objectRegistry);
builder.setReplies(replies1);
assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
// simple Failure
- result = ByteArray.fileToBytes("src/test/resources/PCRep.2.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.2.bin"));
final List<Replies> replies2 = Lists.newArrayList();
rBuilder = new RepliesBuilder();
rBuilder.setRp(this.rpTrue);
builder.setReplies(replies2);
assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
// Failure with attributes
- result = ByteArray.fileToBytes("src/test/resources/PCRep.3.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.3.bin"));
final List<Replies> replies3 = Lists.newArrayList();
rBuilder = new RepliesBuilder();
rBuilder.setRp(this.rpTrue);
builder.setReplies(replies3);
assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
// Success
- result = ByteArray.fileToBytes("src/test/resources/PCRep.5.bin");
+ result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.5.bin"));
final List<Replies> replies4 = Lists.newArrayList();
rBuilder = new RepliesBuilder();
rBuilder.setRp(this.rpTrue);
builder.setReplies(replies4);
assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
@Test
final List<Rps> rps = Lists.newArrayList();
rps.add(new RpsBuilder().setRp(this.rpFalse).build());
- final byte[] result = ByteArray.fileToBytes("src/test/resources/PCNtf.5.bin");
+ final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCNtf.5.bin"));
final PCEPNotificationMessageParser parser = new PCEPNotificationMessageParser(this.objectRegistry);
final PcntfMessageBuilder builder = new PcntfMessageBuilder();
builder.setNotifications(nots);
assertEquals(new PcntfBuilder().setPcntfMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- final ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ final ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcntfBuilder().setPcntfMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
@Test
public void testErrorMsg() throws IOException, PCEPDeserializerException {
- byte[] result = ByteArray.fileToBytes("src/test/resources/PCErr.5.bin");
+ final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"));
final ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue(
(short) 1).build();
builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(),
- parser.parseMessage(ByteArray.cutBytes(result, 4), Collections.<Message> emptyList()));
- ByteBuf buf = Unpooled.buffer(result.length);
+ parser.parseMessage(result.slice(4, result.readableBytes() -4), Collections.<Message> emptyList()));
+ final ByteBuf buf = Unpooled.buffer(result.readableBytes());
parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
- assertArrayEquals(result, buf.array());
+ assertArrayEquals(result.array(), buf.array());
}
}
*/
package org.opendaylight.protocol.pcep.spi;
+import io.netty.buffer.ByteBuf;
+
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.List;
private static final int COMMON_OBJECT_HEADER_LENGTH = 4;
- private static final int OC_F_LENGTH = 1;
- private static final int OT_FLAGS_MF_LENGTH = 1;
- private static final int OBJ_LENGTH_F_LENGTH = 2;
-
private static final int OT_SF_LENGTH = 4;
private static final int FLAGS_SF_LENGTH = 4;
/*
return this.registry.serializeObject(object);
}
- private List<Object> parseObjects(final byte[] bytes) throws PCEPDeserializerException {
- int offset = 0;
- final List<Object> objs = Lists.newArrayList();
- while (bytes.length - offset > 0) {
- if (bytes.length - offset < COMMON_OBJECT_HEADER_LENGTH) {
- throw new PCEPDeserializerException("Too few bytes in passed array. Passed: " + (bytes.length - offset) + " Expected: >= "
+ private List<Object> parseObjects(final ByteBuf bytes) throws PCEPDeserializerException {
+ final List<Object> objs = new ArrayList<>();
+ while (bytes.isReadable()) {
+ if (bytes.readableBytes() < COMMON_OBJECT_HEADER_LENGTH) {
+ throw new PCEPDeserializerException("Too few bytes in passed array. Passed: " + bytes.readableBytes() + " Expected: >= "
+ COMMON_OBJECT_HEADER_LENGTH + ".");
}
+ final int objClass = bytes.readUnsignedByte();
- final int objClass = UnsignedBytes.toInt(bytes[offset]);
-
- offset += OC_F_LENGTH;
-
- final int objType = UnsignedBytes.toInt(ByteArray.copyBitsRange(bytes[offset], OT_SF_OFFSET, OT_SF_LENGTH));
-
- final byte[] flagsBytes = { ByteArray.copyBitsRange(bytes[offset], FLAGS_SF_OFFSET, FLAGS_SF_LENGTH) };
-
+ byte flagsByte = bytes.readByte();
+ final int objType = UnsignedBytes.toInt(ByteArray.copyBitsRange(flagsByte, OT_SF_OFFSET, OT_SF_LENGTH));
+ final byte[] flagsBytes = { ByteArray.copyBitsRange(flagsByte, FLAGS_SF_OFFSET, FLAGS_SF_LENGTH) };
final BitSet flags = ByteArray.bytesToBitSet(flagsBytes);
- offset += OT_FLAGS_MF_LENGTH;
-
- final int objLength = ByteArray.bytesToInt(ByteArray.subByte(bytes, offset, OBJ_LENGTH_F_LENGTH));
+ final int objLength = bytes.readUnsignedShort();
- if (bytes.length - offset < objLength - COMMON_OBJECT_HEADER_LENGTH) {
- throw new PCEPDeserializerException("Too few bytes in passed array. Passed: " + (bytes.length - offset) + " Expected: >= "
+ if (bytes.readableBytes() < objLength - COMMON_OBJECT_HEADER_LENGTH) {
+ throw new PCEPDeserializerException("Too few bytes in passed array. Passed: " + bytes.readableBytes() + " Expected: >= "
+ objLength + ".");
}
-
- offset += OBJ_LENGTH_F_LENGTH;
-
// copy bytes for deeper parsing
- final byte[] bytesToPass = ByteArray.subByte(bytes, offset, objLength - COMMON_OBJECT_HEADER_LENGTH);
-
- offset += objLength - COMMON_OBJECT_HEADER_LENGTH;
+ final ByteBuf bytesToPass = bytes.slice(bytes.readerIndex(), objLength - COMMON_OBJECT_HEADER_LENGTH);
final ObjectHeader header = new ObjectHeaderImpl(flags.get(P_FLAG_OFFSET), flags.get(I_FLAG_OFFSET));
// parseObject is required to return null for P=0 errored objects
- final Object o = this.registry.parseObject(objClass, objType, header, bytesToPass);
+ // FIXME: change this to ByteBuf
+ final Object o = this.registry.parseObject(objClass, objType, header, ByteArray.readAllBytes(bytesToPass));
if (o != null) {
objs.add(o);
}
+ bytes.readerIndex(bytes.readerIndex() + objLength- COMMON_OBJECT_HEADER_LENGTH);
}
return objs;
protected abstract Message validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException;
@Override
- public final Message parseMessage(final byte[] buffer, final List<Message> errors) throws PCEPDeserializerException {
+ public final Message parseMessage(final ByteBuf buffer, final List<Message> errors) throws PCEPDeserializerException {
Preconditions.checkNotNull(buffer, "Buffer may not be null");
// Parse objects first
*/
package org.opendaylight.protocol.pcep.spi;
+import io.netty.buffer.ByteBuf;
+
import java.util.List;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
public interface MessageParser {
- Message parseMessage(byte[] buffer, List<Message> errors) throws PCEPDeserializerException;
+ Message parseMessage(final ByteBuf buffer, final List<Message> errors) throws PCEPDeserializerException;
}
/**
* Finds parser for given message type in the registry. Delegates parsing to found parser.
* @param type message type, key in parser registry
- * @param buffer message raw binary value to be parsed
+ * @param buffer message wrapped in ByteBuf
* @param errors list of error messages, that is filled during parsing
* @return null if the parser for this message could not be found
* @throws PCEPDeserializerException if the parsing did not succeed
*/
- Message parseMessage(int messageType, byte[] buffer, List<Message> errors) throws PCEPDeserializerException;
+ Message parseMessage(final int messageType, final ByteBuf buffer, final List<Message> errors) throws PCEPDeserializerException;
/**
* Find serializer for given message. Delegates parsing to found serializer.
* @param message to be parsed
* @param buffer byte buffer that will be filled with serialized message
*/
- void serializeMessage(Message message, ByteBuf buffer);
+ void serializeMessage(final Message message, final ByteBuf buffer);
}
import org.opendaylight.protocol.util.Values;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
import org.opendaylight.yangtools.yang.binding.DataContainer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.base.Preconditions;
public final class SimpleMessageRegistry implements MessageRegistry {
+ private static final Logger LOG = LoggerFactory.getLogger(SimpleMessageRegistry.class);
+
private final HandlerRegistry<DataContainer, MessageParser, MessageSerializer> handlers = new HandlerRegistry<>();
public AutoCloseable registerMessageParser(final int messageType, final MessageParser parser) {
}
@Override
- public Message parseMessage(int messageType, byte[] buffer, List<Message> errors) throws PCEPDeserializerException {
+ public Message parseMessage(final int messageType, final ByteBuf buffer, final List<Message> errors) throws PCEPDeserializerException {
Preconditions.checkArgument(messageType >= 0 && messageType <= Values.UNSIGNED_BYTE_MAX_VALUE);
final MessageParser parser = this.handlers.getParser(messageType);
if (parser == null) {
+ LOG.warn("PCEP parser for message type {} is not registered.", messageType);
return null;
}
return parser.parseMessage(buffer, errors);
public void serializeMessage(Message message, ByteBuf buffer) {
final MessageSerializer serializer = this.handlers.getSerializer(message.getImplementedInterface());
if (serializer == null) {
+ LOG.warn("PCEP serializer for message type {} is not registered.", message.getClass());
return;
}
serializer.serializeMessage(message, buffer);