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"

  

Back to Specification of WWCP


(c) 1996 by G. Hiddink

If you have any comments, please mail to grit@cal050031.student.utwente.nl