X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pcep%2Fietf-stateful07%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fpcep%2Fietf%2Fstateful07%2FStateful07PCReportMessageParser.java;h=3b75c77a29d0ce5120c9adad986526ef708a0322;hb=3121d059dc7b5d20f3b61c53490dd52fd098d6ec;hp=9e47f20610f9f9e9da0e29dcd8ed549ae9f6be1f;hpb=4ebe944f0814f27a0b15204ead13e554dc89fa36;p=bgpcep.git 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 9e47f20610..3b75c77a29 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 @@ -7,14 +7,12 @@ */ package org.opendaylight.protocol.pcep.ietf.stateful07; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; - 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; @@ -39,11 +37,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.Metric; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.Rro; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp; /** * Parser for {@link Pcrpt} */ -public final class Stateful07PCReportMessageParser extends AbstractMessageParser { +public class Stateful07PCReportMessageParser extends AbstractMessageParser { public static final int TYPE = 10; @@ -58,33 +57,37 @@ public final class Stateful07PCReportMessageParser extends AbstractMessageParser final List reports = msg.getPcrptMessage().getReports(); ByteBuf buffer = Unpooled.buffer(); for (final Reports report : reports) { - if (report.getSrp() != null) { - serializeObject(report.getSrp(), buffer); + serializeReport(report, buffer); + } + MessageUtil.formatMessage(TYPE, buffer, out); + } + + protected void serializeReport(final Reports report, final ByteBuf buffer) { + if (report.getSrp() != null) { + serializeObject(report.getSrp(), buffer); + } + serializeObject(report.getLsp(), buffer); + final Path p = report.getPath(); + if (p != null) { + serializeObject(p.getEro(), buffer); + if (p.getLspa() != null) { + serializeObject(p.getLspa(), buffer); } - serializeObject(report.getLsp(), buffer); - final Path p = report.getPath(); - if (p != null) { - serializeObject(p.getEro(), buffer); - if (p.getLspa() != null) { - serializeObject(p.getLspa(), buffer); - } - if (p.getBandwidth() != null) { - serializeObject(p.getBandwidth(), buffer); - } - if (p.getMetrics() != null && !p.getMetrics().isEmpty()) { - for (final Metrics m : p.getMetrics()) { - serializeObject(m.getMetric(), buffer); - } - } - if (p.getIro() != null) { - serializeObject(p.getIro(), buffer); - } - if (p.getRro() != null) { - serializeObject(p.getRro(), buffer); + if (p.getBandwidth() != null) { + serializeObject(p.getBandwidth(), buffer); + } + if (p.getMetrics() != null && !p.getMetrics().isEmpty()) { + for (final Metrics m : p.getMetrics()) { + serializeObject(m.getMetric(), buffer); } } + if (p.getIro() != null) { + serializeObject(p.getIro(), buffer); + } + if (p.getRro() != null) { + serializeObject(p.getRro(), buffer); + } } - MessageUtil.formatMessage(TYPE, buffer, out); } @Override @@ -100,14 +103,15 @@ public final class Stateful07PCReportMessageParser extends AbstractMessageParser while (!objects.isEmpty()) { final Reports report = getValidReports(objects, errors); - if (reports != null) { + if (report != null) { reports.add(report); } } return new PcrptBuilder().setPcrptMessage(new PcrptMessageBuilder().setReports(reports).build()).build(); } - private Reports getValidReports(final List objects, final List errors) { + protected Reports getValidReports(final List objects, final List errors) { + boolean isValid = true; final ReportsBuilder builder = new ReportsBuilder(); if (objects.get(0) instanceof Srp) { builder.setSrp((Srp) objects.get(0)); @@ -117,15 +121,25 @@ public final class Stateful07PCReportMessageParser extends AbstractMessageParser builder.setLsp((Lsp) objects.get(0)); objects.remove(0); } else { - errors.add(createErrorMsg(PCEPErrors.LSP_MISSING)); - return null; + errors.add(createErrorMsg(PCEPErrors.LSP_MISSING, Optional.absent())); + isValid = false; } if (!objects.isEmpty()) { final PathBuilder pBuilder = new PathBuilder(); + if (objects.get(0) instanceof Ero) { + pBuilder.setEro((Ero) objects.get(0)); + objects.remove(0); + } else { + errors.add(createErrorMsg(PCEPErrors.ERO_MISSING, Optional.absent())); + isValid = false; + } parsePath(objects, pBuilder); builder.setPath(pBuilder.build()); } - return builder.build(); + if(isValid) { + return builder.build(); + } + return null; } private void parsePath(final List objects, final PathBuilder builder) { @@ -136,12 +150,6 @@ public final class Stateful07PCReportMessageParser extends AbstractMessageParser obj = objects.get(0); switch (state) { case Init: - state = State.EroIn; - if (obj instanceof Ero) { - builder.setEro((Ero) obj); - break; - } - case EroIn: state = State.LspaIn; if (obj instanceof Lspa) { builder.setLspa((Lspa) obj); @@ -188,6 +196,6 @@ public final class Stateful07PCReportMessageParser extends AbstractMessageParser } private enum State { - Init, EroIn, LspaIn, BandwidthIn, MetricIn, IroIn, RroIn, End + Init, LspaIn, BandwidthIn, MetricIn, IroIn, RroIn, End } }