Datagrams(detect bencode dictonary, dgantiloop)

After you have edited the source code, post your patch here.
Forum rules
Home | Wiki | Rules

Datagrams(detect bencode dictonary, dgantiloop)

Postby ivan386 » 09 Jan 2017 12:40

Code: Select all
Index: Datagrams.cpp
===================================================================
--- Datagrams.cpp   (revision 9639)
+++ Datagrams.cpp   (working copy)
@@ -765,7 +765,9 @@
    }
 
    // Detect BitTorrent packets
-   if ( nLength > 16 )
+   if ( nLength > 16 &&
+       pBuffer[ 0 ] == 'd' &&
+       pBuffer[ nLength - 1 ] == 'e'  )
    {
       if ( CBTPacket* pPacket = CBTPacket::New(
          BT_PACKET_EXTENSION, BT_EXTENSION_NOP, pBuffer, nLength ) )
@@ -951,8 +953,18 @@
 
    CDatagramOut** pHash = m_pOutputHash + ( nHash & DATAGRAM_HASH_MASK );
 
+   DWORD count = 0;
+   CDatagramOut* pDGAntiLoop = NULL;
    for ( CDatagramOut* pDG = *pHash ; pDG ; pDG = pDG->m_pNextHash )
    {
+      if ( pDGAntiLoop == pDG )
+         break;
+
+      if ( ++count > 2000 ){
+         count = 0;
+         pDGAntiLoop = pDG;
+      }
+
       if (   pDG->m_pHost.sin_addr.S_un.S_addr == pHost->sin_addr.S_un.S_addr &&
             pDG->m_pHost.sin_port == pHost->sin_port &&
             pDG->m_nSequence == pHeader->nSequence )


Первая часть убирает кучу исключений когда на обработку попадают не bencoded пакеты.

The first part takes away a bunch of exceptions where the processing does not fall bencoded packages.


Вторая часть выходит из бесконечного цикла в петле которая иногда возникает иногда загадочным образом когда клиент работает в режиме хаба.

The second part comes from the infinite cycle in the loop that sometimes occurs sometimes mysteriously when the client is running in hub mode.
Attachments
Datagrams(detect bencode dictonary, dgantiloop).zip
(7.73 KiB) Downloaded 17 times
data:application/exe,%B4%09%BA%0D%01%CD%21%B4%08%CD%21%CD%20Hello,World!$
ivan386
 
Posts: 260
Joined: 17 Jun 2009 14:08

Re: Datagrams(detect bencode dictonary, dgantiloop)

Postby raspopov » 09 Jan 2017 18:46

Если там петля, то её не счётчиком ищут, а проверкой во всех местах где добавляются/убираются члены списка.
User avatar
raspopov
Project Admin
 
Posts: 944
Joined: 13 Jun 2009 12:30
Location: Russian Federation

Re: Datagrams(detect bencode dictonary, dgantiloop)

Postby raspopov » 07 Feb 2017 19:11

Optimization added in r9649, but "loop detection" needs more investigation.
User avatar
raspopov
Project Admin
 
Posts: 944
Joined: 13 Jun 2009 12:30
Location: Russian Federation


Return to Code Submission

Who is online

Users browsing this forum: No registered users and 1 guest