增加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();
+        }
+    }
+}
diff --git a/src/main/java/tracker/DataCaptureServer.java b/src/main/java/tracker/DataCaptureServer.java
new file mode 100644
index 0000000..57ce8d0
--- /dev/null
+++ b/src/main/java/tracker/DataCaptureServer.java
@@ -0,0 +1,33 @@
+package tracker;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+
+import org.simpleframework.http.core.ContainerServer;
+import org.simpleframework.transport.connect.Connection;
+import org.simpleframework.transport.connect.SocketConnection;
+
+import entity.config;
+
+/**
+ * 启动 DataCaptureProxy:
+ * 客户端将 announce 请求发到本机 capturePort,
+ * 由 DataCaptureProxy 拦截并转发到 trackerHost:trackerPort。
+ */
+public class DataCaptureServer {
+    
+    public static void start() throws IOException {
+        String trackerHost = config.trackerHost;
+        int    trackerPort = config.trackerPort;
+        int    capturePort = config.capturePort;
+
+        DataCaptureProxy proxy = new DataCaptureProxy(trackerHost, trackerPort);
+        ContainerServer server = new ContainerServer(proxy);
+        Connection      conn   = new SocketConnection(server);
+
+        conn.connect(new InetSocketAddress(capturePort));
+        System.out.println("DataCapture proxy listening on port "
+            + capturePort + ", forwarding to "
+            + trackerHost + ":" + trackerPort);
+    }
+}