Conferencing protocol syntax

{
        ChatNet Server protocol definition in BCNF
        Version 0.03 - unreleased
        Last modified: 13-03-96
        Written by G. Hiddink


Capatilized words are string terminators.
Whenever there is a space between two right-hand parts of a production rule, there must also be 
a space between the generated terminals.

05-11-94 Modified SignOn to user only a UserID instead of ServerID.UserID; the serverID is 
         already known from the Multicast layer.
         Removed the Topic from the ChanData message. It was not LL(1). Instead, the topic is 
         sent by a Topic message, with user 0. This topic change should not be shown to the user.
         Replaced <User> with <UserNum> in ChanData, Signon and Signoff, UserReq and UserData.
         The parameters of <Leave> have been exchanged; convention is first <UserNum>, then 
         <ChanName>.
         Added <UserNum> to <NewMode>.
04-08-95 modified <UserInfo>, merging first- and lastname into a realname field to allow real 
         names consisting of more than two parts
13-03-96 <ChanReq>, <ChanRelease>, <ChanNew> and <ChanDied> can now have  multiple parameters. 
21-03-96 Somehow "IDIE" wasn't included. Added it as <Dying>
30-03-96 UserData is obsolete. Its functionality can neatly be supported by Signon.
01-04-96 added the channel announcement message <ChanAnn>. Need it to differentiate between 
         channel creation and channel discovery (after mending a split)
02-04-96 added sum messages ID, Users and SrvReq
05-04-96 Added a comment to <Leave>
20-04-96 Added sum message STATS
09-06-96 Added a mode field to <ChNew> and <ChanAnn> to support registered
	 and private channels
20-02-97 moved CHDIE to the Channel Directory Service protocol
24-09-97 removed remark about <NetworkAddress> it really can be any string!

}

<Primitive>  ::= <Error> | <Message> | <SumMsg>


<Message>    ::= <ChanReq> | <ChanRelease> | <ChanData> | <ChanInq> | <ChanList> | <ChanNew> 
                 | <NewTopic> | <NewMode> | <ChanDied> | <Dying> | <SignOn> | <SignOff> | <UserReq> 
                 | <UserData> | <UserInq> | <UserList> | <Join> | <Leave> | <Say> | <NickChange> 
                
<SumMsg>     ::= <ID> | <Users> | <SrvReq>


<Error>      ::= <UnknownChan> | <UnknownFromUser> | <UnknownToUser>
                     | <UnknownUser> | <UserNotAtChan>

{- - - - - - C H A N N E L   M E S S A G E S - - - - -}

<ChanReq>        ::= CHREQ <ChanName>+

<ChanRelease>    ::= CHREL <ChanName>+

<Chandata>       ::= CHDATA <ChanName> (<UserNum> <UserMode>)+ <ChannelMode>

<ServerList>     ::= SRVLIST <ChanName> <Serverid>*

<ChanInq>        ::= CHINQ

<ServerList>     ::= SRVLIST <ChanName> <Serverid>*

<ChanList>       ::= CHLIST <ChanName>+

<ChanNew>        ::= CHNEW <ChanName>+


<ChanAnn>        ::= CHANN <ChanName>+

<NewTopic>       ::= TOPIC <User> <ChanName> <Topic>

<NewMode>        ::= MODE <UserNum> <ChanName> <Mode>

<ChanDied>       ::= CHDIE <ChanName>+


{- - - - - - S E S S I O N   M E S S A G E S - - - - -}

<Signon>         ::= SIGNON <UserNum> <UserInfo>

<SignOff>        ::= SIGNOFF <UserNum>

<Dying>          ::= IDIE

{- - - - - - - U S E R   M E S S A G E S - - - - - - -}

<UserReq>        ::= USRREQ (<UserNum>)+

<UserData>       ::= USRDATA (<UserNum> <UserInfo>)+

<UserInq>        ::= USRINQ

<UserList>       ::= USRLIST (<User>)+


<Join>           ::= JOIN <UserNum> <ChanName> <UserMode>

<Leave>          ::= LEAVE <UserNum> <ChanName> <Comment>

<Say>            ::= SAY <UserNum> <ChanName> <Text>

<Action>         ::= ACT <UserNum> <ChanName> <Text>

<Message>        ::= MESG <FromUserID> <ToUserID> <Text>

<Invite>         ::= INVITE <FromUserID> <ToUserID> <ChanName>

<NickChange>     ::= NICK <User> <NewNick>

{ - - - - - - - - - - S U M   M E S S A G E S - - - - - - - - - -}

<ID>             ::= ID <ServerID> *

<Users>          ::= USERS <NrOfUsers> *

<SrvReq>         ::= SRVREQ <ChanName> <ServerID> *

<Status>          ::= STATUS ( <Diameter> <NrOfServers> <NrOfUsers> ) *

{ - - - - - - - - E R R O R    M E S S A G E S - - - - - - - - - }

<UnknownChan>    ::= UNKNOWNCHAN <Message>

<UnknownFromUser>::= UNKNOWNFROMUSER <Message>

<UnknownToUser>  ::= UNKNOWNTOUSER <Message>

<UnknownUser>    ::= UNKNOWNUSER <Message>

<UserNotAtChan>  ::= USERNOTATCHAN <Message>


<User>           ::= <UserID> '.' <ServerID>

<UserInfo>       ::= <NickName> <NetworkAddress> <RealName>

<DestinationID>  ::= <ServerID>

<DestIDList>     ::= <ServerID>+

<BroadCastID>    ::= '*' <LocalID> '.' <ServerID>

<UserMode>       ::= '+' [<ChanopStatus>]


<ServerID>       ::= <NatNum>

<UserNum>        ::= <NatNum>

<UserID>         ::= <NatNum>

<LocalID>        ::= <NatNum>

<NickName>       ::= <NameString>

<RealName>       ::= <String>

<NetworkAddress> ::= <String>

<ChanopStatus>   ::= 'o'

<Topic>          ::= <String>


<NatNum>         ::= <Digit> (<Digit>)*

<String>         ::= <Char>*

<NameString>     ::= <NameChar>+

<Digit>          ::= '0' .. '9'

<Char>           ::= 'a'..'z' | 'A'..'Z' | '@' | '.'

<NameChar>       ::= 'a'..'z' | 'A'..'Z' | '@'

CHREQ            ::= "CHREQ"

CHREL            ::= "CHREL"

CHDATA           ::= "CHDAT"

CHINQ            ::= "CHINQ"

SRVLIST          ::= "SRVLST"

CHLIST           ::= "CHLST"

CHNEW            ::= "CHNEW"

TOPIC            ::= "TOPIC"

MODE             ::= "MODE"

CHDIE            ::= "CHDIE"

SIGNON           ::= "MEET"

SIGNOFF          ::= "FRGET"

USRREQ           ::= "USREQ"

USRDATA          ::= "USRDAT"

USRINQ           ::= "USRINQ"

USRLIST          ::= "USRLIST"

JOIN             ::= "JOIN"

LEAVE            ::= "LEAVE"

SAY              ::= "SAY"

ACT              ::= "ACT"

MESG             ::= "MESG"

INVITE           ::= "INV"

NICK             ::= "NICK"

IDIE             ::= "IDIE"

UNKNOWN          ::= "DUNNO"

PROTERROR        ::= "ERROR"

UNKNOWNCHAN      ::= "CHAN?"

UNKNOWNFROMUSER  ::= "FRUSR?"

UNKNOWNTOUSER    ::= "TOUSR?"

UNKNOWNUSER      ::= "USR?"

USERNOTATCHAN    ::= "U@CHN?"


Back to Specification of WWCP


(c) 1996 by G. Hiddink

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