338 lines
9.5 KiB
Plaintext
338 lines
9.5 KiB
Plaintext
|
Dog is Not a Chat Protocol - DNC/1.0
|
|||
|
|
|||
|
Status of this Memo
|
|||
|
This document specifies an Internet communication protocol. Please refer to
|
|||
|
this document for the standardization state and status if you want to use DNC.
|
|||
|
Distribution of this memo is unlimited.
|
|||
|
|
|||
|
|
|||
|
Abstract
|
|||
|
The DNC protocol was developed over 2015. It was first implemented as a
|
|||
|
learning purpose for learn how the network work.
|
|||
|
The DNC protocol is a text-based protocol allowing the simplest TCP client
|
|||
|
being capable of connecting to the server.
|
|||
|
|
|||
|
|
|||
|
Table of Contents
|
|||
|
1. INTRODUCTION
|
|||
|
1.1 Server
|
|||
|
1.2 Clients
|
|||
|
2. THE DNC SPECIFICATIONS
|
|||
|
2.1 Connection
|
|||
|
2.2 Nickname format
|
|||
|
2.3 File transfert
|
|||
|
2.4 Client commands
|
|||
|
2.5 Server commands
|
|||
|
3. Return Code
|
|||
|
3.1 Info
|
|||
|
3.2 Success
|
|||
|
3.3 Error
|
|||
|
|
|||
|
|
|||
|
1. INTRODUCTION
|
|||
|
|
|||
|
1.1 Server
|
|||
|
The server forms the backbone of the DNC protocol, providing a way to connect
|
|||
|
the clients together to talk or to send files.
|
|||
|
|
|||
|
1.2 Clients
|
|||
|
A client is connected to a server. Each client is distinguishable by his unique
|
|||
|
pseudonym having between three (3) and fifteen (15) characters.
|
|||
|
|
|||
|
2. THE DNC SPECIFICATIONS
|
|||
|
|
|||
|
2.1 Connection
|
|||
|
DNC uses the TCP protocol. The server and the client must implements a TCP
|
|||
|
socket to communicate together.
|
|||
|
When a client open the connection with the server, he must send /newname
|
|||
|
<nickname> for choose this pseudo. If he tries another command, he will receive
|
|||
|
a ERR_NO_NICKNAME.
|
|||
|
|
|||
|
He receives one message:
|
|||
|
(Response from the nickname request)
|
|||
|
(Paragraph 2.5 for more details on theses commands)
|
|||
|
|
|||
|
|
|||
|
2.2 Nickname format
|
|||
|
Everytime you see the tag <nickname> in this document means you have to respect
|
|||
|
the following rules for this pattern:
|
|||
|
The string must contains between three (3) and fifteen (15) characters.
|
|||
|
Characters allowed are all the letters in uppercase or lowercase, the numbers,
|
|||
|
and the underscore:
|
|||
|
<letter> = 'a' .. 'z' | 'A' .. 'Z'
|
|||
|
<number> = '0' .. '9'
|
|||
|
<underscore> = '_'
|
|||
|
|
|||
|
2.3 File transfert
|
|||
|
Peer-to-peer (P2P) is a computer network model close to client-server model but
|
|||
|
where each client is also a server.
|
|||
|
It’s just necessary to specify the receiver, and the port where the transfert
|
|||
|
will happens. The communication is done in TCP.
|
|||
|
There is three steps to send a file.
|
|||
|
1 - the client has to send a message to the server asking to send a file to
|
|||
|
another client and precise the port.
|
|||
|
2 - Then, the server send a message to the receiver of the file to know if he
|
|||
|
wants the file.
|
|||
|
3 - If the receiver accepts the file, the server sends him the ip and the port
|
|||
|
where the tcp is configured. The server also send a confirmation message to the
|
|||
|
emitter to tell him he can open the socket. Otherwise, the server sends a
|
|||
|
message to the sender saying the receiver doesn’t want to download the file.
|
|||
|
|
|||
|
|
|||
|
2.4 Client commands
|
|||
|
|
|||
|
2.4.1 Ask for a private discussion
|
|||
|
Command: /askpm
|
|||
|
Parameters: <nickname>
|
|||
|
This command ask the client given in parameter for a private chat.
|
|||
|
Server replies:
|
|||
|
SUCC_INVITED
|
|||
|
ERR_USER_NOT_FOUND
|
|||
|
ALREADY_ASKED
|
|||
|
|
|||
|
2.4.2 Accept a private discussion
|
|||
|
Command: /acceptpm
|
|||
|
Parameters: <nickname>
|
|||
|
This command allows the user to start a new conversation with the client
|
|||
|
given in parameter.
|
|||
|
He must receive the /askpm command before.
|
|||
|
Server replies:
|
|||
|
to sender
|
|||
|
SUCC_PRIVATE_DISCUSSION_ACCEPTED
|
|||
|
ERR_USER_HAS_NOT_ASK
|
|||
|
to “nickname” :
|
|||
|
SUCC_PRIVATE_DISCUSSION_OK <nickname>
|
|||
|
|
|||
|
|
|||
|
2.4.3 Reject a private discussion
|
|||
|
Command: /rejectpm
|
|||
|
Parameters: <nickname>
|
|||
|
This command finishes or refuses the conversation with the client given in
|
|||
|
parameter.
|
|||
|
He must send the /askpm command before.
|
|||
|
Server replies:
|
|||
|
to sender :
|
|||
|
SUCC_PRIVATE_DISCUSSION_REFUSED
|
|||
|
ERR_USER_HAS_NOT_ASK
|
|||
|
to “nickname” :
|
|||
|
SUCC_SUCC_PRIVATE_DISCUSSION_REJECTED <nickname>
|
|||
|
|
|||
|
|
|||
|
2.4.4 Quit
|
|||
|
Command: /quit
|
|||
|
Parameters: None
|
|||
|
The client ends the connection. It’s used for a clean exit on the server,
|
|||
|
but it’s also possible to detect when the socket ends.
|
|||
|
Server replies:
|
|||
|
SUCCESSFUL_LOGOUT
|
|||
|
ERR_LOGOUT
|
|||
|
|
|||
|
2.4.5 Private messages
|
|||
|
Command: /pm
|
|||
|
Parameters: <nickname> <message>
|
|||
|
PRIVMSG is used to send private messages between users. The user must
|
|||
|
accept the conversation before with /acceptpm.
|
|||
|
<nickname> is the nickname of the receiver of the message. <message> is the
|
|||
|
text to be send to the receiver. <nickname> and <message> cannot be empty.
|
|||
|
Server replies:
|
|||
|
If the message is successfully sended,
|
|||
|
the server replies by : “SUCC_PM_SENDED”
|
|||
|
If the receiver is not found,
|
|||
|
the server replies by : “ERR_DEST_NOT_FOUND”
|
|||
|
If the conversation is not accepted yet,
|
|||
|
the server replies by : “ERR_NOT_ACCEPTED”
|
|||
|
|
|||
|
|
|||
|
2.4.6 Disable messages
|
|||
|
Command: /disable
|
|||
|
Parameters: None
|
|||
|
The user stays connected, but don’t receive channel messages and private
|
|||
|
messages anymore.
|
|||
|
Server replies:
|
|||
|
success :: SUCC_DISABLED
|
|||
|
ERR_NOT_ENABLED
|
|||
|
|
|||
|
2.4.7 Enable messages
|
|||
|
Command: /enable
|
|||
|
Parameters: None
|
|||
|
This command can only be used after the /disable command. It has the
|
|||
|
reverse effect.
|
|||
|
Server replies:
|
|||
|
SUCC_ENABLED
|
|||
|
ERR_NOT_DISABLED
|
|||
|
|
|||
|
2.4.8 Change nickname
|
|||
|
Command: /name
|
|||
|
Parameters: <nickname>
|
|||
|
Allows the user to change his nickname to another. The user must specifies
|
|||
|
the new nickname in parameter. It must respects the correct format for
|
|||
|
<nickname>.
|
|||
|
Server replies:
|
|||
|
SUCC_VALID_NICKNAME
|
|||
|
ERR_INVALID_NICKNAME
|
|||
|
ERR_NICKNAME_ALREADY_USED
|
|||
|
|
|||
|
|
|||
|
2.4.9 Send a file to an user
|
|||
|
Command: /pmfile
|
|||
|
Parameters: <nickname> <file>
|
|||
|
The client who wants to send the file sends a request to the file receiver.
|
|||
|
The request contains the file name and the ip adress of the sender.
|
|||
|
|
|||
|
Server replies:
|
|||
|
SUCC_ASKED_FILE
|
|||
|
|
|||
|
2.4.10 Accept file transfert
|
|||
|
Command: /acceptfile
|
|||
|
Parameters: <nickname> <file> <ip> <port>
|
|||
|
This command is used in parallel with the rejectfile command to reply to
|
|||
|
the pmfile command. By using this command, the client will accept receiving a
|
|||
|
file sended by the client using the pmfile command by the specific port
|
|||
|
Server replies:
|
|||
|
SUCC_ACCEPTED_FILE
|
|||
|
ERR_NO_FILE_ASKED
|
|||
|
|
|||
|
2.4.11 Reject file transfert
|
|||
|
Command: /rejectfile
|
|||
|
Parameters: <nickname> <filename>
|
|||
|
This command is used in parallel with the acceptfile command to reply to
|
|||
|
the pmfile command. By using this command, the client will reject the file
|
|||
|
sended by the client using the pmfile command.
|
|||
|
Server replies:
|
|||
|
SUCC_REJECTED_FILE
|
|||
|
ERR_NO_FILE_ASKED
|
|||
|
|
|||
|
2.4.12 New nickname
|
|||
|
Command: /newname
|
|||
|
Parameters: <nickname>
|
|||
|
Allows the user to choose this <nickname> for at connection.
|
|||
|
Server replies:
|
|||
|
SUCC_VALID_NICKNAME
|
|||
|
ERR_INVALID_NICKNAME
|
|||
|
ERR_NICKNAME_ALREADY_USED
|
|||
|
|
|||
|
2.4.13 Get Users Online Connected
|
|||
|
Commande : /userlist
|
|||
|
Parameters : None
|
|||
|
Request the server to get the userlist connected.
|
|||
|
Server replies :
|
|||
|
USERLIST <nickname> <nickname>...
|
|||
|
|
|||
|
2.4.14 Get Users Away Connected
|
|||
|
Commande : /userlistaway
|
|||
|
Parameters : None
|
|||
|
Request the server to get the userlist away.
|
|||
|
Server replies :
|
|||
|
USERLISTAWAY <nickname> <nickname>...
|
|||
|
|
|||
|
|
|||
|
2.5 Server commands
|
|||
|
|
|||
|
If the user don’t have a nickname the server return CMD_NOT_ALLOWED
|
|||
|
|
|||
|
USERLIST <nickname>< nickname>
|
|||
|
triggered on : User connection
|
|||
|
target: the user who connect
|
|||
|
|
|||
|
USERLISTAWAY <nickname>< nickname>
|
|||
|
|
|||
|
HAS_JOIN <nickname>
|
|||
|
|
|||
|
HAS_LEFT <nickname>
|
|||
|
triggered on : User disconnection
|
|||
|
target: everyone connected to the server
|
|||
|
|
|||
|
|
|||
|
NAME_CHANGED <old nickname> <new nickname>
|
|||
|
|
|||
|
ASKING_FOR_PM <nickname>
|
|||
|
|
|||
|
NEW_PM <nickname> <message>
|
|||
|
|
|||
|
NEW_MSG <nickname> <message>
|
|||
|
|
|||
|
ERR_COMMAND_NOT_FOUND (no param)
|
|||
|
|
|||
|
CAN_SEND_FILE <file> <nickname> <ip> <port>
|
|||
|
|
|||
|
CANNOT_SEND_FILE <file> <nickname>
|
|||
|
|
|||
|
2.5.2 Transfer private file
|
|||
|
/pmfile jean C:/read.txt
|
|||
|
Retour: SUCC_ASKED_FILE | ERR_ALREADY_ONE_FILE_ASKED | ERR_USER_NOT_FOUND....
|
|||
|
Récepteur : HAS_ASKED_FILE michel C:/read.txt
|
|||
|
|
|||
|
/acceptfile michel 2568 C:/read.txt
|
|||
|
Retour: SUCC_ACCEPTED_FILE 21.25.256.13 //ip sender for the client can check
|
|||
|
the origin of transfert
|
|||
|
Récepteur : CAN_SEND_FILE jean 31.52.313.123 2568 C:/read.txt
|
|||
|
|
|||
|
|
|||
|
|
|||
|
2.5.3 enable / disable
|
|||
|
When a user becomes disable or enable, a message warns everyone
|
|||
|
|
|||
|
IS_NOW_DISABLE <nickname>
|
|||
|
IS_NOW_ENABLE <nickname>
|
|||
|
|
|||
|
triggered on: /disable user
|
|||
|
sended to: everybody except the user who did it
|
|||
|
|
|||
|
3. Return Code
|
|||
|
3.1 Info
|
|||
|
300: USERLIST_ENABLE <nicknames> Ex: 300 Jean Dupont Alex Martin
|
|||
|
301: USERLIST_DISABLE <nicknames>
|
|||
|
302: HAS_JOIN <nckname>
|
|||
|
303: HAS_LEFT <nickname>
|
|||
|
304: NEW_MSG <nickname> <message>
|
|||
|
305: NAME_CHANGED <old> <new>305
|
|||
|
306: NEW_PM <from> <msg>
|
|||
|
307:ASKING_FOR_PM <nickname>
|
|||
|
308: PRIVATE_DISCU_ACCEPTED_FROM <NICKNAME>
|
|||
|
309: PRIVATE_DISCU_REFUSED_FROM <NICKNAME>
|
|||
|
310: IS_NOW_ENABLE <nickname>
|
|||
|
311:IS_NOW_DISABLE <nickname>
|
|||
|
312: HAS_ASKED_FILE <from> <filepath>
|
|||
|
313: CAN_SEND_FILE <nick> <ip> <port> <path>
|
|||
|
314: HAS_REJECT_FILE <nick> <path>
|
|||
|
|
|||
|
|
|||
|
3.2 Success
|
|||
|
200: SUCC_CHANNEL_JOINED
|
|||
|
201: SUCC_CHANNEL_QUIT
|
|||
|
202: SUCC_MESSAGE_SENDED
|
|||
|
203: SUCC_NICKNAME_CHANGED
|
|||
|
204:SUCC_VALID_NICKNAME
|
|||
|
205: SUCC_PM_SENDED
|
|||
|
206: SUCCESSFUL_ASKED_CONV
|
|||
|
207: SUCCESSFUL_ACCEPTED_CONV
|
|||
|
208: SUCCESSFUL_REFUSED_CONV
|
|||
|
209: SUCC_ENABLED
|
|||
|
210: SUCC_DISABLED
|
|||
|
211: SUCC_PMFILE
|
|||
|
212: SUCC_ACCEPTED_FILE <ip>
|
|||
|
213: SUCC_REFUSED_FILE
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
3.3 Error
|
|||
|
400 : ERR_NICKNAME_ALREADY_USED
|
|||
|
401 : ERR_NO_NICKNAME
|
|||
|
402: ERR_CONV_NOT_ALLOWED
|
|||
|
403: DEST_NOT_FOUND
|
|||
|
404: ERR_ALREADY_ASKED_FOR_PM
|
|||
|
405: ERR_NO_INVIT_TO_CONV_FOUND
|
|||
|
406: ERR_UNKNOWN_ACCEPTED_FILE
|
|||
|
407: COMMAND_NOT_FOUND
|
|||
|
408: ERR_INVALID_NICKNAME
|
|||
|
409 : ERR_INTERNAL_SERVER_ERROR
|
|||
|
410 : ERR_NOT_DISABLED
|
|||
|
411 : ERR_NOT_ENABLED
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|