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

Revert SendMany interface change

parent e64080f9
Branches
Tags
2 merge requests!510Release,!479Xx 4415/send many assembler
......@@ -84,7 +84,7 @@ type Client interface {
// 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.
// WARNING: Do not roll your own crypto.
SendMany(recipients []*id.ID, messages []TargetedCmixMessage,
SendMany(messages []TargetedCmixMessage,
params CMIXParams) (rounds.Round, []ephemeral.Id, error)
// SendWithAssembler sends a variable cmix payload to the provided recipient.
......
......@@ -219,7 +219,17 @@ func recipientsToStrings(recipients []*id.ID) string {
}
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
......
......@@ -70,14 +70,14 @@ type TargetedCmixMessage struct {
// 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.
// WARNING: Do not roll your own crypto
func (c *client) SendMany(recipients []*id.ID,
messages []TargetedCmixMessage,
func (c *client) SendMany(messages []TargetedCmixMessage,
params CMIXParams) (rounds.Round, []ephemeral.Id, error) {
if !c.Monitor.IsHealthy() {
return rounds.Round{}, []ephemeral.Id{}, errors.New(
"Cannot send cMix message when the network is not healthy")
}
recipients := recipientsFromTargetedMessage(messages)
assembler := func(rid id.Round) ([]TargetedCmixMessage, error) {
return messages, nil
}
......
......@@ -146,7 +146,7 @@ type FtE2e interface {
// transfer manager for easier testing.
type Cmix interface {
GetMaxMessageLength() int
SendMany(recipients []*id.ID, messages []cmix.TargetedCmixMessage,
SendMany(messages []cmix.TargetedCmixMessage,
p cmix.CMIXParams) (rounds.Round, []ephemeral.Id, error)
AddFingerprint(identity *id.ID, fingerprint format.Fingerprint,
mp message.Processor) error
......
......@@ -156,7 +156,7 @@ func (m *manager) sendCmix(packet []store.Part) {
jww.DEBUG.Printf("[FT] Sending %d file parts via SendManyCMIX",
len(messages))
rid, _, err := m.cmix.SendMany(recipients, messages, m.params.Cmix)
rid, _, err := m.cmix.SendMany(messages, m.params.Cmix)
if err != nil {
jww.WARN.Printf("[FT] Failed to send %d file parts via "+
"SendManyCMIX: %+v", len(messages), err)
......
......@@ -114,7 +114,7 @@ type groupE2e interface {
// groupCmix is a subset of the cmix.Client interface containing only the
// methods needed by GroupChat
type groupCmix interface {
SendMany(recipients []*id.ID, messages []cmix.TargetedCmixMessage,
SendMany(messages []cmix.TargetedCmixMessage,
p cmix.CMIXParams) (rounds.Round, []ephemeral.Id, error)
AddService(
clientID *id.ID, newService message.Service, response message.Processor)
......
......@@ -62,7 +62,7 @@ func (m *manager) Send(groupID *id.ID, tag string, message []byte) (
timeNow := netTime.Now().Round(0)
// 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 {
return rounds.Round{}, time.Time{}, group.MessageID{},
errors.Errorf(newCmixMsgErr, g.Name, g.ID, err)
......@@ -71,7 +71,7 @@ func (m *manager) Send(groupID *id.ID, tag string, message []byte) (
// Send all the groupMessages
param := cmix.GetDefaultCMIXParams()
param.DebugTag = "group.Message"
rid, _, err := m.getCMix().SendMany(recipients, groupMessages, param)
rid, _, err := m.getCMix().SendMany(groupMessages, param)
if err != nil {
return rounds.Round{}, time.Time{}, group.MessageID{},
errors.Errorf(sendManyCmixErr, m.getReceptionIdentity().ID, g.Name,
......@@ -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.
func (m *manager) newMessages(g gs.Group, tag string, msg []byte,
timestamp time.Time) ([]cmix.TargetedCmixMessage, []*id.ID,
group.MessageID, error) {
timestamp time.Time) ([]cmix.TargetedCmixMessage, group.MessageID, error) {
rng := m.getRng().GetStream()
defer rng.Close()
......@@ -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
pubMsg, err := newPublicMsg(maxCmixMessageLength)
if err != nil {
return nil, nil, group.MessageID{}, errors.Errorf(newPublicMsgErr, err)
return nil, group.MessageID{}, errors.Errorf(newPublicMsgErr, err)
}
// Generate internal message
intlMsg, err := newInternalMsg(pubMsg.GetPayloadSize())
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
if intlMsg.GetPayloadMaxSize() < len(msg) {
return nil, nil, group.MessageID{}, errors.Errorf(
return nil, group.MessageID{}, errors.Errorf(
messageLenErr, len(msg), intlMsg.GetPayloadMaxSize())
}
......@@ -118,7 +117,6 @@ func (m *manager) newMessages(g gs.Group, tag string, msg []byte,
// Create cMix messages
messages := make([]cmix.TargetedCmixMessage, len(g.Members))
recipients := make([]*id.ID, len(g.Members))
for i, member := range g.Members {
// Do not send to the sender
if m.getReceptionIdentity().ID.Cmp(member.ID) {
......@@ -129,14 +127,12 @@ func (m *manager) newMessages(g gs.Group, tag string, msg []byte,
cMixMsg, err := newCmixMsg(g, tag, timestamp, member, rng,
maxCmixMessageLength, internalMessagePayload)
if err != nil {
return nil, nil, group.MessageID{}, err
return nil, group.MessageID{}, err
}
messages[i] = cMixMsg
recipients[i] = g.ID
}
return messages, recipients,
group.NewMessageID(g.ID, internalMessagePayload), nil
return messages, group.NewMessageID(g.ID, internalMessagePayload), nil
}
// 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 register or to comment