tracker完成

Change-Id: Ib69b662cfd24a8a5c7f3a29e6e5b6baa25611e57
diff --git a/src/main/java/com/example/g8backend/controller/AuthController.java b/src/main/java/com/example/g8backend/controller/AuthController.java
index 6cb1ae8..6781dad 100644
--- a/src/main/java/com/example/g8backend/controller/AuthController.java
+++ b/src/main/java/com/example/g8backend/controller/AuthController.java
@@ -70,7 +70,7 @@
 //            return ApiResponse.error(400, "验证码错误");
 //        }
 
-        redisTemplate.delete(registerDTO.getEmail());
+//        redisTemplate.delete(registerDTO.getEmail());
 
         User user = new User();
         user.setUserName(registerDTO.getUserName());
diff --git a/src/main/java/com/example/g8backend/controller/TrackerController.java b/src/main/java/com/example/g8backend/controller/TrackerController.java
index ace7067..9e567a6 100644
--- a/src/main/java/com/example/g8backend/controller/TrackerController.java
+++ b/src/main/java/com/example/g8backend/controller/TrackerController.java
@@ -11,6 +11,13 @@
 import org.springframework.web.bind.annotation.*;
 import com.example.g8backend.service.ITrackerService;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 @RestController
 @RequestMapping("/tracker")
 public class TrackerController {
@@ -19,9 +26,29 @@
 
     @Autowired
     private ITrackerService trackerService;
+    private String getInfoHash(String queryStr) throws UnsupportedEncodingException {
+        Pattern INFO_HASH = Pattern.compile("info_hash=([^&]+)");
+        Matcher matcher = INFO_HASH.matcher(queryStr);
+        StringBuilder hexString = new StringBuilder();
+        if (matcher.find()) {
+            String matchedHash = matcher.group(1);
+            String decodeInfoHash = URLDecoder.decode(matchedHash, "ISO-8859-1");
+            byte[] infoHashBytes = decodeInfoHash.getBytes("ISO-8859-1");
+            for (byte b : infoHashBytes) {
+                String hex = Integer.toHexString(b & 0xFF);
+                if (hex.length() == 1) {
+                    hexString.append('0');
+                }
+                hexString.append(hex);
+            }
+            return hexString.toString();
+        } else {
+            return null;
+        }
+    }
 
     @GetMapping(value = "/announce/{passkey}", produces = "application/x-bittorrent")
-    public ResponseEntity<byte[]> getAnnouncements(
+    public ResponseEntity<String> getAnnouncements(
             HttpServletRequest request,
             @RequestParam("info_hash") String infoHash,
             @RequestParam("peer_id") String peerId,
@@ -31,14 +58,15 @@
             @RequestParam(value = "event", required = false) String event,
             @RequestParam(value = "left", required = false) Double left,
             @RequestParam(value = "compact", required = false) Integer compact,
-            @PathVariable String passkey) {
+            @PathVariable String passkey) throws UnsupportedEncodingException {
 
         logger.info("Announce request received: info_hash={}, peer_id={}, port={}, uploaded={}, downloaded={}, event={}, left={}, compact={}, passkey={}",
                 infoHash, peerId, port, uploaded, downloaded, event, left, compact, passkey);
-
+        String url = request.getQueryString();
         AnnounceRequestDTO requestDTO = new AnnounceRequestDTO();
         requestDTO.setPasskey(passkey);
-        requestDTO.setInfoHash(infoHash);
+        logger.info("Passkey:{}", getInfoHash(url));
+        requestDTO.setInfoHash(getInfoHash(url));
         requestDTO.setPeerId(peerId);
         requestDTO.setPort(port);
         requestDTO.setUploaded(uploaded);
@@ -51,12 +79,14 @@
         requestDTO.setIp(ipAddress);
 
         AnnounceResponseDTO responseDTO = trackerService.handleAnnounce(requestDTO);
-
-        byte[] bencoded = BencodeUtil.encodeAnnounceResponse(responseDTO);
+        Map<String, Object> response = new HashMap<>();
+        response.put("interval", responseDTO.getInterval());
+        response.put("peers", responseDTO.getPeers());
+        String bencodeResponse = BencodeUtil.encodeISO(response);
         return ResponseEntity
                 .ok()
                 .header("Content-Type", "application/x-bittorrent")
-                .body(bencoded);
+                .body(bencodeResponse);
     }
 
     /**