I merged the refactor to default. Now it should be easier to implement messages from control and extensions. I separated the core functionality in src/cs/core
So to implement control.md for example, we can make a src/cs/control and copy coder.* and message.* adapted to the particular messages that need to be implemented.
I think decoupling ProtocolState and cs::core::Protocol will allow us to have a better design. Now I'm more satisfied with how messages are handled.
If you have any other ideas don't hesitate to write them on the list.
Happy hacking!
Pedro.