Refactor exception handling in the OSPF protocol

- removed unnecessary throws of Exception from methods
- converted throws of generic Exception to specific OspfParseException

Change-Id: I9d07167d92f221a234e9eba4c6082deb165afc0b
diff --git a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java
index 7c1626b..be503c2 100644
--- a/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java
+++ b/protocols/ospf/ctl/src/main/java/org/onosproject/ospf/controller/area/OspfInterfaceImpl.java
@@ -40,6 +40,7 @@
 import org.onosproject.ospf.controller.lsdb.OspfLsdbImpl;
 import org.onosproject.ospf.controller.util.OspfEligibleRouter;
 import org.onosproject.ospf.controller.util.OspfInterfaceType;
+import org.onosproject.ospf.exceptions.OspfParseException;
 import org.onosproject.ospf.protocol.lsa.LsaHeader;
 import org.onosproject.ospf.protocol.lsa.OpaqueLsaHeader;
 import org.onosproject.ospf.protocol.ospfpacket.OspfMessageWriter;
@@ -517,11 +518,9 @@
 
     /**
      * Represents an interface is up and connected.
-     *
-     * @throws Exception might throws exception
      */
     @Override
-    public void interfaceUp() throws Exception {
+    public void interfaceUp() {
         log.debug("OSPFInterfaceChannelHandler::interfaceUp...!!!");
         if (interfaceType() == OspfInterfaceType.POINT_TO_POINT.value()) {
             setState(OspfInterfaceState.POINT2POINT);
@@ -552,9 +551,8 @@
      * Gets called when a BDR was detected before the wait timer expired.
      *
      * @param ch channel instance
-     * @throws Exception might throws exception
      */
-    public void backupSeen(Channel ch) throws Exception {
+    public void backupSeen(Channel ch) {
         log.debug("OSPFInterfaceChannelHandler::backupSeen ");
         if (state() == OspfInterfaceState.WAITING) {
             electRouter(ch);
@@ -565,9 +563,8 @@
      * Gets called when no hello message received for particular period.
      *
      * @param ch channel instance
-     * @throws Exception might throws exception
      */
-    public void waitTimer(Channel ch) throws Exception {
+    public void waitTimer(Channel ch) {
         log.debug("OSPFInterfaceChannelHandler::waitTimer ");
         //According to RFC-2328 section 9.4
         if (state() == OspfInterfaceState.WAITING) {
@@ -579,9 +576,8 @@
      * Initiates DR election process.
      *
      * @param ch netty channel instance
-     * @throws Exception might throws exception
      */
-    public void callDrElection(Channel ch) throws Exception {
+    public void callDrElection(Channel ch) {
         log.debug("OSPFInterfaceChannelHandler::callDrElection ");
         //call when timer expired
         //no hello message received for particular interval
@@ -592,10 +588,8 @@
 
     /**
      * Neighbor change event is triggered when the router priority gets changed.
-     *
-     * @throws Exception might throws exception
      */
-    public void neighborChange() throws Exception {
+    public void neighborChange() {
         log.debug("OSPFInterfaceChannelHandler::neighborChange ");
         if (state() == OspfInterfaceState.DR || state() == OspfInterfaceState.BDR ||
                 state() == OspfInterfaceState.DROTHER) {
@@ -623,35 +617,38 @@
      *
      * @param ospfMessage received OSPF message
      * @param ctx         channel handler context instance.
-     * @throws Exception might throws exception
      */
     @Override
-    public void processOspfMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+    public void processOspfMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) {
         log.debug("OspfChannelHandler::processOspfMessage...!!!");
 
         if (!validateMessage(ospfMessage)) {
             return;
         }
 
-        switch (ospfMessage.ospfMessageType().value()) {
-            case OspfParameters.HELLO:
-                processHelloMessage(ospfMessage, ctx);
-                break;
-            case OspfParameters.DD:
-                processDdMessage(ospfMessage, ctx);
-                break;
-            case OspfParameters.LSREQUEST:
-                processLsRequestMessage(ospfMessage, ctx);
-                break;
-            case OspfParameters.LSUPDATE:
-                processLsUpdateMessage(ospfMessage, ctx);
-                break;
-            case OspfParameters.LSACK:
-                processLsAckMessage(ospfMessage, ctx);
-                break;
-            default:
-                log.debug("Unknown packet to process...!!!");
-                break;
+        try {
+            switch (ospfMessage.ospfMessageType().value()) {
+                case OspfParameters.HELLO:
+                    processHelloMessage(ospfMessage, ctx);
+                    break;
+                case OspfParameters.DD:
+                    processDdMessage(ospfMessage, ctx);
+                    break;
+                case OspfParameters.LSREQUEST:
+                    processLsRequestMessage(ospfMessage, ctx);
+                    break;
+                case OspfParameters.LSUPDATE:
+                    processLsUpdateMessage(ospfMessage, ctx);
+                    break;
+                case OspfParameters.LSACK:
+                    processLsAckMessage(ospfMessage, ctx);
+                    break;
+                default:
+                    log.debug("Unknown packet to process...!!!");
+                    break;
+            }
+        } catch (OspfParseException ope) {
+            log.debug("Error parsing packet", ope);
         }
     }
 
@@ -660,9 +657,8 @@
      *
      * @param ospfMessage OSPF message.
      * @return true if it is a valid else false.
-     * @throws Exception might throws exception
      */
-    private boolean validateMessage(OspfMessage ospfMessage) throws Exception {
+    private boolean validateMessage(OspfMessage ospfMessage) {
         boolean isValid = true;
         OspfPacketHeader header = (OspfPacketHeader) ospfMessage;
 
@@ -688,7 +684,7 @@
             }
 
             //According to RFC-2328 (8.2)
-            /**
+            /*
              * ABR should receive packets from backbone 0.0.0.0 as we are not acting as ABR
              * we are rejecting the packet.
              */
@@ -715,9 +711,8 @@
      *
      * @param ospfMessage OSPF message instance.
      * @param ctx         context instance.
-     * @throws Exception might throws exception
      */
-    void processHelloMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+    void processHelloMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) {
         Channel channel = ctx.getChannel();
         log.debug("OspfChannelHandler::processHelloMessage...!!!");
         HelloPacket helloPacket = (HelloPacket) ospfMessage;
@@ -902,9 +897,8 @@
      *
      * @param ospfMessage OSPF message instance.
      * @param ctx         channel handler context instance
-     * @throws Exception might throws exception
      */
-    void processDdMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+    void processDdMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) {
         log.debug("OspfChannelHandler::processDdMessage...!!!");
         Channel channel = ctx.getChannel();
         DdPacket ddPacket = (DdPacket) ospfMessage;
@@ -1075,9 +1069,8 @@
      *
      * @param ospfMessage OSPF message instance.
      * @param ctx         channel handler context instance.
-     * @throws Exception might throws exception
      */
-    void processLsRequestMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+    void processLsRequestMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) {
         log.debug("OspfChannelHandler::processLsRequestMessage...!!!");
         Channel channel = ctx.getChannel();
         LsRequest lsrPacket = (LsRequest) ospfMessage;
@@ -1114,18 +1107,20 @@
                         // to verify length of the LSA
                         LsaWrapper wrapper = ospfArea.getLsa(lsRequest.lsType(), lsRequest.linkStateId(),
                                                              lsRequest.ownRouterId());
-                        OspfLsa ospflsa = wrapper.ospfLsa();
-                        if ((currentLength + ((LsaWrapperImpl) wrapper).lsaHeader().lsPacketLen()) >= maxSize) {
-                            listItr.previous();
-                            break;
-                        }
-                        if (ospflsa != null) {
-                            lsupdate.addLsa(ospflsa);
-                            noLsa++;
+                        if (wrapper != null) {
+                            OspfLsa ospflsa = wrapper.ospfLsa();
+                            if ((currentLength + ((LsaWrapperImpl) wrapper).lsaHeader().lsPacketLen()) >= maxSize) {
+                                listItr.previous();
+                                break;
+                            }
+                            if (ospflsa != null) {
+                                lsupdate.addLsa(ospflsa);
+                                noLsa++;
 
-                            currentLength = currentLength + ((LsaWrapperImpl) wrapper).lsaHeader().lsPacketLen();
-                        } else {
-                            nbr.badLSReq(channel);
+                                currentLength = currentLength + ((LsaWrapperImpl) wrapper).lsaHeader().lsPacketLen();
+                            } else {
+                                nbr.badLSReq(channel);
+                            }
                         }
                     }
                     lsupdate.setNumberOfLsa(noLsa);
@@ -1149,9 +1144,9 @@
      *
      * @param ospfMessage OSPF message instance.
      * @param ctx         channel handler context instance.
-     * @throws Exception might throws exception
+     * @throws OspfParseException on parsing error
      */
-    void processLsUpdateMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+    void processLsUpdateMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws OspfParseException {
         log.debug("OspfChannelHandler::processLsUpdateMessage");
         LsUpdate lsUpdate = (LsUpdate) ospfMessage;
         String neighbourId = lsUpdate.routerId().toString();
@@ -1182,9 +1177,8 @@
      *
      * @param ospfMessage OSPF message instance.
      * @param ctx         channel handler context instance.
-     * @throws Exception might throws exception
      */
-    void processLsAckMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) throws Exception {
+    void processLsAckMessage(OspfMessage ospfMessage, ChannelHandlerContext ctx) {
         log.debug("OspfChannelHandler::processLsAckMessage");
         LsAcknowledge lsAckPacket = (LsAcknowledge) ospfMessage;
         //check it is present in listOfNeighbors
@@ -1307,9 +1301,8 @@
      * Performs DR election.
      *
      * @param ch Netty Channel instance.
-     * @throws Exception might throws exception
      */
-    public void electRouter(Channel ch) throws Exception {
+    public void electRouter(Channel ch) {
 
         Ip4Address currentDr = dr();
         Ip4Address currentBdr = bdr();