Changeset 6956


Ignore:
Timestamp:
Oct 25, 2008, 3:08:29 PM (13 years ago)
Author:
charles
Message:

Added clients: BitTorrent? Pro, LeechCraft?, QVOD, BitWombat?, OmegaTorrent?, BT Next Evolution

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/clients.c

    r6822 r6956  
    44 * This file is licensed by the GPL version 2.  Works owned by the
    55 * Transmission project are granted a special exemption to clause 2(b)
    6  * so that the bulk of its code can remain under the MIT license.
     6 * so that the bulk of its code can remain under the MIT license. 
    77 * This exemption does not extend to derived works not owned by
    88 * the Transmission project.
     
    2727charint( char ch )
    2828{
    29     if( '0' <= ch && ch <= '9' ) return ch - '0';
     29    if( '0' <= ch && ch <= '9' ) return      ch - '0';
    3030    if( 'A' <= ch && ch <= 'Z' ) return 10 + ch - 'A';
    3131    if( 'a' <= ch && ch <= 'z' ) return 36 + ch - 'a';
     
    3333}
    3434
     35static int
     36getShadowInt( char ch, int * setme )
     37{
     38    const char * str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-";
     39    const char * pch = strchr( str, ch );
     40    if( !pch )
     41    return 0;
     42        *setme = pch - str;
     43    return 1;
     44}
     45
    3546static int
    36 getShadowInt( char ch, int * setme )
    37 {
    38     const char * str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-";
    39     const char * pch = strchr( str, ch );
    40     if( !pch )
    41         return 0;
    42     *setme = pch - str;
    43     return 1;
    44 }
    45 
    46 static int
    47 strint( const void * pch,
    48         int          span )
     47strint( const void * pch, int span )
    4948{
    5049    char tmp[64];
    51 
    5250    memcpy( tmp, pch, span );
    5351    tmp[span] = '\0';
     
    6058    switch( ch )
    6159    {
    62         case 'b':
    63         case 'B':
    64             return " (Beta)";
    65 
    66         case 'd':
    67             return " (Debug)";
    68 
    69         case 'x':
    70         case 'X':
    71         case 'Z':
    72             return " (Dev)";
    73 
    74         default:
    75             return "";
     60        case 'b': case 'B': return " (Beta)";
     61        case 'd': return " (Debug)";
     62        case 'x': case 'X': case 'Z': return " (Dev)";
     63        default: return "";
    7664    }
    7765}
    7866
    7967static void
    80 three_digits( char *          buf,
    81               size_t          buflen,
    82               const char *    name,
    83               const uint8_t * digits )
     68three_digits( char * buf, size_t buflen, const char * name, const uint8_t * digits )
    8469{
    8570    tr_snprintf( buf, buflen, "%s %d.%d.%d", name,
    86                 charint( digits[0] ),
    87                 charint( digits[1] ),
    88                 charint( digits[2] ) );
    89 }
    90 
     71                 charint( digits[0] ),
     72                 charint( digits[1] ),
     73                 charint( digits[2] ) );
     74}
    9175static void
    92 four_digits( char *          buf,
    93              size_t          buflen,
    94              const char *    name,
    95              const uint8_t * digits )
     76four_digits( char * buf, size_t buflen, const char * name, const uint8_t * digits )
    9677{
    9778    tr_snprintf( buf, buflen, "%s %d.%d.%d.%d", name,
    98                 charint( digits[0] ),
    99                 charint( digits[1] ),
    100                 charint( digits[2] ),
    101                 charint( digits[3] ) );
    102 }
    103 
     79                 charint( digits[0] ),
     80                 charint( digits[1] ),
     81                 charint( digits[2] ),
     82                 charint( digits[3] ) );
     83}
    10484static void
    105 two_major_two_minor( char *          buf,
    106                      size_t          buflen,
    107                      const char *    name,
    108                      const uint8_t * digits )
     85two_major_two_minor( char * buf, size_t buflen, const char * name, const uint8_t * digits )
    10986{
    11087    tr_snprintf( buf, buflen, "%s %d.%02d", name,
    111                 strint( digits, 2 ),
    112                 strint( digits + 2, 2 ) );
    113 }
    114 
     88                 strint( digits, 2 ),
     89                 strint( digits+2, 2 ) );
     90}
    11591static void
    116 no_version( char *       buf,
    117             size_t       buflen,
    118             const char * name )
     92no_version( char * buf, size_t buflen, const char * name )
    11993{
    12094    tr_strlcpy( buf, name, buflen );
     
    12296
    12397static void
    124 mainline_style( char *          buf,
    125                 size_t          buflen,
    126                 const char *    name,
    127                 const uint8_t * id )
     98mainline_style( char * buf, size_t buflen, const char * name, const uint8_t * id )
    12899{
    129100    if( id[4] == '-' && id[6] == '-' )
    130101        tr_snprintf( buf, buflen, "%s %c.%c.%c", name, id[1], id[3], id[5] );
    131102    else if( id[5] == '-' )
    132         tr_snprintf( buf, buflen, "%s %c.%c%c.%c", name, id[1], id[3],
    133                      id[4],
    134                      id[6] );
     103        tr_snprintf( buf, buflen, "%s %c.%c%c.%c", name, id[1], id[3], id[4], id[6] );
    135104}
    136105
     
    142111     *   Mx-y-z--
    143112     *   Mx-yy-z-
    144      */
    145     return peer_id[2] == '-'
    146            && peer_id[7] == '-'
    147            && ( peer_id[4] == '-' || peer_id[5] == '-' );
     113     */ 
     114    return peer_id[2]=='-'
     115        && peer_id[7]=='-'
     116        && ( peer_id[4]=='-' || peer_id[5]=='-' );
    148117}
    149118
    150119static int
    151 decodeBitCometClient( char *          buf,
    152                       size_t          buflen,
    153                       const uint8_t * id )
    154 {
    155     int          is_bitlord;
    156     int          major, minor;
     120decodeBitCometClient( char * buf, size_t buflen, const uint8_t * id )
     121{
     122    int is_bitlord;
     123    int major, minor;
    157124    const char * name;
    158125    const char * mod = NULL;
    159126
    160127    if( !memcmp( id, "exbc", 4 ) ) mod = "";
    161     else if( !memcmp( id, "FUTB", 4 ) ) mod = "(Solidox Mod) ";
    162     else if( !memcmp( id, "xUTB", 4 ) ) mod = "(Mod 2) ";
     128    else if( !memcmp( id, "FUTB", 4 )) mod = "(Solidox Mod) ";
     129    else if( !memcmp( id, "xUTB", 4 )) mod = "(Mod 2) ";
    163130    else return FALSE;
    164131
    165     is_bitlord = !memcmp( id + 6, "LORD", 4 );
    166     name = ( is_bitlord ) ? "BitLord " : "BitComet ";
     132    is_bitlord = !memcmp( id+6, "LORD", 4 );
     133    name = (is_bitlord) ? "BitLord " : "BitComet ";
    167134    major = id[4];
    168135    minor = id[5];
     
    172139     * Bitcoment 1.0 and onwards are of the form x.y.
    173140     */
    174     if( is_bitlord && major > 0 )
     141    if( is_bitlord && major>0 )
    175142        tr_snprintf( buf, buflen, "%s%s%d.%d", name, mod, major, minor );
    176143    else
     
    181148
    182149static int
    183 decodeBitSpiritClient( char *          buf,
    184                        size_t          buflen,
    185                        const uint8_t * id )
    186 {
    187     const int isBS = !memcmp( id + 2, "BS", 2 );
    188 
     150decodeBitSpiritClient( char * buf, size_t buflen, const uint8_t * id )
     151{
     152    const int isBS = !memcmp( id+2, "BS", 2 );
    189153    if( isBS )
    190154    {
     
    196160
    197161void
    198 tr_clientForId( char *       buf,
    199                 size_t       buflen,
    200                 const void * id_in )
     162tr_clientForId( char * buf, size_t buflen, const void * id_in )
    201163{
    202164    const uint8_t * id = id_in;
     
    210172    if( id[0] == '-' && id[7] == '-' )
    211173    {
    212         if( !memcmp( id + 1, "UT", 2 ) )
     174        if( !memcmp( id+1, "UT", 2 ) )
    213175        {
    214176            tr_snprintf( buf, buflen, "\xc2\xb5Torrent %d.%d.%d%s",
    215                         strint( id + 3,
    216                                 1 ),
    217                         strint( id + 4, 1 ), strint( id + 5,
    218                                                      1 ),
    219                         getMnemonicEnd( id[6] ) );
    220         }
    221         else if( !memcmp( id + 1, "TR", 2 ) )
    222         {
    223             if( !memcmp( id + 3, "000", 3 ) ) /* very old client style: -TR0006-
    224                                                 is 0.6 */
     177                         strint(id+3,1), strint(id+4,1), strint(id+5,1), getMnemonicEnd(id[6]) );
     178        }
     179
     180        else if( !memcmp( id+1, "TR", 2 ) )
     181        {
     182            if( !memcmp( id+3, "000", 3 ) ) /* very old client style: -TR0006- is 0.6 */
    225183                tr_snprintf( buf, buflen, "Transmission 0.%c", id[6] );
    226             else if( !memcmp( id + 3, "00", 2 ) ) /* previous client style:
    227                                                     -TR0072- is 0.72 */
    228                 tr_snprintf( buf, buflen, "Transmission 0.%02d",
    229                             strint( id + 5, 2 ) );
     184            else if( !memcmp( id+3, "00", 2) ) /* previous client style: -TR0072- is 0.72 */
     185                tr_snprintf( buf, buflen, "Transmission 0.%02d", strint(id+5,2) );
    230186            else /* current client style: -TR111Z- is 1.11+ */
    231                 tr_snprintf( buf, buflen, "Transmission %d.%02d%s",
    232                              strint( id + 3, 1 ), strint( id + 4, 2 ),
    233                              id[6] == 'Z' || id[6] == 'X' ? "+" : "" );
    234         }
    235         else if( !memcmp( id + 1, "AZ", 2 ) )
    236         {
    237             if( id[3] > '3' || ( id[3] == '3' && id[4] >= '1' ) ) /* Vuze starts
    238                                                                     at version
    239                                                                     3.1.0.0 */
    240                 four_digits( buf, buflen, "Vuze", id + 3 );
     187                tr_snprintf( buf, buflen, "Transmission %d.%02d%s", strint(id+3,1), strint(id+4,2),
     188                          id[6]=='Z' || id[6]=='X' ? "+" : "" );
     189        }
     190       
     191        else if( !memcmp( id+1, "AZ", 2 ) )
     192        {
     193            if( id[3] > '3' || ( id[3] == '3' && id[4] >= '1' ) ) /* Vuze starts at version 3.1.0.0 */
     194                four_digits( buf, buflen, "Vuze", id+3 );
    241195            else
    242                 four_digits( buf, buflen, "Azureus", id + 3 );
    243         }
    244         else if( !memcmp( id + 1, "KT", 2 ) )
     196                four_digits( buf, buflen, "Azureus", id+3 );
     197        }
     198       
     199        else if( !memcmp( id+1, "KT", 2 ) )
    245200        {
    246201            if( id[5] == 'D' )
    247                 tr_snprintf( buf, buflen, "KTorrent %d.%d Dev %d",
    248                             charint( id[3] ), charint( id[4] ),
    249                             charint( id[6] ) );
     202                tr_snprintf( buf, buflen, "KTorrent %d.%d Dev %d", charint(id[3]), charint(id[4]), charint(id[6]) );
    250203            else if( id[5] == 'R' )
    251                 tr_snprintf( buf, buflen, "KTorrent %d.%d RC %d",
    252                             charint( id[3] ), charint( id[4] ),
    253                             charint( id[6] ) );
     204                tr_snprintf( buf, buflen, "KTorrent %d.%d RC %d", charint(id[3]), charint(id[4]), charint(id[6]) );
    254205            else
    255                 three_digits( buf, buflen, "KTorrent", id + 3 );
    256         }
    257         else if( !memcmp( id + 1, "AR", 2 ) ) four_digits( buf, buflen,
    258                                                            "Ares",
    259                                                            id + 3 );
    260         else if( !memcmp( id + 1, "AT", 2 ) ) four_digits( buf, buflen,
    261                                                            "Artemis",
    262                                                            id + 3 );
    263         else if( !memcmp( id + 1, "AV", 2 ) ) four_digits( buf, buflen,
    264                                                            "Avicora",
    265                                                            id + 3 );
    266         else if( !memcmp( id + 1, "BG", 2 ) ) four_digits( buf, buflen,
    267                                                            "BTGetit",
    268                                                            id + 3 );
    269         else if( !memcmp( id + 1, "BM", 2 ) ) four_digits( buf, buflen,
    270                                                            "BitMagnet",
    271                                                            id + 3 );
    272         else if( !memcmp( id + 1, "BX", 2 ) ) four_digits( buf, buflen,
    273                                                            "BittorrentX",
    274                                                            id + 3 );
    275         else if( !memcmp( id + 1, "bk", 2 ) ) four_digits(
    276                 buf, buflen, "BitKitten (libtorrent)", id + 3 );
    277         else if( !memcmp( id + 1, "BS", 2 ) ) four_digits( buf, buflen,
    278                                                            "BTSlave",
    279                                                            id + 3 );
    280         else if( !memcmp( id + 1, "BX", 2 ) ) four_digits( buf, buflen,
    281                                                            "BittorrentX",
    282                                                            id + 3 );
    283         else if( !memcmp( id + 1, "EB", 2 ) ) four_digits( buf, buflen,
    284                                                            "EBit",
    285                                                            id + 3 );
    286         else if( !memcmp( id + 1, "DE", 2 ) ) four_digits( buf, buflen,
    287                                                            "Deluge",
    288                                                            id + 3 );
    289         else if( !memcmp( id + 1, "DP", 2 ) ) four_digits(
    290                 buf, buflen, "Propogate Data Client", id + 3 );
    291         else if( !memcmp( id + 1, "FC", 2 ) ) four_digits( buf, buflen,
    292                                                            "FileCroc",
    293                                                            id + 3 );
    294         else if( !memcmp( id + 1, "FT", 2 ) ) four_digits(
    295                 buf, buflen, "FoxTorrent/RedSwoosh", id + 3 );
    296         else if( !memcmp( id + 1, "GR", 2 ) ) four_digits( buf, buflen,
    297                                                            "GetRight",
    298                                                            id + 3 );
    299         else if( !memcmp( id + 1, "HN", 2 ) ) four_digits( buf, buflen,
    300                                                            "Hydranode",
    301                                                            id + 3 );
    302         else if( !memcmp( id + 1, "LH", 2 ) ) four_digits( buf, buflen,
    303                                                            "LH-ABC",
    304                                                            id + 3 );
    305         else if( !memcmp( id + 1, "NX", 2 ) ) four_digits( buf, buflen,
    306                                                            "Net Transport",
    307                                                            id + 3 );
    308         else if( !memcmp( id + 1, "MO", 2 ) ) four_digits( buf, buflen,
    309                                                            "MonoTorrent",
    310                                                            id + 3 );
    311         else if( !memcmp( id + 1, "MR", 2 ) ) four_digits( buf, buflen,
    312                                                            "Miro",
    313                                                            id + 3 );
    314         else if( !memcmp( id + 1, "MT", 2 ) ) four_digits( buf, buflen,
    315                                                            "Moonlight",
    316                                                            id + 3 );
    317         else if( !memcmp( id + 1, "PD", 2 ) ) four_digits( buf, buflen,
    318                                                            "Pando",
    319                                                            id + 3 );
    320         else if( !memcmp( id + 1, "RS", 2 ) ) four_digits( buf, buflen,
    321                                                            "Rufus",
    322                                                            id + 3 );
    323         else if( !memcmp( id + 1, "RT", 2 ) ) four_digits( buf, buflen,
    324                                                            "Retriever",
    325                                                            id + 3 );
    326         else if( !memcmp( id + 1, "SS", 2 ) ) four_digits( buf, buflen,
    327                                                            "SwarmScope",
    328                                                            id + 3 );
    329         else if( !memcmp( id + 1, "SZ", 2 ) ) four_digits( buf, buflen,
    330                                                            "Shareaza",
    331                                                            id + 3 );
    332         else if( !memcmp( id + 1, "S~", 2 ) ) four_digits( buf, buflen,
    333                                                            "Shareaza",
    334                                                            id + 3 );
    335         else if( !memcmp( id + 1, "st", 2 ) ) four_digits( buf, buflen,
    336                                                            "SharkTorrent",
    337                                                            id + 3 );
    338         else if( !memcmp( id + 1, "TN", 2 ) ) four_digits( buf, buflen,
    339                                                            "Torrent .NET",
    340                                                            id + 3 );
    341         else if( !memcmp( id + 1, "TS", 2 ) ) four_digits( buf, buflen,
    342                                                            "TorrentStorm",
    343                                                            id + 3 );
    344         else if( !memcmp( id + 1, "UL", 2 ) ) four_digits( buf, buflen,
    345                                                            "uLeecher!",
    346                                                            id + 3 );
    347         else if( !memcmp( id + 1, "VG", 2 ) ) four_digits( buf, buflen,
    348                                                            "Vagaa",
    349                                                            id + 3 );
    350         else if( !memcmp( id + 1, "WT", 2 ) ) four_digits( buf, buflen,
    351                                                            "BitLet",
    352                                                            id + 3 );
    353         else if( !memcmp( id + 1, "WY", 2 ) ) four_digits( buf, buflen,
    354                                                            "Wyzo",
    355                                                            id + 3 );
    356         else if( !memcmp( id + 1, "XL", 2 ) ) four_digits( buf, buflen,
    357                                                            "Xunlei",
    358                                                            id + 3 );
    359         else if( !memcmp( id + 1, "XT", 2 ) ) four_digits( buf, buflen,
    360                                                            "XanTorrent",
    361                                                            id + 3 );
    362         else if( !memcmp( id + 1, "ZT", 2 ) ) four_digits( buf, buflen,
    363                                                            "Zip Torrent",
    364                                                            id + 3 );
    365 
    366         else if( !memcmp( id + 1, "AG", 2 ) ) three_digits( buf, buflen,
    367                                                             "Ares",
    368                                                             id + 3 );
    369         else if( !memcmp( id + 1, "A~", 2 ) ) three_digits( buf, buflen,
    370                                                             "Ares",
    371                                                             id + 3 );
    372         else if( !memcmp( id + 1, "ES", 2 ) ) three_digits(
    373                 buf, buflen, "Electric Sheep", id + 3 );
    374         else if( !memcmp( id + 1, "HL", 2 ) ) three_digits( buf, buflen,
    375                                                             "Halite",
    376                                                             id + 3 );
    377         else if( !memcmp( id + 1, "LT", 2 ) ) three_digits(
    378                 buf, buflen, "libtorrent (Rasterbar)", id + 3 );
    379         else if( !memcmp( id + 1, "lt", 2 ) ) three_digits(
    380                 buf, buflen, "libTorrent (Rakshasa)", id + 3 );
    381         else if( !memcmp( id + 1, "MP", 2 ) ) three_digits( buf, buflen,
    382                                                             "MooPolice",
    383                                                             id + 3 );
    384         else if( !memcmp( id + 1, "TT", 2 ) ) three_digits( buf, buflen,
    385                                                             "TuoTu",
    386                                                             id + 3 );
    387         else if( !memcmp( id + 1, "qB", 2 ) ) three_digits( buf, buflen,
    388                                                             "qBittorrent",
    389                                                             id + 3 );
    390 
    391         else if( !memcmp( id + 1, "AX", 2 ) ) two_major_two_minor(
    392                 buf, buflen, "BitPump", id + 3 );
    393         else if( !memcmp( id + 1, "BC", 2 ) ) two_major_two_minor(
    394                 buf, buflen, "BitComet", id + 3 );
    395         else if( !memcmp( id + 1, "CD", 2 ) ) two_major_two_minor(
    396                 buf, buflen, "Enhanced CTorrent", id + 3 );
    397         else if( !memcmp( id + 1, "LP", 2 ) ) two_major_two_minor( buf,
    398                                                                    buflen,
    399                                                                    "Lphant",
    400                                                                    id + 3 );
    401 
    402         else if( !memcmp( id + 1, "BF", 2 ) ) no_version( buf, buflen,
    403                                                           "BitFlu" );
    404         else if( !memcmp( id + 1, "LW", 2 ) ) no_version( buf, buflen,
    405                                                           "LimeWire" );
    406 
    407         else if( !memcmp( id + 1, "BB", 2 ) )
    408         {
    409             tr_snprintf( buf, buflen, "BitBuddy %c.%c%c%c", id[3], id[4],
    410                          id[5],
    411                          id[6] );
    412         }
    413         else if( !memcmp( id + 1, "BR", 2 ) )
    414         {
    415             tr_snprintf( buf, buflen, "BitRocket %c.%c (%c%c)", id[3],
    416                          id[4], id[5],
    417                          id[6] );
    418         }
    419         else if( !memcmp( id + 1, "CT", 2 ) )
    420         {
    421             tr_snprintf( buf, buflen, "CTorrent %d.%d.%02d", charint(
    422                             id[3] ), charint( id[4] ), strint( id + 5, 2 ) );
    423         }
    424         else if( !memcmp( id + 1, "XX", 2 ) )
    425         {
    426             tr_snprintf( buf, buflen, "Xtorrent %d.%d (%d)", charint(
    427                             id[3] ), charint( id[4] ), strint( id + 5, 2 ) );
    428         }
    429         else if( !memcmp( id + 1, "BOW", 3 ) )
    430         {
    431             if( !memcmp( &id[4], "A0B", 3 ) ) tr_snprintf(
    432                     buf, buflen, "Bits on Wheels 1.0.5" );
    433             else if( !memcmp( &id[4], "A0C", 3 ) ) tr_snprintf(
    434                     buf, buflen, "Bits on Wheels 1.0.6" );
    435             else tr_snprintf( buf, buflen, "Bits on Wheels %c.%c.%c", id[4],
    436                               id[5],
    437                               id[5] );
     206                three_digits( buf, buflen, "KTorrent", id+3 );
     207        }
     208
     209        else if( !memcmp( id+1, "AR", 2 ) ) four_digits( buf, buflen, "Ares", id+3 );
     210        else if( !memcmp( id+1, "AT", 2 ) ) four_digits( buf, buflen, "Artemis", id+3 );
     211        else if( !memcmp( id+1, "AV", 2 ) ) four_digits( buf, buflen, "Avicora", id+3 );
     212        else if( !memcmp( id+1, "BG", 2 ) ) four_digits( buf, buflen, "BTGetit", id+3 );
     213        else if( !memcmp( id+1, "BM", 2 ) ) four_digits( buf, buflen, "BitMagnet", id+3 );
     214        else if( !memcmp( id+1, "BP", 2 ) ) four_digits( buf, buflen, "BitTorrent Pro (Azureus + Spyware)", id+3 );
     215        else if( !memcmp( id+1, "BX", 2 ) ) four_digits( buf, buflen, "BittorrentX", id+3 );
     216        else if( !memcmp( id+1, "bk", 2 ) ) four_digits( buf, buflen, "BitKitten (libtorrent)", id+3 );
     217        else if( !memcmp( id+1, "BS", 2 ) ) four_digits( buf, buflen, "BTSlave", id+3 );
     218        else if( !memcmp( id+1, "BW", 2 ) ) four_digits( buf, buflen, "BitWombat", id+3 );
     219        else if( !memcmp( id+1, "BX", 2 ) ) four_digits( buf, buflen, "BittorrentX", id+3 );
     220        else if( !memcmp( id+1, "EB", 2 ) ) four_digits( buf, buflen, "EBit", id+3 );
     221        else if( !memcmp( id+1, "DE", 2 ) ) four_digits( buf, buflen, "Deluge", id+3 );
     222        else if( !memcmp( id+1, "DP", 2 ) ) four_digits( buf, buflen, "Propogate Data Client", id+3 );
     223        else if( !memcmp( id+1, "FC", 2 ) ) four_digits( buf, buflen, "FileCroc", id+3 );
     224        else if( !memcmp( id+1, "FT", 2 ) ) four_digits( buf, buflen, "FoxTorrent/RedSwoosh", id+3 );
     225        else if( !memcmp( id+1, "GR", 2 ) ) four_digits( buf, buflen, "GetRight", id+3 );
     226        else if( !memcmp( id+1, "HN", 2 ) ) four_digits( buf, buflen, "Hydranode", id+3 );
     227        else if( !memcmp( id+1, "LC", 2 ) ) four_digits( buf, buflen, "LeechCraft", id+3 );
     228        else if( !memcmp( id+1, "LH", 2 ) ) four_digits( buf, buflen, "LH-ABC", id+3 );
     229        else if( !memcmp( id+1, "NX", 2 ) ) four_digits( buf, buflen, "Net Transport", id+3 );
     230        else if( !memcmp( id+1, "MO", 2 ) ) four_digits( buf, buflen, "MonoTorrent", id+3 );
     231        else if( !memcmp( id+1, "MR", 2 ) ) four_digits( buf, buflen, "Miro", id+3 );
     232        else if( !memcmp( id+1, "MT", 2 ) ) four_digits( buf, buflen, "Moonlight", id+3 );
     233        else if( !memcmp( id+1, "OT", 2 ) ) four_digits( buf, buflen, "OmegaTorrent", id+3 );
     234        else if( !memcmp( id+1, "PD", 2 ) ) four_digits( buf, buflen, "Pando", id+3 );
     235        else if( !memcmp( id+1, "QD", 2 ) ) four_digits( buf, buflen, "QQDownload", id+3 );
     236        else if( !memcmp( id+1, "RS", 2 ) ) four_digits( buf, buflen, "Rufus", id+3 );
     237        else if( !memcmp( id+1, "RT", 2 ) ) four_digits( buf, buflen, "Retriever", id+3 );
     238        else if( !memcmp( id+1, "SS", 2 ) ) four_digits( buf, buflen, "SwarmScope", id+3 );
     239        else if( !memcmp( id+1, "SZ", 2 ) ) four_digits( buf, buflen, "Shareaza", id+3 );
     240        else if( !memcmp( id+1, "S~", 2 ) ) four_digits( buf, buflen, "Shareaza", id+3 );
     241        else if( !memcmp( id+1, "st", 2 ) ) four_digits( buf, buflen, "SharkTorrent", id+3 );
     242        else if( !memcmp( id+1, "TN", 2 ) ) four_digits( buf, buflen, "Torrent .NET", id+3 );
     243        else if( !memcmp( id+1, "TS", 2 ) ) four_digits( buf, buflen, "TorrentStorm", id+3 );
     244        else if( !memcmp( id+1, "UL", 2 ) ) four_digits( buf, buflen, "uLeecher!", id+3 );
     245        else if( !memcmp( id+1, "VG", 2 ) ) four_digits( buf, buflen, "Vagaa", id+3 );
     246        else if( !memcmp( id+1, "WT", 2 ) ) four_digits( buf, buflen, "BitLet", id+3 );
     247        else if( !memcmp( id+1, "WY", 2 ) ) four_digits( buf, buflen, "Wyzo", id+3 );
     248        else if( !memcmp( id+1, "XL", 2 ) ) four_digits( buf, buflen, "Xunlei", id+3 );
     249        else if( !memcmp( id+1, "XT", 2 ) ) four_digits( buf, buflen, "XanTorrent", id+3 );
     250        else if( !memcmp( id+1, "ZT", 2 ) ) four_digits( buf, buflen, "Zip Torrent", id+3 );
     251
     252        else if( !memcmp( id+1, "AG", 2 ) ) three_digits( buf, buflen, "Ares", id+3 );
     253        else if( !memcmp( id+1, "A~", 2 ) ) three_digits( buf, buflen, "Ares", id+3 );
     254        else if( !memcmp( id+1, "ES", 2 ) ) three_digits( buf, buflen, "Electric Sheep", id+3 );
     255        else if( !memcmp( id+1, "HL", 2 ) ) three_digits( buf, buflen, "Halite", id+3 );
     256        else if( !memcmp( id+1, "LT", 2 ) ) three_digits( buf, buflen, "libtorrent (Rasterbar)", id+3 );
     257        else if( !memcmp( id+1, "lt", 2 ) ) three_digits( buf, buflen, "libTorrent (Rakshasa)", id+3 );
     258        else if( !memcmp( id+1, "MP", 2 ) ) three_digits( buf, buflen, "MooPolice", id+3 );
     259        else if( !memcmp( id+1, "TT", 2 ) ) three_digits( buf, buflen, "TuoTu", id+3 );
     260        else if( !memcmp( id+1, "qB", 2 ) ) three_digits( buf, buflen, "qBittorrent", id+3 );
     261
     262        else if( !memcmp( id+1, "AX", 2 ) ) two_major_two_minor( buf, buflen, "BitPump", id+3 );
     263        else if( !memcmp( id+1, "BC", 2 ) ) two_major_two_minor( buf, buflen, "BitComet", id+3 );
     264        else if( !memcmp( id+1, "CD", 2 ) ) two_major_two_minor( buf, buflen, "Enhanced CTorrent", id+3 );
     265        else if( !memcmp( id+1, "LP", 2 ) ) two_major_two_minor( buf, buflen, "Lphant", id+3 );
     266
     267        else if( !memcmp( id+1, "BF", 2 ) ) no_version( buf, buflen, "BitFlu" );
     268        else if( !memcmp( id+1, "LW", 2 ) ) no_version( buf, buflen, "LimeWire" );
     269
     270        else if( !memcmp( id+1, "BB", 2 ) )
     271        {
     272            tr_snprintf( buf, buflen, "BitBuddy %c.%c%c%c", id[3], id[4], id[5], id[6] );
     273        }
     274        else if( !memcmp( id+1, "BR", 2 ) )
     275        {
     276            tr_snprintf( buf, buflen, "BitRocket %c.%c (%c%c)", id[3], id[4], id[5], id[6] );
     277        }
     278        else if( !memcmp( id+1, "CT", 2 ) )
     279        {
     280            tr_snprintf( buf, buflen, "CTorrent %d.%d.%02d", charint(id[3]), charint(id[4]), strint(id+5,2) );
     281        }
     282        else if( !memcmp( id+1, "XX", 2 ) )
     283        {
     284            tr_snprintf( buf, buflen, "Xtorrent %d.%d (%d)", charint(id[3]), charint(id[4]), strint(id+5,2) );
     285        }
     286        else if( !memcmp( id+1, "BOW", 3 ) )
     287        {
     288                 if( !memcmp( &id[4], "A0B", 3 ) ) tr_snprintf( buf, buflen, "Bits on Wheels 1.0.5" );
     289            else if( !memcmp( &id[4], "A0C", 3 ) ) tr_snprintf( buf, buflen, "Bits on Wheels 1.0.6" );
     290            else                                   tr_snprintf( buf, buflen, "Bits on Wheels %c.%c.%c", id[4], id[5], id[5] );
    438291        }
    439292
     
    445298    if( isMainlineStyle( id ) )
    446299    {
    447         if( *id == 'M' ) mainline_style( buf, buflen, "BitTorrent", id );
    448         if( *id == 'Q' ) mainline_style( buf, buflen, "Queen Bee", id );
     300        if( *id=='M' ) mainline_style( buf, buflen, "BitTorrent", id );
     301        if( *id=='Q' ) mainline_style( buf, buflen, "Queen Bee", id );
    449302        if( *buf ) return;
    450303    }
     
    456309
    457310    /* Clients with no version */
    458     if( !memcmp( id, "AZ2500BT", 8 ) ) no_version(
    459             buf, buflen, "BitTyrant (Azureus Mod)" );
    460     else if( !memcmp( id, "LIME", 4 ) ) no_version( buf, buflen, "Limewire" );
    461     else if( !memcmp( id, "martini", 7 ) ) no_version( buf, buflen,
    462                                                        "Martini Man" );
    463     else if( !memcmp( id, "Pando", 5 ) ) no_version( buf, buflen, "Pando" );
    464     else if( !memcmp( id, "a00---0", 7 ) ) no_version( buf, buflen,
    465                                                        "Swarmy" );
    466     else if( !memcmp( id, "a02---0", 7 ) ) no_version( buf, buflen,
    467                                                        "Swarmy" );
    468     else if( !memcmp( id, "-G3", 3 ) ) no_version( buf, buflen,
    469                                                    "G3 Torrent" );
    470     else if( !memcmp( id, "10-------", 9 ) ) no_version( buf, buflen,
    471                                                          "JVtorrent" );
    472     else if( !memcmp( id, "346-", 4 ) ) no_version( buf, buflen,
    473                                                     "TorrentTopia" );
    474     else if( !memcmp( id, "eX", 2 ) ) no_version( buf, buflen, "eXeem" );
    475     else if( !memcmp( id, "-FG", 3 ) ) two_major_two_minor( buf, buflen,
    476                                                             "FlashGet",
    477                                                             id + 3 );
    478 
    479     /* Everything else */
    480     else if( !memcmp( id, "S3",
    481                       2 ) && id[2] == '-' && id[4] == '-' && id[6] == '-' )
     311         if( !memcmp( id, "AZ2500BT", 8 ) )  no_version( buf, buflen, "BitTyrant (Azureus Mod)" );
     312    else if( !memcmp( id, "LIME", 4 ) )      no_version( buf, buflen, "Limewire" );
     313    else if( !memcmp( id, "martini", 7 ) )   no_version( buf, buflen, "Martini Man" );
     314    else if( !memcmp( id, "Pando", 5 ) )     no_version( buf, buflen, "Pando" );
     315    else if( !memcmp( id, "a00---0", 7 ) )   no_version( buf, buflen, "Swarmy" );
     316    else if( !memcmp( id, "a02---0", 7 ) )   no_version( buf, buflen, "Swarmy" );
     317    else if( !memcmp( id, "-G3", 3 ) )       no_version( buf, buflen, "G3 Torrent" );
     318    else if( !memcmp( id, "10-------", 9 ) ) no_version( buf, buflen, "JVtorrent" );
     319    else if( !memcmp( id, "346-", 4 ) )      no_version( buf, buflen, "TorrentTopia" );
     320    else if( !memcmp( id, "eX", 2 ) )        no_version( buf, buflen, "eXeem" );
     321    else if( !memcmp( id, "-FG", 3 ) )       two_major_two_minor( buf, buflen, "FlashGet", id+3 );
     322   
     323    /* Everything else */
     324    else if( !memcmp( id, "S3", 2 ) && id[2] == '-' && id[4] == '-' && id[6] == '-' )
    482325    {
    483326        tr_snprintf( buf, buflen, "Amazon S3 %c.%c.%c", id[3], id[5], id[7] );
     
    485328    else if( !memcmp( id, "OP", 2 ) )
    486329    {
    487         tr_snprintf( buf, buflen, "Opera (Build %c%c%c%c)", id[2], id[3],
    488                      id[4],
    489                      id[5] );
     330        tr_snprintf( buf, buflen, "Opera (Build %c%c%c%c)", id[2], id[3], id[4], id[5] );
    490331    }
    491332    else if( !memcmp( id, "-ML", 3 ) )
    492333    {
    493         tr_snprintf( buf, buflen, "MLDonkey %c%c%c%c%c", id[3], id[4],
    494                      id[5], id[6],
    495                      id[7] );
     334        tr_snprintf( buf, buflen, "MLDonkey %c%c%c%c%c", id[3], id[4], id[5], id[6], id[7] );
    496335    }
    497336    else if( !memcmp( id, "DNA", 3 ) )
    498337    {
    499         tr_snprintf( buf, buflen, "BitTorrent DNA %d.%d.%d",
    500                     strint( id + 3, 2 ),
    501                     strint( id + 5, 2 ),
    502                     strint( id + 7, 2 ) );
     338        tr_snprintf( buf, buflen, "BitTorrent DNA %d.%d.%d", strint(id+3,2),
     339                                                             strint(id+5,2),
     340                                                             strint(id+7,2) );
    503341    }
    504342    else if( !memcmp( id, "Plus", 4 ) )
     
    508346    else if( !memcmp( id, "XBT", 3 ) )
    509347    {
    510         tr_snprintf( buf, buflen, "XBT Client %c.%c.%c%s", id[3], id[4],
    511                     id[5], getMnemonicEnd(
    512                         id[6] ) );
     348        tr_snprintf( buf, buflen, "XBT Client %c.%c.%c%s", id[3], id[4], id[5], getMnemonicEnd(id[6]) );
    513349    }
    514350    else if( !memcmp( id, "Mbrst", 5 ) )
     
    518354    else if( !memcmp( id, "btpd", 4 ) )
    519355    {
    520         tr_snprintf( buf, buflen, "BT Protocol Daemon %c%c%c", id[5], id[6],
    521                      id[7] );
     356        tr_snprintf( buf, buflen, "BT Protocol Daemon %c%c%c", id[5], id[6], id[7] );
    522357    }
    523358    else if( !memcmp( id, "BLZ", 3 ) )
    524359    {
    525         tr_snprintf( buf, buflen, "Blizzard Downloader %d.%d", id[3] + 1,
    526                      id[4] );
     360        tr_snprintf( buf, buflen, "Blizzard Downloader %d.%d", id[3]+1, id[4] );
    527361    }
    528362    else if( '\0' == id[0] && !memcmp( &id[1], "BS", 2 ) )
    529363    {
    530364        tr_snprintf( buf, buflen, "BitSpirit %u", ( id[1] == 0 ? 1 : id[1] ) );
     365    }
     366    else if( !memcmp( id, "QVOD", 4 ) )
     367    {
     368        four_digits( buf, buflen, "QVOD", id+4 );
     369    }
     370    else if( !memcmp( id, "-NE", 3 ) )
     371    {
     372        four_digits( buf, buflen, "BT Next Evolution", id+3 );
    531373    }
    532374
     
    564406    {
    565407        struct evbuffer * out = evbuffer_new( );
    566         const char *      in, *in_end;
    567         for( in = (const char*)id, in_end = in + 8; in != in_end; ++in )
    568         {
     408        const char *in, *in_end;
     409        for( in=(const char*)id, in_end=in+8; in!=in_end; ++in ) {
    569410            if( isprint( *in ) )
    570411                evbuffer_add_printf( out, "%c", *in );
Note: See TracChangeset for help on using the changeset viewer.