contenttransferhandler.java
来自「一款Java实现的HTTP代理服务器」· Java 代码 · 共 58 行
JAVA
58 行
package rabbit.proxy;import java.io.IOException;import java.nio.ByteBuffer;import rabbit.http.HttpHeader;/** A handler that transfers request resources with a known content length. * * @author <a href="mailto:robo@khelekore.org">Robert Olofsson</a> */class ContentTransferHandler extends ResourceHandlerBase implements BlockSentListener { private long dataSize; private long transferred = 0; private long toTransfer = 0; public ContentTransferHandler (Connection con, ByteBuffer buffer, long dataSize, TrafficLoggerHandler tlh) { super (con, buffer, tlh); this.dataSize = dataSize; } public void modifyRequest (HttpHeader header) { // nothing. } void sendBuffer () { toTransfer = Math.min (buffer.remaining (), dataSize - transferred); ByteBuffer sendBuffer = buffer; if (toTransfer < buffer.remaining ()) { int limit = buffer.limit (); // int cast is safe since buffer.remaining returns an int buffer.limit (buffer.position () + (int)toTransfer); sendBuffer = buffer.slice (); buffer.limit (limit); } try { BlockSender bs = new BlockSender (wc.getChannel (), con.getSelector (), con.getLogger (), tlh.getNetwork (), sendBuffer, false, this); } catch (IOException e) { failed (e); } } public void blockSent () { transferred += toTransfer; if (transferred < dataSize) doTransfer (); else listener.clientResourceTransferred (); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?