Skip to content

Commit

Permalink
fix some bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
baarayy committed May 17, 2024
1 parent e0dafb6 commit 014b4a2
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 4 deletions.
4 changes: 4 additions & 0 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package client
import (
"bytes"
"fmt"
"log"
"magnetflow/bitfield"
"magnetflow/handshake"
"magnetflow/message"
Expand Down Expand Up @@ -91,18 +92,21 @@ func recvBitfield(conn net.Conn) (bitfield.Bitfield, error) {
}

func (c *Client) SendUnchoke() error {
log.Println("Unchoking", c.peer)
msg := message.Message{ID: message.MsgUnchoke}
_, err := c.Conn.Write(msg.Serialize())
return err
}

func (c *Client) SendHave(index int) error {
log.Println("Sending have", index, "to", c.peer)
msg := message.FormatHave(index)
_, err := c.Conn.Write(msg.Serialize())
return err
}

func (c *Client) SendInterested() error {
log.Println("Sending interested to", c.peer)
msg := message.Message{ID: message.MsgInterested}
_, err := c.Conn.Write(msg.Serialize())
return err
Expand Down
Binary file added debian-12.5.0-amd64-netinst.iso.torrent
Binary file not shown.
Binary file added magnetflow
Binary file not shown.
16 changes: 12 additions & 4 deletions p2p/p2p.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,8 @@ func checkIntegrity(pw *pieceWork, buf []byte) error {
}

func (t *Torrent) startDownloadWorker(peer peers.Peer, workQueue chan *pieceWork, results chan *pieceResult) {
c, err := client.New(peer, t.InfoHash, t.PeerID)
log.Println("Starting worker for %s\n", peer)

Check failure on line 122 in p2p/p2p.go

View workflow job for this annotation

GitHub Actions / build

log.Println call has possible Printf formatting directive %s
c, err := client.New(peer, t.PeerID, t.InfoHash)
if err != nil {
log.Printf("Could not handshake with %s. Disconnecting\n", peer)
return
Expand Down Expand Up @@ -149,6 +150,7 @@ func (t *Torrent) startDownloadWorker(peer peers.Peer, workQueue chan *pieceWork
return
}
c.SendHave(pw.index)
results <- &pieceResult{pw.index, buf}
}

}
Expand All @@ -172,27 +174,33 @@ func (t *Torrent) Download() ([]byte, error) {
results := make(chan *pieceResult)

for index, hash := range t.PieceHashes {
log.Println("Queueing up piece", index)
length := t.calculatePieceSize(index)
workQueue <- &pieceWork{index, hash, length}
}

log.Println("Queueing up done")
for _, peer := range t.Peers {
log.Println("Starting worker for", peer)
go t.startDownloadWorker(peer, workQueue, results)
}

log.Println("Workers started")
buf := make([]byte, t.Length)
donePieces := 0

for donePieces < len(t.PieceHashes) {
log.Println("Waiting for results")
res := <-results
begin, end := t.calculateBoundsForPiece(res.index)
copy(buf[begin:end], res.buf)
donePieces++

if len(t.PieceHashes) == 0 {
log.Fatal("No pieces in torrent")
}
percent := float64(donePieces) / float64(len(t.PieceHashes)) * 100
numWorkers := runtime.NumGoroutine() - 1 // 1 for the main thread
log.Printf("%f%% complete. %d workers.\n", percent, numWorkers)
}
log.Println("Download complete")
close(workQueue)
return buf, nil
}

0 comments on commit 014b4a2

Please sign in to comment.