Newsgroup: it.comp.programmare
Titolo: Tunneling

Ciao,
sono una ragazza alle prime armi con C questo linguaggio un pò difficilotto.
Non riesco a capire come creare un protocollo di comunicazione basato su UDP
che realizzi il "Tunneling" di connessionni tra due gruppi di Hosts. Gli
Host, Prefissati, sono suddivisi in due gruppi distinti. Per ogni gruppo
esiste un host master che mette in comunicazione gli host del gruppo con
quelli dell'altro gruppo, passando attraverso il relativo master.
ad esempio:
Host A <--------> Master
A<---------------------------Tunneling--------------------------> Master B
<---------> Host B
Le connessioni hanno tutte un tasso di errore del 70%
In poche parole devo creare un piccolo applicativo in C su piattaforma Linux
per lo scambio di n messaggi o un file di testo. Chiedo aiuto per risolvere
questo rompicapo che da 2 mesi e mezzo mi tortura.
Grazie di Tutto
Giusi Marchese

 Le connessioni hanno tutte un tasso di errore del 70%
Provato con connessioni tcp?
Ah, se  vuoi qualcosa gia` pronto  puoi usare ssh per  creare dei tunnel
criptati.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
ATTENZIONE: il mio indirizzo email e` cambiato, quello vecchio verra` 
disabilitato a breve.
"Fare l'amore con dieci donne e` fantastico, soprattutto perche` ti
 presentano un sacco di amiche." -- Fabio Di Iorio

quelli dell'altro gruppo, passando attraverso il relativo master.
In pratica, i due masters si parlano scambiandosi messaggi in UDP. Inoltre
i clients parlano ai masters usando messaggi pure in UDP.
Il protocollo potrebbe essere (versione rozza)
typedef struct
{
	int source;
	int destination;
	int id_conversazione;
	int id_sequenza;
	int totale;
	unsigned char messaggio[256];
};
Quindi per inviare un messaggio di 1 Kb dall'host 1 all'host 2, tu mandi
quattro pacchetti UDP:
	{ 1, 2, 1, 0, 4, "...." }
	{ 1, 2, 1, 1, 4, "...." }
	{ 1, 2, 1, 2, 4, "...." }
	{ 1, 2, 1, 3, 4, "...." }
L'host, quando riceve un messaggio:
	se id_sequenza = 0 (primo pacchetto), alloca spazio per "totale"
	pacchetti e lo marca come appartenente ad "id_conversazione" con
	"source";
	se id_sequenza != 0, cerca nell'elenco conversazioni se c'e' una
	conversazione con "source";
		se la trova, mette il pacchetto nella posizione giusta;
		se non lo trova, lo alloca (come per seq=0).
Periodicamente, potrebbero essere scansionate tutte le conversazioni, e,
quando una e' completa, la gestisce (per es. stampando a video il testo)
Ma, se l'host e' il master, prende il contenuto dei vari messaggi, mette
tutto assieme, e ottiene UN NUOVO MESSAGGIO:
	{ x, MasterA, 1, 0, 1, "{ x, y, 1, 0, 1, "Ciao Y, sono X" }" }
...qui x manda ad y un messaggio passando per MasterA.
MasterA guarda chi e' il master di y (di solito, MasterB), e gli invia i
pacchetti, SENZA TOCCARE IL MESSAGGIO, e inviando un mittente FALSO, non
cioe' se stesso (MasterA) ma il mittente originale (x):
	{ x, MasterB, 1, 0, 1, "{ x, y, ... }" }
MasterB riceve il messaggio, estrae il pacchetto interno, vede che dest,
cioe' y, fa parte del suo gruppo, e gli manda il pacchetto, iniettandolo
nella rete locale di MasterB, che NON contiene x:
	{ x, y, 1, 0, 1, "Ciao Y, sono X" }
Leonardo
-- 
".signature": bad command or file name