: Feature negotiation
For some time I have been working away at improving feature negotiation support, following a discussion with Ian regarding the disabling of Ack Vectors.
I have found some limitations of the present implementation and would like to fix this. There is full documentation on the issues on
http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/feature_negotiation/
It is not necessary to read all of this, what I would like people to have a look at and would value comments for are the implementation notes on:
Please do send comments, suggestions etc.
There are some good ideas in the present implementation; some of the problems encountered are:
* if one end is configured to use CCID2, the other CCID3, then both end up using these values (with horrible performance results);
* when changing features anytime during a conversation, traffic needs to be stopped until negotiation is over (no provision currently made);
* negotiation during connection setup changes the properties of the listening socket rather than the child socket (accept queue); i.e. if the first incoming connection requests CCID3, the listening socket changes from CCID2 to CCID3; the second incoming connection may again change this, and so on;
* the code uses some ingenuous, but cryptic wizardry. It is hard to figure out how parameters are negotiated, which makes the code prone to oversights (in dccp_feat_update_ccid() for instance, RX and TX CCID are reversed, it should be the other way around);
* receiving empty confirms is currently not handled.