Skip to content
AlessandroSpallina edited this page Jan 15, 2018 · 10 revisions

My First IRC Client

Realizzare un client IRC utilizzando socket TCP (SOCK_STREAM) [1] che implementa i seguenti comandi:

  • PONG: di tanto in tanto il server pinga il client che deve rispondere con questo comando, altrimenti la connessione cade
  • NICK: imposta il nickname univoco
  • JOIN: joina una stanza
  • PART: lasciare il canale
  • QUIT: per quittare IRC
  • TOPIC: settare o rimuovere un topic
  • MSG: inviare un messaggio ad una stanza o un utente
  • WHO
  • WHOIS
  • tutti quelli che vuoi 2

Si consiglia di prendere confidenza con il protocollo IRC utilizzando telnet.

Dopo avere implementato il client sviluppare un sistema che permetta all'utente di interagire con il protocollo (in maniera umana!) quindi un'interfaccia utente al server e ai canali. Un esempio di ciò (suddividisione per processi) può essere il processo Client che tramite shared memory (o un altro IPC) condivide struct (pacchetto messaggio) di testo e/o comandi con altri processi:che verranno eseguiti su shell locale, quindi un agevolazione potrebbe essere quella di 'flaggare' la struct e metterla in un array: il processo visualizzatore visualizza solo se il messaggio è flaggato come text ed elimina lo stesso; il processo executer esegue su shell i messaggi (comandi) flaggati come exec. Uno scenario di utilizzo di questo sistema è:

  • Un Client IRC fatto con le tue mani (client + visualizzatore)
  • Computing remoto, anche a più macchine (client + executore): in questo contesto immagino di eseguire il sw su N macchine che si connettono alla stanza e se ricevono (gestendo autenticazione, valutate anche i messaggi privati) un comando speciale (che prevederete nelle vostre implementazioni) tipo 'exec:' da un utente trusted accettano il job, eseguono il comando e reindirizzano l'output dello stesso indietro all'utente IRC chiamante.

potrebbe essere: il Client condivide una shared mem (o altro ipc)dove inserisce il risultato del par

con altri due processi il visualizer e l'executer in base se il messaggio è di tipo text o di tipo command viene letto e consumato dalla memoria condivisa visualizer: usato per input output text
executer: se nell'ipc è contenuto un messaggio di tipo command esegue il comando(o comunque da la possibilita di accettarlo prima di eseguirlo un agevolazione potrebbe essere quella di 'flaggare' la struct

  • Visualizzatore: appunto l'interfaccia utente
  • Executer: un processo che si presta ad eseguire sulla shell locale il contenuto del messaggio ricevuto; immagino che il processo client mi allochi una s

Contestualizzazione

Voglio un c

Funzioni da implementare

  • parse_msg: parsare i messaggi che arrivano nella stanza per riconoscere i seguenti comandi:
    • text:

Referenze

[1]: pagina 620, beginning linux programming 4 ed

Clone this wiki locally