diff options
Diffstat (limited to 'jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/fragment/FragmentExtension.java')
-rw-r--r-- | jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/fragment/FragmentExtension.java | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/fragment/FragmentExtension.java b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/fragment/FragmentExtension.java index 13f13a5d70..8bbc63367a 100644 --- a/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/fragment/FragmentExtension.java +++ b/jetty-websocket/websocket-common/src/main/java/org/eclipse/jetty/websocket/common/extensions/fragment/FragmentExtension.java @@ -21,13 +21,12 @@ package org.eclipse.jetty.websocket.common.extensions.fragment; import java.nio.ByteBuffer; -import org.eclipse.jetty.websocket.api.WebSocketException; import org.eclipse.jetty.websocket.api.WriteCallback; import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig; import org.eclipse.jetty.websocket.api.extensions.Frame; import org.eclipse.jetty.websocket.common.OpCode; -import org.eclipse.jetty.websocket.common.WebSocketFrame; import org.eclipse.jetty.websocket.common.extensions.AbstractExtension; +import org.eclipse.jetty.websocket.common.frames.DataFrame; /** * Fragment Extension @@ -35,9 +34,15 @@ import org.eclipse.jetty.websocket.common.extensions.AbstractExtension; public class FragmentExtension extends AbstractExtension { private int maxLength = -1; + + @Override + public String getName() + { + return "fragment"; + } @Override - public void incomingError(WebSocketException e) + public void incomingError(Throwable e) { // Pass thru nextIncomingError(e); @@ -53,7 +58,7 @@ public class FragmentExtension extends AbstractExtension @Override public void outgoingFrame(Frame frame, WriteCallback callback) { - if (frame.getType().isControl()) + if (OpCode.isControlFrame(frame.getOpCode())) { // Cannot fragment Control Frames nextOutgoingFrame(frame,callback); @@ -62,7 +67,6 @@ public class FragmentExtension extends AbstractExtension int length = frame.getPayloadLength(); - byte opcode = frame.getType().getOpCode(); // original opcode ByteBuffer payload = frame.getPayload().slice(); int originalLimit = payload.limit(); int currentPosition = payload.position(); @@ -79,10 +83,8 @@ public class FragmentExtension extends AbstractExtension // break apart payload based on maxLength rules while (length > maxLength) { - WebSocketFrame frag = new WebSocketFrame(frame); - frag.setOpCode(opcode); + DataFrame frag = new DataFrame(frame,continuation); frag.setFin(false); // always false here - frag.setContinuation(continuation); payload.position(currentPosition); payload.limit(Math.min(payload.position() + maxLength,originalLimit)); frag.setPayload(payload); @@ -91,16 +93,13 @@ public class FragmentExtension extends AbstractExtension nextOutgoingFrame(frag,null); length -= maxLength; - opcode = OpCode.CONTINUATION; continuation = true; currentPosition = payload.limit(); } // write remaining - WebSocketFrame frag = new WebSocketFrame(frame); - frag.setOpCode(opcode); + DataFrame frag = new DataFrame(frame,continuation); frag.setFin(frame.isFin()); // use original fin - frag.setContinuation(continuation); payload.position(currentPosition); payload.limit(originalLimit); frag.setPayload(payload); |