diff --git a/api/send.go b/api/send.go index 3c6cc0178451408221692bb801458e69b4350ef8..08531b696d2d4f60acf36dd81ef05f6d3994afc7 100644 --- a/api/send.go +++ b/api/send.go @@ -50,6 +50,7 @@ func (c *Client) SendUnsafe(m message.Send, param params.Unsafe) ([]id.Round, func (c *Client) SendCMIX(msg format.Message, recipientID *id.ID, param params.CMIX) (id.Round, ephemeral.Id, error) { jww.INFO.Printf("SendCMIX(%s)", string(msg.GetContents())) + c.OnSend(1) return c.network.SendCMIX(msg, recipientID, param) } @@ -58,6 +59,7 @@ func (c *Client) SendCMIX(msg format.Message, recipientID *id.ID, // round ID of the round the payload was sent or an error if it fails. func (c *Client) SendManyCMIX(messages []message.TargetedCmixMessage, params params.CMIX) (id.Round, []ephemeral.Id, error) { + c.OnSend(uint32(len(messages))) return c.network.SendManyCMIX(messages, params) } @@ -73,3 +75,13 @@ func (c *Client) NewCMIXMessage(contents []byte) (format.Message, error) { msg.SetContents(contents) return msg, nil } + +// OnSend performs a bucket addition on a call to Client.SendCMIX or +// Client.SendManyCMIX, updating the bucket for the amount of messages sent. +func (c *Client) OnSend(messages uint32) { + rateLimitingParam := c.storage.GetBucketParams().Get() + c.storage.GetBucket().AddWithExternalParams(messages, + rateLimitingParam.Capacity, rateLimitingParam.LeakedTokens, + rateLimitingParam.LeakDuration) + +}