Implement new puller routine (fixes #33)
This commit is contained in:
@@ -5,7 +5,7 @@ import "io"
|
||||
type TestModel struct {
|
||||
data []byte
|
||||
name string
|
||||
offset uint64
|
||||
offset int64
|
||||
size uint32
|
||||
hash []byte
|
||||
closed bool
|
||||
@@ -17,7 +17,7 @@ func (t *TestModel) Index(nodeID string, files []FileInfo) {
|
||||
func (t *TestModel) IndexUpdate(nodeID string, files []FileInfo) {
|
||||
}
|
||||
|
||||
func (t *TestModel) Request(nodeID, name string, offset uint64, size uint32, hash []byte) ([]byte, error) {
|
||||
func (t *TestModel) Request(nodeID, name string, offset int64, size uint32, hash []byte) ([]byte, error) {
|
||||
t.name = name
|
||||
t.offset = offset
|
||||
t.size = size
|
||||
|
||||
@@ -4,7 +4,7 @@ import "io"
|
||||
|
||||
type request struct {
|
||||
name string
|
||||
offset uint64
|
||||
offset int64
|
||||
size uint32
|
||||
hash []byte
|
||||
}
|
||||
@@ -42,7 +42,7 @@ func (w *marshalWriter) writeIndex(idx []FileInfo) {
|
||||
w.writeUint32(f.Version)
|
||||
w.writeUint32(uint32(len(f.Blocks)))
|
||||
for _, b := range f.Blocks {
|
||||
w.writeUint32(b.Length)
|
||||
w.writeUint32(b.Size)
|
||||
w.writeBytes(b.Hash)
|
||||
}
|
||||
}
|
||||
@@ -56,7 +56,7 @@ func WriteIndex(w io.Writer, idx []FileInfo) (int, error) {
|
||||
|
||||
func (w *marshalWriter) writeRequest(r request) {
|
||||
w.writeString(r.name)
|
||||
w.writeUint64(r.offset)
|
||||
w.writeUint64(uint64(r.offset))
|
||||
w.writeUint32(r.size)
|
||||
w.writeBytes(r.hash)
|
||||
}
|
||||
@@ -82,7 +82,7 @@ func (r *marshalReader) readIndex() []FileInfo {
|
||||
nblocks := r.readUint32()
|
||||
blocks := make([]BlockInfo, nblocks)
|
||||
for j := range blocks {
|
||||
blocks[j].Length = r.readUint32()
|
||||
blocks[j].Size = r.readUint32()
|
||||
blocks[j].Hash = r.readBytes()
|
||||
}
|
||||
files[i].Blocks = blocks
|
||||
@@ -100,7 +100,7 @@ func ReadIndex(r io.Reader) ([]FileInfo, error) {
|
||||
func (r *marshalReader) readRequest() request {
|
||||
var req request
|
||||
req.name = r.readString()
|
||||
req.offset = r.readUint64()
|
||||
req.offset = int64(r.readUint64())
|
||||
req.size = r.readUint32()
|
||||
req.hash = r.readBytes()
|
||||
return req
|
||||
|
||||
@@ -46,7 +46,7 @@ func TestIndex(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRequest(t *testing.T) {
|
||||
f := func(name string, offset uint64, size uint32, hash []byte) bool {
|
||||
f := func(name string, offset int64, size uint32, hash []byte) bool {
|
||||
var buf = new(bytes.Buffer)
|
||||
var req = request{name, offset, size, hash}
|
||||
var wr = marshalWriter{w: buf}
|
||||
|
||||
@@ -34,8 +34,8 @@ type FileInfo struct {
|
||||
}
|
||||
|
||||
type BlockInfo struct {
|
||||
Length uint32
|
||||
Hash []byte
|
||||
Size uint32
|
||||
Hash []byte
|
||||
}
|
||||
|
||||
type Model interface {
|
||||
@@ -44,7 +44,7 @@ type Model interface {
|
||||
// An index update was received from the peer node
|
||||
IndexUpdate(nodeID string, files []FileInfo)
|
||||
// A request was made by the peer node
|
||||
Request(nodeID, name string, offset uint64, size uint32, hash []byte) ([]byte, error)
|
||||
Request(nodeID, name string, offset int64, size uint32, hash []byte) ([]byte, error)
|
||||
// The peer node closed the connection
|
||||
Close(nodeID string, err error)
|
||||
}
|
||||
@@ -150,7 +150,7 @@ func (c *Connection) Index(idx []FileInfo) {
|
||||
}
|
||||
|
||||
// Request returns the bytes for the specified block after fetching them from the connected peer.
|
||||
func (c *Connection) Request(name string, offset uint64, size uint32, hash []byte) ([]byte, error) {
|
||||
func (c *Connection) Request(name string, offset int64, size uint32, hash []byte) ([]byte, error) {
|
||||
c.Lock()
|
||||
if c.closed {
|
||||
c.Unlock()
|
||||
|
||||
Reference in New Issue
Block a user