The feature name should use only upper case letters, and possible a number to signal a revised feature. A central register of known features should be kept, to avoid clashes. All ADC clients should support the BASE feature (unless a future revision takes its place), which is this protocol.
So why is DC++ sending : HSUP xxxx BAS0
and not HSUP xxxx BASE0
(xxxx = cid)
And should an client always send an CID?
It is up to the hub developer to decide whether to base hub registration on CID or nickname (during login, the client (usually) provides both), but the latter is probably more convenient for the users.
usually doens't sound very strict. I already know a client send
HSUP +BAS0 at login , without the Cid. That means that a Cid based hub only can decide from there that an user get disconnected.
Though i also think that
SUP <+|-><feature1>...<+|-><featureN>
<+|-> doesn't say <+|-|>
and therefor isn't optional and dc++ should also send an + or - which it doesn't