Protocollo di comunicazione C6STP ================================= versione: 0.3.0 data: 2003-08-24 autori: Rodolfo Giometti Andrea Censi manutentore: Rodolfo Giometti Todo ==== Le funzioni di ricerca dei nick. Il metodo per lo scambio file. Formato dei messaggi ==================== Ogni comando è del tipo: [parameters] \n Se nel campo vanno inseriti dei caratteri questi saranno codificati con la sequenza `\n'. Le risposte sono del tipo: \n Il formato di è di un numero a 3 cifre che descrive univocamente il messaggio mentre il campo è solo una descrizione testuale dello stesso aggiunta per rendere comprensibile il messaggio stesso. Per il campo si usa la seguente codifica: Prima cifra: 1 - messaggio puramente descrittivo (nessuna informazione) 2 - risposta affermativa (nessun errore) 3 - risposta negativa (errore) 4 - messaggi di errore di sistema 6 - informazioni su un netfriend 7 - messaggi ricevuti 9 - fine lista (per risposte su linee multiple) Seconda e terza cifra: specificazione del messaggio. Elenco dei comandi e messaggi di risposta ========================================= Tutti i comandi, se mal impostati, generano l'errore: 400 unknown or invalid command Connessione e login =================== connect ------- Sintassi: connect Effetto: Si connette al server remoto specificato. Risposte: 200 ok, connection to : done 301 unknown or invalid host 302 invalid port 303 connection refused 304 connection timeout 305 you are already connected login ----- Sintassi: login Effetto: Effettua il login con il nick e la password specificati. Risposte: 201 ok, you are logged in as 210 310 bad user 311 bad password 312 already logged in 313 must connect before 314 cannot connect the chat server Nota: Il messaggio di errore 314 è fatale e provoca la terminazione di c6term. logout ------ Sintassi: logout Effetto: Effettua il logout e si sconnette. Risposte: 206 ok, connection correctly closed 306 you are not logged in status ------ Sintassi: status [available | netfriends | busy] Default: available Effetto: Imposta lo stato dell'utente collegato. Risposte: 202 ok, status selected 306 you are not logged in 319 invalid status Netfriend e chat singola ======================== add --- Sintassi: add [ ... ] Effetto: Richiede di aggiungere alla lista dei netfriend. Il server remoto ci informerà dei cambiamenti di stato. Risposte: 203 ok, netfriend added 306 you are not logged in 320 invalid nick Note: Il messaggio 203 viene ripetuto per ogni nick specificato. remove ------ Sintassi: remove [ ... ] Effetto: Richiede di rimuovere alla lista dei netfriend. Risposte: 204 ok, netfriend removed 306 you are not logged in 320 invalid nick Note: Il messaggio 204 viene ripetuto per ogni nick specificato. nick ---- Sintassi: nick Effetto: Specifica il nick a cui deve essere inviato il prossimo messaggio. Risposte: 205 ok, selected for message receiving 306 you are not logged in 320 invalid nick tone ---- Sintassi: tone [low | normal | high] Default: normal Effetto: Imposta il «tono di voce» del messaggio da inviare Risposte: 208 ok, tone selected 321 invalid tone message ------- Sintassi: message Effetto: Invia il messaggio all'utente o alla stanza specificati dall'ultimo comando o . Note: Gli eventuali caratteri in vanno indicati con la sequenza `\n'. Risposte: 207 ok, message sent 306 you are not logged in 322 must specify a receiver name (nick/room) Chat multiple (stanze) ====================== list ---- Sintassi: list Effetto: Chiede la lista delle stanze. Risposte: 140 rooms list: 241 name: 242 users: 243 type: (users | c6) (public | private) 241 name: 242 users: 243 type: (users | c6] [public | private) ... 941 name: 942 users: 943 type: (users | c6) (public | private) 306 you are not logged in 340 Errore (FIXME) info ---- Sintassi: info Effetto: Richiede le informazioni su una stanza. Risposte: 150 room info are: 251 name: 252 type: (users | c6) (public | private) 253 users: 254 creator: 255 topic: 306 you are not logged in create ------ Sintassi: create Effetto: Crea una nuova stanza. Risposte: 220 ok, room created 306 you are not logged in 340 room already exists join ---- Sintassi: join Effetto: Entra in una stanza e richiede la lista dei presenti. Risposte: 221 ok, you are in 160 In this room there are: 261 261 ... 961 306 you are not logged in 331 no such room 335 room is full exit ---- Sintassi: exit Effetto: Esce da una stanza. Risposte: 222 ok, you left 306 you are not logged in 331 no such room 332 you never entered room ---- Sintassi: room Effetto: Specifica il mome della stanza a cui deve essere inviato il prossimo messaggio. Risposte: 223 ok, room selected 306 you are not logged in 323 no such room Altri comandi ============= version ------- Sintassi: version Effetto: Ritorna la versione del protocollo C6STP implementato da un particolare server. Risposte: 280 C6STP version Nota: Il parametro versione è sempre della forma «x.y.z». Messaggi «spontanei» di errore ============================== 300 generic communication error () ----------------------------------------- Spiegazione: Si è verificato un errore di comunicazione con il server remoto e la connessione è stata persa, occorre quindi rieffettuare la procedura di connessine e login. 308 unknown packet received --------------------------- 309 EOF sent from server ------------------------ Spiegazione: Il server remoto ci ha inviato un segnale di EOF (End-Of-File) e la connessione è stata persa, occorre quindi rieffettuare la procedura di connessine e login. Nota: Questo errore è stato riscontrato ogni qual volta si invia un messaggio ad un nick inesistente. 400 unknown or invalid command ------------------------------ Spiegazione: Il comando appena inserito o è sbagliato o non è conosciuto. Si veda l'«Elenco dei comandi e messaggi di risposta». 401 cannot read commands anymore -------------------------------- 402 cannot get memory --------------------- Spiegazione: Questo messaggio notifica la mancata allocazione di memoria da parte di c6term. Questo è un errore fatale che provoca la terminazione di c6term in quanto non è più garantita la corretta esecuzione del programma. 407 invalid protocol -------------------- Spiegazione: Questo messaggio notifica un errore di comunicazione tra c6term e il server remoto a causa di un errore nel protocollo binario. Questo è un errore fatale che provoca la terminazione di c6term in quanto non è più garantita la correttezza del protocollo di comunicazione. Nota: Questo errore, tra l'altro, si verifica ogni qual volta si invia un pacchetto binario non valido al server remoto. 408 server maintenance ---------------------- Spiegazione: Il server remoto è in manutenzione e quindi il servizio è temporaneamente disattivato. Questo messaggio forza la terminazione di c6term senza errori. Nota: In questo caso si consiglia di riprovare la connessione più tardi quando la manutenzione sia terminata. 409 unknown command () -------------------------- Spiegazione: Il server remoto ci ha inviato un messaggio di cui non si conosce il significato. Questo è un errore fatale che provoca la terminazione di c6term in quanto non possiamo sapere cosa il server remoto ci vuole comunicare. 410 cannot send packet ---------------------- Spiegazione: Impossibile mandare messaggi al server remoto. Questo è un errore fatale che provoca la terminazione di c6term in quanto non possiamo sapere cosa è successo al server remoto. Messaggi «spontanei» di informazione sui netfriend ================================================== 101 add request has been received by server ------------------------------------------- 601 is online -------------------- 602 is offline --------------------- 603 enters ------------------------ 604 exits ----------------------- Messaggi «spontanei» sui messaggi ricevuti ========================================== 100 new message: ---------------- 700 ---------- 701 in ------------- 702 with tone ----------------------------------- 703 says: ------------------- Esempi ====== Per mandare messaggi ad un nick si possono usare le seguenti sequenze di comandi equivalenti. Prima sequenza: nick zaigor tone normal message primo essaggio di prova nick zaigor tone normal message secondo essaggio di prova... Seconda sequenza: nick zaigor tone normal message primo essaggio di prova message secondo essaggio di prova... Terza sequenza: nick zaigor message primo essaggio di prova message secondo essaggio di prova... Per mandare messaggi ad una stanza si possono usare le seguenti sequenze di comandi equivalenti. Prima sequenza: room openc6 tone normal message primo essaggio di prova nick openc6 tone normal message secondo essaggio di prova... Seconda sequenza: room openc6 tone normal message primo essaggio di prova message secondo essaggio di prova... Terza sequenza: room openc6 message primo essaggio di prova message secondo essaggio di prova... Un messaggio ricevuto da un netfriend è espresso da una delle due sequenze equivalenti: Prima sequenza: 100 new message: 700 netfriend zaigor 702 with normal tone 703 says: messaggio di prova Seconda sequenza: 100 new message: 700 netfriend zaigor 703 says: messaggio di prova mentre un messaggio ricevuto da un netfriend che si trova in una stanza è espresso dauna delle due sequenze equivalenti: Prima sequenza: 100 new message: 700 netfriend zaigor 701 in room openc6 702 with normal tone 703 says: messaggio di prova Seconda sequenza: 100 new message: 700 netfriend zaigor 701 in room openc6 703 says: messaggio di prova