From db61d3f6934452626485ef392dc3109e815db2df Mon Sep 17 00:00:00 2001
From: joshemb <josh@elixxir.io>
Date: Fri, 26 Aug 2022 12:01:06 -0700
Subject: [PATCH] Finish refactor of SendE2e

---
 bindings/connect.go                | 10 +++++-----
 cmd/connect.go                     |  4 ++--
 connect/authenticated.go           |  4 ++--
 connect/utils_test.go              |  6 ++----
 fileTransfer/connect/send.go       |  4 ++--
 fileTransfer/connect/utils_test.go |  8 ++------
 fileTransfer/connect/wrapper.go    |  4 +---
 fileTransfer/e2e/send.go           |  4 ++--
 fileTransfer/e2e/utils_test.go     |  6 ++----
 fileTransfer/e2e/wrapper.go        |  4 +---
 groupChat/sendRequests.go          |  4 ++--
 restlike/connect/receiver.go       |  2 +-
 restlike/connect/request.go        |  5 ++---
 13 files changed, 26 insertions(+), 39 deletions(-)

diff --git a/bindings/connect.go b/bindings/connect.go
index 5e9e55f8b..927d162aa 100644
--- a/bindings/connect.go
+++ b/bindings/connect.go
@@ -85,7 +85,7 @@ func (c *Cmix) Connect(e2eId int, recipientContact, e2eParamsJSON []byte) (
 //  - []byte - the JSON marshalled bytes of the E2ESendReport object, which can
 //    be passed into Cmix.WaitForRoundResult to see if the send succeeded.
 func (c *Connection) SendE2E(mt int, payload []byte) ([]byte, error) {
-	rounds, mid, ts, keyResidue, err := c.connection.SendE2E(catalog.MessageType(mt), payload,
+	sendReport, err := c.connection.SendE2E(catalog.MessageType(mt), payload,
 		c.params.Base)
 
 	if err != nil {
@@ -93,10 +93,10 @@ func (c *Connection) SendE2E(mt int, payload []byte) ([]byte, error) {
 	}
 
 	sr := E2ESendReport{
-		RoundsList: makeRoundsList(rounds...),
-		MessageID:  mid.Marshal(),
-		Timestamp:  ts.UnixNano(),
-		KeyResidue: keyResidue.Marshal(),
+		RoundsList: makeRoundsList(sendReport.RoundList...),
+		MessageID:  sendReport.MessageId.Marshal(),
+		Timestamp:  sendReport.SentTime.UnixNano(),
+		KeyResidue: sendReport.KeyResidue.Marshal(),
 	}
 
 	return json.Marshal(&sr)
diff --git a/cmd/connect.go b/cmd/connect.go
index bb1e9ff17..7b31c2cd8 100644
--- a/cmd/connect.go
+++ b/cmd/connect.go
@@ -486,7 +486,7 @@ func miscConnectionFunctions(user *xxdk.E2e, conn connect.Connection) {
 			conn.GetPartner().PartnerId())
 		payload := []byte(msgBody)
 		for {
-			roundIDs, _, _, _, err := conn.SendE2E(catalog.XxMessage, payload,
+			sendReport, err := conn.SendE2E(catalog.XxMessage, payload,
 				paramsE2E)
 			if err != nil {
 				jww.FATAL.Panicf("[CONN] Failed to send E2E message: %v", err)
@@ -494,7 +494,7 @@ func miscConnectionFunctions(user *xxdk.E2e, conn connect.Connection) {
 
 			// Verify message sends were successful when verifySendFlag is present
 			if viper.GetBool(verifySendFlag) {
-				if !verifySendSuccess(user, paramsE2E, roundIDs,
+				if !verifySendSuccess(user, paramsE2E, sendReport.RoundList,
 					conn.GetPartner().PartnerId(), payload) {
 					continue
 				}
diff --git a/connect/authenticated.go b/connect/authenticated.go
index de3d9e656..b2d63f758 100644
--- a/connect/authenticated.go
+++ b/connect/authenticated.go
@@ -98,7 +98,7 @@ func connectWithAuthentication(conn Connection, timeStart time.Time,
 	}
 
 	// Send message to server
-	rids, _, _, _, err := conn.SendE2E(catalog.ConnectionAuthenticationRequest,
+	sendReport, err := conn.SendE2E(catalog.ConnectionAuthenticationRequest,
 		payload, clientE2e.GetDefaultParams())
 	if err != nil {
 		// Close connection on an error
@@ -139,7 +139,7 @@ func connectWithAuthentication(conn Connection, timeStart time.Time,
 	// Track the result of the round(s) we sent the
 	// identity authentication message on
 	err = net.GetRoundResults(remainingTime,
-		roundCb, rids...)
+		roundCb, sendReport.RoundList...)
 	if err != nil {
 		return nil, errors.Errorf("could not track rounds for successful " +
 			"identity confirmation message delivery")
diff --git a/connect/utils_test.go b/connect/utils_test.go
index 4414b2e8b..f94541927 100644
--- a/connect/utils_test.go
+++ b/connect/utils_test.go
@@ -16,7 +16,6 @@ import (
 	"gitlab.com/elixxir/comms/network"
 	"gitlab.com/elixxir/crypto/contact"
 	"gitlab.com/elixxir/crypto/cyclic"
-	cryptoE2e "gitlab.com/elixxir/crypto/e2e"
 	"gitlab.com/elixxir/primitives/format"
 	"gitlab.com/xx_network/comms/connect"
 	"gitlab.com/xx_network/crypto/large"
@@ -115,8 +114,7 @@ func (m *mockConnection) Close() error {
 func (m *mockConnection) GetPartner() partner.Manager { return m.partner }
 
 func (m *mockConnection) SendE2E(
-	mt catalog.MessageType, payload []byte, _ e2e.Params) (
-	[]id.Round, cryptoE2e.MessageID, time.Time, cryptoE2e.KeyResidue, error) {
+	mt catalog.MessageType, payload []byte, _ e2e.Params) (e2e.SendReport, error) {
 	m.payloadChan <- payload
 	m.listener.Hear(receive.Message{
 		MessageType: mt,
@@ -124,7 +122,7 @@ func (m *mockConnection) SendE2E(
 		Sender:      m.partner.myID,
 		RecipientID: m.partner.partnerId,
 	})
-	return nil, cryptoE2e.MessageID{}, time.Time{}, cryptoE2e.KeyResidue{}, nil
+	return e2e.SendReport{}, nil
 }
 
 func (m *mockConnection) RegisterListener(
diff --git a/fileTransfer/connect/send.go b/fileTransfer/connect/send.go
index 91dcfb675..0f0c0df19 100644
--- a/fileTransfer/connect/send.go
+++ b/fileTransfer/connect/send.go
@@ -45,7 +45,7 @@ func sendNewFileTransferMessage(
 	params.LastServiceTag = catalog.Silent
 	params.DebugTag = initialMessageDebugTag
 
-	_, _, _, _, err := connectionHandler.SendE2E(
+	_, err := connectionHandler.SendE2E(
 		catalog.NewFileTransfer, transferInfo, params)
 	if err != nil {
 		return errors.Errorf(errNewFtSendE2e, err)
@@ -65,7 +65,7 @@ func sendEndFileTransferMessage(cmix ft.Cmix, connectionHandler connection) {
 				params.LastServiceTag = catalog.EndFT
 				params.DebugTag = lastMessageDebugTag
 
-				_, _, _, _, err := connectionHandler.SendE2E(
+				_, err := connectionHandler.SendE2E(
 					catalog.EndFileTransfer, nil, params)
 				if err != nil {
 					jww.ERROR.Printf(errEndFtSendE2e, err)
diff --git a/fileTransfer/connect/utils_test.go b/fileTransfer/connect/utils_test.go
index af9990b9c..927a70efb 100644
--- a/fileTransfer/connect/utils_test.go
+++ b/fileTransfer/connect/utils_test.go
@@ -26,7 +26,6 @@ import (
 	"gitlab.com/elixxir/client/xxdk"
 	"gitlab.com/elixxir/comms/network"
 	"gitlab.com/elixxir/crypto/cyclic"
-	e2eCrypto "gitlab.com/elixxir/crypto/e2e"
 	"gitlab.com/elixxir/crypto/fastRNG"
 	"gitlab.com/elixxir/ekv"
 	"gitlab.com/elixxir/primitives/format"
@@ -38,7 +37,6 @@ import (
 	"gitlab.com/xx_network/primitives/id"
 	"gitlab.com/xx_network/primitives/id/ephemeral"
 	"gitlab.com/xx_network/primitives/ndf"
-	"gitlab.com/xx_network/primitives/netTime"
 	"sync"
 	"testing"
 	"time"
@@ -268,8 +266,7 @@ func (m *mockConnection) GetPartner() partner.Manager {
 
 // SendE2E adds the message to the e2e handler map.
 func (m *mockConnection) SendE2E(mt catalog.MessageType, payload []byte,
-	_ e2e.Params) ([]id.Round, e2eCrypto.MessageID, time.Time,
-	e2eCrypto.KeyResidue, error) {
+	_ e2e.Params) (e2e.SendReport, error) {
 	m.handler.Lock()
 	defer m.handler.Unlock()
 
@@ -279,8 +276,7 @@ func (m *mockConnection) SendE2E(mt catalog.MessageType, payload []byte,
 		Sender:      m.myID,
 	})
 
-	return []id.Round{42}, e2eCrypto.MessageID{}, netTime.Now(),
-		e2eCrypto.KeyResidue{}, nil
+	return e2e.SendReport{RoundList: []id.Round{42}}, nil
 }
 
 func (m *mockConnection) RegisterListener(mt catalog.MessageType,
diff --git a/fileTransfer/connect/wrapper.go b/fileTransfer/connect/wrapper.go
index b0943f5eb..2b0163aa7 100644
--- a/fileTransfer/connect/wrapper.go
+++ b/fileTransfer/connect/wrapper.go
@@ -13,9 +13,7 @@ import (
 	"gitlab.com/elixxir/client/e2e/ratchet/partner"
 	"gitlab.com/elixxir/client/e2e/receive"
 	ft "gitlab.com/elixxir/client/fileTransfer"
-	e2eCrypto "gitlab.com/elixxir/crypto/e2e"
 	ftCrypto "gitlab.com/elixxir/crypto/fileTransfer"
-	"gitlab.com/xx_network/primitives/id"
 	"time"
 )
 
@@ -41,7 +39,7 @@ type Wrapper struct {
 type connection interface {
 	GetPartner() partner.Manager
 	SendE2E(mt catalog.MessageType, payload []byte, params e2e.Params) (
-		[]id.Round, e2eCrypto.MessageID, time.Time, e2eCrypto.KeyResidue, error)
+		e2e.SendReport, error)
 	RegisterListener(messageType catalog.MessageType,
 		newListener receive.Listener) (receive.ListenerID, error)
 }
diff --git a/fileTransfer/e2e/send.go b/fileTransfer/e2e/send.go
index 017313dc2..6f19468dc 100644
--- a/fileTransfer/e2e/send.go
+++ b/fileTransfer/e2e/send.go
@@ -46,7 +46,7 @@ func sendNewFileTransferMessage(
 	params.LastServiceTag = catalog.Silent
 	params.DebugTag = initialMessageDebugTag
 
-	_, _, _, _, err := e2eHandler.SendE2E(
+	_, err := e2eHandler.SendE2E(
 		catalog.NewFileTransfer, recipient, transferInfo, params)
 	if err != nil {
 		return errors.Errorf(errNewFtSendE2e, err)
@@ -66,7 +66,7 @@ func sendEndFileTransferMessage(recipient *id.ID, cmix ft.Cmix, e2eHandler e2eHa
 				params.LastServiceTag = catalog.EndFT
 				params.DebugTag = lastMessageDebugTag
 
-				_, _, _, _, err := e2eHandler.SendE2E(
+				_, err := e2eHandler.SendE2E(
 					catalog.EndFileTransfer, recipient, nil, params)
 				if err != nil {
 					jww.ERROR.Printf(errEndFtSendE2e, err)
diff --git a/fileTransfer/e2e/utils_test.go b/fileTransfer/e2e/utils_test.go
index c2ecdd01a..34265f35e 100644
--- a/fileTransfer/e2e/utils_test.go
+++ b/fileTransfer/e2e/utils_test.go
@@ -28,7 +28,6 @@ import (
 	"gitlab.com/elixxir/client/xxdk"
 	"gitlab.com/elixxir/comms/network"
 	"gitlab.com/elixxir/crypto/cyclic"
-	e "gitlab.com/elixxir/crypto/e2e"
 	"gitlab.com/elixxir/crypto/fastRNG"
 	"gitlab.com/elixxir/ekv"
 	"gitlab.com/elixxir/primitives/format"
@@ -40,7 +39,6 @@ import (
 	"gitlab.com/xx_network/primitives/id"
 	"gitlab.com/xx_network/primitives/id/ephemeral"
 	"gitlab.com/xx_network/primitives/ndf"
-	"gitlab.com/xx_network/primitives/netTime"
 	"sync"
 	"time"
 )
@@ -259,7 +257,7 @@ func (m *mockE2e) StartProcesses() (stoppable.Stoppable, error) { panic("impleme
 
 // SendE2E adds the message to the e2e handler map.
 func (m *mockE2e) SendE2E(mt catalog.MessageType, recipient *id.ID,
-	payload []byte, _ e2e.Params) ([]id.Round, e.MessageID, time.Time, e.KeyResidue, error) {
+	payload []byte, _ e2e.Params) (e2e.SendReport, error) {
 
 	m.handler.listeners[mt].Hear(receive.Message{
 		MessageType: mt,
@@ -268,7 +266,7 @@ func (m *mockE2e) SendE2E(mt catalog.MessageType, recipient *id.ID,
 		RecipientID: recipient,
 	})
 
-	return []id.Round{42}, e.MessageID{}, netTime.Now(), e.KeyResidue{}, nil
+	return e2e.SendReport{RoundList: []id.Round{42}}, nil
 }
 
 func (m *mockE2e) RegisterListener(_ *id.ID, mt catalog.MessageType,
diff --git a/fileTransfer/e2e/wrapper.go b/fileTransfer/e2e/wrapper.go
index 12b44091b..ffb90b2b4 100644
--- a/fileTransfer/e2e/wrapper.go
+++ b/fileTransfer/e2e/wrapper.go
@@ -12,7 +12,6 @@ import (
 	"gitlab.com/elixxir/client/e2e"
 	"gitlab.com/elixxir/client/e2e/receive"
 	ft "gitlab.com/elixxir/client/fileTransfer"
-	e2eCrypto "gitlab.com/elixxir/crypto/e2e"
 	ftCrypto "gitlab.com/elixxir/crypto/fileTransfer"
 	"gitlab.com/xx_network/primitives/id"
 	"time"
@@ -39,8 +38,7 @@ type Wrapper struct {
 // for easier testing.
 type e2eHandler interface {
 	SendE2E(mt catalog.MessageType, recipient *id.ID, payload []byte,
-		params e2e.Params) ([]id.Round, e2eCrypto.MessageID, time.Time,
-		e2eCrypto.KeyResidue, error)
+		params e2e.Params) (e2e.SendReport, error)
 	RegisterListener(senderID *id.ID, messageType catalog.MessageType,
 		newListener receive.Listener) receive.ListenerID
 }
diff --git a/groupChat/sendRequests.go b/groupChat/sendRequests.go
index 43648928b..ff566063a 100644
--- a/groupChat/sendRequests.go
+++ b/groupChat/sendRequests.go
@@ -120,13 +120,13 @@ func (m *manager) sendRequest(memberID *id.ID, request []byte) ([]id.Round, erro
 	p.LastServiceTag = catalog.GroupRq
 	p.DebugTag = "group.Request"
 
-	rounds, _, _, _, err := m.getE2eHandler().SendE2E(
+	sendReport, err := m.getE2eHandler().SendE2E(
 		catalog.GroupCreationRequest, memberID, request, p)
 	if err != nil {
 		return nil, errors.Errorf(sendE2eErr, memberID, err)
 	}
 
-	return rounds, nil
+	return sendReport.RoundList, nil
 }
 
 // roundIdMap2List converts the map of round IDs to a list of round IDs.
diff --git a/restlike/connect/receiver.go b/restlike/connect/receiver.go
index 051a91d3f..be76084b0 100644
--- a/restlike/connect/receiver.go
+++ b/restlike/connect/receiver.go
@@ -55,7 +55,7 @@ func respond(response *restlike.Message, conn connect.Connection) error {
 	}
 
 	// TODO: Parameterize params
-	_, _, _, _, err = conn.SendE2E(catalog.XxMessage, payload, e2e.GetDefaultParams())
+	_, err = conn.SendE2E(catalog.XxMessage, payload, e2e.GetDefaultParams())
 	if err != nil {
 		return errors.Errorf("unable to send restlike response message: %+v", err)
 	}
diff --git a/restlike/connect/request.go b/restlike/connect/request.go
index 7d0b435c0..0dd35c27f 100644
--- a/restlike/connect/request.go
+++ b/restlike/connect/request.go
@@ -50,7 +50,7 @@ func (s *Request) Request(method restlike.Method, path restlike.URI,
 
 	// Transmit the Message
 	// fixme: should this use the key residue?
-	_, _, _, _, err = s.Net.SendE2E(catalog.XxMessage, msg, e2eParams)
+	_, err = s.Net.SendE2E(catalog.XxMessage, msg, e2eParams)
 	if err != nil {
 		return nil, err
 	}
@@ -85,7 +85,6 @@ func (s *Request) AsyncRequest(method restlike.Method, path restlike.URI,
 	s.Net.RegisterListener(catalog.XxMessage, &response{responseCallback: cb})
 
 	// Transmit the Message
-	// fixme: should this use the key residue?
-	_, _, _, _, err = s.Net.SendE2E(catalog.XxMessage, msg, e2eParams)
+	_, err = s.Net.SendE2E(catalog.XxMessage, msg, e2eParams)
 	return err
 }
-- 
GitLab