⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trblockingserverprocessor.java

📁 java 文件下载器。可自定义
💻 JAVA
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   TRBlockingServerProcessor.java

package org.gudy.azureus2.core3.tracker.server.impl.tcp.blocking;

import java.io.*;
import java.net.*;
import org.gudy.azureus2.core3.logging.*;
import org.gudy.azureus2.core3.tracker.server.TRTrackerServerException;
import org.gudy.azureus2.core3.tracker.server.impl.tcp.TRTrackerServerProcessorTCP;
import org.gudy.azureus2.core3.tracker.server.impl.tcp.TRTrackerServerTCP;
import org.gudy.azureus2.core3.util.AETemporaryFileHandler;

public class TRBlockingServerProcessor extends TRTrackerServerProcessorTCP
{

	private static final LogIDs LOGID;
	protected Socket socket;
	protected int timeout_ticks;
	protected String current_request;

	protected TRBlockingServerProcessor(TRTrackerServerTCP _server, Socket _socket)
	{
		super(_server);
		timeout_ticks = 1;
		socket = _socket;
	}

	public void runSupport()
	{
		String header_plus;
		setTaskState("entry");
		try
		{
			socket.setSoTimeout(5000);
		}
		catch (SocketException e) { }
		header_plus = "";
		setTaskState("reading header");
		InputStream post_is;
		File post_file;
		String actual_header;
		String lowercase_header;
		boolean head;
		String url;
		InputStream is = socket.getInputStream();
		byte buffer[] = new byte[1024];
		do
		{
			if (header_plus.length() >= 4096)
				break;
			int len = is.read(buffer);
			if (len == -1)
				break;
			header_plus = (new StringBuilder()).append(header_plus).append(new String(buffer, 0, len, "ISO-8859-1")).toString();
		} while (!header_plus.endsWith("\r\n\r\n") && header_plus.indexOf("\r\n\r\n") == -1);
		if (Logger.isEnabled())
		{
			String log_str = header_plus;
			int pos = log_str.indexOf("\r\n");
			if (pos != -1)
				log_str = log_str.substring(0, pos);
			Logger.log(new LogEvent(LOGID, (new StringBuilder()).append("Tracker Server: received header '").append(log_str).append("'").toString()));
		}
		post_is = null;
		post_file = null;
		head = false;
		if (header_plus.startsWith("GET "))
		{
			timeout_ticks = 1;
			actual_header = header_plus;
			lowercase_header = actual_header.toLowerCase();
			url = actual_header.substring(4).trim();
		} else
		if (header_plus.startsWith("HEAD "))
		{
			timeout_ticks = 1;
			actual_header = header_plus;
			lowercase_header = actual_header.toLowerCase();
			url = actual_header.substring(4).trim();
			head = true;
		} else
		if (header_plus.startsWith("POST "))
		{
			timeout_ticks = TRTrackerServerTCP.PROCESSING_POST_MULTIPLIER;
			if (timeout_ticks == 0)
				setTimeoutsDisabled(true);
			setTaskState("reading content");
			int header_end = header_plus.indexOf("\r\n\r\n");
			if (header_end == -1)
				throw new TRTrackerServerException("header truncated");
			actual_header = header_plus.substring(0, header_end + 4);
			lowercase_header = actual_header.toLowerCase();
			url = actual_header.substring(4).trim();
			int cl_start = lowercase_header.indexOf("content-length:");
			if (cl_start == -1)
				throw new TRTrackerServerException("header Content-Length start missing");
			int cl_end = actual_header.indexOf("\r\n", cl_start);
			if (cl_end == -1)
				throw new TRTrackerServerException("header Content-Length end missing");
			int content_length = Integer.parseInt(actual_header.substring(cl_start + 15, cl_end).trim());
			ByteArrayOutputStream baos = null;
			FileOutputStream fos = null;
			OutputStream data_os;
			if (content_length <= 0x40000)
			{
				baos = new ByteArrayOutputStream();
				data_os = baos;
			} else
			{
				post_file = AETemporaryFileHandler.createTempFile();
				post_file.deleteOnExit();
				fos = new FileOutputStream(post_file);
				data_os = fos;
			}
			int rem = header_plus.length() - (header_end + 4);
			if (rem > 0)
			{
				content_length -= rem;
				data_os.write(header_plus.substring(header_plus.length() - rem).getBytes("ISO-8859-1"));
			}
			int len;
			for (; content_length > 0; content_length -= len)
			{
				len = is.read(buffer);
				if (len < 0)
					throw new TRTrackerServerException("premature end of input stream");
				data_os.write(buffer, 0, len);
			}

			if (baos != null)
			{
				post_is = new ByteArrayInputStream(baos.toByteArray());
			} else
			{
				fos.close();
				post_is = new BufferedInputStream(new FileInputStream(post_file), 0x40000);
			}
		} else
		{
			int pos = header_plus.indexOf(' ');
			if (pos == -1)
				throw new TRTrackerServerException("header doesn't have space in right place");
			timeout_ticks = 1;
			actual_header = header_plus;
			lowercase_header = actual_header.toLowerCase();
			url = actual_header.substring(pos + 1).trim();
		}
		setTaskState("processing request");
		current_request = actual_header;
		if (post_is == null)
			post_is = new ByteArrayInputStream(new byte[0]);
		int pos = url.indexOf(" ");
		if (pos == -1)
			throw new TRTrackerServerException("header doesn't have space in right place");
		url = url.substring(0, pos);
		if (head)
		{
			ByteArrayOutputStream head_response = new ByteArrayOutputStream(4096);
			processRequest(actual_header, lowercase_header, url, (InetSocketAddress)socket.getRemoteSocketAddress(), false, post_is, head_response, null);
			byte head_data[] = head_response.toByteArray();
			int header_length = head_data.length;
			int i = 3;
			do
			{
				if (i >= head_data.length)
					break;
				if (head_data[i - 3] == 13 && head_data[i - 2] == 10 && head_data[i - 1] == 13 && head_data[i] == 10)
				{
					header_length = i + 1;
					break;
				}
				i++;
			} while (true);
			setTaskState("writing head response");
			socket.getOutputStream().write(head_data, 0, header_length);
			socket.getOutputStream().flush();
		} else
		{
			processRequest(actual_header, lowercase_header, url, (InetSocketAddress)socket.getRemoteSocketAddress(), false, post_is, socket.getOutputStream(), null);
		}
		if (post_is != null)
			post_is.close();
		if (post_file != null)
			post_file.delete();
		break MISSING_BLOCK_LABEL_1005;
		Exception exception;
		exception;
		if (post_is != null)
			post_is.close();
		if (post_file != null)
			post_file.delete();
		throw exception;
		SocketTimeoutException e;
		e;
		break MISSING_BLOCK_LABEL_1005;
		e;
		setTaskState("final socket close");
		try
		{
			socket.close();
		}
		catch (Throwable e) { }
		break MISSING_BLOCK_LABEL_1048;
		Exception exception1;
		exception1;
		setTaskState("final socket close");
		try
		{
			socket.close();
		}
		catch (Throwable e) { }
		throw exception1;
	}

	public void interruptTask()
	{
		try
		{
			if (!areTimeoutsDisabled())
			{
				timeout_ticks--;
				if (timeout_ticks <= 0)
				{
					System.out.println((new StringBuilder()).append("Tracker task interrupted in state '").append(getTaskState()).append("' : processing time limit exceeded for ").append(socket.getInetAddress()).toString());
					socket.close();
				}
			}
		}
		catch (Throwable e) { }
	}

	static 
	{
		LOGID = LogIDs.TRACKER;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -