Fixed exception handling when shutting down a COPS/Ccaps connection. 32/19832/2
authorSteven Pisarski <s.pisarski@cablelabs.com>
Thu, 7 May 2015 18:14:17 +0000 (12:14 -0600)
committerThomas Kee <xsited@yahoo.com>
Fri, 8 May 2015 19:52:03 +0000 (12:52 -0700)
Change-Id: Ic442b16efc95d60d8d3a0924428aa245c19171a4
Signed-off-by: Steven Pisarski <s.pisarski@cablelabs.com>
packetcable-driver/src/main/java/org/umu/cops/COPSConnection.java
packetcable-driver/src/main/java/org/umu/cops/prpdp/COPSPdpAgent.java
packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/PCMMService.java

index 425b4d4d16132c709832ac3a58a4fc3082f0dcaa..c6b56a2c17a8f3e190717da5896782d1cb618b95 100644 (file)
@@ -80,10 +80,14 @@ public abstract class COPSConnection implements Runnable {
 
     /**
      * Closes the socket to the PEP
-     * @throws IOException
      */
-    public void close() throws IOException {
-        if (!_sock.isClosed()) _sock.close();
+    public void close() {
+        if (!_sock.isClosed())
+            try {
+                _sock.close();
+            } catch (IOException e) {
+                logger.error("Error closing socket", e);
+            }
     }
 
     /**
index cc66cacb54b998c306f5ecf3ead5cee00567c70d..637d84d22e2ee31910c610d15689ae3c8266974b 100644 (file)
@@ -150,10 +150,8 @@ public class COPSPdpAgent {
     /**
      * Disconnects a PEP and stops the listener thread
      * @param error COPS Error to be reported as a reason
-     * @throws COPSException
-     * @throws IOException
      */
-    public void disconnect(final COPSError error) throws COPSException, IOException {
+    public void disconnect(final COPSError error) {
         if (_pdpConn != null) {
             sendCloseMessage(_socket, error.getErrCode(), error.getErrSubCode(), "Disconnecting from PDP requested");
             _pdpConn.close();
@@ -163,8 +161,14 @@ public class COPSPdpAgent {
         if (_thread != null) _thread.interrupt();
         else logger.warn("Unable to locate PDP connection thread. Cannot stop it.");
 
-        if (_socket.isConnected()) _socket.close();
+        if (_socket.isConnected())
+            try {
+                _socket.close();
+            } catch (IOException e) {
+                logger.error("Error closing socket", e);
+            }
 
+        _socket = null;
         _pepId = null;
         _pdpConn = null;
         _thread = null;
@@ -249,17 +253,15 @@ public class COPSPdpAgent {
      * @throws COPSException
      */
     private void sendCloseMessage(final Socket conn, final ErrorTypes errorType, final ErrorTypes errorSubType,
-                                  final String msg)
-            throws COPSException {
+                                  final String msg) {
         final COPSClientCloseMsg closeMsg = new COPSClientCloseMsg(_clientType,
                 new COPSError(errorType, errorSubType), null, null);
         try {
+            logger.info("Sending client-close message. Reason: " + msg);
             closeMsg.writeData(conn);
         } catch (IOException unae) {
             logger.error("Exception writing data", unae);
         }
-
-        throw new COPSException(msg);
     }
 
     /**
index e1e56bcae0f993467986a434877fed0779f92d89..3ea86486519927846a2b9f867c76037e477fe3c3 100644 (file)
@@ -16,10 +16,8 @@ import org.slf4j.LoggerFactory;
 import org.umu.cops.prpdp.COPSPdpException;
 import org.umu.cops.stack.COPSError;
 import org.umu.cops.stack.COPSError.ErrorTypes;
-import org.umu.cops.stack.COPSException;
 
 import javax.annotation.concurrent.ThreadSafe;
-import java.io.IOException;
 import java.net.InetAddress;
 import java.util.Map;
 
@@ -221,12 +219,8 @@ public class PCMMService {
 
                public void disconnect() {
                        logger.info("CcapClient: disconnect(): {}:{}", ipv4, port);
-                       try {
-                               pcmmPdp.disconnect(new COPSError(ErrorTypes.SHUTTING_DOWN, ErrorTypes.NA));
-                               isConnected = false;
-                       } catch (COPSException | IOException e) {
-                               logger.error("CcapClient: disconnect(): {}:{} FAILED: {}", ipv4, port, e.getMessage());
-                       }
+                       pcmmPdp.disconnect(new COPSError(ErrorTypes.SHUTTING_DOWN, ErrorTypes.NA));
+                       isConnected = false;
                }
 
                // TODO - consider returning a new PCMMGateReq object or a future here instead of setting the ID on the old