From dda945803a156d4d93bf3b9b974eb03ce7312750 Mon Sep 17 00:00:00 2001 From: Dana Kutenicsova Date: Fri, 21 Mar 2014 14:48:29 +0100 Subject: [PATCH] BUG-64 : initial rewrite, MessageRegistry. Change-Id: I6aaeb69545f05204c7de3399ce95fa061960e0fa Signed-off-by: Dana Kutenicsova --- .../initiated00/PcinitiateMessageParser.java | 6 ++- .../Stateful02PCReplyMessageParser.java | 6 ++- .../Stateful02PCReportMessageParser.java | 6 ++- ...tateful02PCUpdateRequestMessageParser.java | 6 ++- .../protocol/pcep/ietf/PCEPMessageTest.java | 2 +- .../src/test/resources/Pcinit.bin | Bin 52 -> 56 bytes .../CInitiated00PCInitiateMessageParser.java | 6 ++- .../Stateful07ErrorMessageParser.java | 6 ++- .../Stateful07PCReportMessageParser.java | 6 ++- ...tateful07PCUpdateRequestMessageParser.java | 6 ++- .../protocol/pcep/ietf/PCEPValidatorTest.java | 42 +++++++++--------- .../src/test/resources/PCEPCloseMessage1.bin | Bin 8 -> 12 bytes .../src/test/resources/PCEPOpenMessage1.bin | Bin 16 -> 20 bytes .../test/resources/PCEPRequestMessage1.bin | Bin 24 -> 28 bytes .../src/test/resources/PCErr.3.bin | Bin 16 -> 20 bytes .../src/test/resources/PCErr.5.bin | Bin 20 -> 24 bytes .../src/test/resources/PCNtf.5.bin | Bin 60 -> 64 bytes .../src/test/resources/PCRep.1.bin | Bin 12 -> 16 bytes .../src/test/resources/PCRep.2.bin | Bin 32 -> 36 bytes .../src/test/resources/PCRep.3.bin | Bin 60 -> 64 bytes .../src/test/resources/PCRep.5.bin | Bin 68 -> 72 bytes .../src/test/resources/PCReq.3.bin | Bin 56 -> 60 bytes .../src/test/resources/PCRpt.1.bin | Bin 8 -> 12 bytes .../src/test/resources/PCRpt.2.bin | Bin 36 -> 40 bytes .../src/test/resources/PCRpt.3.bin | Bin 88 -> 92 bytes .../src/test/resources/PCRpt.5.bin | Bin 176 -> 180 bytes .../src/test/resources/PCUpd.2.bin | Bin 48 -> 52 bytes .../src/test/resources/PCUpd.5.bin | Bin 96 -> 100 bytes .../src/test/resources/Pcinit.bin | Bin 68 -> 72 bytes .../pcep/impl/PCEPByteToMessageDecoder.java | 12 +++-- .../pcep/impl/PCEPDispatcherImpl.java | 4 +- .../pcep/impl/PCEPHandlerFactory.java | 6 +-- .../pcep/impl/PCEPMessageToByteEncoder.java | 31 +++---------- .../impl/message/PCEPCloseMessageParser.java | 6 ++- .../impl/message/PCEPErrorMessageParser.java | 6 ++- .../message/PCEPKeepAliveMessageParser.java | 6 ++- .../PCEPNotificationMessageParser.java | 6 ++- .../impl/message/PCEPOpenMessageParser.java | 7 ++- .../impl/message/PCEPReplyMessageParser.java | 6 ++- .../message/PCEPRequestMessageParser.java | 8 +++- .../pcep/spi/MessageHandlerRegistry.java | 15 ------- .../protocol/pcep/spi/MessageRegistry.java | 33 ++++++++++++++ .../protocol/pcep/spi/MessageUtil.java | 34 ++++++++++++++ .../spi/PCEPExtensionConsumerContext.java | 2 +- .../pcep/spi}/PCEPMessageConstants.java | 4 +- ...gistry.java => SimpleMessageRegistry.java} | 25 ++++++++--- .../SimplePCEPExtensionProviderContext.java | 6 +-- 47 files changed, 206 insertions(+), 103 deletions(-) mode change 100755 => 100644 pcep/ietf-stateful02/src/test/resources/Pcinit.bin mode change 100755 => 100644 pcep/ietf-stateful07/src/test/resources/PCRpt.1.bin mode change 100755 => 100644 pcep/ietf-stateful07/src/test/resources/Pcinit.bin delete mode 100644 pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageHandlerRegistry.java create mode 100644 pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageRegistry.java create mode 100644 pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageUtil.java rename pcep/{impl/src/main/java/org/opendaylight/protocol/pcep/impl => spi/src/main/java/org/opendaylight/protocol/pcep/spi}/PCEPMessageConstants.java (86%) rename pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/{SimpleMessageHandlerRegistry.java => SimpleMessageRegistry.java} (65%) diff --git a/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/crabbe/initiated00/PcinitiateMessageParser.java b/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/crabbe/initiated00/PcinitiateMessageParser.java index 45184711fd..36e2332c15 100644 --- a/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/crabbe/initiated00/PcinitiateMessageParser.java +++ b/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/crabbe/initiated00/PcinitiateMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.crabbe.initiated00; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.Pcinitiate; @@ -42,12 +44,13 @@ public class PcinitiateMessageParser extends AbstractMessageParser { } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof Pcinitiate)) { throw new IllegalArgumentException("Wrong instance of Message. Passed instance of " + message.getClass() + ". Needed PcinitiateMessage."); } final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated._00.rev140113.pcinitiate.message.PcinitiateMessage init = ((Pcinitiate) message).getPcinitiateMessage(); + ByteBuf buffer = Unpooled.buffer(); for (final Requests req : init.getRequests()) { buffer.writeBytes(serializeObject(req.getEndpointsObj())); buffer.writeBytes(serializeObject(req.getLspa())); @@ -63,6 +66,7 @@ public class PcinitiateMessageParser extends AbstractMessageParser { } } } + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCReplyMessageParser.java b/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCReplyMessageParser.java index a395f2d72a..9bf9c1da0d 100644 --- a/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCReplyMessageParser.java +++ b/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCReplyMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.ietf.stateful02; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.impl.message.PCEPReplyMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPErrors; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.stateful._02.rev140110.Replies1; @@ -47,7 +49,7 @@ public final class Stateful02PCReplyMessageParser extends PCEPReplyMessageParser } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof Pcrep)) { throw new IllegalArgumentException("Wrong instance of Message. Passed instance of " + message.getClass() + ". Nedded PcrepMessage."); @@ -56,6 +58,7 @@ public final class Stateful02PCReplyMessageParser extends PCEPReplyMessageParser if (repMsg.getReplies() == null || repMsg.getReplies().isEmpty()) { throw new IllegalArgumentException("Replies cannot be null or empty."); } + ByteBuf buffer = Unpooled.buffer(); for (final Replies reply : repMsg.getReplies()) { if (reply.getRp() == null) { throw new IllegalArgumentException("Reply must contain RP object."); @@ -107,6 +110,7 @@ public final class Stateful02PCReplyMessageParser extends PCEPReplyMessageParser } } } + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCReportMessageParser.java b/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCReportMessageParser.java index 993bed5822..d2637b8842 100644 --- a/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCReportMessageParser.java +++ b/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCReportMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.ietf.stateful02; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.PCEPErrors; @@ -47,13 +49,14 @@ public final class Stateful02PCReportMessageParser extends AbstractMessageParser } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof Pcrpt)) { throw new IllegalArgumentException("Wrong instance of Message. Passed instance of " + message.getClass() + ". Nedded PcrptMessage."); } final Pcrpt msg = (Pcrpt) message; final List reports = msg.getPcrptMessage().getReports(); + ByteBuf buffer = Unpooled.buffer(); for (final Reports report : reports) { buffer.writeBytes(serializeObject(report.getLsp())); final Path p = report.getPath(); @@ -77,6 +80,7 @@ public final class Stateful02PCReportMessageParser extends AbstractMessageParser } } } + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCUpdateRequestMessageParser.java b/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCUpdateRequestMessageParser.java index fb00c4f374..4617ef5b0e 100644 --- a/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCUpdateRequestMessageParser.java +++ b/pcep/ietf-stateful02/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful02/Stateful02PCUpdateRequestMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.ietf.stateful02; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.PCEPErrors; @@ -47,13 +49,14 @@ public final class Stateful02PCUpdateRequestMessageParser extends AbstractMessag } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof Pcupd)) { throw new IllegalArgumentException("Wrong instance of PCEPMessage. Passed instance of " + message.getClass() + ". Nedded PcupdMessage."); } final Pcupd msg = (Pcupd) message; final List updates = msg.getPcupdMessage().getUpdates(); + ByteBuf buffer = Unpooled.buffer(); for (final Updates update : updates) { buffer.writeBytes(serializeObject(update.getLsp())); final Path p = update.getPath(); @@ -75,6 +78,7 @@ public final class Stateful02PCUpdateRequestMessageParser extends AbstractMessag } } } + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/ietf-stateful02/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPMessageTest.java b/pcep/ietf-stateful02/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPMessageTest.java index a56c23710c..e5e9829bd7 100644 --- a/pcep/ietf-stateful02/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPMessageTest.java +++ b/pcep/ietf-stateful02/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPMessageTest.java @@ -133,7 +133,7 @@ public class PCEPMessageTest { builder.setRequests(reqs); assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); final ByteBuf buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); diff --git a/pcep/ietf-stateful02/src/test/resources/Pcinit.bin b/pcep/ietf-stateful02/src/test/resources/Pcinit.bin old mode 100755 new mode 100644 index 4f931c4dc31180f042262c6108fce98be7cee9cd..bd60a11ae81d28336e4d6277d91fffcd9107ce0b GIT binary patch delta 9 QcmXr9U{T; rps = ((RequestCase) err.getErrorType()).getRequest().getRps(); @@ -82,6 +85,7 @@ public final class Stateful07ErrorMessageParser extends PCEPErrorMessageParser { if (err.getErrorType() instanceof SessionCase) { buffer.writeBytes(serializeObject(((SessionCase) err.getErrorType()).getSession().getOpen())); } + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java index b00bc2a84f..bbf245c6d5 100644 --- a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java +++ b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCReportMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.ietf.stateful07; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.PCEPErrors; @@ -49,13 +51,14 @@ public final class Stateful07PCReportMessageParser extends AbstractMessageParser } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof Pcrpt)) { throw new IllegalArgumentException("Wrong instance of Message. Passed instance of " + message.getClass() + ". Nedded PcrptMessage."); } final Pcrpt msg = (Pcrpt) message; final List reports = msg.getPcrptMessage().getReports(); + ByteBuf buffer = Unpooled.buffer(); for (final Reports report : reports) { if (report.getSrp() != null) { buffer.writeBytes(serializeObject(report.getSrp())); @@ -83,6 +86,7 @@ public final class Stateful07PCReportMessageParser extends AbstractMessageParser } } } + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCUpdateRequestMessageParser.java b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCUpdateRequestMessageParser.java index 5b9992721e..132f3ec835 100644 --- a/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCUpdateRequestMessageParser.java +++ b/pcep/ietf-stateful07/src/main/java/org/opendaylight/protocol/pcep/ietf/stateful07/Stateful07PCUpdateRequestMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.ietf.stateful07; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.PCEPErrors; @@ -48,13 +50,14 @@ public final class Stateful07PCUpdateRequestMessageParser extends AbstractMessag } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof Pcupd)) { throw new IllegalArgumentException("Wrong instance of PCEPMessage. Passed instance of " + message.getClass() + ". Nedded PcupdMessage."); } final Pcupd msg = (Pcupd) message; final List updates = msg.getPcupdMessage().getUpdates(); + ByteBuf buffer = Unpooled.buffer(); for (final Updates update : updates) { buffer.writeBytes(serializeObject(update.getSrp())); buffer.writeBytes(serializeObject(update.getLsp())); @@ -77,6 +80,7 @@ public final class Stateful07PCUpdateRequestMessageParser extends AbstractMessag } } } + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java b/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java index 4dd3464e78..31ec987b00 100644 --- a/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java +++ b/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java @@ -341,7 +341,7 @@ public class PCEPValidatorTest { builder.setOpen(b.build()); assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); final ByteBuf buf = Unpooled.buffer(result.length); parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -350,14 +350,14 @@ public class PCEPValidatorTest { @Test public void testKeepAliveMsg() throws IOException, PCEPDeserializerException { - final byte[] result = new byte[] {}; + final byte[] result = 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(result, Collections. emptyList())); + assertEquals(builder.build(), parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); final ByteBuf buf = Unpooled.buffer(result.length); parser.serializeMessage(builder.build(), buf); - assertArrayEquals(result, buf.array()); + assertArrayEquals(result, buf.readBytes(buf.readableBytes()).array()); } @Test @@ -368,7 +368,7 @@ public class PCEPValidatorTest { 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(result, Collections. emptyList())); + assertEquals(builder.build(), parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); final ByteBuf buf = Unpooled.buffer(result.length); parser.serializeMessage(builder.build(), buf); assertArrayEquals(result, buf.array()); @@ -389,7 +389,7 @@ public class PCEPValidatorTest { builder.setRequests(reqs1); assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); ByteBuf buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf); @@ -411,7 +411,7 @@ public class PCEPValidatorTest { this.svec).build())); assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -433,7 +433,7 @@ public class PCEPValidatorTest { builder.setReplies(replies1); assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); ByteBuf buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -451,7 +451,7 @@ public class PCEPValidatorTest { builder.setReplies(replies2); assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -467,7 +467,7 @@ public class PCEPValidatorTest { builder.setReplies(replies3); assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -490,7 +490,7 @@ public class PCEPValidatorTest { builder.setReplies(replies4); assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -514,7 +514,7 @@ public class PCEPValidatorTest { builder.setUpdates(updates); assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); ByteBuf buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -530,7 +530,7 @@ public class PCEPValidatorTest { builder.setUpdates(updates1); assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -552,7 +552,7 @@ public class PCEPValidatorTest { builder.setReports(reports); assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); ByteBuf buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -566,7 +566,7 @@ public class PCEPValidatorTest { builder.setReports(reports1); assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -583,7 +583,7 @@ public class PCEPValidatorTest { builder.setReports(reports2); assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -601,7 +601,7 @@ public class PCEPValidatorTest { builder.setReports(reports3); assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -630,7 +630,7 @@ public class PCEPValidatorTest { builder.setRequests(reqs); assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); final ByteBuf buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -674,7 +674,7 @@ public class PCEPValidatorTest { builder.setNotifications(nots); assertEquals(new PcntfBuilder().setPcntfMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); final ByteBuf buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcntfBuilder().setPcntfMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -699,7 +699,7 @@ public class PCEPValidatorTest { builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder().setOpen(this.open).build()).build()); assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); ByteBuf buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); @@ -717,7 +717,7 @@ public class PCEPValidatorTest { builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build()); assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); + parser.parseMessage(ByteArray.cutBytes(result, 4), Collections. emptyList())); buf = Unpooled.buffer(result.length); parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); assertArrayEquals(result, buf.array()); diff --git a/pcep/ietf-stateful07/src/test/resources/PCEPCloseMessage1.bin b/pcep/ietf-stateful07/src/test/resources/PCEPCloseMessage1.bin index 29dab1a54dd6109d95c9753026bfdf9e6dfb027d..e7f5a7d568c895c02dcdc3cee8c2c17698ab5cda 100644 GIT binary patch literal 12 TcmY#jXW-!%VBlb2U| diff --git a/pcep/ietf-stateful07/src/test/resources/PCEPOpenMessage1.bin b/pcep/ietf-stateful07/src/test/resources/PCEPOpenMessage1.bin index 388f09874fcf75203cea354a1d1ff1a19e87eb7b..53b3abca19be0ada54d9c62d6144056b7cc7ead3 100644 GIT binary patch literal 20 bcmY#jWDsE#U=UD{t6*dhU|?ZjU|<9Q4buT5 literal 16 XcmZP+U=UD{t6*dhU|?ZjU|<9Q3FrXs diff --git a/pcep/ietf-stateful07/src/test/resources/PCEPRequestMessage1.bin b/pcep/ietf-stateful07/src/test/resources/PCEPRequestMessage1.bin index 0f62209f80a366037f638e9263157f8332009fad..73765df00ac79fd7baa32694a1ba24d4a1468acf 100644 GIT binary patch delta 9 Qcmb1;VNqaakeMI>00cMzAOHXW literal 24 XcmZP)V&Gw5U{C~NE*2pBKNJ7}D$@vN diff --git a/pcep/ietf-stateful07/src/test/resources/PCErr.3.bin b/pcep/ietf-stateful07/src/test/resources/PCErr.3.bin index 7b95d6b9f68bc77e605c1bbb56c33fda603c4621..ce75a3bffa1f21ef4595ef3ceb3b7503807a0fa9 100644 GIT binary patch literal 20 ZcmY#jV-VpLVBlb2U}j_l(h7`>3;+kt0G|K= literal 16 Vcmd-TVBlb2U}j_l(h7`>3;+X!0A&CG diff --git a/pcep/ietf-stateful07/src/test/resources/PCErr.5.bin b/pcep/ietf-stateful07/src/test/resources/PCErr.5.bin index 2b64829c55e6abf1cec10bacbf7f3fb6c30ef418..c1ecd9af3a7c95723443b30400913fdb07074c9c 100644 GIT binary patch delta 9 QcmWfUU{PRWkeDC>00Z*@6951J literal 20 ZcmZP)VBle3U{C~NE?xl!4h9BhMgRpy0CNBU diff --git a/pcep/ietf-stateful07/src/test/resources/PCNtf.5.bin b/pcep/ietf-stateful07/src/test/resources/PCNtf.5.bin index 77aa81d30d9c126fac9c0942cf3abd9e99b40afe..166578cd55d3e20dfd229921156fb92b4fed6f3e 100644 GIT binary patch delta 9 QcmcC;naE-T00b-nP5=M^ diff --git a/pcep/ietf-stateful07/src/test/resources/PCRep.1.bin b/pcep/ietf-stateful07/src/test/resources/PCRep.1.bin index c1e2d5e676074dfa9c96b565bbdbc84d0445a47b..6e0e998b898594461dc0e3b2c4a537577a3d846b 100644 GIT binary patch literal 16 VcmY#jVGv*vV&Gw5U{C~NE&v4;0Du4h literal 12 RcmZP)V&Gw5U{C~NE&u`r089V? diff --git a/pcep/ietf-stateful07/src/test/resources/PCRep.2.bin b/pcep/ietf-stateful07/src/test/resources/PCRep.2.bin index 848b6b1b6121f1b8e294b4e771b0f4b9bc48c777..1f5027ad7b59c867e67c1d4814b47d5b9dcec143 100644 GIT binary patch delta 9 QcmY#TVNqaVP??|r00iX$K>z>% literal 32 bcmZP)V&Gw5U{C~NE+!;4vj77JP>cZp4E6xB diff --git a/pcep/ietf-stateful07/src/test/resources/PCRep.3.bin b/pcep/ietf-stateful07/src/test/resources/PCRep.3.bin index dbf28ee4d5ab83d16e44d3b058c294ee432135b0..08d8b7a8d600f15b0ad340547475f725170b8677 100644 GIT binary patch delta 9 QcmcCb%7 delta 5 McmZ>;naE-T00b-nP5=M^ diff --git a/pcep/ietf-stateful07/src/test/resources/PCRep.5.bin b/pcep/ietf-stateful07/src/test/resources/PCRep.5.bin index 42d6e04fa41cee0121a383d68f7f5fcc05147b3e..6f9eb3ec503dabef90d1f5e28323231aa4f0c2a7 100644 GIT binary patch delta 9 QcmZ?qU{PRU@R;BN00-Ft(EtDd delta 5 McmeZpnaJV-00eviW&i*H diff --git a/pcep/ietf-stateful07/src/test/resources/PCReq.3.bin b/pcep/ietf-stateful07/src/test/resources/PCReq.3.bin index 91a5ae8210668ed055a045c7e84ae83ae7dbef77..2da667e36467958437adfc8c85692007549698f9 100644 GIT binary patch delta 9 QcmcDpVNqaau$f>100!6rpa1{> delta 5 McmcDqn8;!Q00aa9LI3~& diff --git a/pcep/ietf-stateful07/src/test/resources/PCRpt.1.bin b/pcep/ietf-stateful07/src/test/resources/PCRpt.1.bin old mode 100755 new mode 100644 index 28495dde9b1a4a967cc45894b78e2427f2462047..b1862e86719440ac140a5c3bcdd6ff7cd3bb3144 GIT binary patch literal 12 RcmY%3V&G8_VBlZ?0ssU40B-;Q literal 8 NcmY!oVBlZ?0ssM^0672v diff --git a/pcep/ietf-stateful07/src/test/resources/PCRpt.2.bin b/pcep/ietf-stateful07/src/test/resources/PCRpt.2.bin index 8057aa3bc4efca45f497fd1f80d8c21527e72cf3..8fa3461231acd535fe33664dcf87088bff003175 100644 GIT binary patch delta 9 QcmY$r{aJb?nI diff --git a/pcep/ietf-stateful07/src/test/resources/PCRpt.3.bin b/pcep/ietf-stateful07/src/test/resources/PCRpt.3.bin index 94a644384558a708ec51c883057379fedc5d8592..ffcec33988a2dfef30e119c686620d35c3a486a7 100644 GIT binary patch delta 9 Qcma!uVNu{>h?x)p012A{CjbBd delta 5 Mcma!vn8*?V00l$=q5uE@ diff --git a/pcep/ietf-stateful07/src/test/resources/PCRpt.5.bin b/pcep/ietf-stateful07/src/test/resources/PCRpt.5.bin index 4ba5c9f437b12a96525282fc0f46c6ab2bb1d275..4385a672352750f1642683ff3d461d58cc43318d 100644 GIT binary patch delta 11 ScmdnMxP_5Lfs0|wgbe@^`vZvp delta 10 QcmdnOxPftEOau@C02TKG@c;k- diff --git a/pcep/ietf-stateful07/src/test/resources/PCUpd.2.bin b/pcep/ietf-stateful07/src/test/resources/PCUpd.2.bin index dc5a3adcbfacb98853f57c427ebed31f2f28344c..6a7b5925539c68a892f1bbd6aece2f3c47491cf6 100644 GIT binary patch delta 9 QcmXpoVNu{_FqvQg00vkAhyVZp delta 5 McmXppn8;!P00XoEDgXcg diff --git a/pcep/ietf-stateful07/src/test/resources/PCUpd.5.bin b/pcep/ietf-stateful07/src/test/resources/PCUpd.5.bin index 1b92799235fb8451018b048a4bcc0a51807be0fe..0e8404e6f5481d68db5a2a92e0e14ac8791e8872 100644 GIT binary patch delta 9 QcmYdDVNu{_NSTlT018L~NB{r; delta 5 McmYdEn8=a<00oo*x&QzG diff --git a/pcep/ietf-stateful07/src/test/resources/Pcinit.bin b/pcep/ietf-stateful07/src/test/resources/Pcinit.bin old mode 100755 new mode 100644 index 373d516c6222907a7f191a9b3cfc012f9d168275..81f785c229895adc8fbeff32ce1c0a0edfae1b55 GIT binary patch delta 9 QcmZ?qU{T;<@R;BN00;pA*#H0l delta 5 McmeZpnaJV-00eviW&i*H diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPByteToMessageDecoder.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPByteToMessageDecoder.java index 6a8f930a77..288452f86f 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPByteToMessageDecoder.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPByteToMessageDecoder.java @@ -15,8 +15,9 @@ import io.netty.handler.codec.ByteToMessageDecoder; import java.util.ArrayList; import java.util.List; -import org.opendaylight.protocol.pcep.spi.MessageHandlerRegistry; +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; @@ -35,9 +36,9 @@ public final class PCEPByteToMessageDecoder extends ByteToMessageDecoder { private static final int LENGTH_SIZE = 2; - private final MessageHandlerRegistry registry; + private final MessageRegistry registry; - public PCEPByteToMessageDecoder(final MessageHandlerRegistry registry) { + public PCEPByteToMessageDecoder(final MessageRegistry registry) { this.registry = Preconditions.checkNotNull(registry); } @@ -81,9 +82,6 @@ public final class PCEPByteToMessageDecoder extends ByteToMessageDecoder { throw new PCEPDeserializerException("Body size " + msgBody.length + " does not match header size " + (msgLength - PCEPMessageConstants.COMMON_HEADER_LENGTH)); } - - final Message msg = this.registry.getMessageParser(type).parseMessage(msgBody, errors); - LOG.debug("Message was parsed. {}", msg); - return msg; + return this.registry.parseMessage(type, msgBody, errors); } } diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPDispatcherImpl.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPDispatcherImpl.java index e87235bea5..fec0f2168f 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPDispatcherImpl.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPDispatcherImpl.java @@ -19,7 +19,7 @@ import org.opendaylight.protocol.framework.SessionListenerFactory; import org.opendaylight.protocol.framework.SessionNegotiatorFactory; import org.opendaylight.protocol.pcep.PCEPDispatcher; import org.opendaylight.protocol.pcep.PCEPSessionListener; -import org.opendaylight.protocol.pcep.spi.MessageHandlerRegistry; +import org.opendaylight.protocol.pcep.spi.MessageRegistry; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message; import com.google.common.base.Preconditions; @@ -35,7 +35,7 @@ public class PCEPDispatcherImpl extends AbstractDispatcher negotiatorFactory, EventLoopGroup bossGroup, EventLoopGroup workerGroup) { super(bossGroup, workerGroup); diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPHandlerFactory.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPHandlerFactory.java index 43d5f80a23..a336cd7721 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPHandlerFactory.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPHandlerFactory.java @@ -10,7 +10,7 @@ package org.opendaylight.protocol.pcep.impl; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelOutboundHandler; -import org.opendaylight.protocol.pcep.spi.MessageHandlerRegistry; +import org.opendaylight.protocol.pcep.spi.MessageRegistry; import com.google.common.base.Preconditions; @@ -18,10 +18,10 @@ import com.google.common.base.Preconditions; * PCEP specific factory for protocol inbound/outbound handlers. */ public final class PCEPHandlerFactory { - private final MessageHandlerRegistry registry; + private final MessageRegistry registry; private final ChannelOutboundHandler encoder; - public PCEPHandlerFactory(final MessageHandlerRegistry registry) { + public PCEPHandlerFactory(final MessageRegistry registry) { this.registry = Preconditions.checkNotNull(registry); this.encoder = new PCEPMessageToByteEncoder(registry); } diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPMessageToByteEncoder.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPMessageToByteEncoder.java index 56f8a60643..83ebdf737e 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPMessageToByteEncoder.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPMessageToByteEncoder.java @@ -8,52 +8,35 @@ package org.opendaylight.protocol.pcep.impl; import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; import io.netty.channel.ChannelHandler.Sharable; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.MessageToByteEncoder; -import org.opendaylight.protocol.pcep.spi.MessageHandlerRegistry; -import org.opendaylight.protocol.pcep.spi.MessageSerializer; +import org.opendaylight.protocol.pcep.spi.MessageRegistry; 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; /** * */ @Sharable public final class PCEPMessageToByteEncoder extends MessageToByteEncoder { + private static final Logger LOG = LoggerFactory.getLogger(PCEPMessageToByteEncoder.class); - private static final int VERSION_SF_LENGTH = 3; - private final MessageHandlerRegistry registry; - public PCEPMessageToByteEncoder(final MessageHandlerRegistry registry) { + private final MessageRegistry registry; + + public PCEPMessageToByteEncoder(final MessageRegistry registry) { this.registry = Preconditions.checkNotNull(registry); } @Override protected void encode(final ChannelHandlerContext ctx, final Message msg, final ByteBuf out) throws Exception { Preconditions.checkNotNull(msg); - LOG.debug("Sent to encode : {}", msg); - - final ByteBuf body = Unpooled.buffer(); - final MessageSerializer serializer = this.registry.getMessageSerializer(msg); - LOG.trace("Choosen serializer {}", serializer); - serializer.serializeMessage(msg, body); - - final int msgLength = body.readableBytes() + PCEPMessageConstants.COMMON_HEADER_LENGTH; - final byte[] header = new byte[] { - UnsignedBytes.checkedCast(PCEPMessageConstants.PCEP_VERSION << (Byte.SIZE - VERSION_SF_LENGTH)), - UnsignedBytes.checkedCast(serializer.getMessageType()), - UnsignedBytes.checkedCast(msgLength / 256), - UnsignedBytes.checkedCast(msgLength % 256) - }; - Preconditions.checkState(header.length == PCEPMessageConstants.COMMON_HEADER_LENGTH); - out.writeBytes(header); - out.writeBytes(body); + this.registry.serializeMessage(msg, out); + LOG.debug("Encoded : {}", msg); } } diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPCloseMessageParser.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPCloseMessageParser.java index a700f467f0..baad9f484d 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPCloseMessageParser.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPCloseMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.impl.message; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Close; @@ -35,7 +37,7 @@ public class PCEPCloseMessageParser extends AbstractMessageParser { } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof CloseMessage)) { throw new IllegalArgumentException("Wrong instance of Message. Passed instance of " + message.getClass() + ". Nedded CloseMessage."); @@ -45,7 +47,9 @@ public class PCEPCloseMessageParser extends AbstractMessageParser { if (close.getCClose() == null) { throw new IllegalArgumentException("Close Object must be present in Close Message."); } + ByteBuf buffer = Unpooled.buffer(); buffer.writeBytes(serializeObject(close.getCClose())); + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPErrorMessageParser.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPErrorMessageParser.java index a69d128cb1..5d00784319 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPErrorMessageParser.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPErrorMessageParser.java @@ -8,11 +8,13 @@ package org.opendaylight.protocol.pcep.impl.message; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.ArrayList; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.PCEPErrors; @@ -48,7 +50,7 @@ public class PCEPErrorMessageParser extends AbstractMessageParser { } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof PcerrMessage)) { throw new IllegalArgumentException("Wrong instance of Message. Passed instance " + message.getClass() + ". Nedded ErrorMessage."); @@ -58,6 +60,7 @@ public class PCEPErrorMessageParser extends AbstractMessageParser { if (err.getErrors() == null || err.getErrors().isEmpty()) { throw new IllegalArgumentException("Errors should not be empty."); } + ByteBuf buffer = Unpooled.buffer(); if (err.getErrorType() instanceof RequestCase) { final List rps = ((RequestCase) err.getErrorType()).getRequest().getRps(); for (final Rps r : rps) { @@ -71,6 +74,7 @@ public class PCEPErrorMessageParser extends AbstractMessageParser { if (err.getErrorType() instanceof SessionCase) { buffer.writeBytes(serializeObject(((SessionCase) err.getErrorType()).getSession().getOpen())); } + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPKeepAliveMessageParser.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPKeepAliveMessageParser.java index 81aaded51f..c92dbd1a12 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPKeepAliveMessageParser.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPKeepAliveMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.impl.message; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.KeepaliveBuilder; @@ -32,12 +34,12 @@ public class PCEPKeepAliveMessageParser extends AbstractMessageParser { } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof KeepaliveMessage)) { throw new IllegalArgumentException("Wrong instance of Message. Passed instance of " + message.getClass() + ". Need KeepaliveMessage."); } - buffer.writeBytes(new byte[0]); + MessageUtil.formatMessage(TYPE, Unpooled.EMPTY_BUFFER, out); } @Override diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPNotificationMessageParser.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPNotificationMessageParser.java index ed8a40d496..a6df440077 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPNotificationMessageParser.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPNotificationMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.impl.message; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.PCEPErrors; @@ -41,13 +43,14 @@ public class PCEPNotificationMessageParser extends AbstractMessageParser { } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof PcntfMessage)) { throw new IllegalArgumentException("Wrong instance of Message. Passed instance of " + message.getClass() + ". Needed PcntfMessage."); } final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.PcntfMessage msg = ((PcntfMessage) message).getPcntfMessage(); + ByteBuf buffer = Unpooled.buffer(); for (final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.Notifications n : msg.getNotifications()) { if (n.getRps() != null && !n.getRps().isEmpty()) { for (final Rps rps : n.getRps()) { @@ -62,6 +65,7 @@ public class PCEPNotificationMessageParser extends AbstractMessageParser { } } } + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPOpenMessageParser.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPOpenMessageParser.java index 81e157ed69..0d07188bc1 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPOpenMessageParser.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPOpenMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.impl.message; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.OpenBuilder; @@ -33,7 +35,7 @@ public class PCEPOpenMessageParser extends AbstractMessageParser { } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof OpenMessage)) { throw new IllegalArgumentException("Wrong instance of Message. Passed instance " + message.getClass() + ". Needed OpenMessage."); } @@ -42,8 +44,9 @@ public class PCEPOpenMessageParser extends AbstractMessageParser { if (open.getOpen() == null) { throw new IllegalArgumentException("Open Object must be present in Open Message."); } - + ByteBuf buffer = Unpooled.buffer(); buffer.writeBytes(serializeObject(open.getOpen())); + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPReplyMessageParser.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPReplyMessageParser.java index 590b5ec00f..6535a2c402 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPReplyMessageParser.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPReplyMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.impl.message; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.PCEPErrors; @@ -55,7 +57,7 @@ public class PCEPReplyMessageParser extends AbstractMessageParser { } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof Pcrep)) { throw new IllegalArgumentException("Wrong instance of Message. Passed instance of " + message.getClass() + ". Nedded PcrepMessage."); @@ -64,6 +66,7 @@ public class PCEPReplyMessageParser extends AbstractMessageParser { if (repMsg.getReplies() == null || repMsg.getReplies().isEmpty()) { throw new IllegalArgumentException("Replies cannot be null or empty."); } + ByteBuf buffer = Unpooled.buffer(); for (final Replies reply : repMsg.getReplies()) { if (reply.getRp() == null) { throw new IllegalArgumentException("Reply must contain RP object."); @@ -112,6 +115,7 @@ public class PCEPReplyMessageParser extends AbstractMessageParser { } } } + MessageUtil.formatMessage(TYPE, buffer, out); } @Override diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPRequestMessageParser.java b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPRequestMessageParser.java index 015ab58680..d9cbe34298 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPRequestMessageParser.java +++ b/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPRequestMessageParser.java @@ -8,10 +8,12 @@ package org.opendaylight.protocol.pcep.impl.message; import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.util.List; import org.opendaylight.protocol.pcep.spi.AbstractMessageParser; +import org.opendaylight.protocol.pcep.spi.MessageUtil; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.PCEPErrors; @@ -63,7 +65,7 @@ public class PCEPRequestMessageParser extends AbstractMessageParser { } @Override - public void serializeMessage(final Message message, final ByteBuf buffer) { + public void serializeMessage(final Message message, final ByteBuf out) { if (!(message instanceof Pcreq)) { throw new IllegalArgumentException("Wrong instance of PCEPMessage. Passed instance of " + message.getClass() + ". Needed PcrepMessage."); @@ -72,6 +74,7 @@ public class PCEPRequestMessageParser extends AbstractMessageParser { if (msg.getRequests() == null || msg.getRequests().isEmpty()) { throw new IllegalArgumentException("Requests cannot be null or empty."); } + ByteBuf buffer = Unpooled.buffer(); for (final Requests req : msg.getRequests()) { buffer.writeBytes(serializeObject(req.getRp())); if (req.getPathKeyExpansion() != null) { @@ -103,6 +106,7 @@ public class PCEPRequestMessageParser extends AbstractMessageParser { } } } + MessageUtil.formatMessage(TYPE, buffer, out); } protected void serializeP2P(final ByteBuf buffer, final P2p p2p) { @@ -323,7 +327,7 @@ public class PCEPRequestMessageParser extends AbstractMessageParser { && builder.getBandwidth() != null && builder.getReportedRoute().getBandwidth().getBandwidth() != new BandwidthBuilder().setBandwidth( new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth(new byte[] { 0 })).build() - && builder.getReportedRoute().getRro() == null) { + && builder.getReportedRoute().getRro() == null) { errors.add(createErrorMsg(PCEPErrors.RRO_MISSING, rp)); return null; } diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageHandlerRegistry.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageHandlerRegistry.java deleted file mode 100644 index 4bda8a40a3..0000000000 --- a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageHandlerRegistry.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ -package org.opendaylight.protocol.pcep.spi; - -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message; - -public interface MessageHandlerRegistry { - MessageParser getMessageParser(int messageType); - MessageSerializer getMessageSerializer(Message message); -} diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageRegistry.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageRegistry.java new file mode 100644 index 0000000000..fbda2e5946 --- /dev/null +++ b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageRegistry.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +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 MessageRegistry { + /** + * 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 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 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); +} diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageUtil.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageUtil.java new file mode 100644 index 0000000000..53c1a57fee --- /dev/null +++ b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/MessageUtil.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.protocol.pcep.spi; + +import io.netty.buffer.ByteBuf; + +import com.google.common.base.Preconditions; +import com.google.common.primitives.UnsignedBytes; + +public class MessageUtil { + + private static final int VERSION_SF_LENGTH = 3; + + private MessageUtil() { + } + + public static void formatMessage(final int messageType, final ByteBuf body, ByteBuf out) { + final int msgLength = body.readableBytes(); + final byte[] header = new byte[] { + UnsignedBytes.checkedCast(PCEPMessageConstants.PCEP_VERSION << (Byte.SIZE - VERSION_SF_LENGTH)), + UnsignedBytes.checkedCast(messageType), + UnsignedBytes.checkedCast((msgLength + PCEPMessageConstants.COMMON_HEADER_LENGTH) / 256), + UnsignedBytes.checkedCast((msgLength + PCEPMessageConstants.COMMON_HEADER_LENGTH) % 256) + }; + Preconditions.checkState(header.length == PCEPMessageConstants.COMMON_HEADER_LENGTH); + out.writeBytes(header); + out.writeBytes(body); + } +} diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPExtensionConsumerContext.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPExtensionConsumerContext.java index 0b73fa424f..404738a7da 100644 --- a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPExtensionConsumerContext.java +++ b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPExtensionConsumerContext.java @@ -11,7 +11,7 @@ public interface PCEPExtensionConsumerContext { LabelRegistry getLabelHandlerRegistry(); - MessageHandlerRegistry getMessageHandlerRegistry(); + MessageRegistry getMessageHandlerRegistry(); ObjectRegistry getObjectHandlerRegistry(); diff --git a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPMessageConstants.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPMessageConstants.java similarity index 86% rename from pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPMessageConstants.java rename to pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPMessageConstants.java index 13d9566997..31fcaab686 100644 --- a/pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/PCEPMessageConstants.java +++ b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/PCEPMessageConstants.java @@ -5,12 +5,12 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.protocol.pcep.impl; +package org.opendaylight.protocol.pcep.spi; /** * */ -final class PCEPMessageConstants { +public final class PCEPMessageConstants { /** * Length of the common message header, in bytes. */ diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimpleMessageHandlerRegistry.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimpleMessageRegistry.java similarity index 65% rename from pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimpleMessageHandlerRegistry.java rename to pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimpleMessageRegistry.java index 79661bae81..c0596ba55a 100644 --- a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimpleMessageHandlerRegistry.java +++ b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimpleMessageRegistry.java @@ -7,17 +7,22 @@ */ package org.opendaylight.protocol.pcep.spi.pojo; +import io.netty.buffer.ByteBuf; + +import java.util.List; + import org.opendaylight.protocol.concepts.HandlerRegistry; -import org.opendaylight.protocol.pcep.spi.MessageHandlerRegistry; import org.opendaylight.protocol.pcep.spi.MessageParser; +import org.opendaylight.protocol.pcep.spi.MessageRegistry; import org.opendaylight.protocol.pcep.spi.MessageSerializer; +import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; 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 com.google.common.base.Preconditions; -public final class SimpleMessageHandlerRegistry implements MessageHandlerRegistry { +public final class SimpleMessageRegistry implements MessageRegistry { private final HandlerRegistry handlers = new HandlerRegistry<>(); @@ -31,13 +36,21 @@ public final class SimpleMessageHandlerRegistry implements MessageHandlerRegistr } @Override - public MessageParser getMessageParser(final int messageType) { + public Message parseMessage(int messageType, byte[] buffer, List errors) throws PCEPDeserializerException { Preconditions.checkArgument(messageType >= 0 && messageType <= Values.UNSIGNED_BYTE_MAX_VALUE); - return this.handlers.getParser(messageType); + final MessageParser parser = this.handlers.getParser(messageType); + if (parser == null) { + return null; + } + return parser.parseMessage(buffer, errors); } @Override - public MessageSerializer getMessageSerializer(final Message message) { - return this.handlers.getSerializer(message.getImplementedInterface()); + public void serializeMessage(Message message, ByteBuf buffer) { + final MessageSerializer serializer = this.handlers.getSerializer(message.getImplementedInterface()); + if (serializer == null) { + return; + } + serializer.serializeMessage(message, buffer); } } diff --git a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimplePCEPExtensionProviderContext.java b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimplePCEPExtensionProviderContext.java index efa80cde3d..bd71b2066b 100644 --- a/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimplePCEPExtensionProviderContext.java +++ b/pcep/spi/src/main/java/org/opendaylight/protocol/pcep/spi/pojo/SimplePCEPExtensionProviderContext.java @@ -15,7 +15,7 @@ import org.opendaylight.protocol.pcep.spi.EROSubobjectSerializer; import org.opendaylight.protocol.pcep.spi.LabelRegistry; import org.opendaylight.protocol.pcep.spi.LabelParser; import org.opendaylight.protocol.pcep.spi.LabelSerializer; -import org.opendaylight.protocol.pcep.spi.MessageHandlerRegistry; +import org.opendaylight.protocol.pcep.spi.MessageRegistry; import org.opendaylight.protocol.pcep.spi.MessageParser; import org.opendaylight.protocol.pcep.spi.MessageSerializer; import org.opendaylight.protocol.pcep.spi.ObjectRegistry; @@ -43,7 +43,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev @ThreadSafe public class SimplePCEPExtensionProviderContext implements PCEPExtensionProviderContext { private final SimpleLabelRegistry labelReg = new SimpleLabelRegistry(); - private final SimpleMessageHandlerRegistry msgReg = new SimpleMessageHandlerRegistry(); + private final SimpleMessageRegistry msgReg = new SimpleMessageRegistry(); private final SimpleObjectRegistry objReg = new SimpleObjectRegistry(); private final SimpleEROSubobjectRegistry eroSubReg = new SimpleEROSubobjectRegistry(); private final SimpleRROSubobjectRegistry rroSubReg = new SimpleRROSubobjectRegistry(); @@ -56,7 +56,7 @@ public class SimplePCEPExtensionProviderContext implements PCEPExtensionProvider } @Override - public final MessageHandlerRegistry getMessageHandlerRegistry() { + public final MessageRegistry getMessageHandlerRegistry() { return this.msgReg; } -- 2.36.6