chat
Class Monitor

java.lang.Object
  |
  +--chat.SocketUDPaffidabile
        |
        +--chat.Monitor

public class Monitor
extends SocketUDPaffidabile

Classe che realizza il monitor di output della chat; in questo contesto il termine "monitor" è da indendersi come "video", "area di visualizzazione".

Version:
1.0
Author:
Alessandro Gaspari

Field Summary
private static boolean ACCLUDI_FIRMA_DIGITALE
          Parametro di configurazione per usare o meno la crittografia.
private static boolean ADOTTA_CRITTOGRAFIA
          Parametro di configurazione per impiegare o meno la firma digitale.
private  java.security.PrivateKey c_privata
          La chiave crittografica privata dell'utente.
private  java.security.PublicKey c_pubblica
          La chiave crittografica pubblica dell'utente.
private  java.security.Key c_sessione
          La chiave segreta di sessione per IDEA.
private  java.security.SecureRandom entropia
          Un generatore di "casualità".
static java.lang.String FILE_DATABASE
          Nome del file ASCII contenente la rubrica delle conoscenze.
static java.lang.String FILE_SWAP
          Nome del file di scambio dei messaggi con Console.
private  xjava.security.KeyGenerator generatore_c
          Il generatore delle chiavi segrete di sessione per IDEA.
private  Crittografia idea
          Oggetto per applicare l'algoritmo crittografico IDEA ai dati.
private  Database interlocutori
          Archivio con i Contatto dell'attuale gruppo di discussione.
private  Firma md5rsa
          Oggetto per generare e verificare le firme digitali.
private  java.lang.String nickname
          L'identità da adottare durante la chat.
static int PORTA_DEFAULT
          Porta UDP di default in assenza di direttive in fase di costruzione.
private  Crittografia rsa
          Oggetto per applicare l'algoritmo crittografico RSA ai dati.
private  Database rubrica
          La rubrica con tutte le conoscenze.
private  int seq_num
          Numero di sequenza dei datagrammi UDP inviati.
private  java.io.BufferedReader swap
          Un wrapper attorno al file coi messaggi provenienti dalla Console.
private  java.util.Vector SYNinviati
          Lista degli utenti a cui sono stati iniviati uno o più datagrammi di tipo SYN.
private  Database SYNricevuti
          Archivio degli utenti che ci hanno inviato un SYN ed ai quali non abbiamo ancora inviato il corrispondente OK.
 
Fields inherited from class chat.SocketUDPaffidabile
cache, history, sock, TENTATIVI, TIMEOUT
 
Constructor Summary
(package private) Monitor()
          Costruttore che avvia il Monitor sulla porta UDP di default PORTA_DEFAULT.
(package private) Monitor(int porta)
          Costruttore che avvia il Monitor sulla porta UDP indicata.
 
Method Summary
(package private)  int agliInterlocutori(byte tipo, byte[] cosa)
          Metodo che invia il messaggio specificato a tutti gli utenti dell'attuale gruppo di discussione.
(package private)  void esegui()
          Main-loop del programma: legge il contenuto del file di scambio con la Console e processa il comando, quindi esamina anche il socket affidabile per verificare i Messaggio ricevuti.
protected  int estraiSeqNum(java.net.DatagramPacket d)
          Procedura che ricava il numero di sequenza dei datagrammi UDP appenda ricevuti via socket.
protected  int inserisciSeqNum(java.net.DatagramPacket d)
          Procedura che numera i datagrammi UDP prima di inviarli in rete; utilizza seq_num incrementandolo di una quantità casuale ogni volta, lo firma se la costante di classe ACCLUDI_FIRMA_DIGITALE vale true, infine lo cifra se ADOTTA_CRITTOGRAFIA == true.
static void main(java.lang.String[] args)
          L'entry-point del programma.
(package private)  Messaggio messaggioFromDatagram(java.net.DatagramPacket d)
          Metodo che estrae un Messaggio serializzato da un DatagramPacket.
(package private)  void messaggioToDatagram(Messaggio m, java.net.DatagramPacket d)
          Metodo che serializza un Messaggio riversandone il contenuto entro un DatagramPacket.
(package private)  void processaComando(java.lang.String cmd)
          Interpreta un comando letto dal file di scambio swap con la Console.
(package private)  void visualizzaInterlocutori()
          Funzione che visualizza sullo standard output i nomi degli interlocutori attuali.
 
Methods inherited from class chat.SocketUDPaffidabile
allaCache, chiudi, disponibili, flush, invia, invia, ricevi
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

PORTA_DEFAULT

public static final int PORTA_DEFAULT
Porta UDP di default in assenza di direttive in fase di costruzione.

FILE_SWAP

public static final java.lang.String FILE_SWAP
Nome del file di scambio dei messaggi con Console.
See Also:
Console

FILE_DATABASE

public static final java.lang.String FILE_DATABASE
Nome del file ASCII contenente la rubrica delle conoscenze.
See Also:
Database

ACCLUDI_FIRMA_DIGITALE

private static final boolean ACCLUDI_FIRMA_DIGITALE
Parametro di configurazione per usare o meno la crittografia.

ADOTTA_CRITTOGRAFIA

private static final boolean ADOTTA_CRITTOGRAFIA
Parametro di configurazione per impiegare o meno la firma digitale.

swap

private java.io.BufferedReader swap
Un wrapper attorno al file coi messaggi provenienti dalla Console.
See Also:
Console

rubrica

private Database rubrica
La rubrica con tutte le conoscenze.

nickname

private java.lang.String nickname
L'identità da adottare durante la chat.

c_pubblica

private java.security.PublicKey c_pubblica
La chiave crittografica pubblica dell'utente.

c_privata

private java.security.PrivateKey c_privata
La chiave crittografica privata dell'utente.

md5rsa

private Firma md5rsa
Oggetto per generare e verificare le firme digitali.

rsa

private Crittografia rsa
Oggetto per applicare l'algoritmo crittografico RSA ai dati.

generatore_c

private xjava.security.KeyGenerator generatore_c
Il generatore delle chiavi segrete di sessione per IDEA.

c_sessione

private java.security.Key c_sessione
La chiave segreta di sessione per IDEA.

idea

private Crittografia idea
Oggetto per applicare l'algoritmo crittografico IDEA ai dati.

SYNinviati

private java.util.Vector SYNinviati
Lista degli utenti a cui sono stati iniviati uno o più datagrammi di tipo SYN. Usato per decidere se accettare o meno un OK ricevuto.
See Also:
Protocollo.SYN, Protocollo.OK

SYNricevuti

private Database SYNricevuti
Archivio degli utenti che ci hanno inviato un SYN ed ai quali non abbiamo ancora inviato il corrispondente OK. Rappresenta la lista dei SYN in attesa di risposta.
See Also:
Protocollo.SYN, Protocollo.OK

interlocutori

private Database interlocutori
Archivio con i Contatto dell'attuale gruppo di discussione.

entropia

private java.security.SecureRandom entropia
Un generatore di "casualità".

seq_num

private int seq_num
Numero di sequenza dei datagrammi UDP inviati.
Constructor Detail

Monitor

Monitor()
  throws java.net.SocketException
Costruttore che avvia il Monitor sulla porta UDP di default PORTA_DEFAULT. In caso di differenti eccezioni termina il programma mediante System.exit(0).
Throws:
java.net.SocketException - se generata dal costruttore della super-classe.
See Also:
PORTA_DEFAULT, SocketUDPaffidabile, SocketUDPaffidabile.SocketUDPaffidabile(int)

Monitor

Monitor(int porta)
  throws java.net.SocketException
Costruttore che avvia il Monitor sulla porta UDP indicata. In caso di differenti eccezioni termina il programma mediante System.exit(0).
Parameters:
porta - la porta UDP da usare per il socket reliable.
Throws:
java.net.SocketException - se generata dal costruttore della super-classe.
See Also:
SocketUDPaffidabile, SocketUDPaffidabile.SocketUDPaffidabile(int)
Method Detail

inserisciSeqNum

protected int inserisciSeqNum(java.net.DatagramPacket d)
Procedura che numera i datagrammi UDP prima di inviarli in rete; utilizza seq_num incrementandolo di una quantità casuale ogni volta, lo firma se la costante di classe ACCLUDI_FIRMA_DIGITALE vale true, infine lo cifra se ADOTTA_CRITTOGRAFIA == true.
Overrides:
inserisciSeqNum in class SocketUDPaffidabile
Parameters:
d - il DatagramPacket da numerare.
Returns:
il sequence number aggiunto a d.
See Also:
seq_num, ACCLUDI_FIRMA_DIGITALE, ADOTTA_CRITTOGRAFIA, SocketUDPaffidabile.inserisciSeqNum(DatagramPacket)

estraiSeqNum

protected int estraiSeqNum(java.net.DatagramPacket d)
Procedura che ricava il numero di sequenza dei datagrammi UDP appenda ricevuti via socket. Decifra il DatagramPacket se la costante di classe ADOTTA_CRITTOGRAFIA vale true, scegliendo la chiave e l'algoritmo di decifratura sulla base del mittente del datagramma e sulla lista degli interlocutori.
Overrides:
estraiSeqNum in class SocketUDPaffidabile
Parameters:
d - il DatagramPacket da manipolare.
Returns:
il sequence number letto da d.
See Also:
ADOTTA_CRITTOGRAFIA, interlocutori, SocketUDPaffidabile.estraiSeqNum(DatagramPacket)

messaggioToDatagram

void messaggioToDatagram(Messaggio m,
                         java.net.DatagramPacket d)
Metodo che serializza un Messaggio riversandone il contenuto entro un DatagramPacket.
Parameters:
m - il messaggio da serializzare.
d - il datagramma UDP entro cui scrivere la versione serializzata di m.
See Also:
Messaggio

messaggioFromDatagram

Messaggio messaggioFromDatagram(java.net.DatagramPacket d)
Metodo che estrae un Messaggio serializzato da un DatagramPacket. Compie l'azione complementare di messaggioToDatagram(Messaggio, DatagramPacket).
Parameters:
d - il datagramma da cui leggere la versione serializzata di un Messaggio.
Returns:
il messaggio estratto da d, oppure null in caso di errore.
See Also:
messaggioToDatagram(Messaggio, DatagramPacket), Messaggio

esegui

void esegui()
Main-loop del programma: legge il contenuto del file di scambio con la Console e processa il comando, quindi esamina anche il socket affidabile per verificare i Messaggio ricevuti.
See Also:
swap, Console

processaComando

void processaComando(java.lang.String cmd)
               throws java.io.IOException
Interpreta un comando letto dal file di scambio swap con la Console. Non termina il programma perché non riconosce i comandi di uscita.
Parameters:
cmd - la linea letta da swap.
Throws:
java.io.IOException - causa le azioni che hanno a che vedere con il socket interno.
See Also:
Console

visualizzaInterlocutori

void visualizzaInterlocutori()
Funzione che visualizza sullo standard output i nomi degli interlocutori attuali.
See Also:
interlocutori

agliInterlocutori

int agliInterlocutori(byte tipo,
                      byte[] cosa)
                throws java.io.IOException
Metodo che invia il messaggio specificato a tutti gli utenti dell'attuale gruppo di discussione.
Parameters:
tipo - il "tipo" di Messaggio da inviare.
cosa - il testo da includere nel Messaggio.
Returns:
il numero di consegne confermate tramite ACK.
Throws:
se - generata inviando il/i datagramma/i in rete.
See Also:
Protocollo

main

public static void main(java.lang.String[] args)
L'entry-point del programma. Installa dinamicamente la libreria Cryptix ed avvia un'istanza di Monitor, assegnandole la porta UDP eventualmente specificata tramite la linea di comando.
Parameters:
args - gli argomenti della linea di comando.