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 + -
显示快捷键?