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

📄 trtrackerserverprocessortcp.java

📁 java 文件下载器。可自定义
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			else
			if (lhs.equals("cryptoport"))
				crypto_port = Integer.parseInt(rhs);
			else
			if (lhs.equals("azq"))
				stop_to_queue = true;
			else
			if (lhs.equals("azsf"))
				scrape_flags = rhs;
			else
			if (lhs.equals("link"))
				link = rhs;
			else
			if (lhs.equals("outform"))
			{
				if (rhs.equals("xml"))
					xml_output = true;
			} else
			if (lhs.equals("hide"))
				hide = Integer.parseInt(rhs) == 1;
			else
			if (TRTrackerServerImpl.supportsExtensions())
				if (lhs.equals("aznp"))
					try
					{
						network_position = DHTNetworkPositionManager.deserialisePosition(client_address.getAddress(), Base32.decode(rhs));
					}
					catch (Throwable e) { }
				else
				if (lhs.equals("azup"))
					up_speed = Integer.parseInt(rhs);
		} while (p1 != -1);
		if (hide)
		{
			tcp_port = 0;
			crypto_port = 0;
			http_port = 0;
			udp_port = 0;
		}
		if (crypto_level == 2 && crypto_port != 0)
			tcp_port = crypto_port;
		byte hashes[][] = (byte[][])null;
		if (hash_list != null)
		{
			hashes = new byte[hash_list.size()][];
			hash_list.toArray(hashes);
		} else
		if (hash != null)
			hashes = (new byte[][] {
				hash
			});
		if (xml_output)
			compact_mode = 16;
		else
		if (az_ver >= 2)
			compact_mode = 3;
		Map root_out[] = new Map[1];
		TRTrackerServerPeerImpl peer_out[] = new TRTrackerServerPeerImpl[1];
		specific_torrent = processTrackerRequest(server, str, root_out, peer_out, request_type, hashes, link, scrape_flags, peer_id, no_peer_id, compact_mode, key, event, stop_to_queue, tcp_port & 0xffff, udp_port & 0xffff, http_port & 0xffff, real_ip_address, client_ip_address, downloaded, uploaded, left, num_want, crypto_level, (byte)az_ver, up_speed, network_position);
		root = root_out[0];
		if (request_type == 2 && lowercase_input_header.indexOf(lc_azureus_name) != -1)
			root.put("aztracker", new Long(1L));
		if (root.get("_data") == null)
		{
			org.gudy.azureus2.core3.tracker.server.TRTrackerServerPeer post_process_peer = peer_out[0];
			if (post_process_peer == null)
				post_process_peer = new org.gudy.azureus2.core3.tracker.server.impl.TRTrackerServerProcessor.lightweightPeer(client_ip_address, tcp_port, peer_id);
			server.postProcess(post_process_peer, specific_torrent, request_type, str, root);
		}
		break MISSING_BLOCK_LABEL_2006;
		Exception e;
		e;
		String warning_message;
		Map error_entries;
		TRTrackerServerException tr_excep;
		warning_message = null;
		error_entries = null;
		if (!(e instanceof TRTrackerServerException))
			break MISSING_BLOCK_LABEL_1914;
		tr_excep = (TRTrackerServerException)e;
		int reason = tr_excep.getResponseCode();
		error_entries = tr_excep.getErrorEntries();
		if (reason == -1)
			break MISSING_BLOCK_LABEL_1896;
		String resp = (new StringBuilder()).append("HTTP/1.1 ").append(reason).append(" ").append(tr_excep.getResponseText()).append("\r\n").toString();
		Map headers = tr_excep.getResponseHeaders();
		for (Iterator it = headers.entrySet().iterator(); it.hasNext();)
		{
			java.util.Map.Entry entry = (java.util.Map.Entry)it.next();
			String key = (String)entry.getKey();
			String value = (String)entry.getValue();
			resp = (new StringBuilder()).append(resp).append(key).append(": ").append(value).append("\r\n").toString();
		}

		byte payload[] = null;
		if (error_entries != null)
		{
			payload = BEncoder.encode(error_entries);
			resp = (new StringBuilder()).append(resp).append("Content-Length: ").append(payload.length).append("\r\n").toString();
		}
		resp = (new StringBuilder()).append(resp).append("\r\n").toString();
		os.write(resp.getBytes());
		if (payload != null)
			os.write(payload);
		os.flush();
		setTaskState("final os flush");
		os.flush();
		return;
		if (tr_excep.isUserMessage())
			warning_message = tr_excep.getMessage();
		break MISSING_BLOCK_LABEL_1927;
		if (e instanceof NullPointerException)
			e.printStackTrace();
		String message = e.getMessage();
		if (message == null || message.length() == 0)
			message = e.toString();
		root = new HashMap();
		root.put("failure reason", message);
		if (warning_message != null)
			root.put("warning message", warning_message);
		if (error_entries != null)
			root.putAll(error_entries);
		setTaskState("writing response");
		byte data[];
		byte header_start[];
		if (xml_output)
		{
			StringBuffer xml = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
			xml.append("<RESULT>");
			if (specific_torrent != null)
			{
				xml.append("<BTIH>");
				xml.append(ByteFormatter.encodeString(specific_torrent.getHash().getBytes()));
				xml.append("</BTIH>");
				xml.append(BEncoder.encodeToXML(root, true));
			}
			xml.append("</RESULT>");
			data = xml.toString().getBytes("UTF-8");
			header_start = HTTP_RESPONSE_XML_START;
		} else
		{
			data = (byte[])(byte[])root.get("_data");
			if (data == null)
			{
				data = BEncoder.encode(root);
				if (data.length > 0xf4240)
				{
					File dump = new File("bdecoder.dump");
					synchronized (org/gudy/azureus2/core3/tracker/server/impl/tcp/TRTrackerServerProcessorTCP)
					{
						try
						{
							Debug.out((new StringBuilder()).append("Output is too large, saving diagnostics to ").append(dump.toString()).toString());
							PrintWriter pw = new PrintWriter(new FileWriter(dump));
							BDecoder.print(pw, root);
							pw.close();
						}
						catch (Throwable e) { }
					}
				}
				root.put("_data", data);
			}
			header_start = HTTP_RESPONSE_START;
		}
		if (gzip_reply)
		{
			byte gzip_data[] = (byte[])(byte[])root.get("_gzipdata");
			if (gzip_data == null)
			{
				ByteArrayOutputStream tos = new ByteArrayOutputStream(data.length);
				GZIPOutputStream gos = new GZIPOutputStream(tos);
				gos.write(data);
				gos.close();
				gzip_data = tos.toByteArray();
				root.put("_gzipdata", gzip_data);
			}
			data = gzip_data;
		}
		setTaskState("writing header");
		os.write(header_start);
		byte length_bytes[] = String.valueOf(data.length).getBytes();
		os.write(length_bytes);
		int header_len = header_start.length + length_bytes.length;
		setTaskState("writing content");
		if (gzip_reply)
		{
			os.write(HTTP_RESPONSE_END_GZIP);
			header_len += HTTP_RESPONSE_END_GZIP.length;
		} else
		{
			os.write(HTTP_RESPONSE_END_NOGZIP);
			header_len += HTTP_RESPONSE_END_NOGZIP.length;
		}
		os.write(data);
		server.updateStats(request_type, specific_torrent, input_header.length(), header_len + data.length);
		setTaskState("final os flush");
		os.flush();
		break MISSING_BLOCK_LABEL_2492;
		Exception exception1;
		exception1;
		setTaskState("final os flush");
		os.flush();
		throw exception1;
	}

	protected String doAuthentication(String url_path, String header, OutputStream os, boolean tracker)
		throws IOException
	{
		int x;
		boolean apply_web_password = !tracker && server.isWebPasswordEnabled();
		boolean apply_torrent_password = tracker && server.isTrackerPasswordEnabled();
		if (apply_web_password && server.isWebPasswordHTTPSOnly() && !server.isSSL())
		{
			os.write("HTTP/1.1 403 BAD\r\n\r\nAccess Denied\r\n".getBytes());
			os.flush();
			return null;
		}
		if (!apply_torrent_password && !apply_web_password)
			break MISSING_BLOCK_LABEL_618;
		x = header.indexOf("Authorization:");
		if (x != -1)
			break MISSING_BLOCK_LABEL_230;
		if (!server.hasExternalAuthorisation())
			break MISSING_BLOCK_LABEL_575;
		URL resource;
		String resource_str = (new StringBuilder()).append(server.isSSL() ? "https" : "http").append("://").append(UrlUtils.convertIPV6Host(server.getHost())).append(":").append(server.getPort()).append(url_path).toString();
		resource = new URL(resource_str);
		if (server.performExternalAuthorisation(resource, "", ""))
			return "";
		break MISSING_BLOCK_LABEL_575;
		MalformedURLException e;
		e;
		Debug.printStackTrace(e);
		break MISSING_BLOCK_LABEL_575;
		String user;
		String pw;
		boolean auth_failed;
		int p1 = header.indexOf(' ', x);
		int p2 = header.indexOf(' ', p1 + 1);
		String body = header.substring(p2, header.indexOf('\r', p2)).trim();
		String decoded = new String(Base64.decode(body));
		int cp = decoded.indexOf(':');
		user = decoded.substring(0, cp);
		pw = decoded.substring(cp + 1);
		auth_failed = false;
		if (!server.hasExternalAuthorisation())
			break MISSING_BLOCK_LABEL_440;
		URL resource;
		String resource_str = (new StringBuilder()).append(server.isSSL() ? "https" : "http").append("://").append(UrlUtils.convertIPV6Host(server.getHost())).append(":").append(server.getPort()).append(url_path).toString();
		resource = new URL(resource_str);
		if (server.performExternalAuthorisation(resource, user, pw))
			return user;
		break MISSING_BLOCK_LABEL_437;
		MalformedURLException e;
		e;
		Debug.printStackTrace(e);
		auth_failed = true;
		if (!server.hasInternalAuthorisation() || auth_failed)
			break MISSING_BLOCK_LABEL_575;
		byte encoded[];
		byte internal_pw[];
		SHA1Hasher hasher = new SHA1Hasher();
		byte password[] = pw.getBytes();
		if (password.length > 0)
			encoded = hasher.calculateHash(password);
		else
			encoded = new byte[0];
		if (!user.equals("<internal>"))
			break MISSING_BLOCK_LABEL_532;
		internal_pw = Base64.decode(pw);
		if (Arrays.equals(internal_pw, server.getPassword()))
			return user;
		break MISSING_BLOCK_LABEL_575;
		if (user.equalsIgnoreCase(server.getUsername()) && Arrays.equals(encoded, server.getPassword()))
			return user;
		break MISSING_BLOCK_LABEL_575;
		hasher;
		Debug.printStackTrace(hasher);
		os.write((new StringBuilder()).append("HTTP/1.1 401 BAD\r\nWWW-Authenticate: Basic realm=\"").append(server.getName()).append("\"\r\n\r\nAccess Denied\r\n").toString().getBytes());
		os.flush();
		return null;
		return "";
	}

	protected boolean handleExternalRequest(InetSocketAddress client_address, String user, String url, String header, InputStream is, OutputStream os, AsyncController async)
		throws IOException
	{
		URL absolute_url = new URL((new StringBuilder()).append(server_url).append(url.startsWith("/") ? url : (new StringBuilder()).append("/").append(url).toString()).toString());
		return server.handleExternalRequest(client_address, user, url, absolute_url, header, is, os, async);
	}

}

⌨️ 快捷键说明

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