Beispiel #1
0
        int init(int size, int mss, AddressFamily version)
        {
            QEntry tempq = new QEntry();

            Unit[]   tempu = new Unit[size];
            byte[][] tempb = new byte[size][];

            for (int i = 0; i < size; ++i)
            {
                tempb[i]         = new byte[mss];
                tempu[i]         = new Unit();
                tempu[i].m_iFlag = 0;

                tempu[i].m_Packet.SetDataFromBytes(tempb[i]);
            }
            tempq.m_pUnit   = tempu;
            tempq.m_pBuffer = tempb;
            tempq.m_iSize   = size;

            m_iSize      = size;
            m_iMSS       = mss;
            m_iIPversion = version;

            mEntries.Add(tempq);

            return(0);
        }
 public void ResistanceWorkOnNextListWaitADD(
     QEntry Thiswire)
 {
     if (UesAlternativeResistanceWorkOnNextList)
     {
         _ResistanceWorkOnNextListWait.Add(Thiswire);
     }
     else
     {
         ResistanceWorkOnNextListWait.Add(Thiswire);
     }
 }
Beispiel #3
0
        int increase()
        {
            // adjust/correct m_iCount
            int real_count = 0;

            for (int q = 0; q < mEntries.Count; ++q)
            {
                Unit[] units = mEntries[q].m_pUnit;
                for (int u = mEntries[q].m_iSize; u < units.Length; ++u)
                {
                    if (units[u].m_iFlag != 0)
                    {
                        ++real_count;
                    }
                }
            }
            m_iCount = real_count;
            if ((double)m_iCount / m_iSize < 0.9)
            {
                return(-1);
            }

            // all queues have the same size
            int size = mEntries[0].m_iSize;

            QEntry tempq = new QEntry();

            Unit[]   tempu = new Unit[size];
            byte[][] tempb = new byte[size][];

            for (int i = 0; i < size; ++i)
            {
                tempb[i]         = new byte[m_iMSS];
                tempu[i].m_iFlag = 0;
                tempu[i].m_Packet.SetDataFromBytes(tempb[i]);
            }
            tempq.m_pUnit   = tempu;
            tempq.m_pBuffer = tempb;
            tempq.m_iSize   = size;

            mEntries.Add(tempq);

            m_iSize += size;

            return(0);
        }
Beispiel #4
0
        Unit getNextAvailUnit()
        {
            if (m_iCount * 10 > m_iSize * 9)
            {
                increase();
            }

            if (m_iCount >= m_iSize)
            {
                return(null);
            }

            QEntry entrance = mEntries[m_iCurrEntry];

            //do
            //{
            //    QEntry currentEntry = mEntries[m_iCurrEntry];
            //    Unit sentinel = currentEntry.m_pUnit[currentEntry.m_iSize - 1];
            //    for (CUnit* sentinel = m_pCurrQueue.m_pUnit + m_pCurrQueue.m_iSize - 1; m_pAvailUnit != sentinel; ++m_pAvailUnit)
            //        if (m_pAvailUnit.m_iFlag == 0)
            //            return m_pAvailUnit;



            //    if (m_pCurrQueue.m_pUnit.m_iFlag == 0)
            //    {
            //        m_pAvailUnit = m_pCurrQueue.m_pUnit;
            //        return m_pAvailUnit;
            //    }

            //    m_pCurrQueue = m_pCurrQueue.m_pNext;
            //    m_pAvailUnit = m_pCurrQueue.m_pUnit;
            //} while (m_pCurrQueue != entrance);

            increase();

            return(null);
        }