This is the accepted version of the QuickList protocol as suggested by the QuickList team. The QuickList team did not exist until I wrote this sentence, but that doesn't stop me from drafting a couple of inspiring people into the group and give credit in no particular order. Many thanks to:
I will use the terms NDC and NHUB to denote a client or hub not featuring QuickList and QDC and QHUB for those that do. The term DC is used when the type is not yet established or of no importance. EACH and ALL signals that a message is sent N times, one message for each connected user. Also note that the terms IF, MAY, SHOULD and MUST, have the same meaning as in the internet RFC specs.
- A DC connects to QHUB and does nothing
- QHUB sends $Lock which starts with
- QHUB also sends $HubName
- A DC must send $Key
- A DC may also send '$Supports QuickList|' to signal in is in fact a QDC
- QHUB responds with '$Supports QuickList|'
- QHUB may send $GetPass
- QDC responds with $MyPass
- QHUB may send $BadPass and disconnect
- QHUB may send $ValidateDenide and disconnect
- QHUB may send $LogedIn to signal that H: should not be incremented
- QHUB sends all clients MyINFO to the QDC
- QHUB sends $OpList to the QDC
- QHUB may send $Hello to all clients but should send it to non QDC only
- QHUB sends $MyINFO to all QDC clients
This part has been through some changes. There was an argument of having the client start with $Supports and then having the hub respond to that. Having the client start with
$Supports as a response to
EXTENDEDPROTOCOL is in a sense much cleaner.
- I have found that $HubName can be sent pretty much at any time. I do it in conjunction with $Lock.
- $Supports are in the same format as in the client protocol;
'$Supports <feat1> <feat2> <feat3>|'
- sending $MyPass early has been removed from the spec.
- Let the hub decide if the account should be treated as a VIP, i.e. not increment H: in the tag, hence it is not mandatory for accounts. A QDC should only respond to this message for account logins only.
- $OpList was missing.
Messages that a QHUB sends in each state, QDC ignores otherwise;
Messages that a QHUB listens to in each state, QHUB ignores otherwise;