Remove BaseListenerInterface
[netconf.git] / restconf / restconf-nb / src / main / java / org / opendaylight / restconf / nb / rfc8040 / streams / WebSocketSessionHandler.java
index 03542785310a2b044db36134a6bf0300fd992a1e..700624b823c2605501336779251daf6320c975e0 100644 (file)
@@ -9,23 +9,22 @@ package org.opendaylight.restconf.nb.rfc8040.streams;
 
 import com.google.common.base.Strings;
 import java.io.IOException;
-import java.net.InetSocketAddress;
 import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
-import java.util.Optional;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.eclipse.jetty.websocket.api.CloseException;
 import org.eclipse.jetty.websocket.api.RemoteEndpoint;
 import org.eclipse.jetty.websocket.api.Session;
 import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
 import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
 import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
 import org.eclipse.jetty.websocket.api.annotations.WebSocket;
-import org.opendaylight.restconf.nb.rfc8040.streams.listeners.BaseListenerInterface;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -39,7 +38,8 @@ public final class WebSocketSessionHandler implements StreamSessionHandler {
     private static final byte[] PING_PAYLOAD = "ping".getBytes(Charset.defaultCharset());
 
     private final ScheduledExecutorService executorService;
-    private final BaseListenerInterface listener;
+    // FIXME: this really should include formatter etc.
+    private final AbstractStream<?> listener;
     private final int maximumFragmentLength;
     private final int heartbeatInterval;
 
@@ -62,7 +62,7 @@ public final class WebSocketSessionHandler implements StreamSessionHandler {
      * @param heartbeatInterval     Interval in milliseconds of sending of ping control frames to remote endpoint
      *                              to keep session up. Ping control frames are disabled if this parameter is set to 0.
      */
-    WebSocketSessionHandler(final ScheduledExecutorService executorService, final BaseListenerInterface listener,
+    WebSocketSessionHandler(final ScheduledExecutorService executorService, final AbstractStream<?> listener,
             final int maximumFragmentLength, final int heartbeatInterval) {
         this.executorService = executorService;
         this.listener = listener;
@@ -122,9 +122,14 @@ public final class WebSocketSessionHandler implements StreamSessionHandler {
      */
     @OnWebSocketError
     public synchronized void onWebSocketError(final Throwable error) {
-        LOG.warn("An error occurred on web-socket: ", error);
+        if (error instanceof CloseException && error.getCause() instanceof TimeoutException timeout) {
+            // A timeout is expected, do not log the complete stack trace
+            LOG.info("Web-socket closed by timeout: {}", timeout.getMessage());
+        } else {
+            LOG.warn("An error occurred on web-socket: ", error);
+        }
         if (session != null) {
-            LOG.warn("Trying to close web-socket session {} gracefully after error.", session);
+            LOG.info("Trying to close web-socket session {} gracefully after error.", session);
             listener.removeSubscriber(this);
             if (session.isOpen()) {
                 session.close();
@@ -209,27 +214,8 @@ public final class WebSocketSessionHandler implements StreamSessionHandler {
         return parts;
     }
 
-    /**
-     * Get remote endpoint address of the current web-socket session.
-     *
-     * @return If the session exists and is open the {@link InetSocketAddress} wrapped in {@link Optional} is returned.
-     *     Otherwise, {@link Optional#empty()} is returned.
-     */
-    // FIXME: remove this method?
-    public synchronized Optional<InetSocketAddress> getRemoteEndpointAddress() {
-        if (session != null && session.isOpen()) {
-            return Optional.of(session.getRemote().getInetSocketAddress());
-        } else {
-            return Optional.empty();
-        }
-    }
-
     @Override
     public synchronized boolean isConnected() {
-        if (session != null && session.isOpen()) {
-            return true;
-        } else {
-            return false;
-        }
+        return session != null && session.isOpen();
     }
 }
\ No newline at end of file