List of usage examples for io.netty.handler.codec.http.websocketx WebSocketFrame isFinalFragment
public boolean isFinalFragment()
From source file:com.tc.websocket.server.handler.WebSocketServerHandler.java
License:Apache License
/** * Handle web socket frame.//from w ww . java2s.c o m * * @param ctx the ctx * @param frame the frame */ private void handleWebSocketFrame(ChannelHandlerContext ctx, WebSocketFrame frame) { try { // Check for closing frame if (frame instanceof CloseWebSocketFrame) { dominoServer.onClose(this.newWrapper(ctx)); handshaker.close(ctx.channel(), (CloseWebSocketFrame) frame.retain()); return; } if (frame instanceof PingWebSocketFrame) { ctx.channel().write(new PongWebSocketFrame(frame.content().retain())); return; } if (frame instanceof PongWebSocketFrame) { return;//do nothing. } if (frame instanceof TextWebSocketFrame) { String message = ((TextWebSocketFrame) frame).text(); textBuffer.append(message); } else if (frame instanceof ContinuationWebSocketFrame) { textBuffer.append(((ContinuationWebSocketFrame) frame).text()); } if (frame.isFinalFragment()) { dominoServer.onMessage(this.newWrapper(ctx), textBuffer.toString()); textBuffer = new StringBuilder(); } } catch (Exception e) { e.printStackTrace(); } }
From source file:com.yeetor.androidcontrol.WSSocketHandler.java
License:Open Source License
private void handlerWebSocketFrame(ChannelHandlerContext ctx, WebSocketFrame frame) { // ?/*w w w . ja v a 2 s.c o m*/ if (frame instanceof CloseWebSocketFrame) { handshaker.close(ctx.channel(), (CloseWebSocketFrame) frame.retain()); return; } // ?ping? if (frame instanceof PingWebSocketFrame) { ctx.channel().write(new PongWebSocketFrame(frame.content().retain())); return; } if (frame instanceof TextWebSocketFrame) { if (event != null) { event.onTextMessage(ctx, ((TextWebSocketFrame) frame).text()); } } else if (frame instanceof BinaryWebSocketFrame || frame instanceof ContinuationWebSocketFrame) { if (event != null) { ByteBuf byteBuf = frame.content(); byte[] bytes = new byte[byteBuf.readableBytes()]; byteBuf.getBytes(0, bytes); binaryCache = ArrayUtils.addAll(binaryCache, bytes); if (frame.isFinalFragment()) { byte[] b = binaryCache; binaryCache = new byte[0]; event.onBinaryMessage(ctx, b); } } } }
From source file:com.yeetor.server.handler.WSHandler.java
License:Open Source License
private void handlerWebSocketFrame(ChannelHandlerContext ctx, WebSocketFrame frame) { // ?//from w ww .ja v a2s .co m if (frame instanceof CloseWebSocketFrame && handshaker != null) { handshaker.close(ctx.channel(), (CloseWebSocketFrame) frame.retain()); if (eventListener != null) { eventListener.onDisconnect(ctx); } return; } // ?ping? if (frame instanceof PingWebSocketFrame) { ctx.channel().write(new PongWebSocketFrame(frame.content().retain())); return; } if (frame instanceof TextWebSocketFrame) { if (eventListener != null) { eventListener.onTextMessage(ctx, ((TextWebSocketFrame) frame).text()); } } else if (frame instanceof BinaryWebSocketFrame || frame instanceof ContinuationWebSocketFrame) { ByteBuf byteBuf = frame.content(); byte[] bytes = new byte[byteBuf.readableBytes()]; byteBuf.getBytes(0, bytes); binaryCache = ArrayUtils.addAll(binaryCache, bytes); if (frame.isFinalFragment()) { byte[] b = binaryCache; binaryCache = new byte[0]; if (eventListener != null) { eventListener.onBinaryMessage(ctx, b); } } } }
From source file:de.saxsys.synchronizefx.netty.websockets.ByteBufToWebSocketFrameCodec.java
License:Open Source License
@Override protected void decode(final ChannelHandlerContext ctx, final WebSocketFrame msg, final List<Object> out) throws Exception { if (msg instanceof BinaryWebSocketFrame) { ByteBuf content = msg.content(); // the content is passed to other handlers so they need to be retained. content.retain();//from ww w.j a va 2s . c o m fragments.add(content); if (msg.isFinalFragment()) { if (fragments.size() == 1) { out.add(fragments.get(0)); } else { ByteBuf[] array = fragments.toArray(BYTE_BUF_TYPE); out.add(Unpooled.wrappedBuffer(array)); } fragments.clear(); } } else if (msg instanceof TextWebSocketFrame) { LOG.warn("Recieved a Websocket text frame. This was not expected. Ignoring it."); } }
From source file:io.vertx.core.http.impl.Http1xConnectionBase.java
License:Open Source License
WebSocketFrameInternal decodeFrame(WebSocketFrame msg) { ByteBuf payload = safeBuffer(msg, chctx.alloc()); boolean isFinal = msg.isFinalFragment(); FrameType frameType;/*from w w w.j a va 2 s .c om*/ if (msg instanceof BinaryWebSocketFrame) { frameType = FrameType.BINARY; } else if (msg instanceof CloseWebSocketFrame) { frameType = FrameType.CLOSE; } else if (msg instanceof PingWebSocketFrame) { frameType = FrameType.PING; } else if (msg instanceof PongWebSocketFrame) { frameType = FrameType.PONG; } else if (msg instanceof TextWebSocketFrame) { frameType = FrameType.TEXT; } else if (msg instanceof ContinuationWebSocketFrame) { frameType = FrameType.CONTINUATION; } else { throw new IllegalStateException("Unsupported websocket msg " + msg); } return new WebSocketFrameImpl(frameType, payload, isFinal); }
From source file:nikoladasm.aspark.server.ServerHandler.java
License:Open Source License
private void handleWebSocketFrame(ChannelHandlerContext ctx, WebSocketFrame frame) throws Exception { WebSocketContextImpl wctx = ctx.channel().attr(WEBSOCKET_CONTEXT_ATTR_KEY).get(); WebSocketHandler wsHandler = ctx.channel().attr(WEBSOCKET_HANDLER_ATTR_KEY).get(); if (frame instanceof CloseWebSocketFrame) { WebSocketServerHandshaker handshaker = ctx.channel().attr(HANDSHAKER_ATTR_KEY).get(); if (handshaker != null) { frame.retain();/* w w w. java2 s . c om*/ handshaker.close(ctx.channel(), (CloseWebSocketFrame) frame); if (wsHandler != null) { ctx.channel().attr(WEBSOCKET_HANDLER_ATTR_KEY).remove(); ctx.channel().attr(WEBSOCKET_CONTEXT_ATTR_KEY).remove(); String reason = ((CloseWebSocketFrame) frame).reasonText(); int statusCode = ((CloseWebSocketFrame) frame).statusCode(); wsHandler.onClose(wctx, statusCode, reason); } } else { ctx.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE); } return; } if (wsHandler == null) return; if (frame instanceof PingWebSocketFrame) { frame.content().retain(); ctx.channel().writeAndFlush(new PongWebSocketFrame(frame.content())); return; } if (frame instanceof PongWebSocketFrame) { return; } if (frame instanceof TextWebSocketFrame) { wctx.textFrameBegin(true); String request = ((TextWebSocketFrame) frame).text(); if (frame.isFinalFragment()) { wsHandler.onMessage(wctx, request); } else { wctx.stringBuilder().append(request); } return; } if (frame instanceof BinaryWebSocketFrame) { wctx.textFrameBegin(false); byte[] request = new byte[((BinaryWebSocketFrame) frame).content().readableBytes()]; ((BinaryWebSocketFrame) frame).content().readBytes(request); if (frame.isFinalFragment()) { wsHandler.onMessage(wctx, request); } else { wctx.frameBuffer().writeBytes(request); } return; } if (frame instanceof ContinuationWebSocketFrame) { if (wctx.textFrameBegin()) { String request = ((ContinuationWebSocketFrame) frame).text(); wctx.stringBuilder().append(request); if (frame.isFinalFragment()) { wsHandler.onMessage(wctx, wctx.stringBuilder().toString()); wctx.stringBuilder(new StringBuilder()); } } else { byte[] request = new byte[((BinaryWebSocketFrame) frame).content().readableBytes()]; ((BinaryWebSocketFrame) frame).content().readBytes(request); wctx.frameBuffer().writeBytes(request); if (frame.isFinalFragment()) { request = new byte[wctx.frameBuffer().readableBytes()]; wctx.frameBuffer().readBytes(request); wsHandler.onMessage(wctx, request); wctx.frameBuffer().clear(); } } return; } }
From source file:org.asynchttpclient.netty.handler.WebSocketHandler.java
License:Open Source License
private void handleFrame(Channel channel, WebSocketFrame frame, WebSocketUpgradeHandler handler, NettyWebSocket webSocket) throws Exception { if (frame instanceof CloseWebSocketFrame) { Channels.setDiscard(channel); CloseWebSocketFrame closeFrame = (CloseWebSocketFrame) frame; webSocket.onClose(closeFrame.statusCode(), closeFrame.reasonText()); Channels.silentlyCloseChannel(channel); } else {/*from ww w. ja v a 2s. co m*/ ByteBuf buf = frame.content(); if (buf != null && buf.readableBytes() > 0) { HttpResponseBodyPart part = config.getResponseBodyPartFactory().newResponseBodyPart(buf, frame.isFinalFragment()); handler.onBodyPartReceived(part); if (frame instanceof BinaryWebSocketFrame) { webSocket.onBinaryFragment(part); } else if (frame instanceof TextWebSocketFrame) { webSocket.onTextFragment(part); } else if (frame instanceof PingWebSocketFrame) { webSocket.onPing(part); } else if (frame instanceof PongWebSocketFrame) { webSocket.onPong(part); } } } }
From source file:org.asynchttpclient.netty.handler.WebSocketProtocol.java
License:Open Source License
@Override public void handle(Channel channel, NettyResponseFuture<?> future, Object e) throws Exception { if (e instanceof HttpResponse) { HttpResponse response = (HttpResponse) e; Channels.setAttribute(channel, new UpgradeCallback(future, channel, response)); } else if (e instanceof WebSocketFrame) { final WebSocketFrame frame = (WebSocketFrame) e; WebSocketUpgradeHandler handler = WebSocketUpgradeHandler.class.cast(future.getAsyncHandler()); NettyWebSocket webSocket = NettyWebSocket.class.cast(handler.onCompleted()); invokeOnSucces(channel, handler); if (webSocket != null) { if (frame instanceof CloseWebSocketFrame) { Channels.setDiscard(channel); CloseWebSocketFrame closeFrame = CloseWebSocketFrame.class.cast(frame); webSocket.onClose(closeFrame.statusCode(), closeFrame.reasonText()); } else { ByteBuf buf = frame.content(); if (buf != null && buf.readableBytes() > 0) { try { NettyResponseBodyPart part = nettyConfig.getBodyPartFactory().newResponseBodyPart(buf, frame.isFinalFragment()); handler.onBodyPartReceived(part); if (frame instanceof BinaryWebSocketFrame) { webSocket.onBinaryFragment(part); } else if (frame instanceof TextWebSocketFrame) { webSocket.onTextFragment(part); } else if (frame instanceof PingWebSocketFrame) { webSocket.onPing(part); } else if (frame instanceof PongWebSocketFrame) { webSocket.onPong(part); }/*from www . j a v a 2s .com*/ } finally { buf.release(); } } } } else { logger.debug("UpgradeHandler returned a null NettyWebSocket "); } } else { logger.error("Invalid message {}", e); } }
From source file:org.asynchttpclient.providers.netty.handler.WebSocketProtocol.java
License:Apache License
@Override public void handle(Channel channel, NettyResponseFuture<?> future, Object e) throws Exception { WebSocketUpgradeHandler h = WebSocketUpgradeHandler.class.cast(future.getAsyncHandler()); Request request = future.getRequest(); if (e instanceof HttpResponse) { HttpResponse response = (HttpResponse) e; HttpResponseStatus status = new ResponseStatus(future.getURI(), response, config); HttpResponseHeaders responseHeaders = new ResponseHeaders(future.getURI(), response.headers()); if (handleResponseFiltersReplayRequestAndExit(channel, future, status, responseHeaders)) { return; }//from w w w. j a va2 s. c om future.setHttpHeaders(response.headers()); if (handleRedirectAndExit(request, future, response, channel)) return; boolean validStatus = response.getStatus().equals(SWITCHING_PROTOCOLS); boolean validUpgrade = response.headers().get(HttpHeaders.Names.UPGRADE) != null; String c = response.headers().get(HttpHeaders.Names.CONNECTION); if (c == null) { c = response.headers().get(HttpHeaders.Names.CONNECTION.toLowerCase(Locale.ENGLISH)); } boolean validConnection = c != null && c.equalsIgnoreCase(HttpHeaders.Values.UPGRADE); status = new ResponseStatus(future.getURI(), response, config); final boolean statusReceived = h.onStatusReceived(status) == STATE.UPGRADE; if (!statusReceived) { try { h.onCompleted(); } finally { future.done(); } return; } final boolean headerOK = h.onHeadersReceived(responseHeaders) == STATE.CONTINUE; if (!headerOK || !validStatus || !validUpgrade || !validConnection) { channels.abort(future, new IOException("Invalid handshake response")); return; } String accept = response.headers().get(HttpHeaders.Names.SEC_WEBSOCKET_ACCEPT); String key = WebSocketUtil.getAcceptKey( future.getNettyRequest().getHttpRequest().headers().get(HttpHeaders.Names.SEC_WEBSOCKET_KEY)); if (accept == null || !accept.equals(key)) { channels.abort(future, new IOException(String.format("Invalid challenge. Actual: %s. Expected: %s", accept, key))); } Channels.upgradePipelineForWebSockets(channel); invokeOnSucces(channel, h); future.done(); } else if (e instanceof WebSocketFrame) { final WebSocketFrame frame = (WebSocketFrame) e; NettyWebSocket webSocket = NettyWebSocket.class.cast(h.onCompleted()); invokeOnSucces(channel, h); if (webSocket != null) { if (frame instanceof CloseWebSocketFrame) { Channels.setDefaultAttribute(channel, DiscardEvent.INSTANCE); CloseWebSocketFrame closeFrame = CloseWebSocketFrame.class.cast(frame); webSocket.onClose(closeFrame.statusCode(), closeFrame.reasonText()); } else { ByteBuf buf = frame.content(); if (buf != null && buf.readableBytes() > 0) { try { NettyResponseBodyPart rp = nettyConfig.getBodyPartFactory().newResponseBodyPart(buf, frame.isFinalFragment()); h.onBodyPartReceived(rp); if (frame instanceof BinaryWebSocketFrame) { webSocket.onBinaryFragment(rp.getBodyPartBytes(), frame.isFinalFragment()); } else { webSocket.onTextFragment(buf.toString(StandardCharsets.UTF_8), frame.isFinalFragment()); } } finally { buf.release(); } } } } else { LOGGER.debug("UpgradeHandler returned a null NettyWebSocket "); } } else if (e instanceof LastHttpContent) { // FIXME what to do with this kind of messages? } else { LOGGER.error("Invalid message {}", e); } }
From source file:org.asynchttpclient.providers.netty4.handler.WebSocketProtocol.java
License:Open Source License
@Override public void handle(Channel channel, NettyResponseFuture<?> future, Object e) throws Exception { WebSocketUpgradeHandler handler = WebSocketUpgradeHandler.class.cast(future.getAsyncHandler()); Request request = future.getRequest(); if (e instanceof HttpResponse) { HttpResponse response = (HttpResponse) e; // we buffer the response until we get the LastHttpContent future.setPendingResponse(response); } else if (e instanceof LastHttpContent) { HttpResponse response = future.getPendingResponse(); future.setPendingResponse(null); HttpResponseStatus status = new NettyResponseStatus(future.getUri(), config, response); HttpResponseHeaders responseHeaders = new NettyResponseHeaders(response.headers()); if (exitAfterProcessingFilters(channel, future, handler, status, responseHeaders)) { return; }//from w w w . ja v a 2 s . c o m future.setHttpHeaders(response.headers()); if (exitAfterHandlingRedirect(channel, future, response, request, response.getStatus().code())) return; boolean validStatus = response.getStatus().equals(SWITCHING_PROTOCOLS); boolean validUpgrade = response.headers().get(HttpHeaders.Names.UPGRADE) != null; String connection = response.headers().get(HttpHeaders.Names.CONNECTION); if (connection == null) connection = response.headers().get(HttpHeaders.Names.CONNECTION.toLowerCase(Locale.ENGLISH)); boolean validConnection = HttpHeaders.Values.UPGRADE.equalsIgnoreCase(connection); status = new NettyResponseStatus(future.getUri(), config, response); final boolean statusReceived = handler.onStatusReceived(status) == STATE.UPGRADE; if (!statusReceived) { try { handler.onCompleted(); } finally { future.done(); } return; } final boolean headerOK = handler.onHeadersReceived(responseHeaders) == STATE.CONTINUE; if (!headerOK || !validStatus || !validUpgrade || !validConnection) { requestSender.abort(channel, future, new IOException("Invalid handshake response")); return; } String accept = response.headers().get(HttpHeaders.Names.SEC_WEBSOCKET_ACCEPT); String key = getAcceptKey( future.getNettyRequest().getHttpRequest().headers().get(HttpHeaders.Names.SEC_WEBSOCKET_KEY)); if (accept == null || !accept.equals(key)) { requestSender.abort(channel, future, new IOException(String.format("Invalid challenge. Actual: %s. Expected: %s", accept, key))); } channelManager.upgradePipelineForWebSockets(channel.pipeline()); invokeOnSucces(channel, handler); future.done(); } else if (e instanceof WebSocketFrame) { final WebSocketFrame frame = (WebSocketFrame) e; NettyWebSocket webSocket = NettyWebSocket.class.cast(handler.onCompleted()); invokeOnSucces(channel, handler); if (webSocket != null) { if (frame instanceof CloseWebSocketFrame) { Channels.setDiscard(channel); CloseWebSocketFrame closeFrame = CloseWebSocketFrame.class.cast(frame); webSocket.onClose(closeFrame.statusCode(), closeFrame.reasonText()); } else { ByteBuf buf = frame.content(); if (buf != null && buf.readableBytes() > 0) { try { NettyResponseBodyPart part = nettyConfig.getBodyPartFactory().newResponseBodyPart(buf, frame.isFinalFragment()); handler.onBodyPartReceived(part); if (frame instanceof BinaryWebSocketFrame) { webSocket.onBinaryFragment(part); } else if (frame instanceof TextWebSocketFrame) { webSocket.onTextFragment(part); } else if (frame instanceof PingWebSocketFrame) { webSocket.onPing(part); } else if (frame instanceof PongWebSocketFrame) { webSocket.onPong(part); } } finally { buf.release(); } } } } else { logger.debug("UpgradeHandler returned a null NettyWebSocket "); } } else { logger.error("Invalid message {}", e); } }