-
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 ed eventuali problemi riscontrati e descrizione delle risoluzioni.
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 (con opzione deamon) 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'). Il file di configurazione verrà editato utilizzando invece il processo visualizzatore, il quale, quando finisce di scrivere il nuovo config invia SIGUSR1 al processo executer che così può essere avvisato dei cambi e quindi schedulare i job con le nuove preferenze
- sconti dell'implementazione sopra verranno concessi se si propone lo sviluppo di una GUI 'vera' utilizzando librerie grafiche come GTK, QT, ncurses
- Davide Grimaldi ~ solitaria
- Gabriele Costanzo ~ team A
Referenze
[1]: pagina 620, beginning linux programming 4 ed