blob: 56c086795388c76a42740a9788c3c5a575956efa [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;
22301102ca0fb2f2025-06-09 18:40:42 +080010import java.util.HashMap;
Edwardsamaxlf1bf7ad2025-06-03 23:52:16 +080011import java.util.Map;
12
13@RestController
2230110272bc8d02025-06-07 10:53:27 +080014@RequestMapping("/api/tracker")
22301102ca0fb2f2025-06-09 18:40:42 +080015@CrossOrigin(origins = "*")
Edwardsamaxlf1bf7ad2025-06-03 23:52:16 +080016public class TrackerController {
17
18 @Autowired
19 private TrackerService trackerService;
20
22301102ca0fb2f2025-06-09 18:40:42 +080021 // tracker相应bt客户端的announce请求
22 @PostMapping("/announce")
23 public void announceByPost(
24 @RequestParam("info_hash") String infoHash,
25 @RequestParam("peer_id") String peerId,
26 @RequestParam("port") int port,
27 HttpServletRequest request,
28 HttpServletResponse response
29 ) throws IOException {
Edwardsamaxlf1bf7ad2025-06-03 23:52:16 +080030 try {
31 String ip = request.getRemoteAddr();
Edwardsamaxlf1bf7ad2025-06-03 23:52:16 +080032
22301102ca0fb2f2025-06-09 18:40:42 +080033 // 将参数封装为 Map 传给服务层(也可以直接传对象)
34 Map<String, String[]> params = new HashMap<>();
35 params.put("info_hash", new String[]{infoHash});
36 params.put("peer_id", new String[]{peerId});
37 params.put("port", new String[]{String.valueOf(port)});
Edwardsamaxlf1bf7ad2025-06-03 23:52:16 +080038 byte[] bencodedResponse = trackerService.handleAnnounce(params, ip);
39
40 response.setContentType("application/x-bittorrent");
41 response.getOutputStream().write(bencodedResponse);
42 } catch (Exception e) {
43 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
44 response.setContentType("text/plain");
45 response.getWriter().write("Tracker internal error: " + e.getMessage());
46 }
47 }
48
49}
50