-
Notifications
You must be signed in to change notification settings - Fork 0
Home
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 (comandi che verranno eseguiti su shell locale), quindi un agevolazione potrebbe essere quella di 'flaggare' la struct e metterla in un array: il processo visualizzatore, appunto, 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.
Dovrà essere consegnato il codice costruendo header (.h) e implementazioni (.c) pubblicando le varie versioni di lavoro sul proprio profilo github.
Intenzione di questo lab è dimostrare di avere piena consapevolezza degli strumenti appresi durante il corso di OS cercando l'ottimizzazione e il ragionamento, dovrà essere consegnato anche un readme che descrive feature dei sistemi di processi sviluppati
Sviluppare versione base:
- semplice client irc che con ipc comunica con visualizzatore (anche spartano) e una prima versione di executer
Sviluppare versione avanzata:
- come sopra, ma con executer che prevede un file di configurazione, che leggerà all'avvio, nel quale sono schedulati su base temporale dei task (come ad esempio 'ogni giorno inviami il tuo ip'), quando questi vengono eseguiti
Referenze
[1]: pagina 620, beginning linux programming 4 ed