This commit is contained in:
Jakob Borg 2023-05-24 12:37:56 +02:00
parent b64fbdd1c1
commit 5912f32a34
10 changed files with 125 additions and 125 deletions

View File

@ -33,7 +33,7 @@ func newFakeConnection(id protocol.DeviceID, model Model) *fakeConnection {
f.RequestCalls(func(ctx context.Context, folder, name string, blockNo int, offset int64, size int, hash []byte, weakHash uint32, fromTemporary bool) ([]byte, error) { f.RequestCalls(func(ctx context.Context, folder, name string, blockNo int, offset int64, size int, hash []byte, weakHash uint32, fromTemporary bool) ([]byte, error) {
return f.fileData[name], nil return f.fileData[name], nil
}) })
f.IDReturns(id) f.DeviceIDReturns(id)
f.ConnectionIDReturns(rand.String(16)) f.ConnectionIDReturns(rand.String(16))
f.CloseCalls(func(err error) { f.CloseCalls(func(err error) {
f.closeOnce.Do(func() { f.closeOnce.Do(func() {

View File

@ -56,10 +56,10 @@ func newIndexHandler(conn protocol.Connection, downloads *deviceDownloadState, f
// the IndexID, or something else weird has // the IndexID, or something else weird has
// happened. We send a full index to reset the // happened. We send a full index to reset the
// situation. // situation.
l.Infof("Device %v folder %s is delta index compatible, but seems out of sync with reality", conn.ID().Short(), folder.Description()) l.Infof("Device %v folder %s is delta index compatible, but seems out of sync with reality", conn.DeviceID().Short(), folder.Description())
startSequence = 0 startSequence = 0
} else { } else {
l.Debugf("Device %v folder %s is delta index compatible (mlv=%d)", conn.ID().Short(), folder.Description(), startInfo.local.MaxSequence) l.Debugf("Device %v folder %s is delta index compatible (mlv=%d)", conn.DeviceID().Short(), folder.Description(), startInfo.local.MaxSequence)
startSequence = startInfo.local.MaxSequence startSequence = startInfo.local.MaxSequence
} }
} else if startInfo.local.IndexID != 0 { } else if startInfo.local.IndexID != 0 {
@ -67,10 +67,10 @@ func newIndexHandler(conn protocol.Connection, downloads *deviceDownloadState, f
// not the right one. Either they are confused or we // not the right one. Either they are confused or we
// must have reset our database since last talking to // must have reset our database since last talking to
// them. We'll start with a full index transfer. // them. We'll start with a full index transfer.
l.Infof("Device %v folder %s has mismatching index ID for us (%v != %v)", conn.ID().Short(), folder.Description(), startInfo.local.IndexID, myIndexID) l.Infof("Device %v folder %s has mismatching index ID for us (%v != %v)", conn.DeviceID().Short(), folder.Description(), startInfo.local.IndexID, myIndexID)
startSequence = 0 startSequence = 0
} else { } else {
l.Debugf("Device %v folder %s has no index ID for us", conn.ID().Short(), folder.Description()) l.Debugf("Device %v folder %s has no index ID for us", conn.DeviceID().Short(), folder.Description())
} }
// This is the other side's description of themselves. We // This is the other side's description of themselves. We
@ -78,23 +78,23 @@ func newIndexHandler(conn protocol.Connection, downloads *deviceDownloadState, f
// otherwise we drop our old index data and expect to get a // otherwise we drop our old index data and expect to get a
// completely new set. // completely new set.
theirIndexID := fset.IndexID(conn.ID()) theirIndexID := fset.IndexID(conn.DeviceID())
if startInfo.remote.IndexID == 0 { if startInfo.remote.IndexID == 0 {
// They're not announcing an index ID. This means they // They're not announcing an index ID. This means they
// do not support delta indexes and we should clear any // do not support delta indexes and we should clear any
// information we have from them before accepting their // information we have from them before accepting their
// index, which will presumably be a full index. // index, which will presumably be a full index.
l.Debugf("Device %v folder %s does not announce an index ID", conn.ID().Short(), folder.Description()) l.Debugf("Device %v folder %s does not announce an index ID", conn.DeviceID().Short(), folder.Description())
fset.Drop(conn.ID()) fset.Drop(conn.DeviceID())
} else if startInfo.remote.IndexID != theirIndexID { } else if startInfo.remote.IndexID != theirIndexID {
// The index ID we have on file is not what they're // The index ID we have on file is not what they're
// announcing. They must have reset their database and // announcing. They must have reset their database and
// will probably send us a full index. We drop any // will probably send us a full index. We drop any
// information we have and remember this new index ID // information we have and remember this new index ID
// instead. // instead.
l.Infof("Device %v folder %s has a new index ID (%v)", conn.ID().Short(), folder.Description(), startInfo.remote.IndexID) l.Infof("Device %v folder %s has a new index ID (%v)", conn.DeviceID().Short(), folder.Description(), startInfo.remote.IndexID)
fset.Drop(conn.ID()) fset.Drop(conn.DeviceID())
fset.SetIndexID(conn.ID(), startInfo.remote.IndexID) fset.SetIndexID(conn.DeviceID(), startInfo.remote.IndexID)
} }
return &indexHandler{ return &indexHandler{
@ -129,12 +129,12 @@ func (s *indexHandler) waitForFileset(ctx context.Context) (*db.FileSet, error)
} }
func (s *indexHandler) Serve(ctx context.Context) (err error) { func (s *indexHandler) Serve(ctx context.Context) (err error) {
l.Infof("Starting index handler for %s to %s at %s (slv=%d)", s.folder, s.conn.ID().Short(), s.conn, s.prevSequence) l.Infof("Starting index handler for %s to %s at %s (slv=%d)", s.folder, s.conn.DeviceID().Short(), s.conn, s.prevSequence)
stop := make(chan struct{}) stop := make(chan struct{})
defer func() { defer func() {
err = svcutil.NoRestartErr(err) err = svcutil.NoRestartErr(err)
l.Infof("Exiting index handler for %s to %s at %s: %v", s.folder, s.conn.ID().Short(), s.conn, err) l.Infof("Exiting index handler for %s to %s at %s: %v", s.folder, s.conn.DeviceID().Short(), s.conn, err)
close(stop) close(stop)
}() }()
@ -320,7 +320,7 @@ func (s *indexHandler) sendIndexTo(ctx context.Context, fset *db.FileSet) error
} }
func (s *indexHandler) receive(fs []protocol.FileInfo, update bool, op string) error { func (s *indexHandler) receive(fs []protocol.FileInfo, update bool, op string) error {
deviceID := s.conn.ID() deviceID := s.conn.DeviceID()
s.cond.L.Lock() s.cond.L.Lock()
paused := s.paused paused := s.paused
@ -381,7 +381,7 @@ func prepareFileInfoForIndex(f protocol.FileInfo) protocol.FileInfo {
} }
func (s *indexHandler) String() string { func (s *indexHandler) String() string {
return fmt.Sprintf("indexHandler@%p for %s to %s at %s", s, s.folder, s.conn.ID().Short(), s.conn) return fmt.Sprintf("indexHandler@%p for %s to %s at %s", s, s.folder, s.conn.DeviceID().Short(), s.conn)
} }
type indexHandlerRegistry struct { type indexHandlerRegistry struct {
@ -426,7 +426,7 @@ func newIndexHandlerRegistry(conn protocol.Connection, downloads *deviceDownload
} }
func (r *indexHandlerRegistry) String() string { func (r *indexHandlerRegistry) String() string {
return fmt.Sprintf("indexHandlerRegistry/%v", r.conn.ID().Short()) return fmt.Sprintf("indexHandlerRegistry/%v", r.conn.DeviceID().Short())
} }
func (r *indexHandlerRegistry) GetSupervisor() *suture.Supervisor { func (r *indexHandlerRegistry) GetSupervisor() *suture.Supervisor {
@ -459,11 +459,11 @@ func (r *indexHandlerRegistry) AddIndexInfo(folder string, startInfo *clusterCon
if is, ok := r.indexHandlers[folder]; ok { if is, ok := r.indexHandlers[folder]; ok {
r.sup.RemoveAndWait(is.token, 0) r.sup.RemoveAndWait(is.token, 0)
delete(r.indexHandlers, folder) delete(r.indexHandlers, folder)
l.Debugf("Removed index sender for device %v and folder %v due to added pending", r.conn.ID().Short(), folder) l.Debugf("Removed index sender for device %v and folder %v due to added pending", r.conn.DeviceID().Short(), folder)
} }
folderState, ok := r.folderStates[folder] folderState, ok := r.folderStates[folder]
if !ok { if !ok {
l.Debugf("Pending index handler for device %v and folder %v", r.conn.ID().Short(), folder) l.Debugf("Pending index handler for device %v and folder %v", r.conn.DeviceID().Short(), folder)
r.startInfos[folder] = startInfo r.startInfos[folder] = startInfo
return return
} }
@ -476,13 +476,13 @@ func (r *indexHandlerRegistry) Remove(folder string) {
r.mut.Lock() r.mut.Lock()
defer r.mut.Unlock() defer r.mut.Unlock()
l.Debugf("Removing index handler for device %v and folder %v", r.conn.ID().Short(), folder) l.Debugf("Removing index handler for device %v and folder %v", r.conn.DeviceID().Short(), folder)
if is, ok := r.indexHandlers[folder]; ok { if is, ok := r.indexHandlers[folder]; ok {
r.sup.RemoveAndWait(is.token, 0) r.sup.RemoveAndWait(is.token, 0)
delete(r.indexHandlers, folder) delete(r.indexHandlers, folder)
} }
delete(r.startInfos, folder) delete(r.startInfos, folder)
l.Debugf("Removed index handler for device %v and folder %v", r.conn.ID().Short(), folder) l.Debugf("Removed index handler for device %v and folder %v", r.conn.DeviceID().Short(), folder)
} }
// RemoveAllExcept stops all running index handlers and removes those pending to be started, // RemoveAllExcept stops all running index handlers and removes those pending to be started,
@ -496,13 +496,13 @@ func (r *indexHandlerRegistry) RemoveAllExcept(except map[string]remoteFolderSta
if _, ok := except[folder]; !ok { if _, ok := except[folder]; !ok {
r.sup.RemoveAndWait(is.token, 0) r.sup.RemoveAndWait(is.token, 0)
delete(r.indexHandlers, folder) delete(r.indexHandlers, folder)
l.Debugf("Removed index handler for device %v and folder %v (removeAllExcept)", r.conn.ID().Short(), folder) l.Debugf("Removed index handler for device %v and folder %v (removeAllExcept)", r.conn.DeviceID().Short(), folder)
} }
} }
for folder := range r.startInfos { for folder := range r.startInfos {
if _, ok := except[folder]; !ok { if _, ok := except[folder]; !ok {
delete(r.startInfos, folder) delete(r.startInfos, folder)
l.Debugf("Removed pending index handler for device %v and folder %v (removeAllExcept)", r.conn.ID().Short(), folder) l.Debugf("Removed pending index handler for device %v and folder %v (removeAllExcept)", r.conn.DeviceID().Short(), folder)
} }
} }
} }
@ -511,7 +511,7 @@ func (r *indexHandlerRegistry) RemoveAllExcept(except map[string]remoteFolderSta
// changes. The exception being if the folder is removed entirely, then call // changes. The exception being if the folder is removed entirely, then call
// Remove. The fset and runner arguments may be nil, if given folder is paused. // Remove. The fset and runner arguments may be nil, if given folder is paused.
func (r *indexHandlerRegistry) RegisterFolderState(folder config.FolderConfiguration, fset *db.FileSet, runner service) { func (r *indexHandlerRegistry) RegisterFolderState(folder config.FolderConfiguration, fset *db.FileSet, runner service) {
if !folder.SharedWith(r.conn.ID()) { if !folder.SharedWith(r.conn.DeviceID()) {
r.Remove(folder.ID) r.Remove(folder.ID)
return return
} }
@ -528,13 +528,13 @@ func (r *indexHandlerRegistry) RegisterFolderState(folder config.FolderConfigura
// folderPausedLocked stops a running index handler. // folderPausedLocked stops a running index handler.
// It is a noop if the folder isn't known or has not been started yet. // It is a noop if the folder isn't known or has not been started yet.
func (r *indexHandlerRegistry) folderPausedLocked(folder string) { func (r *indexHandlerRegistry) folderPausedLocked(folder string) {
l.Debugf("Pausing index handler for device %v and folder %v", r.conn.ID().Short(), folder) l.Debugf("Pausing index handler for device %v and folder %v", r.conn.DeviceID().Short(), folder)
delete(r.folderStates, folder) delete(r.folderStates, folder)
if is, ok := r.indexHandlers[folder]; ok { if is, ok := r.indexHandlers[folder]; ok {
is.pause() is.pause()
l.Debugf("Paused index handler for device %v and folder %v", r.conn.ID().Short(), folder) l.Debugf("Paused index handler for device %v and folder %v", r.conn.DeviceID().Short(), folder)
} else { } else {
l.Debugf("No index handler for device %v and folder %v to pause", r.conn.ID().Short(), folder) l.Debugf("No index handler for device %v and folder %v to pause", r.conn.DeviceID().Short(), folder)
} }
} }
@ -553,16 +553,16 @@ func (r *indexHandlerRegistry) folderRunningLocked(folder config.FolderConfigura
if isOk { if isOk {
r.sup.RemoveAndWait(is.token, 0) r.sup.RemoveAndWait(is.token, 0)
delete(r.indexHandlers, folder.ID) delete(r.indexHandlers, folder.ID)
l.Debugf("Removed index handler for device %v and folder %v in resume", r.conn.ID().Short(), folder.ID) l.Debugf("Removed index handler for device %v and folder %v in resume", r.conn.DeviceID().Short(), folder.ID)
} }
r.startLocked(folder, fset, runner, info) r.startLocked(folder, fset, runner, info)
delete(r.startInfos, folder.ID) delete(r.startInfos, folder.ID)
l.Debugf("Started index handler for device %v and folder %v in resume", r.conn.ID().Short(), folder.ID) l.Debugf("Started index handler for device %v and folder %v in resume", r.conn.DeviceID().Short(), folder.ID)
} else if isOk { } else if isOk {
l.Debugf("Resuming index handler for device %v and folder %v", r.conn.ID().Short(), folder) l.Debugf("Resuming index handler for device %v and folder %v", r.conn.DeviceID().Short(), folder)
is.resume(fset, runner) is.resume(fset, runner)
} else { } else {
l.Debugf("Not resuming index handler for device %v and folder %v as none is paused and there is no start info", r.conn.ID().Short(), folder.ID) l.Debugf("Not resuming index handler for device %v and folder %v as none is paused and there is no start info", r.conn.DeviceID().Short(), folder.ID)
} }
} }

View File

@ -1181,7 +1181,7 @@ func (m *model) handleIndex(conn protocol.Connection, folder string, fs []protoc
op += " update" op += " update"
} }
deviceID := conn.ID() deviceID := conn.DeviceID()
l.Debugf("%v (in): %s / %q: %d files", op, deviceID, folder, len(fs)) l.Debugf("%v (in): %s / %q: %d files", op, deviceID, folder, len(fs))
if cfg, ok := m.cfg.Folder(folder); !ok || !cfg.SharedWith(deviceID) { if cfg, ok := m.cfg.Folder(folder); !ok || !cfg.SharedWith(deviceID) {
@ -1216,7 +1216,7 @@ func (m *model) ClusterConfig(conn protocol.Connection, cm protocol.ClusterConfi
// Also, collect a list of folders we do share, and if he's interested in // Also, collect a list of folders we do share, and if he's interested in
// temporary indexes, subscribe the connection. // temporary indexes, subscribe the connection.
deviceID := conn.ID() deviceID := conn.DeviceID()
connID := conn.ConnectionID() connID := conn.ConnectionID()
l.Debugf("Handling ClusterConfig from %v/%s", deviceID.Short(), connID) l.Debugf("Handling ClusterConfig from %v/%s", deviceID.Short(), connID)
@ -1342,7 +1342,7 @@ func (m *model) ClusterConfig(conn protocol.Connection, cm protocol.ClusterConfi
} }
func (m *model) ensureIndexHandler(conn protocol.Connection) *indexHandlerRegistry { func (m *model) ensureIndexHandler(conn protocol.Connection) *indexHandlerRegistry {
deviceID := conn.ID() deviceID := conn.DeviceID()
connID := conn.ConnectionID() connID := conn.ConnectionID()
m.pmut.Lock() m.pmut.Lock()
@ -1629,7 +1629,7 @@ func (m *model) sendClusterConfig(ids []protocol.DeviceID) {
m.pmut.RUnlock() m.pmut.RUnlock()
// Generating cluster-configs acquires fmut -> must happen outside of pmut. // Generating cluster-configs acquires fmut -> must happen outside of pmut.
for _, conn := range ccConns { for _, conn := range ccConns {
cm, passwords := m.generateClusterConfig(conn.ID()) cm, passwords := m.generateClusterConfig(conn.DeviceID())
conn.SetFolderPasswords(passwords) conn.SetFolderPasswords(passwords)
go conn.ClusterConfig(cm) go conn.ClusterConfig(cm)
} }
@ -1861,7 +1861,7 @@ func (m *model) introduceDevice(device protocol.Device, introducerCfg config.Dev
// Closed is called when a connection has been closed // Closed is called when a connection has been closed
func (m *model) Closed(conn protocol.Connection, err error) { func (m *model) Closed(conn protocol.Connection, err error) {
connID := conn.ConnectionID() connID := conn.ConnectionID()
deviceID := conn.ID() deviceID := conn.DeviceID()
m.pmut.Lock() m.pmut.Lock()
conn, ok := m.conns[connID] conn, ok := m.conns[connID]
@ -1948,7 +1948,7 @@ func (m *model) Request(conn protocol.Connection, folder, name string, _, size i
return nil, protocol.ErrInvalid return nil, protocol.ErrInvalid
} }
deviceID := conn.ID() deviceID := conn.DeviceID()
connID := conn.ConnectionID() connID := conn.ConnectionID()
m.fmut.RLock() m.fmut.RLock()
@ -2330,7 +2330,7 @@ func (m *model) GetHello(id protocol.DeviceID) protocol.HelloIntf {
// be sent to the connected peer, thereafter index updates whenever the local // be sent to the connected peer, thereafter index updates whenever the local
// folder changes. // folder changes.
func (m *model) AddConnection(conn protocol.Connection, hello protocol.Hello) { func (m *model) AddConnection(conn protocol.Connection, hello protocol.Hello) {
deviceID := conn.ID() deviceID := conn.DeviceID()
deviceCfg, ok := m.cfg.Device(deviceID) deviceCfg, ok := m.cfg.Device(deviceID)
if !ok { if !ok {
@ -2435,7 +2435,7 @@ func (m *model) promoteConnections() {
} }
func (m *model) DownloadProgress(conn protocol.Connection, folder string, updates []protocol.FileDownloadProgressUpdate) error { func (m *model) DownloadProgress(conn protocol.Connection, folder string, updates []protocol.FileDownloadProgressUpdate) error {
deviceID := conn.ID() deviceID := conn.DeviceID()
m.fmut.RLock() m.fmut.RLock()
cfg, ok := m.folderCfgs[folder] cfg, ok := m.folderCfgs[folder]

View File

@ -1338,7 +1338,7 @@ func TestAutoAcceptEnc(t *testing.T) {
// would panic. // would panic.
clusterConfig := func(deviceID protocol.DeviceID, cm protocol.ClusterConfig) { clusterConfig := func(deviceID protocol.DeviceID, cm protocol.ClusterConfig) {
m.AddConnection(newFakeConnection(deviceID, m), protocol.Hello{}) m.AddConnection(newFakeConnection(deviceID, m), protocol.Hello{})
m.ClusterConfig(&protocolmocks.Connection{IDStub: func() protocol.DeviceID { return deviceID }}, cm) m.ClusterConfig(&protocolmocks.Connection{DeviceIDStub: func() protocol.DeviceID { return deviceID }}, cm)
} }
clusterConfig(device1, basicCC()) clusterConfig(device1, basicCC())

View File

@ -315,15 +315,15 @@ func (t *ProgressEmitter) emptyLocked() bool {
func (t *ProgressEmitter) temporaryIndexSubscribe(conn protocol.Connection, folders []string) { func (t *ProgressEmitter) temporaryIndexSubscribe(conn protocol.Connection, folders []string) {
t.mut.Lock() t.mut.Lock()
defer t.mut.Unlock() defer t.mut.Unlock()
t.connections[conn.ID()] = conn t.connections[conn.DeviceID()] = conn
t.foldersByConns[conn.ID()] = folders t.foldersByConns[conn.DeviceID()] = folders
} }
func (t *ProgressEmitter) temporaryIndexUnsubscribe(conn protocol.Connection) { func (t *ProgressEmitter) temporaryIndexUnsubscribe(conn protocol.Connection) {
t.mut.Lock() t.mut.Lock()
defer t.mut.Unlock() defer t.mut.Unlock()
delete(t.connections, conn.ID()) delete(t.connections, conn.DeviceID())
delete(t.foldersByConns, conn.ID()) delete(t.foldersByConns, conn.DeviceID())
} }
func (t *ProgressEmitter) clearLocked() { func (t *ProgressEmitter) clearLocked() {

View File

@ -463,7 +463,7 @@ func TestSendDownloadProgressMessages(t *testing.T) {
p.temporaryIndexUnsubscribe(fc) p.temporaryIndexUnsubscribe(fc)
sendMsgs(p) sendMsgs(p)
_, ok := p.sentDownloadStates[fc.ID()] _, ok := p.sentDownloadStates[fc.DeviceID()]
if ok { if ok {
t.Error("Should not be there") t.Error("Should not be there")
} }

View File

@ -38,9 +38,9 @@ func init() {
myID, _ = protocol.DeviceIDFromString("ZNWFSWE-RWRV2BD-45BLMCV-LTDE2UR-4LJDW6J-R5BPWEB-TXD27XJ-IZF5RA4") myID, _ = protocol.DeviceIDFromString("ZNWFSWE-RWRV2BD-45BLMCV-LTDE2UR-4LJDW6J-R5BPWEB-TXD27XJ-IZF5RA4")
device1, _ = protocol.DeviceIDFromString("AIR6LPZ-7K4PTTV-UXQSMUU-CPQ5YWH-OEDFIIQ-JUG777G-2YQXXR5-YD6AWQR") device1, _ = protocol.DeviceIDFromString("AIR6LPZ-7K4PTTV-UXQSMUU-CPQ5YWH-OEDFIIQ-JUG777G-2YQXXR5-YD6AWQR")
device2, _ = protocol.DeviceIDFromString("GYRZZQB-IRNPV4Z-T7TC52W-EQYJ3TT-FDQW6MW-DFLMU42-SSSU6EM-FBK2VAY") device2, _ = protocol.DeviceIDFromString("GYRZZQB-IRNPV4Z-T7TC52W-EQYJ3TT-FDQW6MW-DFLMU42-SSSU6EM-FBK2VAY")
device1Conn.IDReturns(device1) device1Conn.DeviceIDReturns(device1)
device1Conn.ConnectionIDReturns(rand.String(16)) device1Conn.ConnectionIDReturns(rand.String(16))
device2Conn.IDReturns(device2) device2Conn.DeviceIDReturns(device2)
device2Conn.ConnectionIDReturns(rand.String(16)) device2Conn.ConnectionIDReturns(rand.String(16))
cfg := config.New(myID) cfg := config.New(myID)

View File

@ -185,8 +185,8 @@ func (e encryptedConnection) SetFolderPasswords(passwords map[string]string) {
e.folderKeys.setPasswords(passwords) e.folderKeys.setPasswords(passwords)
} }
func (e encryptedConnection) ID() DeviceID { func (e encryptedConnection) DeviceID() DeviceID {
return e.conn.ID() return e.conn.DeviceID()
} }
func (e encryptedConnection) Index(ctx context.Context, folder string, files []FileInfo) error { func (e encryptedConnection) Index(ctx context.Context, folder string, files []FileInfo) error {

View File

@ -51,6 +51,16 @@ type Connection struct {
cryptoReturnsOnCall map[int]struct { cryptoReturnsOnCall map[int]struct {
result1 string result1 string
} }
DeviceIDStub func() protocol.DeviceID
deviceIDMutex sync.RWMutex
deviceIDArgsForCall []struct {
}
deviceIDReturns struct {
result1 protocol.DeviceID
}
deviceIDReturnsOnCall map[int]struct {
result1 protocol.DeviceID
}
DownloadProgressStub func(context.Context, string, []protocol.FileDownloadProgressUpdate) DownloadProgressStub func(context.Context, string, []protocol.FileDownloadProgressUpdate)
downloadProgressMutex sync.RWMutex downloadProgressMutex sync.RWMutex
downloadProgressArgsForCall []struct { downloadProgressArgsForCall []struct {
@ -68,16 +78,6 @@ type Connection struct {
establishedAtReturnsOnCall map[int]struct { establishedAtReturnsOnCall map[int]struct {
result1 time.Time result1 time.Time
} }
IDStub func() protocol.DeviceID
iDMutex sync.RWMutex
iDArgsForCall []struct {
}
iDReturns struct {
result1 protocol.DeviceID
}
iDReturnsOnCall map[int]struct {
result1 protocol.DeviceID
}
IndexStub func(context.Context, string, []protocol.FileInfo) error IndexStub func(context.Context, string, []protocol.FileInfo) error
indexMutex sync.RWMutex indexMutex sync.RWMutex
indexArgsForCall []struct { indexArgsForCall []struct {
@ -431,6 +431,59 @@ func (fake *Connection) CryptoReturnsOnCall(i int, result1 string) {
}{result1} }{result1}
} }
func (fake *Connection) DeviceID() protocol.DeviceID {
fake.deviceIDMutex.Lock()
ret, specificReturn := fake.deviceIDReturnsOnCall[len(fake.deviceIDArgsForCall)]
fake.deviceIDArgsForCall = append(fake.deviceIDArgsForCall, struct {
}{})
stub := fake.DeviceIDStub
fakeReturns := fake.deviceIDReturns
fake.recordInvocation("DeviceID", []interface{}{})
fake.deviceIDMutex.Unlock()
if stub != nil {
return stub()
}
if specificReturn {
return ret.result1
}
return fakeReturns.result1
}
func (fake *Connection) DeviceIDCallCount() int {
fake.deviceIDMutex.RLock()
defer fake.deviceIDMutex.RUnlock()
return len(fake.deviceIDArgsForCall)
}
func (fake *Connection) DeviceIDCalls(stub func() protocol.DeviceID) {
fake.deviceIDMutex.Lock()
defer fake.deviceIDMutex.Unlock()
fake.DeviceIDStub = stub
}
func (fake *Connection) DeviceIDReturns(result1 protocol.DeviceID) {
fake.deviceIDMutex.Lock()
defer fake.deviceIDMutex.Unlock()
fake.DeviceIDStub = nil
fake.deviceIDReturns = struct {
result1 protocol.DeviceID
}{result1}
}
func (fake *Connection) DeviceIDReturnsOnCall(i int, result1 protocol.DeviceID) {
fake.deviceIDMutex.Lock()
defer fake.deviceIDMutex.Unlock()
fake.DeviceIDStub = nil
if fake.deviceIDReturnsOnCall == nil {
fake.deviceIDReturnsOnCall = make(map[int]struct {
result1 protocol.DeviceID
})
}
fake.deviceIDReturnsOnCall[i] = struct {
result1 protocol.DeviceID
}{result1}
}
func (fake *Connection) DownloadProgress(arg1 context.Context, arg2 string, arg3 []protocol.FileDownloadProgressUpdate) { func (fake *Connection) DownloadProgress(arg1 context.Context, arg2 string, arg3 []protocol.FileDownloadProgressUpdate) {
var arg3Copy []protocol.FileDownloadProgressUpdate var arg3Copy []protocol.FileDownloadProgressUpdate
if arg3 != nil { if arg3 != nil {
@ -523,59 +576,6 @@ func (fake *Connection) EstablishedAtReturnsOnCall(i int, result1 time.Time) {
}{result1} }{result1}
} }
func (fake *Connection) ID() protocol.DeviceID {
fake.iDMutex.Lock()
ret, specificReturn := fake.iDReturnsOnCall[len(fake.iDArgsForCall)]
fake.iDArgsForCall = append(fake.iDArgsForCall, struct {
}{})
stub := fake.IDStub
fakeReturns := fake.iDReturns
fake.recordInvocation("ID", []interface{}{})
fake.iDMutex.Unlock()
if stub != nil {
return stub()
}
if specificReturn {
return ret.result1
}
return fakeReturns.result1
}
func (fake *Connection) IDCallCount() int {
fake.iDMutex.RLock()
defer fake.iDMutex.RUnlock()
return len(fake.iDArgsForCall)
}
func (fake *Connection) IDCalls(stub func() protocol.DeviceID) {
fake.iDMutex.Lock()
defer fake.iDMutex.Unlock()
fake.IDStub = stub
}
func (fake *Connection) IDReturns(result1 protocol.DeviceID) {
fake.iDMutex.Lock()
defer fake.iDMutex.Unlock()
fake.IDStub = nil
fake.iDReturns = struct {
result1 protocol.DeviceID
}{result1}
}
func (fake *Connection) IDReturnsOnCall(i int, result1 protocol.DeviceID) {
fake.iDMutex.Lock()
defer fake.iDMutex.Unlock()
fake.IDStub = nil
if fake.iDReturnsOnCall == nil {
fake.iDReturnsOnCall = make(map[int]struct {
result1 protocol.DeviceID
})
}
fake.iDReturnsOnCall[i] = struct {
result1 protocol.DeviceID
}{result1}
}
func (fake *Connection) Index(arg1 context.Context, arg2 string, arg3 []protocol.FileInfo) error { func (fake *Connection) Index(arg1 context.Context, arg2 string, arg3 []protocol.FileInfo) error {
var arg3Copy []protocol.FileInfo var arg3Copy []protocol.FileInfo
if arg3 != nil { if arg3 != nil {
@ -1229,12 +1229,12 @@ func (fake *Connection) Invocations() map[string][][]interface{} {
defer fake.connectionIDMutex.RUnlock() defer fake.connectionIDMutex.RUnlock()
fake.cryptoMutex.RLock() fake.cryptoMutex.RLock()
defer fake.cryptoMutex.RUnlock() defer fake.cryptoMutex.RUnlock()
fake.deviceIDMutex.RLock()
defer fake.deviceIDMutex.RUnlock()
fake.downloadProgressMutex.RLock() fake.downloadProgressMutex.RLock()
defer fake.downloadProgressMutex.RUnlock() defer fake.downloadProgressMutex.RUnlock()
fake.establishedAtMutex.RLock() fake.establishedAtMutex.RLock()
defer fake.establishedAtMutex.RUnlock() defer fake.establishedAtMutex.RUnlock()
fake.iDMutex.RLock()
defer fake.iDMutex.RUnlock()
fake.indexMutex.RLock() fake.indexMutex.RLock()
defer fake.indexMutex.RUnlock() defer fake.indexMutex.RUnlock()
fake.indexUpdateMutex.RLock() fake.indexUpdateMutex.RLock()

View File

@ -161,7 +161,7 @@ type Connection interface {
Start() Start()
SetFolderPasswords(passwords map[string]string) SetFolderPasswords(passwords map[string]string)
Close(err error) Close(err error)
ID() DeviceID DeviceID() DeviceID
Index(ctx context.Context, folder string, files []FileInfo) error Index(ctx context.Context, folder string, files []FileInfo) error
IndexUpdate(ctx context.Context, folder string, files []FileInfo) error IndexUpdate(ctx context.Context, folder string, files []FileInfo) error
Request(ctx context.Context, folder string, name string, blockNo int, offset int64, size int, hash []byte, weakHash uint32, fromTemporary bool) ([]byte, error) Request(ctx context.Context, folder string, name string, blockNo int, offset int64, size int, hash []byte, weakHash uint32, fromTemporary bool) ([]byte, error)
@ -187,7 +187,7 @@ type ConnectionInfo interface {
type rawConnection struct { type rawConnection struct {
ConnectionInfo ConnectionInfo
id DeviceID deviceID DeviceID
model contextLessModel model contextLessModel
startTime time.Time startTime time.Time
@ -273,7 +273,7 @@ func newRawConnection(deviceID DeviceID, reader io.Reader, writer io.Writer, clo
return &rawConnection{ return &rawConnection{
ConnectionInfo: connInfo, ConnectionInfo: connInfo,
id: deviceID, deviceID: deviceID,
model: receiver, model: receiver,
cr: cr, cr: cr,
cw: cw, cw: cw,
@ -318,8 +318,8 @@ func (c *rawConnection) Start() {
c.startTime = time.Now().Truncate(time.Second) c.startTime = time.Now().Truncate(time.Second)
} }
func (c *rawConnection) ID() DeviceID { func (c *rawConnection) DeviceID() DeviceID {
return c.id return c.deviceID
} }
// Index writes the list of file information to the connected peer device // Index writes the list of file information to the connected peer device
@ -602,12 +602,12 @@ func (c *rawConnection) readHeader(fourByteBuf []byte) (Header, error) {
} }
func (c *rawConnection) handleIndex(im Index) error { func (c *rawConnection) handleIndex(im Index) error {
l.Debugf("Index(%v, %v, %d file)", c.id, im.Folder, len(im.Files)) l.Debugf("Index(%v, %v, %d file)", c.deviceID, im.Folder, len(im.Files))
return c.model.Index(im.Folder, im.Files) return c.model.Index(im.Folder, im.Files)
} }
func (c *rawConnection) handleIndexUpdate(im IndexUpdate) error { func (c *rawConnection) handleIndexUpdate(im IndexUpdate) error {
l.Debugf("queueing IndexUpdate(%v, %v, %d files)", c.id, im.Folder, len(im.Files)) l.Debugf("queueing IndexUpdate(%v, %v, %d files)", c.deviceID, im.Folder, len(im.Files))
return c.model.IndexUpdate(im.Folder, im.Files) return c.model.IndexUpdate(im.Folder, im.Files)
} }
@ -948,7 +948,7 @@ func (c *rawConnection) internalClose(err error) {
c.closeOnce.Do(func() { c.closeOnce.Do(func() {
l.Debugln("close due to", err) l.Debugln("close due to", err)
if cerr := c.closer.Close(); cerr != nil { if cerr := c.closer.Close(); cerr != nil {
l.Debugln(c.id, "failed to close underlying conn:", cerr) l.Debugln(c.deviceID, "failed to close underlying conn:", cerr)
} }
close(c.closed) close(c.closed)
@ -981,11 +981,11 @@ func (c *rawConnection) pingSender() {
case <-ticker.C: case <-ticker.C:
d := time.Since(c.cw.Last()) d := time.Since(c.cw.Last())
if d < PingSendInterval/2 { if d < PingSendInterval/2 {
l.Debugln(c.id, "ping skipped after wr", d) l.Debugln(c.deviceID, "ping skipped after wr", d)
continue continue
} }
l.Debugln(c.id, "ping -> after", d) l.Debugln(c.deviceID, "ping -> after", d)
c.ping() c.ping()
case <-c.closed: case <-c.closed:
@ -1006,11 +1006,11 @@ func (c *rawConnection) pingReceiver() {
case <-ticker.C: case <-ticker.C:
d := time.Since(c.cr.Last()) d := time.Since(c.cr.Last())
if d > ReceiveTimeout { if d > ReceiveTimeout {
l.Debugln(c.id, "ping timeout", d) l.Debugln(c.deviceID, "ping timeout", d)
c.internalClose(ErrTimeout) c.internalClose(ErrTimeout)
} }
l.Debugln(c.id, "last read within", d) l.Debugln(c.deviceID, "last read within", d)
case <-c.closed: case <-c.closed:
return return