I completed the implementation of block and txs announcements (though we aren't taking txs), such that we don't announce an object to a peer who has announced to us. This uses a small per-channel cache of hashes, configurable size. That required a node::channel, derived from network::channel so that tx/block state can be hung off of the channel without hacking it back into the network lib.
This uses a simple circular buffer of hashes. That can later be optimized using a circular cuckoo filter, reducing storage space and maybe search time. But it's trivial already, so no big deal.