修改torrent返回值
Change-Id: I2422c278a5e88524ad06123b5dbf8628962dfd1a
diff --git a/src/main/java/com/example/g8backend/util/BencodeUtil.java b/src/main/java/com/example/g8backend/util/BencodeUtil.java
new file mode 100644
index 0000000..4ec9ce1
--- /dev/null
+++ b/src/main/java/com/example/g8backend/util/BencodeUtil.java
@@ -0,0 +1,49 @@
+package com.example.g8backend.util;
+
+import com.example.g8backend.dto.AnnounceResponseDTO;
+
+import java.io.ByteArrayOutputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+
+public class BencodeUtil {
+ public static byte[] encodeAnnounceResponse(AnnounceResponseDTO dto) {
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ try {
+ out.write('d'); // dictionary start
+
+ writeString(out, "interval");
+ writeInt(out, dto.getInterval());
+
+ writeString(out, "peers");
+ out.write('l'); // list start
+ for (Map<String, Object> peer : dto.getPeers()) {
+ out.write('d');
+ writeString(out, "ip");
+ writeString(out, (String) peer.get("ip"));
+ writeString(out, "port");
+ writeInt(out, ((Number) peer.get("port")).intValue());
+ out.write('e');
+ }
+ out.write('e'); // list end
+
+ out.write('e'); // dictionary end
+ } catch (Exception e) {
+ throw new RuntimeException("Bencoding failed", e);
+ }
+ return out.toByteArray();
+ }
+
+ private static void writeString(ByteArrayOutputStream out, String str) throws Exception {
+ byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
+ out.write(String.valueOf(bytes.length).getBytes(StandardCharsets.UTF_8));
+ out.write(':');
+ out.write(bytes);
+ }
+
+ private static void writeInt(ByteArrayOutputStream out, int i) throws Exception {
+ out.write('i');
+ out.write(String.valueOf(i).getBytes(StandardCharsets.UTF_8));
+ out.write('e');
+ }
+}