Presumably, if a client disconnects immediately after connecting (maybe even
while we're still busy setting up the previous one), then `peer_addr()` can
return an error.
This commit handles any such error by logging them. Except for the NotConnected
kind which we now know are expected during normal operation.
With futures 0.3, we can check whether a sink can accept items without actually
sending them to it, which used to be the reason why we needed to per-destination
buffers.
We've been passing around `Stream`s of `Frame`s everywhere even though we never
made use of the async nature of those (i.e. we used future::ready everywhere).
This resulted in unnecessarily complicated an hard to read code. Instead we now
have a simple VecDeque outbound_buf which we push packets on if we want them to
be sent. No more passing around complicated return values.
mumble-client now properly disconnects, so this is no longer an immediate issue
(hence downgrade to TODO).
The protobuf FIXME was resolved with the switch to `mumble-protocol`.
Protobuf will generate the `Mumble.rs` file there which we do not want to commit
to git but we do still need the directory to exist for protoc to work.
Delayed packets weren't handled properly and when a transmission timed
out, RTP sequence numbers were re-used and therefore rejected by the SRTP layer.