Skip to content
Snippets Groups Projects
Commit 41523885 authored by Josh Brooks's avatar Josh Brooks
Browse files

Revert SendMany interface change

parent e64080f9
No related branches found
No related tags found
2 merge requests!510Release,!479Xx 4415/send many assembler
...@@ -84,7 +84,7 @@ type Client interface { ...@@ -84,7 +84,7 @@ type Client interface {
// Will return an error if the network is unhealthy or if it fails to send // Will return an error if the network is unhealthy or if it fails to send
// (along with the reason). Blocks until successful send or err. // (along with the reason). Blocks until successful send or err.
// WARNING: Do not roll your own crypto. // WARNING: Do not roll your own crypto.
SendMany(recipients []*id.ID, messages []TargetedCmixMessage, SendMany(messages []TargetedCmixMessage,
params CMIXParams) (rounds.Round, []ephemeral.Id, error) params CMIXParams) (rounds.Round, []ephemeral.Id, error)
// SendWithAssembler sends a variable cmix payload to the provided recipient. // SendWithAssembler sends a variable cmix payload to the provided recipient.
......
...@@ -219,7 +219,17 @@ func recipientsToStrings(recipients []*id.ID) string { ...@@ -219,7 +219,17 @@ func recipientsToStrings(recipients []*id.ID) string {
} }
return strings.Join(idStrings, ", ") return strings.Join(idStrings, ", ")
}
// recipientsFromTargetedMessage extracts the list of recipients from a
// list of TargetedCmixMessage.
func recipientsFromTargetedMessage(msgs []TargetedCmixMessage) []*id.ID {
idStrings := make([]*id.ID, 0, len(msgs))
for _, msg := range msgs {
idStrings = append(idStrings, msg.Recipient)
}
return idStrings
} }
// messagesToDigestString serializes a list of cMix messages into a string of // messagesToDigestString serializes a list of cMix messages into a string of
......
...@@ -70,14 +70,14 @@ type TargetedCmixMessage struct { ...@@ -70,14 +70,14 @@ type TargetedCmixMessage struct {
// Will return an error if the network is unhealthy or if it fails to send // Will return an error if the network is unhealthy or if it fails to send
// (along with the reason). Blocks until successful send or err. // (along with the reason). Blocks until successful send or err.
// WARNING: Do not roll your own crypto // WARNING: Do not roll your own crypto
func (c *client) SendMany(recipients []*id.ID, func (c *client) SendMany(messages []TargetedCmixMessage,
messages []TargetedCmixMessage,
params CMIXParams) (rounds.Round, []ephemeral.Id, error) { params CMIXParams) (rounds.Round, []ephemeral.Id, error) {
if !c.Monitor.IsHealthy() { if !c.Monitor.IsHealthy() {
return rounds.Round{}, []ephemeral.Id{}, errors.New( return rounds.Round{}, []ephemeral.Id{}, errors.New(
"Cannot send cMix message when the network is not healthy") "Cannot send cMix message when the network is not healthy")
} }
recipients := recipientsFromTargetedMessage(messages)
assembler := func(rid id.Round) ([]TargetedCmixMessage, error) { assembler := func(rid id.Round) ([]TargetedCmixMessage, error) {
return messages, nil return messages, nil
} }
......
...@@ -146,7 +146,7 @@ type FtE2e interface { ...@@ -146,7 +146,7 @@ type FtE2e interface {
// transfer manager for easier testing. // transfer manager for easier testing.
type Cmix interface { type Cmix interface {
GetMaxMessageLength() int GetMaxMessageLength() int
SendMany(recipients []*id.ID, messages []cmix.TargetedCmixMessage, SendMany(messages []cmix.TargetedCmixMessage,
p cmix.CMIXParams) (rounds.Round, []ephemeral.Id, error) p cmix.CMIXParams) (rounds.Round, []ephemeral.Id, error)
AddFingerprint(identity *id.ID, fingerprint format.Fingerprint, AddFingerprint(identity *id.ID, fingerprint format.Fingerprint,
mp message.Processor) error mp message.Processor) error
......
...@@ -156,7 +156,7 @@ func (m *manager) sendCmix(packet []store.Part) { ...@@ -156,7 +156,7 @@ func (m *manager) sendCmix(packet []store.Part) {
jww.DEBUG.Printf("[FT] Sending %d file parts via SendManyCMIX", jww.DEBUG.Printf("[FT] Sending %d file parts via SendManyCMIX",
len(messages)) len(messages))
rid, _, err := m.cmix.SendMany(recipients, messages, m.params.Cmix) rid, _, err := m.cmix.SendMany(messages, m.params.Cmix)
if err != nil { if err != nil {
jww.WARN.Printf("[FT] Failed to send %d file parts via "+ jww.WARN.Printf("[FT] Failed to send %d file parts via "+
"SendManyCMIX: %+v", len(messages), err) "SendManyCMIX: %+v", len(messages), err)
......
...@@ -114,7 +114,7 @@ type groupE2e interface { ...@@ -114,7 +114,7 @@ type groupE2e interface {
// groupCmix is a subset of the cmix.Client interface containing only the // groupCmix is a subset of the cmix.Client interface containing only the
// methods needed by GroupChat // methods needed by GroupChat
type groupCmix interface { type groupCmix interface {
SendMany(recipients []*id.ID, messages []cmix.TargetedCmixMessage, SendMany(messages []cmix.TargetedCmixMessage,
p cmix.CMIXParams) (rounds.Round, []ephemeral.Id, error) p cmix.CMIXParams) (rounds.Round, []ephemeral.Id, error)
AddService( AddService(
clientID *id.ID, newService message.Service, response message.Processor) clientID *id.ID, newService message.Service, response message.Processor)
......
...@@ -62,7 +62,7 @@ func (m *manager) Send(groupID *id.ID, tag string, message []byte) ( ...@@ -62,7 +62,7 @@ func (m *manager) Send(groupID *id.ID, tag string, message []byte) (
timeNow := netTime.Now().Round(0) timeNow := netTime.Now().Round(0)
// Create a cMix message for each group member // Create a cMix message for each group member
groupMessages, recipients, msgId, err := m.newMessages(g, tag, message, timeNow) groupMessages, msgId, err := m.newMessages(g, tag, message, timeNow)
if err != nil { if err != nil {
return rounds.Round{}, time.Time{}, group.MessageID{}, return rounds.Round{}, time.Time{}, group.MessageID{},
errors.Errorf(newCmixMsgErr, g.Name, g.ID, err) errors.Errorf(newCmixMsgErr, g.Name, g.ID, err)
...@@ -71,7 +71,7 @@ func (m *manager) Send(groupID *id.ID, tag string, message []byte) ( ...@@ -71,7 +71,7 @@ func (m *manager) Send(groupID *id.ID, tag string, message []byte) (
// Send all the groupMessages // Send all the groupMessages
param := cmix.GetDefaultCMIXParams() param := cmix.GetDefaultCMIXParams()
param.DebugTag = "group.Message" param.DebugTag = "group.Message"
rid, _, err := m.getCMix().SendMany(recipients, groupMessages, param) rid, _, err := m.getCMix().SendMany(groupMessages, param)
if err != nil { if err != nil {
return rounds.Round{}, time.Time{}, group.MessageID{}, return rounds.Round{}, time.Time{}, group.MessageID{},
errors.Errorf(sendManyCmixErr, m.getReceptionIdentity().ID, g.Name, errors.Errorf(sendManyCmixErr, m.getReceptionIdentity().ID, g.Name,
...@@ -85,8 +85,7 @@ func (m *manager) Send(groupID *id.ID, tag string, message []byte) ( ...@@ -85,8 +85,7 @@ func (m *manager) Send(groupID *id.ID, tag string, message []byte) (
// newMessages builds a list of messages, one for each group chat member. // newMessages builds a list of messages, one for each group chat member.
func (m *manager) newMessages(g gs.Group, tag string, msg []byte, func (m *manager) newMessages(g gs.Group, tag string, msg []byte,
timestamp time.Time) ([]cmix.TargetedCmixMessage, []*id.ID, timestamp time.Time) ([]cmix.TargetedCmixMessage, group.MessageID, error) {
group.MessageID, error) {
rng := m.getRng().GetStream() rng := m.getRng().GetStream()
defer rng.Close() defer rng.Close()
...@@ -97,18 +96,18 @@ func (m *manager) newMessages(g gs.Group, tag string, msg []byte, ...@@ -97,18 +96,18 @@ func (m *manager) newMessages(g gs.Group, tag string, msg []byte,
// Generate public message to determine what length internal message can be // Generate public message to determine what length internal message can be
pubMsg, err := newPublicMsg(maxCmixMessageLength) pubMsg, err := newPublicMsg(maxCmixMessageLength)
if err != nil { if err != nil {
return nil, nil, group.MessageID{}, errors.Errorf(newPublicMsgErr, err) return nil, group.MessageID{}, errors.Errorf(newPublicMsgErr, err)
} }
// Generate internal message // Generate internal message
intlMsg, err := newInternalMsg(pubMsg.GetPayloadSize()) intlMsg, err := newInternalMsg(pubMsg.GetPayloadSize())
if err != nil { if err != nil {
return nil, nil, group.MessageID{}, errors.Errorf(newInternalMsgErr, err) return nil, group.MessageID{}, errors.Errorf(newInternalMsgErr, err)
} }
// Return an error if the message is too large to fit in the payload // Return an error if the message is too large to fit in the payload
if intlMsg.GetPayloadMaxSize() < len(msg) { if intlMsg.GetPayloadMaxSize() < len(msg) {
return nil, nil, group.MessageID{}, errors.Errorf( return nil, group.MessageID{}, errors.Errorf(
messageLenErr, len(msg), intlMsg.GetPayloadMaxSize()) messageLenErr, len(msg), intlMsg.GetPayloadMaxSize())
} }
...@@ -118,7 +117,6 @@ func (m *manager) newMessages(g gs.Group, tag string, msg []byte, ...@@ -118,7 +117,6 @@ func (m *manager) newMessages(g gs.Group, tag string, msg []byte,
// Create cMix messages // Create cMix messages
messages := make([]cmix.TargetedCmixMessage, len(g.Members)) messages := make([]cmix.TargetedCmixMessage, len(g.Members))
recipients := make([]*id.ID, len(g.Members))
for i, member := range g.Members { for i, member := range g.Members {
// Do not send to the sender // Do not send to the sender
if m.getReceptionIdentity().ID.Cmp(member.ID) { if m.getReceptionIdentity().ID.Cmp(member.ID) {
...@@ -129,14 +127,12 @@ func (m *manager) newMessages(g gs.Group, tag string, msg []byte, ...@@ -129,14 +127,12 @@ func (m *manager) newMessages(g gs.Group, tag string, msg []byte,
cMixMsg, err := newCmixMsg(g, tag, timestamp, member, rng, cMixMsg, err := newCmixMsg(g, tag, timestamp, member, rng,
maxCmixMessageLength, internalMessagePayload) maxCmixMessageLength, internalMessagePayload)
if err != nil { if err != nil {
return nil, nil, group.MessageID{}, err return nil, group.MessageID{}, err
} }
messages[i] = cMixMsg messages[i] = cMixMsg
recipients[i] = g.ID
} }
return messages, recipients, return messages, group.NewMessageID(g.ID, internalMessagePayload), nil
group.NewMessageID(g.ID, internalMessagePayload), nil
} }
// newCmixMsg generates a new cmix.TargetedCmixMessage for the given group // newCmixMsg generates a new cmix.TargetedCmixMessage for the given group
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment