Java Code Examples for io.netty.channel.ChannelHandlerContext#write()

The following examples show how to use io.netty.channel.ChannelHandlerContext#write() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: GlobalChannelTrafficShapingHandler.java    From netty4.0.27Learn with Apache License 2.0 6 votes vote down vote up
private void sendAllValid(final ChannelHandlerContext ctx, final PerChannel perChannel, final long now) {
    // write operations need synchronization
    synchronized (perChannel) {
        ToSend newToSend = perChannel.messagesQueue.pollFirst();
        for (; newToSend != null; newToSend = perChannel.messagesQueue.pollFirst()) {
            if (newToSend.relativeTimeAction <= now) {
                long size = newToSend.size;
                trafficCounter.bytesRealWriteFlowControl(size);
                perChannel.channelTrafficCounter.bytesRealWriteFlowControl(size);
                perChannel.queueSize -= size;
                queuesSize.addAndGet(-size);
                ctx.write(newToSend.toSend, newToSend.promise);
                perChannel.lastWriteTimestamp = now;
            } else {
                perChannel.messagesQueue.addFirst(newToSend);
                break;
            }
        }
        if (perChannel.messagesQueue.isEmpty()) {
            releaseWriteSuspended(ctx);
        }
    }
    ctx.flush();
}
 
Example 2
Source File: HelloWorldHandler.java    From brave with Apache License 2.0 6 votes vote down vote up
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) {
  if (!(msg instanceof HttpRequest)) return;
  HttpRequest req = (HttpRequest) msg;

  if (HttpUtil.is100ContinueExpected(req)) {
    ctx.write(new DefaultFullHttpResponse(HTTP_1_1, CONTINUE));
  }
  boolean keepAlive = HttpUtil.isKeepAlive(req);
  FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK,
    Unpooled.wrappedBuffer(HELLO_WORLD));
  response.headers().set(CONTENT_TYPE, "text/plain");
  response.headers().set(CONTENT_LENGTH, response.content().readableBytes());

  if (!keepAlive) {
    ctx.write(response).addListener(ChannelFutureListener.CLOSE);
  } else {
    response.headers().set(CONNECTION, HttpHeaderValues.KEEP_ALIVE);
    ctx.write(response);
  }
}
 
Example 3
Source File: WebSocketServerHandler.java    From netty4.0.27Learn with Apache License 2.0 6 votes vote down vote up
private void handleWebSocketFrame(ChannelHandlerContext ctx, WebSocketFrame frame) {

        // Check for closing frame
        if (frame instanceof CloseWebSocketFrame) {
            handshaker.close(ctx.channel(), (CloseWebSocketFrame) frame.retain());
            return;
        }
        if (frame instanceof PingWebSocketFrame) {
            ctx.write(new PongWebSocketFrame(frame.content().retain()));
            return;
        }
        if (frame instanceof TextWebSocketFrame) {
            // Echo the frame
            ctx.write(frame.retain());
            return;
        }
        if (frame instanceof BinaryWebSocketFrame) {
            // Echo the frame
            ctx.write(frame.retain());
            return;
        }
    }
 
Example 4
Source File: EchoClientHandler2.java    From netty.book.kor with MIT License 6 votes vote down vote up
@Override
public void channelActive(ChannelHandlerContext ctx) {
    String sendMessage = "Hello netty";

    ByteBuf messageBuffer = Unpooled.buffer();
    messageBuffer.writeBytes(sendMessage.getBytes());

    StringBuilder builder = new StringBuilder();
    builder.append("전송한 문자열 [");
    builder.append(sendMessage);
    builder.append("]");

    System.out.println(builder.toString());
    ctx.write(messageBuffer);
    
    ctx.flush();
}
 
Example 5
Source File: OutboundPacketHandler.java    From Cleanstone with MIT License 6 votes vote down vote up
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {
    try {
        Packet packet = (Packet) msg;
        Connection connection = ctx.channel().attr(AttributeKey.<Connection>valueOf("connection")).get();

        if (packet.getType().getDirection() == PacketDirection.INBOUND) {
            throw new DecoderException("Outbound packet has invalid direction: " + packet.getType());
        }
        if (CleanstoneServer.publishEvent(
                new OutboundPacketEvent<>(packet, connection, networking)).isCancelled()) {
            return;
        }
        log.trace("Sending " + packet.getType() + " (" + networking.getProtocol().translateOutboundPacketID(packet.getType(), connection) + ") packet to " + connection.getAddress().getHostAddress());
        ctx.write(packet, promise);
    } catch (Exception e) {
        log.error("Error occurred while handling outbound packet", e);
    }
}
 
Example 6
Source File: SpdyServerHandler.java    From netty-4.1.22 with Apache License 2.0 6 votes vote down vote up
@Override
public void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
    if (msg instanceof HttpRequest) {
        HttpRequest req = (HttpRequest) msg;

        if (is100ContinueExpected(req)) {
            ctx.write(new DefaultFullHttpResponse(HTTP_1_1, CONTINUE));
        }
        boolean keepAlive = isKeepAlive(req);

        ByteBuf content = Unpooled.copiedBuffer("Hello World " + new Date(), CharsetUtil.UTF_8);

        FullHttpResponse response = new DefaultFullHttpResponse(HTTP_1_1, OK, content);
        response.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/plain; charset=UTF-8");
        response.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, response.content().readableBytes());

        if (!keepAlive) {
            ctx.write(response).addListener(ChannelFutureListener.CLOSE);
        } else {
            response.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE);
            ctx.write(response);
        }
    }
}
 
Example 7
Source File: TlsHandler.java    From nitmproxy with MIT License 5 votes vote down vote up
private void flushPendings(ChannelHandlerContext ctx) {
    synchronized (pendings) {
        Iterator<Object> iterator = pendings.iterator();
        while (iterator.hasNext()) {
            ctx.write(iterator.next());
            iterator.remove();
        }
    }
}
 
Example 8
Source File: HttpServerHandler.java    From java-tutorial with MIT License 5 votes vote down vote up
@Override
protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest req) throws Exception {
    //HTTP客户端程序有一个实体的主体部分要发送给服务器,但希望在发送之前查看下服务器是否会
    //接受这个实体,所以在发送实体之前先发送了一个携带100 Continue的Expect请求首部的请求。
    //服务器在收到这样的请求后,应该用 100 Continue或一条错误码来进行响应。
    //在使用curl做POST的时候, 当要POST的数据大于1024字节的时候, curl并不会直接就发起POST请求, 而是会分为俩步,
    // 1. 发送一个请求, 包含一个Expect:100-continue, 询问Server使用愿意接受数据
    // 2. 接收到Server返回的100-continue应答以后, 才把数据POST给Server
    String uri = req.uri();
    if (uri.equals(FAVICON_ICO)) {
        return;
    }
    if (HttpUtil.is100ContinueExpected(req)) {
        ctx.write(new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.CONTINUE));
    }
    boolean keepAlive = HttpUtil.isKeepAlive(req);
    System.out.println("【method】" + req.method() + "【uri】" + req.uri());
    ByteBuf content = ctx.alloc().buffer();
    FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, content);
    response.headers().set(CONTENT_TYPE, "text/plain; charset=UTF-8");
    response.headers().set(CONTENT_LENGTH, response.content().readableBytes());
    if (!keepAlive) {
        ctx.writeAndFlush(response).addListener(ChannelFutureListener.CLOSE);
    } else {
        response.headers().set(CONNECTION, HttpHeaderValues.KEEP_ALIVE);
        ctx.writeAndFlush(response);
    }

}
 
Example 9
Source File: ResponseOrderingHandler.java    From drift with Apache License 2.0 5 votes vote down vote up
@Override
public void write(ChannelHandlerContext context, Object message, ChannelPromise promise)
{
    if (message instanceof ThriftFrame) {
        // always re-enable auto read
        context.channel().config().setAutoRead(true);
    }
    context.write(message, promise);
}
 
Example 10
Source File: HttpSnoopServerHandler.java    From netty-4.1.22 with Apache License 2.0 5 votes vote down vote up
private boolean writeResponse(HttpObject currentObj, ChannelHandlerContext ctx) {
    // Decide whether to close the connection or not.
    boolean keepAlive = HttpUtil.isKeepAlive(request);
    // Build the response object.
    FullHttpResponse response = new DefaultFullHttpResponse(
            HTTP_1_1, currentObj.decoderResult().isSuccess()? OK : BAD_REQUEST,
            Unpooled.copiedBuffer(buf.toString(), CharsetUtil.UTF_8));

    response.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/plain; charset=UTF-8");

    if (keepAlive) {
        // Add 'Content-Length' header only for a keep-alive connection.
        response.headers().setInt(HttpHeaderNames.CONTENT_LENGTH, response.content().readableBytes());
        // Add keep alive header as per:
        // - http://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01.html#Connection
        response.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE);
    }

    // Encode the cookie.
    String cookieString = request.headers().get(HttpHeaderNames.COOKIE);
    if (cookieString != null) {
        Set<Cookie> cookies = ServerCookieDecoder.STRICT.decode(cookieString);
        if (!cookies.isEmpty()) {
            // Reset the cookies if necessary.
            for (Cookie cookie: cookies) {
                response.headers().add(HttpHeaderNames.SET_COOKIE, ServerCookieEncoder.STRICT.encode(cookie));
            }
        }
    } else {
        // Browser sent no cookie.  Add some.
        response.headers().add(HttpHeaderNames.SET_COOKIE, ServerCookieEncoder.STRICT.encode("key1", "value1"));
        response.headers().add(HttpHeaderNames.SET_COOKIE, ServerCookieEncoder.STRICT.encode("key2", "value2"));
    }

    // Write the response.
    ctx.write(response);

    return keepAlive;
}
 
Example 11
Source File: RequestHandler.java    From netty-rest-server with Apache License 2.0 5 votes vote down vote up
/**
 * 输出文件响应
 * 
 * @param responseEntity
 * @return
 * @throws IOException
 */
private ChannelFuture writeFileResponse(ResponseEntity<?> responseEntity) throws IOException {
    RandomAccessFile raf = (RandomAccessFile) responseEntity.getBody();
    long fileLength = raf.length();
    
    HttpResponse response = new DefaultHttpResponse(HTTP_1_1, OK);
    HttpUtil.setContentLength(response, fileLength);
    if(responseEntity.getMimetype() != null && !responseEntity.getMimetype().trim().equals("")) {
        response.headers().set(HttpHeaderNames.CONTENT_TYPE, responseEntity.getMimetype());
    }
    if(responseEntity.getFileName() != null && !responseEntity.getFileName().trim().equals("")) {
        String fileName = new String(responseEntity.getFileName().getBytes("gb2312"), "ISO8859-1");
        response.headers().set(HttpHeaderNames.CONTENT_DISPOSITION, "attachment; filename=" + fileName); 
    }
    if (HttpUtil.isKeepAlive(HttpContextHolder.getRequest())) {
        response.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE);
    }
    
    ChannelHandlerContext ctx = HttpContextHolder.getResponse().getChannelHandlerContext();
    ctx.write(response);
    ChannelFuture sendFileFuture;
    ChannelFuture lastContentFuture = null;
    if (ctx.pipeline().get(SslHandler.class) == null) {
        sendFileFuture =
                ctx.write(new DefaultFileRegion(raf.getChannel(), 0, fileLength), ctx.newProgressivePromise());
        // Write the end marker.
        lastContentFuture = ctx.writeAndFlush(LastHttpContent.EMPTY_LAST_CONTENT);
    } else {
        sendFileFuture = ctx.writeAndFlush(new HttpChunkedInput(new ChunkedFile(raf, 0, fileLength, 8192)),
                ctx.newProgressivePromise());
        // HttpChunkedInput will write the end marker (LastHttpContent) for us.
        lastContentFuture = sendFileFuture;
    }
    return lastContentFuture;
}
 
Example 12
Source File: RequestRouter.java    From tchannel-java with MIT License 5 votes vote down vote up
protected void sendResponse(ChannelHandlerContext ctx) {

        if (!busy.compareAndSet(false, true)) {
            return;
        }

        Channel channel = ctx.channel();
        try {
            boolean flush = false;
            while (channel.isWritable()) {
                Response res = responseQueue.poll();
                if (res == null) {
                    break;
                }

                ctx.write(res, channel.voidPromise());
                flush = true;
            }

            if (flush) {
                ctx.flush();
            }
        } finally {
            busy.set(false);
        }

        // in case there are new response added
        if (channel.isWritable() && !responseQueue.isEmpty()) {
            sendResponse(ctx);
        }
    }
 
Example 13
Source File: EchoServerHandler.java    From examples-javafx-repos1 with Apache License 2.0 5 votes vote down vote up
@Override
protected void channelRead0(ChannelHandlerContext ctx, ByteBuf in) throws Exception {
	
	String in_s = in.toString(CharsetUtil.UTF_8);
	String uc = in_s.toUpperCase();
	if( logger.isInfoEnabled() ) {
		logger.info("[READ] read " + in_s + ", writing " + uc);
	}
	in.setBytes(0,  uc.getBytes(CharsetUtil.UTF_8));
	ctx.write(in);
}
 
Example 14
Source File: AbstractH2DuplexHandler.java    From servicetalk with Apache License 2.0 5 votes vote down vote up
final void writeBuffer(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {
    ByteBuf byteBuf = toByteBufNoThrow((Buffer) msg);
    if (byteBuf == null) {
        promise.setFailure(new IllegalArgumentException("unsupported Buffer type:" + msg));
        ctx.close();
    } else {
        ctx.write(new DefaultHttp2DataFrame(byteBuf.retain(), false), promise);
    }
}
 
Example 15
Source File: Server.java    From thorntail with Apache License 2.0 5 votes vote down vote up
private static ChannelFuture sendResponse(final ChannelHandlerContext ctx, final String response) {
    ByteBuf buf = ctx.alloc().buffer();
    buf.writeBytes(response.getBytes(WireProtocol.CHARSET));
    ctx.write(buf);

    return ctx.writeAndFlush(Delimiters.lineDelimiter()[0]);
}
 
Example 16
Source File: NettyEchoServer.java    From qpid-jms with Apache License 2.0 4 votes vote down vote up
@Override
public void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) {
    LOG.trace("Channel read: {}", msg);
    ctx.write(msg.copy());
}
 
Example 17
Source File: ResourceHandler.java    From socketio with Apache License 2.0 4 votes vote down vote up
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
  if (msg instanceof HttpRequest) {
    HttpRequest req = (HttpRequest) msg;
    QueryStringDecoder queryDecoder = new QueryStringDecoder(req.uri());
    String requestPath = queryDecoder.path();
    URL resUrl = resources.get(requestPath);
    if (resUrl != null) {
      if (log.isDebugEnabled())
        log.debug("Received HTTP resource request: {} {} from channel: {}", req.method(), requestPath, ctx.channel());

      URLConnection fileUrl = resUrl.openConnection();
      long lastModified = fileUrl.getLastModified();
      // check if file has been modified since last request
      if (isNotModified(req, lastModified)) {
        sendNotModified(ctx);
        return;
      }
      // create resource input-stream and check existence
      final InputStream is = fileUrl.getInputStream();
      if (is == null) {
        sendError(ctx, HttpResponseStatus.NOT_FOUND);
        return;
      }
      // create ok response
      HttpResponse res = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
      // set Content-Length header
      HttpUtil.setContentLength(res, fileUrl.getContentLengthLong());
      // set Content-Type header
      setContentTypeHeader(res, fileUrl);
      // set Date, Expires, Cache-Control and Last-Modified headers
      setDateAndCacheHeaders(res, lastModified);
      // write initial response header
      ctx.write(res);

      // write the content stream
      ctx.pipeline().addBefore(ctx.name(), "chunked-writer-handler", new ChunkedWriteHandler());
      ChannelFuture writeFuture = ctx.writeAndFlush(new ChunkedStream(is, fileUrl.getContentLength()));
      // add operation complete listener so we can close the channel and the input stream
      writeFuture.addListener(ChannelFutureListener.CLOSE);
      ReferenceCountUtil.release(msg);
      return;
    }
  }
  super.channelRead(ctx, msg);
}
 
Example 18
Source File: TcpServerHandler.java    From netty-cookbook with Apache License 2.0 4 votes vote down vote up
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
	System.out.println(msg);  	
    ctx.write("ok");
}
 
Example 19
Source File: SslHandler.java    From netty4.0.27Learn with Apache License 2.0 4 votes vote down vote up
private void wrapNonAppData(ChannelHandlerContext ctx, boolean inUnwrap) throws SSLException {
    ByteBuf out = null;
    ByteBufAllocator alloc = ctx.alloc();
    try {
        for (;;) {
            if (out == null) {
                out = allocateOutNetBuf(ctx, 0);
            }
            SSLEngineResult result = wrap(alloc, engine, Unpooled.EMPTY_BUFFER, out);

            if (result.bytesProduced() > 0) {
                ctx.write(out);
                if (inUnwrap) {
                    needsFlush = true;
                }
                out = null;
            }

            switch (result.getHandshakeStatus()) {
                case FINISHED:
                    setHandshakeSuccess();
                    break;
                case NEED_TASK:
                    runDelegatedTasks();
                    break;
                case NEED_UNWRAP:
                    if (!inUnwrap) {
                        unwrapNonAppData(ctx);
                    }
                    break;
                case NEED_WRAP:
                    break;
                case NOT_HANDSHAKING:
                    setHandshakeSuccessIfStillHandshaking();
                    // Workaround for TLS False Start problem reported at:
                    // https://github.com/netty/netty/issues/1108#issuecomment-14266970
                    if (!inUnwrap) {
                        unwrapNonAppData(ctx);
                    }
                    break;
                default:
                    throw new IllegalStateException("Unknown handshake status: " + result.getHandshakeStatus());
            }

            if (result.bytesProduced() == 0) {
                break;
            }
        }
    } catch (SSLException e) {
        setHandshakeFailure(ctx, e);
        throw e;
    }  finally {
        if (out != null) {
            out.release();
        }
    }
}
 
Example 20
Source File: HttpHeaderCompressionTest.java    From netty-http2 with Apache License 2.0 4 votes vote down vote up
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
    ctx.write(Unpooled.wrappedBuffer(CONNECTION_HEADER));
    ctx.writeAndFlush(frame);
}