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?"
(c) 1996 by G. Hiddink
If you have any comments, please mail to
grit@cal050031.student.utwente.nl