Expose hash, flags, options in Request

This commit is contained in:
Audrius Butkevicius 2015-01-24 21:56:12 +00:00
parent 5750443371
commit 1a59a5478f
7 changed files with 27 additions and 18 deletions

View File

@ -13,6 +13,9 @@ type TestModel struct {
name string name string
offset int64 offset int64
size int size int
hash []byte
flags uint32
options []Option
closedCh chan bool closedCh chan bool
} }
@ -28,11 +31,14 @@ func (t *TestModel) Index(deviceID DeviceID, folder string, files []FileInfo) {
func (t *TestModel) IndexUpdate(deviceID DeviceID, folder string, files []FileInfo) { func (t *TestModel) IndexUpdate(deviceID DeviceID, folder string, files []FileInfo) {
} }
func (t *TestModel) Request(deviceID DeviceID, folder, name string, offset int64, size int) ([]byte, error) { func (t *TestModel) Request(deviceID DeviceID, folder, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error) {
t.folder = folder t.folder = folder
t.name = name t.name = name
t.offset = offset t.offset = offset
t.size = size t.size = size
t.hash = hash
t.flags = flags
t.options = options
return t.data, nil return t.data, nil
} }

View File

@ -26,9 +26,9 @@ func (m nativeModel) IndexUpdate(deviceID DeviceID, folder string, files []FileI
m.next.IndexUpdate(deviceID, folder, files) m.next.IndexUpdate(deviceID, folder, files)
} }
func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, size int) ([]byte, error) { func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error) {
name = norm.NFD.String(name) name = norm.NFD.String(name)
return m.next.Request(deviceID, folder, name, offset, size) return m.next.Request(deviceID, folder, name, offset, size, hash, flags, options)
} }
func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) { func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) {

View File

@ -18,8 +18,8 @@ func (m nativeModel) IndexUpdate(deviceID DeviceID, folder string, files []FileI
m.next.IndexUpdate(deviceID, folder, files) m.next.IndexUpdate(deviceID, folder, files)
} }
func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, size int) ([]byte, error) { func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error) {
return m.next.Request(deviceID, folder, name, offset, size) return m.next.Request(deviceID, folder, name, offset, size, hash, flags, options)
} }
func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) { func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) {

View File

@ -56,9 +56,9 @@ func (m nativeModel) IndexUpdate(deviceID DeviceID, folder string, files []FileI
m.next.IndexUpdate(deviceID, folder, files) m.next.IndexUpdate(deviceID, folder, files)
} }
func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, size int) ([]byte, error) { func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error) {
name = filepath.FromSlash(name) name = filepath.FromSlash(name)
return m.next.Request(deviceID, folder, name, offset, size) return m.next.Request(deviceID, folder, name, offset, size, hash, flags, options)
} }
func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) { func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) {

View File

@ -70,7 +70,7 @@ type Model interface {
// An index update was received from the peer device // An index update was received from the peer device
IndexUpdate(deviceID DeviceID, folder string, files []FileInfo) IndexUpdate(deviceID DeviceID, folder string, files []FileInfo)
// A request was made by the peer device // A request was made by the peer device
Request(deviceID DeviceID, folder string, name string, offset int64, size int) ([]byte, error) Request(deviceID DeviceID, folder string, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error)
// A cluster configuration message was received // A cluster configuration message was received
ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage)
// The peer device closed the connection // The peer device closed the connection
@ -82,7 +82,7 @@ type Connection interface {
Name() string Name() string
Index(folder string, files []FileInfo) error Index(folder string, files []FileInfo) error
IndexUpdate(folder string, files []FileInfo) error IndexUpdate(folder string, files []FileInfo) error
Request(folder string, name string, offset int64, size int) ([]byte, error) Request(folder string, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error)
ClusterConfig(config ClusterConfigMessage) ClusterConfig(config ClusterConfigMessage)
Statistics() Statistics Statistics() Statistics
} }
@ -201,7 +201,7 @@ func (c *rawConnection) IndexUpdate(folder string, idx []FileInfo) error {
} }
// Request returns the bytes for the specified block after fetching them from the connected peer. // Request returns the bytes for the specified block after fetching them from the connected peer.
func (c *rawConnection) Request(folder string, name string, offset int64, size int) ([]byte, error) { func (c *rawConnection) Request(folder string, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error) {
var id int var id int
select { select {
case id = <-c.nextID: case id = <-c.nextID:
@ -218,10 +218,13 @@ func (c *rawConnection) Request(folder string, name string, offset int64, size i
c.awaitingMut.Unlock() c.awaitingMut.Unlock()
ok := c.send(id, messageTypeRequest, RequestMessage{ ok := c.send(id, messageTypeRequest, RequestMessage{
Folder: folder, Folder: folder,
Name: name, Name: name,
Offset: offset, Offset: offset,
Size: int32(size), Size: int32(size),
Hash: hash,
Flags: flags,
Options: options,
}) })
if !ok { if !ok {
return nil, ErrClosed return nil, ErrClosed
@ -499,7 +502,7 @@ func filterIndexMessageFiles(fs []FileInfo) []FileInfo {
} }
func (c *rawConnection) handleRequest(msgID int, req RequestMessage) { func (c *rawConnection) handleRequest(msgID int, req RequestMessage) {
data, _ := c.receiver.Request(c.id, req.Folder, req.Name, int64(req.Offset), int(req.Size)) data, _ := c.receiver.Request(c.id, req.Folder, req.Name, int64(req.Offset), int(req.Size), req.Hash, req.Flags, req.Options)
c.send(msgID, messageTypeResponse, ResponseMessage{ c.send(msgID, messageTypeResponse, ResponseMessage{
Data: data, Data: data,

View File

@ -232,7 +232,7 @@ func TestClose(t *testing.T) {
c0.Index("default", nil) c0.Index("default", nil)
c0.Index("default", nil) c0.Index("default", nil)
if _, err := c0.Request("default", "foo", 0, 0); err == nil { if _, err := c0.Request("default", "foo", 0, 0, nil, 0, nil); err == nil {
t.Error("Request should return an error") t.Error("Request should return an error")
} }
} }

View File

@ -42,9 +42,9 @@ func (c wireFormatConnection) IndexUpdate(folder string, fs []FileInfo) error {
return c.next.IndexUpdate(folder, myFs) return c.next.IndexUpdate(folder, myFs)
} }
func (c wireFormatConnection) Request(folder, name string, offset int64, size int) ([]byte, error) { func (c wireFormatConnection) Request(folder, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error) {
name = norm.NFC.String(filepath.ToSlash(name)) name = norm.NFC.String(filepath.ToSlash(name))
return c.next.Request(folder, name, offset, size) return c.next.Request(folder, name, offset, size, hash, flags, options)
} }
func (c wireFormatConnection) ClusterConfig(config ClusterConfigMessage) { func (c wireFormatConnection) ClusterConfig(config ClusterConfigMessage) {