aboutsummaryrefslogtreecommitdiff
path: root/cmd/mybittorrent/file.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/mybittorrent/file.go')
-rw-r--r--cmd/mybittorrent/file.go74
1 files changed, 1 insertions, 73 deletions
diff --git a/cmd/mybittorrent/file.go b/cmd/mybittorrent/file.go
index 2302976..498ea3f 100644
--- a/cmd/mybittorrent/file.go
+++ b/cmd/mybittorrent/file.go
@@ -1,12 +1,6 @@
package main
-import (
- "bytes"
- "fmt"
- "io"
-)
-
-type File struct {
+type Meta struct {
Announce string `bencode:"announce"`
Info FileInfo `bencode:"info"`
}
@@ -17,69 +11,3 @@ type FileInfo struct {
PieceLength int `bencode:"piece length"`
Pieces string `bencode:"pieces"`
}
-
-func NewFile() *File {
- return &File{}
-}
-
-func (f *File) ReadFrom(r io.ReadCloser) error {
- buf := new(bytes.Buffer)
-
- _, err := buf.ReadFrom(r)
- if err != nil {
- return err
- }
-
- defer func(r io.ReadCloser) {
- err := r.Close()
- if err != nil {
- fmt.Printf("failed to close: %v+\n", err)
- }
- }(r)
-
- if err != nil {
- return err
- }
-
- decoded, err := NewDecoder(buf.String()).Decode()
- if err != nil {
- return err
- }
-
- content, ok := decoded.(map[string]any)
- if !ok {
- return fmt.Errorf("invalid contents")
- }
-
- f.Announce, ok = content["announce"].(string)
- if !ok {
- return fmt.Errorf("invalid announce field")
- }
-
- info, ok := content["info"].(map[string]any)
- if !ok {
- return fmt.Errorf("invalid info field")
- }
-
- f.Info.Length, ok = info["length"].(int)
- if !ok {
- return fmt.Errorf("invalid info.length field")
- }
-
- f.Info.Name, ok = info["name"].(string)
- if !ok {
- return fmt.Errorf("invalid info.name field")
- }
-
- f.Info.PieceLength, ok = info["piece length"].(int)
- if !ok {
- return fmt.Errorf("invalid info.piece length field")
- }
-
- f.Info.Pieces, ok = info["pieces"].(string)
- if !ok {
- return fmt.Errorf("invalid info.pieces field")
- }
-
- return nil
-}