diff --git a/fileTransfer2/e2e/manager.go b/fileTransfer2/e2e/manager.go index e7bdc16435f1d1f3cdaf81e984882a99cb9e7dac..34f886fc5e62704d6d763b678e6b719f9b5e21b4 100644 --- a/fileTransfer2/e2e/manager.go +++ b/fileTransfer2/e2e/manager.go @@ -8,26 +8,17 @@ package e2e import ( - "github.com/pkg/errors" "gitlab.com/elixxir/client/catalog" "gitlab.com/elixxir/client/e2e" "gitlab.com/elixxir/client/e2e/receive" ft "gitlab.com/elixxir/client/fileTransfer2" "gitlab.com/elixxir/client/stoppable" - "gitlab.com/elixxir/client/storage/versioned" e2eCrypto "gitlab.com/elixxir/crypto/e2e" - "gitlab.com/elixxir/crypto/fastRNG" ftCrypto "gitlab.com/elixxir/crypto/fileTransfer" "gitlab.com/xx_network/primitives/id" "time" ) -// Error messages. -const ( - // NewManager - errNewFtManager = "cannot create new E2E file transfer manager: %+v" -) - // Manager handles the sending and receiving of file transfers using E2E // messages to inform the recipient of incoming file transfers. type Manager struct { @@ -52,18 +43,11 @@ type E2e interface { } // NewManager generates a new file transfer manager using E2E. -func NewManager(receiveCB ft.ReceiveCallback, params ft.Params, myID *id.ID, - e2e E2e, cmix ft.Cmix, kv *versioned.KV, rng *fastRNG.StreamGenerator) ( - *Manager, error) { - - ftManager, err := ft.NewManager(params, myID, cmix, kv, rng) - if err != nil { - return nil, errors.Errorf(errNewFtManager, err) - } - +func NewManager(receiveCB ft.ReceiveCallback, ft ft.FileTransfer, myID *id.ID, + e2e E2e, cmix ft.Cmix) (*Manager, error) { return &Manager{ receiveCB: receiveCB, - ft: ftManager, + ft: ft, myID: myID, cmix: cmix, e2e: e2e, @@ -93,8 +77,8 @@ func (m *Manager) MaxPreviewSize() int { return m.ft.MaxPreviewSize() } -func (m *Manager) Send(fileName, fileType string, fileData []byte, - recipient *id.ID, retry float32, preview []byte, +func (m *Manager) Send(recipient *id.ID, fileName, fileType string, + fileData []byte, retry float32, preview []byte, progressCB ft.SentProgressCallback, period time.Duration) ( *ftCrypto.TransferID, error) { @@ -104,7 +88,7 @@ func (m *Manager) Send(fileName, fileType string, fileData []byte, modifiedProgressCB := m.addEndMessageToCallback(progressCB) - return m.ft.Send(fileName, fileType, fileData, recipient, retry, preview, + return m.ft.Send(recipient, fileName, fileType, fileData, retry, preview, modifiedProgressCB, period, sendNew) } diff --git a/fileTransfer2/e2e/manager_test.go b/fileTransfer2/e2e/manager_test.go index 07071609c7066ba205e373078b517481c9c12b65..50c551aa54ad3ebfb8f7dc258e0d917067e47124 100644 --- a/fileTransfer2/e2e/manager_test.go +++ b/fileTransfer2/e2e/manager_test.go @@ -61,8 +61,12 @@ func Test_FileTransfer_Smoke(t *testing.T) { e2e1 := newMockE2e(myID1, e2eHandler) e2e1.RegisterListener( myID1, catalog.EndFileTransfer, newMockListener(endE2eChan1)) - m1, err := NewManager(receiveCB1, params, myID1, e2e1, - newMockCmix(myID1, cMixHandler), kv1, rngGen) + cmix1 := newMockCmix(myID1, cMixHandler) + ftManager1, err := ft.NewManager(params, myID1, cmix1, kv1, rngGen) + if err != nil { + t.Errorf("Failed to make new file transfer manager: %+v", err) + } + m1, err := NewManager(receiveCB1, ftManager1, myID1, e2e1, cmix1) if err != nil { t.Errorf("Failed to create new file transfer manager 1: %+v", err) } @@ -85,8 +89,12 @@ func Test_FileTransfer_Smoke(t *testing.T) { e2e2 := newMockE2e(myID2, e2eHandler) e2e2.RegisterListener( myID2, catalog.EndFileTransfer, newMockListener(endE2eChan2)) - m2, err := NewManager(receiveCB2, params, myID2, e2e2, - newMockCmix(myID2, cMixHandler), kv2, rngGen) + cmix2 := newMockCmix(myID1, cMixHandler) + ftManager2, err := ft.NewManager(params, myID2, cmix2, kv2, rngGen) + if err != nil { + t.Errorf("Failed to make new file transfer manager: %+v", err) + } + m2, err := NewManager(receiveCB2, ftManager2, myID2, e2e2, cmix2) if err != nil { t.Errorf("Failed to create new file transfer manager 2: %+v", err) } @@ -156,7 +164,7 @@ func Test_FileTransfer_Smoke(t *testing.T) { // Send file sendStart := netTime.Now() tid1, err := m1.Send( - fileName, fileType, fileData, myID2, retry, preview, sentProgressCb1, 0) + myID2, fileName, fileType, fileData, retry, preview, sentProgressCb1, 0) if err != nil { t.Errorf("Failed to send file: %+v", err) } diff --git a/fileTransfer2/groupChat/manager.go b/fileTransfer2/groupChat/manager.go index 47cd7c434f665a91aa6037ab421796965e06f106..49e2381fe9ca8e91fc2ffea26284b267ae9296b5 100644 --- a/fileTransfer2/groupChat/manager.go +++ b/fileTransfer2/groupChat/manager.go @@ -12,8 +12,6 @@ import ( ft "gitlab.com/elixxir/client/fileTransfer2" "gitlab.com/elixxir/client/groupChat" "gitlab.com/elixxir/client/stoppable" - "gitlab.com/elixxir/client/storage/versioned" - "gitlab.com/elixxir/crypto/fastRNG" ftCrypto "gitlab.com/elixxir/crypto/fileTransfer" "gitlab.com/elixxir/crypto/group" "gitlab.com/xx_network/primitives/id" @@ -22,9 +20,6 @@ import ( // Error messages. const ( - // NewManager - errNewFtManager = "cannot create new group chat file transfer manager: %+v" - // Manager.StartProcesses errAddNewService = "failed to add service to receive new group file transfers: %+v" ) @@ -47,9 +42,6 @@ type Manager struct { // Group chat Manager gc GroupChat - - myID *id.ID - cmix ft.Cmix } // GroupChat interface matches a subset of the groupChat.GroupChat methods used @@ -61,21 +53,12 @@ type GroupChat interface { } // NewManager generates a new file transfer Manager for group chat. -func NewManager(receiveCB ft.ReceiveCallback, params ft.Params, myID *id.ID, - gc GroupChat, cmix ft.Cmix, kv *versioned.KV, rng *fastRNG.StreamGenerator) ( +func NewManager(receiveCB ft.ReceiveCallback, ft ft.FileTransfer, gc GroupChat) ( *Manager, error) { - - ftManager, err := ft.NewManager(params, myID, cmix, kv, rng) - if err != nil { - return nil, errors.Errorf(errNewFtManager, err) - } - return &Manager{ receiveCB: receiveCB, - ft: ftManager, + ft: ft, gc: gc, - myID: myID, - cmix: cmix, }, nil } @@ -104,14 +87,15 @@ func (m *Manager) MaxPreviewSize() int { return m.ft.MaxPreviewSize() } -func (m *Manager) Send(fileName, fileType string, fileData []byte, - recipient *id.ID, retry float32, preview []byte, - progressCB ft.SentProgressCallback, period time.Duration) (*ftCrypto.TransferID, error) { +func (m *Manager) Send(groupID *id.ID, fileName, fileType string, + fileData []byte, retry float32, preview []byte, + progressCB ft.SentProgressCallback, period time.Duration) ( + *ftCrypto.TransferID, error) { sendNew := func(info *ft.TransferInfo) error { - return sendNewFileTransferMessage(recipient, info, m.gc) + return sendNewFileTransferMessage(groupID, info, m.gc) } - return m.ft.Send(fileName, fileType, fileData, recipient, retry, preview, + return m.ft.Send(groupID, fileName, fileType, fileData, retry, preview, progressCB, period, sendNew) } diff --git a/fileTransfer2/groupChat/manager_test.go b/fileTransfer2/groupChat/manager_test.go index 925fe764ca1d17547cf7ad7e7829bf8637e304c6..f11cc8dba23f7439044e3112e6b6095ca6bfe00f 100644 --- a/fileTransfer2/groupChat/manager_test.go +++ b/fileTransfer2/groupChat/manager_test.go @@ -9,7 +9,6 @@ package groupChat import ( "bytes" - "gitlab.com/elixxir/client/e2e/receive" ft "gitlab.com/elixxir/client/fileTransfer2" "gitlab.com/elixxir/client/groupChat" "gitlab.com/elixxir/client/storage/versioned" @@ -48,17 +47,12 @@ func Test_FileTransfer_Smoke(t *testing.T) { } // Set up the first client - receiveCbChan1 := make(chan receiveCbValues, 10) - receiveCB1 := func(tid *ftCrypto.TransferID, fileName, fileType string, - sender *id.ID, size uint32, preview []byte) { - receiveCbChan1 <- receiveCbValues{ - tid, fileName, fileType, sender, size, preview} - } myID1 := id.NewIdFromString("myID1", id.User, t) kv1 := versioned.NewKV(ekv.MakeMemstore()) gc1 := newMockGC(gcHandler) - m1, err := NewManager(receiveCB1, params, myID1, gc1, - newMockCmix(myID1, cMixHandler), kv1, rngGen) + ftManager1, err := ft.NewManager( + params, myID1, newMockCmix(myID1, cMixHandler), kv1, rngGen) + m1, err := NewManager(nil, ftManager1, gc1) if err != nil { t.Errorf("Failed to create new file transfer manager 1: %+v", err) } @@ -77,10 +71,10 @@ func Test_FileTransfer_Smoke(t *testing.T) { } myID2 := id.NewIdFromString("myID2", id.User, t) kv2 := versioned.NewKV(ekv.MakeMemstore()) - endE2eChan2 := make(chan receive.Message, 3) - gc2 := newMockGC(gcHandler) /**/ - m2, err := NewManager(receiveCB2, params, myID2, gc2, - newMockCmix(myID2, cMixHandler), kv2, rngGen) + gc2 := newMockGC(gcHandler) + ftManager2, err := ft.NewManager( + params, myID2, newMockCmix(myID2, cMixHandler), kv2, rngGen) + m2, err := NewManager(receiveCB2, ftManager2, gc2) if err != nil { t.Errorf("Failed to create new file transfer manager 2: %+v", err) } @@ -150,7 +144,7 @@ func Test_FileTransfer_Smoke(t *testing.T) { // Send file sendStart := netTime.Now() tid1, err := m1.Send( - fileName, fileType, fileData, myID2, retry, preview, sentProgressCb1, 0) + myID2, fileName, fileType, fileData, retry, preview, sentProgressCb1, 0) if err != nil { t.Errorf("Failed to send file: %+v", err) } @@ -170,12 +164,6 @@ func Test_FileTransfer_Smoke(t *testing.T) { // Wait for file to be sent and received wg.Wait() - select { - case <-endE2eChan2: - case <-time.After(15 * time.Millisecond): - t.Errorf("Timed out waiting for end file transfer message.") - } - err = m1.CloseSend(tid1) if err != nil { t.Errorf("Failed to close transfer: %+v", err) diff --git a/fileTransfer2/interface.go b/fileTransfer2/interface.go index 671399e8bc9bb6ed4bf6f91e985407fb245db834..7953954b426ce2987131c6f4d1ce6d4445d88cc1 100644 --- a/fileTransfer2/interface.go +++ b/fileTransfer2/interface.go @@ -82,13 +82,13 @@ type FileTransfer interface { // In-progress transfers are restored when closing and reopening; however, a // SentProgressCallback must be registered again. // + // recipient - ID of the receiver of the file transfer. The sender must + // have an E2E relationship with the recipient. // fileName - Human-readable file name. Max length defined by // MaxFileNameLen. // fileType - Shorthand that identifies the type of file. Max length // defined by MaxFileTypeLen. // fileData - File contents. Max size defined by MaxFileSize. - // recipient - ID of the receiver of the file transfer. The sender must - // have an E2E relationship with the recipient. // retry - The number of sending retries allowed on send failure (e.g. // a retry of 2.0 with 6 parts means 12 total possible sends). // preview - A preview of the file data (e.g. a thumbnail). Max size @@ -100,7 +100,7 @@ type FileTransfer interface { // per period. // sendNew - Function that sends the file transfer information to the // recipient. - Send(fileName, fileType string, fileData []byte, recipient *id.ID, + Send(recipient *id.ID, fileName, fileType string, fileData []byte, retry float32, preview []byte, progressCB SentProgressCallback, period time.Duration, sendNew SendNew) (*ftCrypto.TransferID, error) diff --git a/fileTransfer2/manager.go b/fileTransfer2/manager.go index 52283f9575d665a256a68d364e461819670de37e..1f6c06e19c6db773371f6333d4b18679f72bb966 100644 --- a/fileTransfer2/manager.go +++ b/fileTransfer2/manager.go @@ -230,8 +230,8 @@ func (m *manager) MaxPreviewSize() int { // Send partitions the given file into cMix message sized chunks and sends them // via cmix.SendMany. -func (m *manager) Send(fileName, fileType string, fileData []byte, - recipient *id.ID, retry float32, preview []byte, +func (m *manager) Send(recipient *id.ID, fileName, fileType string, + fileData []byte, retry float32, preview []byte, progressCB SentProgressCallback, period time.Duration, sendNew SendNew) ( *ftCrypto.TransferID, error) { diff --git a/fileTransfer2/manager_test.go b/fileTransfer2/manager_test.go index b2220ffec9dbcf6c5862fe7af45a4a2e4bc45baf..748c4f7ab9921f538f158a447f2befb78f0e0699 100644 --- a/fileTransfer2/manager_test.go +++ b/fileTransfer2/manager_test.go @@ -184,7 +184,7 @@ func Test_FileTransfer_Smoke(t *testing.T) { // Send file. sendStart := netTime.Now() - tid1, err := m1.Send(fileName, fileType, fileData, myID2, retry, preview, + tid1, err := m1.Send(myID2, fileName, fileType, fileData, retry, preview, sentProgressCb1, 0, sendNewCb1) if err != nil { t.Errorf("Failed to send file: %+v", err)