Changeset 2781


Ignore:
Timestamp:
Aug 15, 2007, 11:03:50 PM (15 years ago)
Author:
joshe
Message:

Save client name from azureus or extended handshake, overriding name deduced from peer id.

Location:
trunk/libtransmission
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/peer.c

    r2772 r2781  
    260260
    261261    char              * client;
     262    int                 extclient;
    262263
    263264    int64_t             credit;
  • trunk/libtransmission/peeraz.h

    r2428 r2781  
    342342parseAZHandshake( tr_peer_t * peer, uint8_t * buf, int len )
    343343{
    344     benc_val_t      val, * sub, * dict, * subsub;
     344    benc_val_t      val, * sub, * sub2, * dict, * subsub;
    345345    tr_bitfield_t * msgs;
    346     int             ii, idx;
     346    int             ii, idx, newclient;
     347    size_t          size;
     348    char          * client;
    347349
    348350    if( tr_bencLoad( buf, len, &val, NULL ) )
     
    359361    }
    360362
    361 #if 0 /* ugh, we have to deal with encoding if we do this */
    362363    /* get peer's client name */
    363     sub  = tr_bencDictFind( &val, "client" );
    364     sub2 = tr_bencDictFind( &val, "version" );
    365     if( NULL != sub  && TYPE_STR == sub->type &&
    366         NULL != sub2 && TYPE_STR == sub->type )
    367     {
    368         if( NULL == peer->client ||
    369             ( 0 != strncmp( peer->client, sub->val.s.s, sub->val.s.i ) ||
    370               ' ' != peer->client[sub->val.s.i] ||
    371               0 != strcmp( peer->client + sub->val.s.i + 1, sub2->val.s.s ) ) )
    372         {
    373             client = NULL;
    374             asprintf( &client, "%s %s", sub->val.s.s, sub2->val.s.s );
    375             if( NULL != client )
     364    newclient = 0;
     365    if( !peer->extclient )
     366    {
     367        sub  = tr_bencDictFind( &val, "client" );
     368        sub2 = tr_bencDictFind( &val, "version" );
     369        if( NULL != sub  && TYPE_STR == sub->type &&
     370            NULL != sub2 && TYPE_STR == sub->type )
     371        {
     372            size = bufsize_utf8( sub->val.s.s,  NULL ) +
     373                   bufsize_utf8( sub2->val.s.s, NULL );
     374            client = calloc( size, 1 );
     375            if( NULL == client )
     376            {
     377                tr_bencFree( &val );
     378                return TR_ERROR;
     379            }
     380            strlcat_utf8( client, sub->val.s.s,  size, 0 );
     381            strlcat(      client, " ",           size    );
     382            strlcat_utf8( client, sub2->val.s.s, size, 0 );
     383            if( NULL == peer->client || 0 != strcmp( client, peer->client ) )
    376384            {
    377385                free( peer->client );
    378386                peer->client = client;
     387                newclient = 1;
    379388            }
    380         }
    381     }
    382 #endif
     389            else
     390                free( client );
     391            peer->extclient = 1;
     392        }
     393    }
    383394
    384395    /* get the peer's listening port */
     
    401412    }
    402413
    403     peer_dbg( "GET  azureus-handshake, ok" );
     414    if( newclient )
     415        peer_dbg( "GET  azureus-handshake, ok (%s)", peer->client );
     416    else
     417        peer_dbg( "GET  azureus-handshake, ok" );
    404418
    405419    /* fill bitmask with supported message info */
  • trunk/libtransmission/peerext.h

    r2497 r2781  
    220220{
    221221    benc_val_t val, * sub;
    222     int        dbgport, dbgpex;
     222    int        dbgport, dbgpex, dbgclient, grow;
     223    size_t     size;
    223224
    224225    if( tr_bencLoad( buf, len, &val, NULL ) )
     
    251252    }
    252253
    253 #if 0 /* ugh, we have to deal with encoding if we do this */
    254254    /* get peer's client name */
    255     sub = tr_bencDictFind( &val, "v" );
    256     if( NULL != sub && TYPE_STR == sub->type &&
    257         ( NULL == peer->client || 0 != strcmp( sub->val.s.s, peer->client ) ) )
    258     {
    259         client = tr_bencStealStr( sub );
    260         if( NULL != client )
    261         {
     255    dbgclient = 0;
     256    if( !peer->extclient )
     257    {
     258        sub = tr_bencDictFind( &val, "v" );
     259        if( NULL != sub && TYPE_STR == sub->type )
     260        {
     261            dbgclient = 1;
    262262            free( peer->client );
    263             peer->client = client;
    264         }
    265     }
    266 #endif
     263            size = bufsize_utf8( sub->val.s.s, &grow );
     264            if( grow )
     265            {
     266                peer->client = calloc( size, 1 );
     267                if( NULL == peer->client )
     268                {
     269                    tr_bencFree( &val );
     270                    return TR_ERROR;
     271                }
     272                strlcat_utf8( peer->client, sub->val.s.s, size, 0 );
     273            }
     274            else
     275                peer->client = tr_bencStealStr( sub );
     276            peer->extclient = 1;
     277        }
     278    }
    267279
    268280    /* get peer's listening port */
     
    276288    }
    277289
    278     peer_dbg( "GET  extended-handshake, ok port=%i pex=%i", dbgport, dbgpex );
     290    if( dbgclient )
     291        peer_dbg( "GET  extended-handshake, ok port=%d pex=%d client=%s",
     292                  dbgport, dbgpex, peer->client );
     293    else
     294        peer_dbg( "GET  extended-handshake, ok port=%d pex=%d",
     295                  dbgport, dbgpex );
    279296
    280297    tr_bencFree( &val );
Note: See TracChangeset for help on using the changeset viewer.