blob: 33d8831d8c496292dd49792f752a412d98cc2e6d [file] [log] [blame]
Edwardsamaxlf1bf7ad2025-06-03 23:52:16 +08001package com.pt.controller;
2
3import com.pt.service.TrackerService;
4import jakarta.servlet.http.HttpServletRequest;
5import jakarta.servlet.http.HttpServletResponse;
6import org.springframework.beans.factory.annotation.Autowired;
7import org.springframework.web.bind.annotation.*;
8
9import java.io.IOException;
10import java.util.Map;
11
12@RestController
2230110272bc8d02025-06-07 10:53:27 +080013@CrossOrigin(origins = "*")
14@RequestMapping("/api/tracker")
Edwardsamaxlf1bf7ad2025-06-03 23:52:16 +080015public class TrackerController {
16
17 @Autowired
18 private TrackerService trackerService;
19
20 @GetMapping("/announce")
21 public void announce(HttpServletRequest request, HttpServletResponse response) throws IOException {
22 try {
23 String ip = request.getRemoteAddr();
24 Map<String, String[]> params = request.getParameterMap();
25
22301102f5670302025-06-08 14:10:02 +080026 // 验证必要参数
27 if (!params.containsKey("username")) {
28 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
29 response.getWriter().write("Missing required parameter: username");
30 return;
31 }
32
Edwardsamaxlf1bf7ad2025-06-03 23:52:16 +080033 byte[] bencodedResponse = trackerService.handleAnnounce(params, ip);
34
35 response.setContentType("application/x-bittorrent");
36 response.getOutputStream().write(bencodedResponse);
37 } catch (Exception e) {
38 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
39 response.setContentType("text/plain");
40 response.getWriter().write("Tracker internal error: " + e.getMessage());
41 }
42 }
43
44}
45