BUG-50 : fixed several bugs in parsing.
[bgpcep.git] / pcep / impl / src / main / java / org / opendaylight / protocol / pcep / impl / message / PcinitiateMessageParser.java
index 51ec4dcadd55bac607e841b657fc8871b48de972..544b1dc0596bacf4055f4f4a9788c0a7153ccae0 100644 (file)
@@ -133,7 +133,7 @@ public class PcinitiateMessageParser extends AbstractMessageParser {
 
                Object obj;
                State state = State.Init;
-               while (!objects.isEmpty()) {
+               while (!objects.isEmpty() && !state.equals(State.End)) {
                        obj = objects.get(0);
 
                        switch (state) {
@@ -169,24 +169,29 @@ public class PcinitiateMessageParser extends AbstractMessageParser {
                                        break;
                                }
                        case MetricIn:
-                               state = State.End;
+                               state = State.IroIn;
                                if (obj instanceof Iro) {
                                        builder.setIro((Iro) obj);
                                        break;
                                }
+                       case IroIn:
+                               state = State.End;
+                               break;
                        case End:
                                break;
                        default:
                                throw new PCEPDocumentedException("Unknown object", ((UnknownObject) obj).getError());
                        }
-                       objects.remove(0);
+                       if (!state.equals(State.End)) {
+                               objects.remove(0);
+                       }
                }
                builder.setMetrics(metrics);
                return builder.build();
        }
 
        private enum State {
-               Init, EndpointsIn, EroIn, LspaIn, BandwidthIn, MetricIn, End
+               Init, EndpointsIn, EroIn, LspaIn, BandwidthIn, MetricIn, IroIn, End
        }
 
        @Override