blob: 33d8831d8c496292dd49792f752a412d98cc2e6d [file] [log] [blame]
package com.pt.controller;
import com.pt.service.TrackerService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.Map;
@RestController
@CrossOrigin(origins = "*")
@RequestMapping("/api/tracker")
public class TrackerController {
@Autowired
private TrackerService trackerService;
@GetMapping("/announce")
public void announce(HttpServletRequest request, HttpServletResponse response) throws IOException {
try {
String ip = request.getRemoteAddr();
Map<String, String[]> params = request.getParameterMap();
// 验证必要参数
if (!params.containsKey("username")) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.getWriter().write("Missing required parameter: username");
return;
}
byte[] bencodedResponse = trackerService.handleAnnounce(params, ip);
response.setContentType("application/x-bittorrent");
response.getOutputStream().write(bencodedResponse);
} catch (Exception e) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.setContentType("text/plain");
response.getWriter().write("Tracker internal error: " + e.getMessage());
}
}
}