Exemplo n.º 1
0
        public SackChunk(CType type, byte flags, int length, ByteBuffer pkt)
            : base(type, flags, length, pkt)
        {
            _cumuTSNAck = _body.GetUInt();
            _arWin      = _body.GetUInt();
            int ngaps  = _body.GetUShort();
            int nDTSNs = _body.GetUShort();

            _gaps          = new GapBlock[ngaps];
            _duplicateTSNs = new uint[nDTSNs];
            for (int i = 0; i < ngaps; i++)
            {
                _gaps[i] = new GapBlock(_body);
            }
            for (int i = 0; i < nDTSNs; i++)
            {
                _duplicateTSNs[i] = _body.GetUInt();
            }
        }
Exemplo n.º 2
0
        public void setGaps(List <uint> seenTsns)
        {
            long            cuTsn      = _cumuTSNAck;
            List <GapBlock> gaplist    = new List <GapBlock>();
            GapBlock        currentGap = null;
            ushort          prevoff    = (ushort)0;

            foreach (long t in seenTsns)
            {
                ushort offs = (ushort)(t - cuTsn);
                if (currentGap == null)
                {
                    currentGap = new GapBlock(offs);
                    currentGap.setEnd(offs);
                    gaplist.Add(currentGap);
                }
                else
                {
                    if (offs == prevoff + 1)
                    {
                        currentGap.setEnd(offs);
                    }
                    else
                    {
                        currentGap = new GapBlock(offs);
                        currentGap.setEnd(offs);
                        gaplist.Add(currentGap);
                    }
                }

                prevoff = offs;
            }

            _gaps = new GapBlock[gaplist.Count];
            int i = 0;

            foreach (GapBlock g in gaplist)
            {
                _gaps[i++] = g;
            }
        }