Changeset 6634


Ignore:
Timestamp:
Aug 22, 2008, 5:59:31 PM (13 years ago)
Author:
charles
Message:

#1214: add RPC support for per-peer status,ul,dl,address info

Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/daemon/remote.c

    r6584 r6634  
    3333#define DEFAULT_PORT TR_DEFAULT_RPC_PORT
    3434
    35 enum { TAG_LIST, TAG_DETAILS, TAG_FILES };
     35enum { TAG_LIST, TAG_DETAILS, TAG_FILES, TAG_PEERS };
    3636
    3737static const char*
     
    8282    { 'x', "pex",          "Enable peer exchange (PEX)", "x", 0, NULL },
    8383    { 'X', "no-pex",       "Disable peer exchange (PEX)", "X", 0, NULL },
     84    { 'z', "peers",        "List the current torrent's peers", "z", 0, NULL },
    8485    { 0, NULL, NULL, NULL, 0, NULL }
    8586};
     
    324325            case 'X': tr_bencDictAddStr( &top, "method", "session-set" );
    325326                      tr_bencDictAddInt( args, "pex-allowed", 0 );
     327                      break;
     328            case 'z': tr_bencDictAddStr( &top, "method", "torrent-get" );
     329                      tr_bencDictAddInt( &top, "tag", TAG_PEERS );
     330                      fields = tr_bencDictAddList( args, "fields", 1 );
     331                      tr_bencListAddStr( fields, "peers" );
    326332                      break;
    327333            case 900: tr_bencDictAddStr( &top, "method", "torrent-set" );
     
    705711
    706712static void
     713printPeerList( tr_benc * top )
     714{
     715    tr_benc *args, *list;
     716
     717    if( ( tr_bencDictFindDict( top, "arguments", &args ) ) &&
     718        ( tr_bencDictFindList( args, "peers", &list ) ) )
     719    {
     720        int i, n;
     721        printf( "%-20s  %-12s  %-5s  %5s  %s\n",
     722                "Address", "Flags", "Down", "Up", "Client" );
     723        for( i=0, n=tr_bencListSize( list ); i<n; ++i )
     724        {
     725            const char * address, * client, * flagstr;
     726            int64_t rateToClient, rateToPeer;
     727            tr_benc * d = tr_bencListChild( list, i );
     728            if(    tr_bencDictFindStr( d, "address", &address )
     729                && tr_bencDictFindStr( d, "client", &client )
     730                && tr_bencDictFindStr( d, "flagstr", &flagstr )
     731                && tr_bencDictFindInt( d, "rateToClient", &rateToClient )
     732                && tr_bencDictFindInt( d, "rateToPeer", &rateToPeer ) )
     733            {
     734                printf( "%-20s  %-12s  %5.1f  %5.1f  %s\n",
     735                        address, flagstr,
     736                        rateToClient * 1024.0,
     737                        rateToPeer * 1024.0,
     738                        client );
     739            }
     740        }
     741    }
     742}
     743
     744static void
    707745printTorrentList( tr_benc * top )
    708746{
     
    774812            case TAG_DETAILS: printDetails( &top ); break;
    775813            case TAG_LIST: printTorrentList( &top ); break;
     814            case TAG_PEERS: printPeerList( &top ); break;
    776815            default: if( tr_bencDictFindStr( &top, "result", &str ) )
    777816                         printf( "%s:%d responded: \"%s\"\n", host, port, str );
  • trunk/daemon/transmission-remote.1

    r6376 r6634  
    3535.Op Fl w Ar download-dir
    3636.Op Fl x | X
     37.Op Fl z | peers
    3738.Ek
    3839.Sh DESCRIPTION
     
    170171Disable peer exchange (PEX).
    171172
     173.It Fl x Fl -peers
     174List the current torrent's connected peers.
     175In the `status' section of the list, the following shorthand is used:
     176.D1 D: Downloading from this peer
     177.D1 d: We would download from this peer if they would let us
     178.D1 E: Encrypted connection
     179.D1 I: Peer is an incoming connection
     180.D1 K: Peer has unchoked us, but we're not interested
     181.D1 O: Optimistic unchoked
     182.D1 U: Uploading to peer
     183.D1 u: We would upload to this peer if they asked
     184.D1 X: Peer was discovered through Peer Exchange (PEX)
     185.D1 ?: We unchoked this peer, but they're not interested
     186
    172187.El
    173188.Sh EXAMPLES
  • trunk/doc/rpc-spec.txt

    r6593 r6634  
    144144   nextAnnounceTime       | number                               | tr_stat
    145145   nextScrapeTime         | number                               | tr_stat
     146   peers                  | array (see below)                    | n/a
    146147   peersConnected         | number                               | tr_stat
    147148   peersFrom              | object (see below)                   | n/a
     
    152153   pieceSize              | tnumber                              | tr_info
    153154   priorities             | array (see below)                    | n/a
    154    rateDownload           | number                               | tr_stat
    155    rateUpload             | number                               | tr_stat
     155   rateDownload (B/s)     | number                               | tr_stat
     156   rateUpload (B/s)       | number                               | tr_stat
    156157   recheckProgress        | number                               | tr_stat
    157158   scrapeResponse         | string                               | tr_stat
     
    176177   -----------------------+--------------------------------------+
    177178   files                  | array of objects, each containing:   |
    178                           +------------------+-------------------+
    179                           | key              | type              |
    180                           | bytesCompleted   | number            | tr_torrent
    181                           | length           | number            | tr_info
    182                           | name             | string            | tr_info
     179                          +-------------------------+------------+
     180                          | key                     | type       |
     181                          | bytesCompleted          | number     | tr_torrent
     182                          | length                  | number     | tr_info
     183                          | name                    | string     | tr_info
     184   -----------------------+--------------------------------------+
     185   peers                  | array of objects, each containing:   |
     186                          +-------------------------+------------+
     187                          | address                 | string     | tr_peer_stat
     188                          | clientName              | string     | tr_peer_stat
     189                          | clientIsChoked          | 'boolean'  | tr_peer_stat
     190                          | clientIsInterested      | 'boolean'  | tr_peer_stat
     191                          | isDownloadingFrom       | 'boolean'  | tr_peer_stat
     192                          | isEncrypted             | 'boolean'  | tr_peer_stat
     193                          | isIncoming              | 'boolean'  | tr_peer_stat
     194                          | isUploadingTo           | 'boolean'  | tr_peer_stat
     195                          | peerIsChoked            | 'boolean'  | tr_peer_stat
     196                          | peerIsInterested        | 'boolean'  | tr_peer_stat
     197                          | progress                | 'double'   | tr_peer_stat
     198                          | rateToClient (B/s)      | number     | tr_peer_stat
     199                          | rateToPeer (B/s)        | number     | tr_peer_stat
    183200   -----------------------+--------------------------------------+
    184201   peersFrom              | an object containing:                |
    185                           +------------------+-------------------+
    186                           | fromCache        | number            | tr_stat
    187                           | fromIncoming     | number            | tr_stat
    188                           | fromPex          | number            | tr_stat
    189                           | fromTracker      | number            | tr_stat
     202                          +-------------------------+------------+
     203                          | fromCache               | number     | tr_stat
     204                          | fromIncoming            | number     | tr_stat
     205                          | fromPex                 | number     | tr_stat
     206                          | fromTracker             | number     | tr_stat
    190207   -----------------------+--------------------------------------+
    191208   priorities             | an array of tr_info.filecount        | tr_info
     
    194211   -----------------------+--------------------------------------+
    195212   trackers               | array of objects, each containing:   |
    196                           +------------------+-------------------+
    197                           | announce         | string            | tr_info
    198                           | scrape           | string            | tr_info
    199                           | tier             | number            | tr_info
     213                          +-------------------------+------------+
     214                          | announce                | string     | tr_info
     215                          | scrape                  | string     | tr_info
     216                          | tier                    | number     | tr_info
    200217   -----------------------+--------------------------------------+
    201218   wanted                 | an array of tr_info.fileCount        | tr_info
     
    204221   -----------------------+--------------------------------------+
    205222   webseeds               | an array of strings:                 |
    206                           +------------------+-------------------+
    207                           | webseed          | string            | tr_info
    208                           +------------------+-------------------+
     223                          +-------------------------+------------+
     224                          | webseed                 | string     | tr_info
     225                          +-------------------------+------------+
    209226
    210227   Example:
  • trunk/gtk/details.c

    r6500 r6634  
    323323                      PEER_COL_IS_ENCRYPTED, peer->isEncrypted,
    324324                      PEER_COL_PROGRESS, (int)(100.0*peer->progress),
    325                       PEER_COL_DOWNLOAD_RATE, peer->downloadFromRate,
    326                       PEER_COL_UPLOAD_RATE, peer->uploadToRate,
     325                      PEER_COL_DOWNLOAD_RATE, peer->rateToClient,
     326                      PEER_COL_UPLOAD_RATE, peer->rateToPeer,
    327327                      PEER_COL_STATUS, peer->flagStr,
    328328                      -1);
  • trunk/libtransmission/peer-common.h

    r6629 r6634  
    2828    TR_ADDREQ_MISSING,
    2929    TR_ADDREQ_CLIENT_CHOKED
    30 } tr_addreq_t;
     30}
     31tr_addreq_t;
    3132
    3233/**
  • trunk/libtransmission/peer-mgr.c

    r6632 r6634  
    15151515        stat->progress           = peer->progress;
    15161516        stat->isEncrypted        = tr_peerIoIsEncrypted( peer->io ) ? 1 : 0;
    1517         stat->uploadToRate       = peer->rateToPeer;
    1518         stat->downloadFromRate   = peer->rateToClient;
     1517        stat->rateToPeer         = peer->rateToPeer;
     1518        stat->rateToClient       = peer->rateToClient;
    15191519        stat->peerIsChoked       = peer->peerIsChoked;
    15201520        stat->peerIsInterested   = peer->peerIsInterested;
  • trunk/libtransmission/rpc.c

    r6612 r6634  
    201201        tr_bencDictAddInt( d, "tier", t->tier );
    202202    }
     203}
     204
     205static void
     206addPeers( const tr_torrent * tor, tr_benc * list )
     207{
     208    int i;
     209    int peerCount;
     210    tr_peer_stat * peers = tr_torrentPeers( tor, &peerCount );
     211
     212    tr_bencInitList( list, peerCount );
     213
     214    for( i=0; i<peerCount; ++i )
     215    {
     216        tr_benc * d = tr_bencListAddDict( list, 14 );
     217        const tr_peer_stat * peer = peers + i;
     218        tr_bencDictAddStr( d, "address", peer->addr );
     219        tr_bencDictAddStr( d, "clientName", peer->client );
     220        tr_bencDictAddInt( d, "clientIsChoked", peer->clientIsChoked );
     221        tr_bencDictAddInt( d, "clientIsInterested", peer->clientIsInterested );
     222        tr_bencDictAddStr( d, "flagStr", peer->flagStr );
     223        tr_bencDictAddInt( d, "isDownloadingFrom", peer->isDownloadingFrom );
     224        tr_bencDictAddInt( d, "isEncrypted", peer->isEncrypted );
     225        tr_bencDictAddInt( d, "isIncoming", peer->isIncoming );
     226        tr_bencDictAddInt( d, "isUploadingTo", peer->isUploadingTo );
     227        tr_bencDictAddInt( d, "peerIsChoked", peer->peerIsChoked );
     228        tr_bencDictAddInt( d, "peerIsInterested", peer->peerIsInterested );
     229        tr_bencDictAddDouble( d, "progress", peer->progress );
     230        tr_bencDictAddInt( d, "rateToClient", (int)(peer->rateToClient*1024.0) );
     231        tr_bencDictAddInt( d, "rateToPeer", (int)(peer->rateToPeer*1024.0) );
     232    }
     233
     234    tr_torrentPeersFree( peers, peerCount );
    203235}
    204236
     
    271303    else if( !strcmp( key, "nextScrapeTime" ) )
    272304        tr_bencDictAddInt( d, key, st->nextScrapeTime );
     305    else if( !strcmp( key, "peers" ) )
     306        addPeers( tor, tr_bencDictAdd( d, key ) );
    273307    else if( !strcmp( key, "peersConnected" ) )
    274308        tr_bencDictAddInt( d, key, st->peersConnected );
  • trunk/libtransmission/session.c

    r6633 r6634  
    220220#endif
    221221
    222 abort();
    223 
    224222    tr_msgInit( );
    225223    tr_setMessageLevel( messageLevel );
  • trunk/libtransmission/transmission.h

    r6559 r6634  
    10251025   
    10261026    float progress;
    1027     float downloadFromRate;
    1028     float uploadToRate;
     1027    float rateToPeer;
     1028    float rateToClient;
    10291029}
    10301030tr_peer_stat;
  • trunk/macosx/Torrent.m

    r6511 r6634  
    10091009       
    10101010        if (peer->isUploadingTo)
    1011             [dict setObject: [NSNumber numberWithFloat: peer->uploadToRate] forKey: @"UL To Rate"];
     1011            [dict setObject: [NSNumber numberWithFloat: peer->rateToPeer] forKey: @"UL To Rate"];
    10121012        if (peer->isDownloadingFrom)
    1013             [dict setObject: [NSNumber numberWithFloat: peer->downloadFromRate] forKey: @"DL From Rate"];
     1013            [dict setObject: [NSNumber numberWithFloat: peer->rateToClient] forKey: @"DL From Rate"];
    10141014       
    10151015        [peerDicts addObject: dict];
Note: See TracChangeset for help on using the changeset viewer.