Skip to contentSkip to conversation

: Feature negotiation

RFC Gerrit Renker 1 participant 1 message Aug 23, 2007

lore
Share & tools
lore
#0 lore raw

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:

http://www.erg.abdn.ac.uk/users/gerrit/dccp/notes/feature_negotiation/implementation_notes.html#concept

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.