finish handleAnnounce and fix bugs in torrent upload(using ISO_8859_1)

Change-Id: Ic2da7cef878bb7aa66184f04058bb2db2393190e
diff --git a/src/main/java/com/example/g8backend/controller/TrackerController.java b/src/main/java/com/example/g8backend/controller/TrackerController.java
index 1511c76..4e26abb 100644
--- a/src/main/java/com/example/g8backend/controller/TrackerController.java
+++ b/src/main/java/com/example/g8backend/controller/TrackerController.java
@@ -1,7 +1,9 @@
 package com.example.g8backend.controller;
 
+import com.example.g8backend.dto.AnnounceRequestDTO;
+import com.example.g8backend.dto.AnnounceResponseDTO;
+import jakarta.servlet.http.HttpServletRequest;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import com.example.g8backend.service.ITrackerService;
@@ -13,21 +15,41 @@
     @Autowired
     private ITrackerService trackerService;
 
-    @Autowired
-    private RedisTemplate<String, Object> redisTemplate;
-
     @GetMapping("/announce/{passkey}")
-    public ResponseEntity<?> getAnnouncements(
-            @RequestParam(name = "info_hash") String infoHash,
-            @RequestParam(name = "peer_id") String peerId,
-            @RequestParam(name = "port") int port,
-            @RequestParam(name = "uploaded") long uploaded,
-            @RequestParam(name = "downloaded") long downloaded,
-            @RequestParam(name = "left") long left,
-            @RequestParam(name = "compact", required = false) int compact,
-            @RequestParam(name = "event", required = false) String event,
+    public ResponseEntity<AnnounceResponseDTO> getAnnouncements(
+            HttpServletRequest request,
+            @RequestParam("info_hash") String infoHash,
+            @RequestParam("peer_id") String peerId,
+            @RequestParam("port") int port,
+            @RequestParam("uploaded") double uploaded,
+            @RequestParam("downloaded") double downloaded,
+            @RequestParam(value = "event", required = false) String event,
+            @RequestParam(value = "left", required = false) Double left,
+            @RequestParam(value = "compact", required = false) Integer compact,
             @PathVariable String passkey) {
 
-        return null;
+        AnnounceRequestDTO requestDTO = new AnnounceRequestDTO();
+        requestDTO.setPasskey(passkey);
+        requestDTO.setInfoHash(infoHash);
+        requestDTO.setPeerId(peerId);
+        requestDTO.setPort(port);
+        requestDTO.setUploaded(uploaded);
+        requestDTO.setDownloaded(downloaded);
+        requestDTO.setEvent(event);
+        requestDTO.setLeft(left);
+        requestDTO.setCompact(compact);
+
+        String ipAddress = request.getHeader("X-Forwarded-For");
+        if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
+            ipAddress = request.getHeader("Proxy-Client-IP");
+        }
+        if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
+            ipAddress = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ipAddress == null || ipAddress.isEmpty() || "unknown".equalsIgnoreCase(ipAddress)) {
+            ipAddress = request.getRemoteAddr();
+        }
+        requestDTO.setIp(ipAddress.split(",")[0]);
+        return ResponseEntity.ok(trackerService.handleAnnounce(requestDTO));
     }
 }