/* * Construction et envoie d'une trame de données ou d'une trame ACK ou NAK */ private void _envoyerTrame(TypeTrame typeTrame, uint noTrame, uint noTrameAttendue, Paquet[] tampon) { Trame s = new Trame(); /* variable scratch */ /* Préparer la trame */ s.Type = typeTrame; if (typeTrame == TypeTrame.data) { s.Info = tampon[noTrame % Constants.NB_BUFS]; } s.NoSequence = noTrame; s.ACK = (noTrameAttendue + Constants.MAX_SEQ) % (Constants.MAX_SEQ + 1); if (typeTrame == TypeTrame.nak) { noNAK = false; /* Un seul NAK par trame svp */ } /* Transmission de la trame */ _versCouchePhysique(s); if (typeTrame == TypeTrame.data) { /* Armement du Timer */ this.m_chrono.PartirChrono(noTrame); } this.m_ackTimer.StopACKTimer(); }
public Trame(byte noSeq, byte typeTrame, byte[] data) { /*New constructor to build a trame from its binrep coming form physical layer*/ _taille = Constants.N; NoSequence = Convert.ToUInt32(noSeq); TypeTrame ty = (TypeTrame)Convert.ToUInt32(typeTrame); Type = ty; Paquet pq = new Paquet(); pq.Buffer = data; Info = pq; }
/// <summary> /// /// </summary> /// <param name="typeTrame"></param> /// <param name="noTrame"></param>/ /// <param name="noTrameAttendue"></param> /// <param name="tampon"></param> /* * Construction et envoie d'une trame de données ou d'une trame ACK ou NAK */ private void _envoyerTrame(TypeTrame typeTrame, uint noTrame, uint noTrameAttendue, Paquet[] tampon) { /*Preparation de la trame a envoyer*/ Trame s = new Trame(); /* variable scratch */ /* Préparer la trame */ s.Type = typeTrame; if (typeTrame == TypeTrame.data) { s.Info = tampon[noTrame % Constants.NB_BUFS]; } s.NoSequence = noTrame; //This yeild s.ACK = 7. Why ACK==7? //Should ACK be carried with the trame? I would rather keep track of trames //ACKed and not ACKed in LLC, not in the trame itself? s.ACK = (noTrameAttendue + Constants.MAX_SEQ) % (Constants.MAX_SEQ + 1); if (typeTrame == TypeTrame.nak) { noNAK = false; /* Un seul NAK par trame svp */ } /* Transmission de la trame */ _versCouchePhysique(s); if (typeTrame == TypeTrame.data) { /* Armement du Timer */ this.m_chrono.PartirChrono(noTrame); } this.m_ackTimer.StopACKTimer(); //Logging string log_str = "_envoyerTrame from Thread.Name: " + Thread.CurrentThread.Name + " for noTrame: " + s.ToString(); Logging.log(TypeConsolePrint.SendingPath, log_str); }