增加tracker转发

Change-Id: I5aad9b143371870714b49040708170f578f7df89
diff --git a/src/main/java/tracker/DataCaptureProxy.java b/src/main/java/tracker/DataCaptureProxy.java
new file mode 100644
index 0000000..4d2737f
--- /dev/null
+++ b/src/main/java/tracker/DataCaptureProxy.java
@@ -0,0 +1,73 @@
+package tracker;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import org.simpleframework.http.Request;
+import org.simpleframework.http.Response;
+import org.simpleframework.http.core.Container;
+
+/**
+ * 拦截 announce 请求,打印参数后转发给真实 Tracker。
+ */
+public class DataCaptureProxy implements Container {
+
+    private final String trackerHost;
+    private final int    trackerPort;
+
+    public DataCaptureProxy(String trackerHost, int trackerPort) {
+        this.trackerHost = trackerHost;
+        this.trackerPort = trackerPort;
+    }
+
+    @Override
+    public void handle(Request req, Response resp) {
+        try {
+            // 提取并打印关键参数
+            String infoHash  = req.getParameter("info_hash");
+            String uploaded  = req.getParameter("uploaded");
+            String downloaded= req.getParameter("downloaded");
+            String passkey   = req.getParameter("passkey");
+            System.out.println(
+                "Captured announce → info_hash=" + infoHash +
+                ", uploaded=" + uploaded +
+                ", downloaded=" + downloaded +
+                ", passkey=" + passkey
+            );
+
+            // 构造转发 URL
+            String path  = req.getPath().getPath();
+            String query = req.getQuery().toString();
+            String targetUrl = "http://" + trackerHost + ":" + trackerPort
+                             + path + "?" + query;
+
+            HttpURLConnection connection =
+                (HttpURLConnection) new URL(targetUrl).openConnection();
+            connection.setRequestMethod("GET");
+
+            // 转发响应码和类型
+            resp.setCode(connection.getResponseCode());
+            String ct = connection.getContentType();
+            if (ct != null) resp.setValue("Content-Type", ct);
+
+            // 转发响应体
+            try (InputStream in = connection.getInputStream();
+                 OutputStream out = resp.getOutputStream()) {
+                byte[] buf = new byte[8192];
+                int  len;
+                while ((len = in.read(buf)) != -1) {
+                    out.write(buf, 0, len);
+                }
+            }
+
+        } catch (Exception e) {
+            try {
+                resp.setCode(500);
+                resp.close();
+            } catch (Exception ignore) {}
+            e.printStackTrace();
+        }
+    }
+}