Channel Directory Server protocol syntax
{
Channel Directory Service protocol grammar
Version 0.01 - unreleased
Last modified: 21-06-96
Written by G. Hiddink
Between strings (enclosed by " signs) is always whitespace. Between characters,
enclosed by ' signs, is no whitespace.
21-06-96 initial version
23-06-96 first workable version
11-07-96 added modes and charter to <List>
09-09-96 added mode characters to <List> for <Directory>
NOTE: a CDS can send an UPDATE <ChanName> if the registration information has changed.
}
{ from client to CDS }
<MessageToCDS> ::= <RetrieveDir> | <RetrieveChan> | <ChanNew> | <DirNew> | <Join> | <Leave>
| <ServerInd> | <Mend> | <IAmAt>
{ from CDS to client }
<MessageFromCDS>::= <List> | <Channel> | <ChDie> | <Error> | <NotAChan> | <NotADir> | <Unknown>
| <NotAllowed> | <Members> | <CacheDirty>
{ from CDS to CDS }
<MessageBetweenCDS> ::= <ChanNew> | <DirNew> | <ChDie> | <DirDie>
<RetrieveDir> ::= RETRIEVEDIR <Reference> ( <Directory> | TOP )
<RetrieveChan> ::= RETRIEVECHAN <Reference> <ChanName>
<List> ::= LIST <Reference> <Directory> <DirMode>* ( <Segment> | <ShortChan> ) *
<Members> ::= MEMBERS <ChanName> <ServerID> *
<ChanNew> ::= CHNEW <ChanName>
<DirNew> ::= DIRNEW <DirName>
<ChDie> ::= CHDIE <ChanName>
<Mend> ::= MEND <ChanName>
<Join> ::= JOIN <ChanName>
<Leave> ::= LEAVE <ChanName>
<ServerReq> ::= SRVREQ <ServerID>
<Mend> ::= MEND <ServerID>
<ServerReply> ::= SRVREPL <ServerID> <ChanName>*
{ a client can send several of these if its channels won't fit in one message }
<IAmAt> ::= IAMAT <ChanName>*
<Segment> ::= <SegName> 's' <DirMode>* { no whitespace }
<ShortChan> ::= <SegName> "cr" <Charter>
<Channel> ::= CHANNEL <Reference> <DirEntry>
{ serverID is needed for building routing info? }
<ChanNew> ::= CHNEW <ServerID> <ChanName>
<Error> ::= ERROR <Message>
<NotAChan> ::= NOTACHAN <Reference> <ChanName>
<NotADir> ::= NOTADIR <Reference> <ChanName>
<Unknown> ::= UNKNOWN <Reference> ( <ChanName> | <Directory> )
{ reference is 0 if there was none supplied (JOIN/LEAVE/DIRNEW) }
{ <ChanName> | <Directory> is not LL(1); however, they're both strings... }
<NotAllowed> ::= NOTALLOWED <MessageToCDS>
<DirEntry> ::= <ChanName> <Field>* <End> { note that no fields at all is valid! }
<DirMode> ::= CREATE-DIR | CREATE-CHAN | K12
<Field> ::= CHARTER <Charter> | CONTACTNAME <ContactName> | CONTACTMAIL <ContactMail>
| PASSWORD <Password> | MODE <Word> | ACCESS <AccessList>
| URL <Url>
<AccessList> ::= <Mask>* <End>
<SegName> ::= <Word> { at most 10 characters }
<ChanName> ::= <Word> { at most 50 characters }
<Charter> ::= <String> { at most 250 characters }
<ContactName> ::= <String> { at most 50 characters }
<ContactMail> ::= <String> { at most 50 characters }
<Password> ::= <Word> { at most 20, crypted }
<Mask> ::= <Word> { at most 50 characters }
<Url> ::= <Word> { at most 80 characters }
<Word> ::= 'a'..'z' | 'A' .. 'Z' | { some more }
<String> ::= '"' <Word> ( ' ' <Word> )* '"'
<ServerID> ::= <LONG INTEGER>
RETRIEVEDIR ::= "RETRD"
RETRIEVECHAN ::= "RETRC"
TOP ::= "TOP"
LIST ::= "LIST"
JOIN ::= "JOIN"
CHANNEL ::= "CHAN"
SRVIND ::= "SRVIND"
NOTACHAN ::= "NOTC"
NOTADIR ::= "NOTD"
ERROR ::= "ERROR"
UNKNOWN ::= "WENI" { unknown channel }
CHARTER ::= "CHRT"
CONTACTNAME ::= "CNAME"
CONTACTMAIL ::= "CMAIL"
PASSWORD ::= "PASSW"
MODE ::= "MODE"
ACCESS ::= "ACCS"
URL ::= "URL"
CREATE-DIR ::= 'd'
CREATE-CHAN ::= 'c'
K12 ::= 'k'
<End> ::= "."
<CR> ::= "\n"
(c) 1996 by G. Hiddink
If you have any comments, please mail to
grit@cal050031.student.utwente.nl