import io.netty.buffer.ByteBuf;
import io.netty.buffer.UnpooledByteBufAllocator;
+import java.util.ArrayList;
+import java.util.List;
+
import org.opendaylight.protocol.framework.DeserializerException;
import org.opendaylight.protocol.framework.DocumentedException;
import org.opendaylight.protocol.framework.ProtocolMessageFactory;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.MessageHandlerRegistry;
import org.opendaylight.protocol.pcep.spi.MessageSerializer;
import org.opendaylight.protocol.util.ByteArray;
+ (msgLength - COMMON_HEADER_LENGTH));
}
+ final List<Message> errors = new ArrayList<>();
Message msg = null;
try {
- msg = this.registry.getMessageParser(type).parseMessage(msgBody);
+ msg = this.registry.getMessageParser(type).parseMessage(msgBody, errors);
} catch (final PCEPDeserializerException e) {
logger.debug("Unexpected deserializer problem", e);
throw new DeserializerException(e.getMessage(), e);
- } catch (final PCEPDocumentedException e) {
- logger.debug("Documented deserializer problem", e);
- throw new DocumentedException(e.getMessage(), e);
}
+
+ if (!errors.isEmpty()) {
+ // FIXME: we have a bunch of error messages, how can we send them back?
+ }
+
logger.debug("Message was parsed. {}", msg);
return msg;
}
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.PCEPErrorMapping;
import org.opendaylight.protocol.pcep.PCEPErrors;
-import org.opendaylight.protocol.pcep.UnknownObject;
import org.opendaylight.protocol.pcep.spi.MessageParser;
import org.opendaylight.protocol.pcep.spi.MessageSerializer;
import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
import org.opendaylight.protocol.pcep.spi.ObjectSerializer;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcerrBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PcerrMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObjectBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.PcerrMessageBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.common.primitives.UnsignedBytes;
public abstract class AbstractMessageParser implements MessageParser, MessageSerializer {
+ private static final Logger LOG = LoggerFactory.getLogger(AbstractMessageParser.class);
private static final int COMMON_OBJECT_HEADER_LENGTH = 4;
return retBytes;
}
- protected List<Object> parseObjects(final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ protected final List<Object> parseObjects(final byte[] bytes) throws PCEPDeserializerException {
int offset = 0;
final List<Object> objs = Lists.newArrayList();
while (bytes.length - offset > 0) {
offset += objLength - COMMON_OBJECT_HEADER_LENGTH;
- final ObjectParser parser = this.registry.getObjectParser(objClass, objType);
-
+ final ObjectParser parser = Preconditions.checkNotNull(this.registry.getObjectParser(objClass, objType));
final ObjectHeader header = new ObjectHeaderImpl(flags.get(P_FLAG_OFFSET), flags.get(I_FLAG_OFFSET));
- try {
- objs.add(parser.parseObject(header, bytesToPass));
- } catch (final PCEPDocumentedException e) {
- if (e.getError() == PCEPErrors.UNRECOGNIZED_OBJ_CLASS | e.getError() == PCEPErrors.UNRECOGNIZED_OBJ_TYPE
- | e.getError() == PCEPErrors.NOT_SUPPORTED_OBJ_CLASS | e.getError() == PCEPErrors.NOT_SUPPORTED_OBJ_TYPE) {
- objs.add(new UnknownObject(e.getError()));
- } else {
- throw e;
- }
+ // parseObject is required to return null for P=0 errored objects
+ final Object o = parser.parseObject(header, bytesToPass);
+ if (o != null) {
+ objs.add(o);
}
}
+
return objs;
}
- protected PcerrMessage createErrorMsg(final PCEPErrors e) {
+ public static PcerrMessage createErrorMsg(final PCEPErrors e) {
final PCEPErrorMapping maping = PCEPErrorMapping.getInstance();
return new PcerrBuilder().setPcerrMessage(
new PcerrMessageBuilder().setErrors(
new ErrorObjectBuilder().setType(maping.getFromErrorsEnum(e).type).setValue(
maping.getFromErrorsEnum(e).value).build()).build())).build()).build();
}
+
+ // FIXME: remove PCEPDocumentedException
+ abstract protected Message validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException, PCEPDocumentedException;
+
+ @Override
+ public final Message parseMessage(final byte[] buffer, final List<Message> errors) throws PCEPDeserializerException {
+ Preconditions.checkNotNull(buffer, "Buffer may not be null");
+
+ // Parse objects first
+ final List<Object> objs = parseObjects(buffer);
+
+ // Run validation
+ try {
+ return validate(objs, errors);
+ } catch (PCEPDocumentedException e) {
+ LOG.info("Message failed to validate", e);
+ errors.add(createErrorMsg(e.getError()));
+ return null;
+ }
+ }
}
import java.util.List;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Close;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.CloseBuilder;
}
@Override
- public CloseMessage parseMessage(final byte[] buffer) throws PCEPDeserializerException, PCEPDocumentedException {
- if (buffer == null || buffer.length == 0) {
- throw new PCEPDeserializerException("Close message doesn't contain CLOSE object.");
- }
- final List<Object> objs = parseObjects(buffer);
- return validate(objs);
- }
-
- private Close validate(final List<Object> objects) throws PCEPDeserializerException {
+ protected Close validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException {
if (objects == null) {
throw new IllegalArgumentException("Passed list can't be null.");
}
import io.netty.buffer.ByteBuf;
-import java.util.Arrays;
import java.util.List;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
-import org.opendaylight.protocol.pcep.PCEPErrorMapping;
import org.opendaylight.protocol.pcep.PCEPErrors;
import org.opendaylight.protocol.pcep.UnknownObject;
import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PcerrMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObject;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObjectBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.PcerrMessageBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.Errors;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder;
}
@Override
- public Message parseMessage(final byte[] buffer) throws PCEPDeserializerException, PCEPDocumentedException {
- if (buffer == null || buffer.length == 0) {
- throw new PCEPDeserializerException("Error message is empty.");
- }
- final List<Object> objs = parseObjects(buffer);
- PcerrMessage m = null;
- try {
- m = validate(objs);
- } catch (final PCEPDocumentedException e) {
- final PCEPErrorMapping maping = PCEPErrorMapping.getInstance();
- return new PcerrBuilder().setPcerrMessage(
- new PcerrMessageBuilder().setErrors(
- Arrays.asList(new ErrorsBuilder().setErrorObject(
- new ErrorObjectBuilder().setType(maping.getFromErrorsEnum(e.getError()).type).setValue(
- maping.getFromErrorsEnum(e.getError()).value).build()).build())).build()).build();
- }
- return m;
- }
-
- private PcerrMessage validate(final List<Object> objects) throws PCEPDeserializerException, PCEPDocumentedException {
+ protected PcerrMessage validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException, PCEPDocumentedException {
if (objects == null) {
throw new IllegalArgumentException("Passed list can't be null.");
}
+ if (objects.isEmpty()) {
+ throw new PCEPDeserializerException("Error message is empty.");
+ }
+
final List<Rps> requestParameters = Lists.newArrayList();
final List<Errors> errorObjects = Lists.newArrayList();
final PcerrMessageBuilder b = new PcerrMessageBuilder();
import io.netty.buffer.ByteBuf;
+import java.util.List;
+
+import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.KeepaliveBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.KeepaliveMessage;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.keepalive.message.KeepaliveMessageBuilder;
/**
* Parser for {@link KeepaliveMessage}
*/
public class PCEPKeepAliveMessageParser extends AbstractMessageParser {
-
+ private static final KeepaliveMessage MESSAGE = new KeepaliveBuilder().setKeepaliveMessage(new KeepaliveMessageBuilder().build()).build();
public static final int TYPE = 2;
public PCEPKeepAliveMessageParser(final ObjectHandlerRegistry registry) {
public void serializeMessage(final Message message, final ByteBuf buffer) {
if (!(message instanceof KeepaliveMessage)) {
throw new IllegalArgumentException("Wrong instance of Message. Passed instance of " + message.getClass()
- + ". Nedded KeepaliveMessage.");
+ + ". Need KeepaliveMessage.");
}
buffer.writeBytes(new byte[0]);
}
@Override
- public KeepaliveMessage parseMessage(final byte[] buffer) {
- return new KeepaliveBuilder().setKeepaliveMessage(new KeepaliveMessageBuilder().build()).build();
+ public int getMessageType() {
+ return TYPE;
}
@Override
- public int getMessageType() {
- return TYPE;
+ protected KeepaliveMessage validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException {
+ // FIXME: keepalive shouldn't have objects
+
+ return MESSAGE;
}
}
}
@Override
- public Message parseMessage(final byte[] buffer) throws PCEPDeserializerException, PCEPDocumentedException {
- if (buffer == null || buffer.length == 0) {
- throw new PCEPDeserializerException("Notification message cannot be empty.");
- }
- final List<Object> objs = parseObjects(buffer);
-
- return validate(objs);
- }
-
- public Message validate(final List<Object> objects) throws PCEPDeserializerException {
+ protected Message validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException {
if (objects == null) {
throw new IllegalArgumentException("Passed list can't be null.");
}
+ if (objects.isEmpty()) {
+ throw new PCEPDeserializerException("Notification message cannot be empty.");
+ }
+
final PCEPErrorMapping maping = PCEPErrorMapping.getInstance();
final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.Notifications> compositeNotifications = Lists.newArrayList();
import java.util.List;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.OpenBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
@Override
public void serializeMessage(final Message message, final ByteBuf buffer) {
if (!(message instanceof OpenMessage)) {
- throw new IllegalArgumentException("Wrong instance of Message. Passed instance " + message.getClass() + ". Nedded OpenMessage.");
+ throw new IllegalArgumentException("Wrong instance of Message. Passed instance " + message.getClass() + ". Needed OpenMessage.");
}
final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.message.OpenMessage open = ((OpenMessage) message).getOpenMessage();
}
@Override
- public OpenMessage parseMessage(final byte[] buffer) throws PCEPDeserializerException, PCEPDocumentedException {
- if (buffer == null || buffer.length == 0) {
- throw new PCEPDeserializerException("Open message doesn't contain OPEN object.");
- }
- final List<Object> objs = parseObjects(buffer);
-
- return new OpenBuilder().setOpenMessage(validate(objs)).build();
- }
-
- private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.message.OpenMessage validate(
- final List<Object> objects) throws PCEPDeserializerException {
+ protected org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Open validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException {
if (objects == null) {
throw new IllegalArgumentException("Passed list can't be null.");
}
throw new PCEPDeserializerException("Unprocessed Objects: " + objects);
}
- return msg;
+ return new OpenBuilder().setOpenMessage(msg).build();
}
@Override
import io.netty.buffer.ByteBuf;
-import java.util.Arrays;
import java.util.List;
-import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.PCEPDocumentedException;
-import org.opendaylight.protocol.pcep.PCEPErrorMapping;
import org.opendaylight.protocol.pcep.PCEPErrors;
import org.opendaylight.protocol.pcep.UnknownObject;
import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcerrBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Pcrep;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcrepBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
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.of.object.Of;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObjectBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.PcerrMessageBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.PcrepMessageBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.Replies;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.RepliesBuilder;
}
@Override
- public Message parseMessage(final byte[] buffer) throws PCEPDeserializerException, PCEPDocumentedException {
- if (buffer == null || buffer.length == 0) {
- throw new PCEPDeserializerException("Error message is empty.");
- }
- final List<Object> objs = parseObjects(buffer);
- PcrepMessage m = null;
- try {
- m = validate(objs);
- } catch (final PCEPDocumentedException e) {
- final PCEPErrorMapping maping = PCEPErrorMapping.getInstance();
- return new PcerrBuilder().setPcerrMessage(
- new PcerrMessageBuilder().setErrors(
- Arrays.asList(new ErrorsBuilder().setErrorObject(
- new ErrorObjectBuilder().setType(maping.getFromErrorsEnum(e.getError()).type).setValue(
- maping.getFromErrorsEnum(e.getError()).value).build()).build())).build()).build();
- }
- return m;
- }
-
- private Pcrep validate(final List<Object> objects) throws PCEPDocumentedException {
+ protected Pcrep validate(final List<Object> objects, final List<Message> errors) throws PCEPDocumentedException {
final List<Replies> replies = Lists.newArrayList();
while (!objects.isEmpty()) {
replies.add(this.getValidReply(objects));
}
@Override
- public Message parseMessage(final byte[] buffer) throws PCEPDeserializerException {
- if (buffer == null || buffer.length == 0) {
- throw new PCEPDeserializerException("Pcrpt message cannot be empty.");
- }
- try {
- final List<Object> objs = parseObjects(buffer);
- return validate(objs);
- } catch (final PCEPDocumentedException e) {
- return createErrorMsg(e.getError());
- }
- }
-
- public Message validate(final List<Object> objects) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Message validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException, PCEPDocumentedException {
if (objects == null) {
throw new IllegalArgumentException("Passed list can't be null.");
}
+ if (objects.isEmpty()) {
+ throw new PCEPDeserializerException("Pcrpt message cannot be empty.");
+ }
+
final List<Reports> reports = Lists.newArrayList();
while (!objects.isEmpty()) {
import io.netty.buffer.ByteBuf;
+import java.util.List;
+
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
}
@Override
- public PcrepMessage parseMessage(final byte[] buffer) throws PCEPDeserializerException {
- // TODO Auto-generated method stub
+ protected Message validate(
+ final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object> objects,
+ final List<Message> errors) throws PCEPDeserializerException {
+ // if (objects == null)
+ // throw new IllegalArgumentException("Passed list can't be null.");
+ //
+ // final List<Message> msgs = Lists.newArrayList();
+ // final List<CompositeRequestSvecObject> svecList = new ArrayList<CompositeRequestSvecObject>();
+ //
+ // CompositeRequestSvecObject svecComp;
+ // while (!objects.isEmpty()) {
+ // try {
+ // if ((svecComp = getValidSvecComposite(objects)) == null)
+ // break;
+ // } catch (final PCEPDocumentedException e) {
+ // msgs.add(new PCEPErrorMessage(new PCEPErrorObject(e.getError())));
+ // return msgs;
+ // }
+ //
+ // svecList.add(svecComp);
+ // }
+ //
+ // while (!objects.isEmpty()) {
+ // final List<CompositeRequestObject> requests = new ArrayList<CompositeRequestObject>();
+ // PCEPRequestParameterObject rpObj = null;
+ // boolean requestRejected = false;
+ //
+ // if (objects.get(0) instanceof PCEPRequestParameterObject) {
+ // rpObj = (PCEPRequestParameterObject) objects.get(0);
+ // objects.remove(rpObj);
+ // if (!rpObj.isProcessed()) {
+ // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(rpObj, new PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))));
+ // requestRejected = true;
+ // }
+ //
+ // } else {
+ // // if RP obj is missing return error only;
+ // msgs.clear();
+ // msgs.add(new PCEPErrorMessage(new PCEPErrorObject(PCEPErrors.RP_MISSING)));
+ // return msgs;
+ // }
+ //
+ // PCEPEndPointsObject<?> endPoints = null;
+ // if (objects.get(0) instanceof PCEPEndPointsObject<?>) {
+ // endPoints = (PCEPEndPointsObject<?>) objects.get(0);
+ // objects.remove(0);
+ // if (!endPoints.isProcessed()) {
+ // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
+ // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))));
+ // requestRejected = true;
+ // }
+ // } else {
+ // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
+ // PCEPErrorObject(PCEPErrors.END_POINTS_MISSING))));
+ // requestRejected = true;
+ // }
+ //
+ // // ignore all continual end-points objects
+ // while (!objects.isEmpty() && objects.get(0) instanceof PCEPEndPointsObject<?>) {
+ // objects.remove(0);
+ // }
+ //
+ // PCEPClassTypeObject classType = null;
+ // PCEPLspObject lsp = null;
+ // PCEPLspaObject lspa = null;
+ // PCEPRequestedPathBandwidthObject bandwidth = null;
+ // final List<PCEPMetricObject> metrics = new ArrayList<PCEPMetricObject>();
+ // PCEPReportedRouteObject rro = null;
+ // PCEPExistingPathBandwidthObject rroBandwidth = null;
+ // PCEPIncludeRouteObject iro = null;
+ // PCEPLoadBalancingObject loadBalancing = null;
+ //
+ // int state = 1;
+ // while (!objects.isEmpty()) {
+ // final Object obj = objects.get(0);
+ // if (obj instanceof UnknownObject) {
+ // if (((UnknownObject) obj).isProcessingRule()) {
+ // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new PCEPErrorObject(((UnknownObject)
+ // obj).getError()))));
+ // requestRejected = true;
+ // }
+ //
+ // objects.remove(0);
+ // continue;
+ // }
+ // switch (state) {
+ // case 1:
+ // state = 2;
+ // if (obj instanceof PCEPClassTypeObject) {
+ // classType = (PCEPClassTypeObject) obj;
+ // if (!classType.isProcessed()) {
+ // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
+ // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))));
+ // requestRejected = true;
+ // }
+ // break;
+ // }
+ // case 2:
+ // state = 3;
+ // if (obj instanceof PCEPLspObject) {
+ // lsp = (PCEPLspObject) obj;
+ // break;
+ // }
+ // case 3:
+ // state = 4;
+ // if (obj instanceof PCEPLspaObject) {
+ // lspa = (PCEPLspaObject) obj;
+ // break;
+ // }
+ // case 4:
+ // state = 5;
+ // if (obj instanceof PCEPRequestedPathBandwidthObject) {
+ // bandwidth = (PCEPRequestedPathBandwidthObject) obj;
+ // break;
+ // }
+ // case 5:
+ // state = 6;
+ // if (obj instanceof PCEPMetricObject) {
+ // metrics.add((PCEPMetricObject) obj);
+ // state = 5;
+ //
+ // break;
+ // }
+ // case 6:
+ // state = 8;
+ // if (obj instanceof PCEPReportedRouteObject) {
+ // rro = (PCEPReportedRouteObject) obj;
+ // state = 7;
+ // break;
+ // }
+ // case 7:
+ // state = 8;
+ // if (obj instanceof PCEPExistingPathBandwidthObject) {
+ // rroBandwidth = (PCEPExistingPathBandwidthObject) obj;
+ // break;
+ // }
+ // case 8:
+ // state = 9;
+ // if (obj instanceof PCEPIncludeRouteObject) {
+ // iro = (PCEPIncludeRouteObject) obj;
+ // break;
+ // }
+ // case 9:
+ // if (obj instanceof PCEPLoadBalancingObject) {
+ // loadBalancing = (PCEPLoadBalancingObject) obj;
+ // break;
+ // }
+ // state = 10;
+ // }
+ //
+ // if (state == 10) {
+ // break;
+ // }
+ //
+ // objects.remove(obj);
+ // }
+ //
+ // if (rpObj.isReoptimized() && bandwidth != null && bandwidth.getBandwidth() != new Bandwidth(new byte[] { 0 }) &&
+ // rro == null) {
+ // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
+ // PCEPErrorObject(PCEPErrors.RRO_MISSING))));
+ // requestRejected = true;
+ // }
+ //
+ // if (!requestRejected) {
+ // requests.add(new CompositeRequestObject(rpObj, endPoints, classType, lsp, lspa, bandwidth, metrics, rro,
+ // rroBandwidth, iro, loadBalancing));
+ // msgs.add(new PCEPRequestMessage(Collections.unmodifiableList(svecList), Collections.unmodifiableList(requests)));
+ // }
+ // }
+ //
+ // return msgs;
+ // }
+ //
+ // private static CompositeRequestSvecObject getValidSvecComposite(final List<Object> objects) throws
+ // PCEPDocumentedException {
+ // if (objects == null || objects.isEmpty()) {
+ // throw new IllegalArgumentException("List cannot be null or empty.");
+ // }
+ //
+ // PCEPSvecObject svec = null;
+ // if (objects.get(0) instanceof PCEPSvecObject) {
+ // svec = (PCEPSvecObject) objects.get(0);
+ // objects.remove(svec);
+ // } else
+ // return null;
+ //
+ // PCEPObjectiveFunctionObject of = null;
+ // PCEPGlobalConstraintsObject gc = null;
+ // PCEPExcludeRouteObject xro = null;
+ // final List<PCEPMetricObject> metrics = new ArrayList<PCEPMetricObject>();
+ //
+ // int state = 1;
+ // while (!objects.isEmpty()) {
+ // final Object obj = objects.get(0);
+ //
+ // if (obj instanceof UnknownObject && ((UnknownObject) obj).isProcessingRule()) {
+ // throw new PCEPDocumentedException("Unknown object in SVEC list.", ((UnknownObject) obj).getError());
+ // }
+ //
+ // switch (state) {
+ // case 1:
+ // state = 2;
+ // if (obj instanceof PCEPObjectiveFunctionObject) {
+ // of = (PCEPObjectiveFunctionObject) obj;
+ // break;
+ // }
+ // case 2:
+ // state = 3;
+ // if (obj instanceof PCEPGlobalConstraintsObject) {
+ // gc = (PCEPGlobalConstraintsObject) obj;
+ // break;
+ // }
+ // case 3:
+ // state = 4;
+ // if (obj instanceof PCEPExcludeRouteObject) {
+ // xro = (PCEPExcludeRouteObject) obj;
+ // break;
+ // }
+ // case 4:
+ // state = 5;
+ // if (obj instanceof PCEPMetricObject) {
+ // metrics.add((PCEPMetricObject) obj);
+ // state = 4;
+ //
+ // break;
+ // }
+ // }
+ //
+ // if (state == 5)
+ // break;
+ //
+ // objects.remove(obj);
+ // }
+ //
+ // return new CompositeRequestSvecObject(svec, of, gc, xro, metrics);
+ // }
+ //
+ // private static PCEPRequestParameterObject copyRP(final PCEPRequestParameterObject origRp, final boolean
+ // processed) {
+ // return new PCEPRequestParameterObject(origRp.isLoose(), origRp.isBidirectional(), origRp.isReoptimized(),
+ // origRp.isMakeBeforeBreak(), origRp.isReportRequestOrder(), origRp.isSuplyOFOnResponse(),
+ // origRp.isFragmentation(), origRp.isP2mp(), origRp.isEroCompression(), origRp.getPriority(),
+ // origRp.getRequestID(), origRp.getTlvs(), processed, origRp.isIgnored());
+ // }
+
return null;
}
- // public List<Message> validate(final List<Object> objects) {
- // if (objects == null)
- // throw new IllegalArgumentException("Passed list can't be null.");
- //
- // final List<Message> msgs = Lists.newArrayList();
- // final List<CompositeRequestSvecObject> svecList = new ArrayList<CompositeRequestSvecObject>();
- //
- // CompositeRequestSvecObject svecComp;
- // while (!objects.isEmpty()) {
- // try {
- // if ((svecComp = getValidSvecComposite(objects)) == null)
- // break;
- // } catch (final PCEPDocumentedException e) {
- // msgs.add(new PCEPErrorMessage(new PCEPErrorObject(e.getError())));
- // return msgs;
- // }
- //
- // svecList.add(svecComp);
- // }
- //
- // while (!objects.isEmpty()) {
- // final List<CompositeRequestObject> requests = new ArrayList<CompositeRequestObject>();
- // PCEPRequestParameterObject rpObj = null;
- // boolean requestRejected = false;
- //
- // if (objects.get(0) instanceof PCEPRequestParameterObject) {
- // rpObj = (PCEPRequestParameterObject) objects.get(0);
- // objects.remove(rpObj);
- // if (!rpObj.isProcessed()) {
- // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(rpObj, new PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))));
- // requestRejected = true;
- // }
- //
- // } else {
- // // if RP obj is missing return error only;
- // msgs.clear();
- // msgs.add(new PCEPErrorMessage(new PCEPErrorObject(PCEPErrors.RP_MISSING)));
- // return msgs;
- // }
- //
- // PCEPEndPointsObject<?> endPoints = null;
- // if (objects.get(0) instanceof PCEPEndPointsObject<?>) {
- // endPoints = (PCEPEndPointsObject<?>) objects.get(0);
- // objects.remove(0);
- // if (!endPoints.isProcessed()) {
- // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
- // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))));
- // requestRejected = true;
- // }
- // } else {
- // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
- // PCEPErrorObject(PCEPErrors.END_POINTS_MISSING))));
- // requestRejected = true;
- // }
- //
- // // ignore all continual end-points objects
- // while (!objects.isEmpty() && objects.get(0) instanceof PCEPEndPointsObject<?>) {
- // objects.remove(0);
- // }
- //
- // PCEPClassTypeObject classType = null;
- // PCEPLspObject lsp = null;
- // PCEPLspaObject lspa = null;
- // PCEPRequestedPathBandwidthObject bandwidth = null;
- // final List<PCEPMetricObject> metrics = new ArrayList<PCEPMetricObject>();
- // PCEPReportedRouteObject rro = null;
- // PCEPExistingPathBandwidthObject rroBandwidth = null;
- // PCEPIncludeRouteObject iro = null;
- // PCEPLoadBalancingObject loadBalancing = null;
- //
- // int state = 1;
- // while (!objects.isEmpty()) {
- // final Object obj = objects.get(0);
- // if (obj instanceof UnknownObject) {
- // if (((UnknownObject) obj).isProcessingRule()) {
- // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new PCEPErrorObject(((UnknownObject)
- // obj).getError()))));
- // requestRejected = true;
- // }
- //
- // objects.remove(0);
- // continue;
- // }
- // switch (state) {
- // case 1:
- // state = 2;
- // if (obj instanceof PCEPClassTypeObject) {
- // classType = (PCEPClassTypeObject) obj;
- // if (!classType.isProcessed()) {
- // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
- // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))));
- // requestRejected = true;
- // }
- // break;
- // }
- // case 2:
- // state = 3;
- // if (obj instanceof PCEPLspObject) {
- // lsp = (PCEPLspObject) obj;
- // break;
- // }
- // case 3:
- // state = 4;
- // if (obj instanceof PCEPLspaObject) {
- // lspa = (PCEPLspaObject) obj;
- // break;
- // }
- // case 4:
- // state = 5;
- // if (obj instanceof PCEPRequestedPathBandwidthObject) {
- // bandwidth = (PCEPRequestedPathBandwidthObject) obj;
- // break;
- // }
- // case 5:
- // state = 6;
- // if (obj instanceof PCEPMetricObject) {
- // metrics.add((PCEPMetricObject) obj);
- // state = 5;
- //
- // break;
- // }
- // case 6:
- // state = 8;
- // if (obj instanceof PCEPReportedRouteObject) {
- // rro = (PCEPReportedRouteObject) obj;
- // state = 7;
- // break;
- // }
- // case 7:
- // state = 8;
- // if (obj instanceof PCEPExistingPathBandwidthObject) {
- // rroBandwidth = (PCEPExistingPathBandwidthObject) obj;
- // break;
- // }
- // case 8:
- // state = 9;
- // if (obj instanceof PCEPIncludeRouteObject) {
- // iro = (PCEPIncludeRouteObject) obj;
- // break;
- // }
- // case 9:
- // if (obj instanceof PCEPLoadBalancingObject) {
- // loadBalancing = (PCEPLoadBalancingObject) obj;
- // break;
- // }
- // state = 10;
- // }
- //
- // if (state == 10) {
- // break;
- // }
- //
- // objects.remove(obj);
- // }
- //
- // if (rpObj.isReoptimized() && bandwidth != null && bandwidth.getBandwidth() != new Bandwidth(new byte[] { 0 }) &&
- // rro == null) {
- // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
- // PCEPErrorObject(PCEPErrors.RRO_MISSING))));
- // requestRejected = true;
- // }
- //
- // if (!requestRejected) {
- // requests.add(new CompositeRequestObject(rpObj, endPoints, classType, lsp, lspa, bandwidth, metrics, rro,
- // rroBandwidth, iro, loadBalancing));
- // msgs.add(new PCEPRequestMessage(Collections.unmodifiableList(svecList), Collections.unmodifiableList(requests)));
- // }
- // }
- //
- // return msgs;
- // }
- //
- // private static CompositeRequestSvecObject getValidSvecComposite(final List<Object> objects) throws
- // PCEPDocumentedException {
- // if (objects == null || objects.isEmpty()) {
- // throw new IllegalArgumentException("List cannot be null or empty.");
- // }
- //
- // PCEPSvecObject svec = null;
- // if (objects.get(0) instanceof PCEPSvecObject) {
- // svec = (PCEPSvecObject) objects.get(0);
- // objects.remove(svec);
- // } else
- // return null;
- //
- // PCEPObjectiveFunctionObject of = null;
- // PCEPGlobalConstraintsObject gc = null;
- // PCEPExcludeRouteObject xro = null;
- // final List<PCEPMetricObject> metrics = new ArrayList<PCEPMetricObject>();
- //
- // int state = 1;
- // while (!objects.isEmpty()) {
- // final Object obj = objects.get(0);
- //
- // if (obj instanceof UnknownObject && ((UnknownObject) obj).isProcessingRule()) {
- // throw new PCEPDocumentedException("Unknown object in SVEC list.", ((UnknownObject) obj).getError());
- // }
- //
- // switch (state) {
- // case 1:
- // state = 2;
- // if (obj instanceof PCEPObjectiveFunctionObject) {
- // of = (PCEPObjectiveFunctionObject) obj;
- // break;
- // }
- // case 2:
- // state = 3;
- // if (obj instanceof PCEPGlobalConstraintsObject) {
- // gc = (PCEPGlobalConstraintsObject) obj;
- // break;
- // }
- // case 3:
- // state = 4;
- // if (obj instanceof PCEPExcludeRouteObject) {
- // xro = (PCEPExcludeRouteObject) obj;
- // break;
- // }
- // case 4:
- // state = 5;
- // if (obj instanceof PCEPMetricObject) {
- // metrics.add((PCEPMetricObject) obj);
- // state = 4;
- //
- // break;
- // }
- // }
- //
- // if (state == 5)
- // break;
- //
- // objects.remove(obj);
- // }
- //
- // return new CompositeRequestSvecObject(svec, of, gc, xro, metrics);
- // }
- //
- // private static PCEPRequestParameterObject copyRP(final PCEPRequestParameterObject origRp, final boolean
- // processed) {
- // return new PCEPRequestParameterObject(origRp.isLoose(), origRp.isBidirectional(), origRp.isReoptimized(),
- // origRp.isMakeBeforeBreak(), origRp.isReportRequestOrder(), origRp.isSuplyOFOnResponse(),
- // origRp.isFragmentation(), origRp.isP2mp(), origRp.isEroCompression(), origRp.getPriority(),
- // origRp.getRequestID(), origRp.getTlvs(), processed, origRp.isIgnored());
- // }
-
@Override
public int getMessageType() {
return TYPE;
}
@Override
- public Message parseMessage(final byte[] buffer) throws PCEPDeserializerException {
- if (buffer == null || buffer.length == 0) {
- throw new PCEPDeserializerException("Pcup message cannot be empty.");
- }
- try {
- final List<Object> objs = parseObjects(buffer);
- return validate(objs);
- } catch (final PCEPDocumentedException e) {
- return createErrorMsg(e.getError());
- }
- }
-
- public Message validate(final List<Object> objects) throws PCEPDeserializerException, PCEPDocumentedException {
+ protected Message validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException, PCEPDocumentedException {
if (objects == null) {
throw new IllegalArgumentException("Passed list can't be null.");
}
+ if (objects.isEmpty()) {
+ throw new PCEPDeserializerException("Pcup message cannot be empty.");
+ }
+
final List<Updates> updateRequests = Lists.newArrayList();
while (!objects.isEmpty()) {
}
@Override
- public Message parseMessage(final byte[] buffer) throws PCEPDeserializerException, PCEPDocumentedException {
- if (buffer == null || buffer.length == 0) {
- throw new PCEPDeserializerException("Initiate message cannot be empty.");
- }
- final List<Object> objs = parseObjects(buffer);
- return validate(objs);
- }
-
- public Message validate(final List<Object> objects) throws PCEPDeserializerException {
+ protected Message validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException {
if (objects == null) {
throw new IllegalArgumentException("Passed list can't be null.");
}
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
}
@Override
- public Bandwidth parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Bandwidth parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.PCEPErrors;
+import org.opendaylight.protocol.pcep.UnknownObject;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
}
@Override
- public ClassType parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Object parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null) {
throw new IllegalArgumentException("Byte array is mandatory.");
}
+ bytes.length);
}
if (!header.isProcessingRule()) {
- throw new PCEPDocumentedException("Processed bit not set", PCEPErrors.P_FLAG_NOT_SET);
+ //LOG.debug("Processed bit not set on CLASS TYPE OBJECT, ignoring it");
+ return null;
}
final ClassTypeBuilder builder = new ClassTypeBuilder();
builder.setClassType(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ClassType(ct));
if (ct < 0 || ct > 8) {
- throw new PCEPDocumentedException("Invalid class type " + ct, PCEPErrors.INVALID_CT);
+ // LOG.info("Invalid class type {}", ct);
+ return new UnknownObject(PCEPErrors.INVALID_CT);
}
return builder.build();
}
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public CClose parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public CClose parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null) {
throw new IllegalArgumentException("Byte array is mandatory.");
}
import org.opendaylight.protocol.concepts.Ipv4Util;
import org.opendaylight.protocol.concepts.Ipv6Util;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
-import org.opendaylight.protocol.pcep.PCEPErrors;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public EndpointsObj parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException,
- PCEPDocumentedException {
+ public EndpointsObj parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null) {
throw new IllegalArgumentException("Array of bytes is mandatory");
}
if (!header.isProcessingRule()) {
- throw new PCEPDocumentedException("Processed flag not set", PCEPErrors.P_FLAG_NOT_SET);
+ //LOG.debug("Processed bit not set on ENDPOINTS OBJECT, ignoring it");
+ return null;
}
final EndpointsObjBuilder builder = new EndpointsObjBuilder();
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public ErrorObject parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public ErrorObject parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null) {
throw new IllegalArgumentException("Array of bytes is mandatory.");
}
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.XROSubobjectHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public Xro parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Xro parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Byte array is mandatory. Can't be null or empty.");
}
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.EROSubobjectHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
}
@Override
- public Ero parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Ero parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Byte array is mandatory. Can't be null or empty.");
}
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
}
@Override
- public Gc parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Gc parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
import java.util.List;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.EROSubobjectHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
}
@Override
- public Iro parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Iro parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Byte array is mandatory. Can't be null or empty.");
}
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nps.concepts.rev130930.Bandwidth;
}
@Override
- public LoadBalancing parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException,
- PCEPDocumentedException {
+ public LoadBalancing parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Byte array is mandatory. Can't be null or empty.");
}
import java.util.BitSet;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public Lsp parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Lsp parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
import java.util.BitSet;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public Lspa parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Lspa parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null) {
throw new IllegalArgumentException("Bytes array is mandatory.");
}
import java.util.BitSet;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
}
@Override
- public Metric parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Metric parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
import java.util.BitSet;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public NoPath parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public NoPath parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public CNotification parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException,
- PCEPDocumentedException {
+ public CNotification parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public Of parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Of parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.PCEPErrors;
+import org.opendaylight.protocol.pcep.UnknownObject;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public Open parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Object parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
final int versionValue = ByteArray.copyBitsRange(bytes[VER_FLAGS_MF_OFFSET], VERSION_SF_OFFSET, VERSION_SF_LENGTH);
if (versionValue != PCEP_VERSION) {
- throw new PCEPDocumentedException("Unsupported PCEP version " + versionValue, PCEPErrors.PCEP_VERSION_NOT_SUPPORTED);
+ // LOG.info("Unsupported PCEP version {}", versionValue);
+ return new UnknownObject(PCEPErrors.PCEP_VERSION_NOT_SUPPORTED);
}
final OpenBuilder builder = new OpenBuilder();
builder.setVersion(new ProtocolVersion((short) versionValue));
import java.util.List;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.EROSubobjectHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
}
@Override
- public PathKey parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public PathKey parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
final PathKeyBuilder builder = new PathKeyBuilder();
builder.setIgnore(header.isIgnore());
builder.setProcessingRule(header.isProcessingRule());
package org.opendaylight.protocol.pcep.impl.object;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.RROSubobjectHandlerRegistry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
}
@Override
- public Rro parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Rro parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Byte array is mandatory. Can't be null or empty.");
}
import java.util.BitSet;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public Rp parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Rp parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
final RpBuilder builder = new RpBuilder();
builder.setIgnore(header.isIgnore());
+
+ //FIXME : change binary files
+ //if (!header.isProcessingRule()) {
+ //LOG.debug("Processed bit not set on RP OBJECT, ignoring it");
+ // return null;
+ //}
+
builder.setProcessingRule(header.isProcessingRule());
builder.setPriority(priority);
import java.util.Arrays;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public Srp parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Srp parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
import java.util.List;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
}
@Override
- public Svec parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException, PCEPDocumentedException {
+ public Svec parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
if (bytes == null || bytes.length == 0) {
throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
}
import java.io.IOException;
import java.math.BigInteger;
+import java.util.Collections;
import java.util.List;
import org.junit.Before;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcrepBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcrptBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcupdBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OfId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OperationalStatus;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PlspId;
tlv1).setLspDbVersion(tlv2).build());
builder.setOpen(b.build());
- assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
final ByteBuf buf = Unpooled.buffer(result.length);
parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
@Test
public void testKeepAliveMsg() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
- final byte[] result = new byte[] { 0, 0, 0, 0 };
+ final byte[] result = new byte[] { };
final PCEPKeepAliveMessageParser parser = new PCEPKeepAliveMessageParser(this.objectRegistry);
final KeepaliveBuilder builder = new KeepaliveBuilder().setKeepaliveMessage(new KeepaliveMessageBuilder().build());
- assertEquals(builder.build(), parser.parseMessage(result));
+ assertEquals(builder.build(), parser.parseMessage(result, Collections.<Message>emptyList()));
final ByteBuf buf = Unpooled.buffer(result.length);
parser.serializeMessage(builder.build(), buf);
assertArrayEquals(result, buf.array());
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));
+ assertEquals(builder.build(), parser.parseMessage(result, Collections.<Message>emptyList()));
final ByteBuf buf = Unpooled.buffer(result.length);
parser.serializeMessage(builder.build(), buf);
assertArrayEquals(result, buf.array());
replies1.add(rBuilder.build());
builder.setReplies(replies1);
- assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
ByteBuf buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
replies2.add(rBuilder2.build());
builder.setReplies(replies2);
- assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
replies3.add(rBuilder.build());
builder.setReplies(replies3);
- assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
replies4.add(rBuilder.build());
builder.setReplies(replies4);
- assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder.build()).build());
builder.setUpdates(updates);
- assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
ByteBuf buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder1.build()).build());
builder.setUpdates(updates1);
- assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
reports.add(new ReportsBuilder().setLsp(this.lsp).build());
builder.setReports(reports);
- assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
ByteBuf buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath(new PathBuilder().setEro(this.ero).setLspa(this.lspa).build()).build());
builder.setReports(reports1);
- assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder.build()).build());
builder.setReports(reports2);
- assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder1.build()).build());
builder.setReports(reports3);
- assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
reqs.add(rBuilder.build());
builder.setRequests(reqs);
- assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
final ByteBuf buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
nots.add(b.build());
builder.setNotifications(nots);
- assertEquals(new PcntfBuilder().setPcntfMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcntfBuilder().setPcntfMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
final ByteBuf buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcntfBuilder().setPcntfMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
builder.setErrors(innerErr);
builder.setErrorType(new SessionBuilder().setOpen(this.open).build());
- assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
ByteBuf buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
builder.setErrors(innerErr);
builder.setErrorType(new RequestBuilder().setRps(rps).build());
- assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result));
+ assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result, Collections.<Message>emptyList()));
buf = Unpooled.buffer(result.length);
parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
assertArrayEquals(result, buf.array());
*/
package org.opendaylight.protocol.pcep.spi;
+import java.util.List;
+
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
public interface MessageParser {
- public Message parseMessage(byte[] buffer) throws PCEPDeserializerException, PCEPDocumentedException;
+ Message parseMessage(byte[] buffer, List<Message> errors) throws PCEPDeserializerException;
}
package org.opendaylight.protocol.pcep.spi;
import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
public interface ObjectParser {
- public Object parseObject(final ObjectHeader header, final byte[] buffer) throws PCEPDeserializerException, PCEPDocumentedException;
+ public Object parseObject(final ObjectHeader header, final byte[] buffer) throws PCEPDeserializerException;
}
package org.opendaylight.protocol.pcep.spi.pojo;
import org.opendaylight.protocol.concepts.HandlerRegistry;
+import org.opendaylight.protocol.pcep.UnknownObject;
import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
import org.opendaylight.protocol.pcep.spi.ObjectParser;
import org.opendaylight.protocol.pcep.spi.ObjectSerializer;
import org.opendaylight.protocol.util.Util;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
import org.opendaylight.yangtools.yang.binding.DataContainer;
import com.google.common.base.Preconditions;
@Override
public ObjectParser getObjectParser(final int objectClass, final int objectType) {
- return this.handlers.getParser(createKey(objectClass, objectType));
+ final ObjectParser ret = this.handlers.getParser(createKey(objectClass, objectType));
+ if (ret != null) {
+ return ret;
+ }
+
+ boolean foundClass = false;
+
+ // FIXME: search the parsers, check classes
+ //e.getError() == PCEPErrors.UNRECOGNIZED_OBJ_CLASS || e.getError() == PCEPErrors.UNRECOGNIZED_OBJ_TYPE
+
+ if (!foundClass) {
+ return new ObjectParser() {
+ @Override
+ public Object parseObject(final ObjectHeader header, final byte[] buffer) {
+ // FIXME: appropriate error (unrecognized object class)
+ return new UnknownObject(null);
+ }
+ };
+
+ } else {
+ return new ObjectParser() {
+ @Override
+ public Object parseObject(final ObjectHeader header, final byte[] buffer) {
+ // FIXME: appropriate error (unrecognized object type)
+ return new UnknownObject(null);
+ }
+ };
+ }
}
@Override