diff --git a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/annotations/JsrEvents.java b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/annotations/JsrEvents.java index 7cfa56c598e..cb11d4dd1b1 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/annotations/JsrEvents.java +++ b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/annotations/JsrEvents.java @@ -161,6 +161,21 @@ public class JsrEvents onOpen.call(websocket,config); } + public void callPong(RemoteEndpoint.Async endpoint, Object websocket, ByteBuffer pong) throws DecodeException, IOException + { + if (onPong == null) + { + return; + } + + Object ret = onPong.call(websocket,pong); + if (ret != null) + { + LOG.debug("returning: {}",ret); + endpoint.sendObject(ret); + } + } + public void callText(RemoteEndpoint.Async endpoint, Object websocket, String text, boolean fin) throws DecodeException { if (onText == null) diff --git a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/endpoints/JsrAnnotatedEventDriver.java b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/endpoints/JsrAnnotatedEventDriver.java index ce009eb1ea3..e05baacd5ca 100644 --- a/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/endpoints/JsrAnnotatedEventDriver.java +++ b/jetty-websocket/javax-websocket-client-impl/src/main/java/org/eclipse/jetty/websocket/jsr356/endpoints/JsrAnnotatedEventDriver.java @@ -213,6 +213,19 @@ public class JsrAnnotatedEventDriver extends AbstractJsrEventDriver implements E } } + @Override + public void onPong(ByteBuffer buffer) + { + try + { + events.callPong(jsrsession.getAsyncRemote(),websocket,buffer); + } + catch (DecodeException | IOException e) + { + onFatalError(e); + } + } + @Override public void onReader(Reader reader) { diff --git a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/events/AbstractEventDriver.java b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/events/AbstractEventDriver.java index de2665c92b5..881e400e858 100644 --- a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/events/AbstractEventDriver.java +++ b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/events/AbstractEventDriver.java @@ -140,10 +140,15 @@ public abstract class AbstractEventDriver implements IncomingFrames, EventDriver { pongBuf = ByteBuffer.allocate(0); } - onPong(pongBuf); + onPing(frame.getPayload()); session.getRemote().sendPong(pongBuf); break; } + case OpCode.PONG: + { + onPong(frame.getPayload()); + break; + } case OpCode.BINARY: { onBinaryFrame(frame.getPayload(),frame.isFin()); @@ -195,6 +200,12 @@ public abstract class AbstractEventDriver implements IncomingFrames, EventDriver { /* TODO: provide annotation in future */ } + + @Override + public void onPing(ByteBuffer buffer) + { + /* TODO: provide annotation in future */ + } @Override public void openSession(WebSocketSession session) diff --git a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/events/EventDriver.java b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/events/EventDriver.java index c8684abcdb0..ff0d584c7a4 100644 --- a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/events/EventDriver.java +++ b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/events/EventDriver.java @@ -51,6 +51,8 @@ public interface EventDriver extends IncomingFrames public void onInputStream(InputStream stream); + public void onPing(ByteBuffer buffer); + public void onPong(ByteBuffer buffer); public void onReader(Reader reader);