예제 #1
0
        /*
         * 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();
        }
예제 #2
0
        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;
        }
예제 #3
0
        /// <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);
        }