Changeset 9793
- Timestamp:
- Dec 16, 2009, 6:20:01 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Makefile.am
r9773 r9793 24 24 $(GTK_DIR) \ 25 25 $(MAC_DIR) \ 26 utils \ 26 27 web 27 28 -
trunk/configure.ac
r9773 r9793 447 447 gtk/Makefile 448 448 gtk/icons/Makefile 449 utils/Makefile 449 450 web/Makefile 450 451 web/images/Makefile -
trunk/gtk/conf.c
r9765 r9793 178 178 tr_bencDictAddBool( d, PREF_KEY_SHOW_DESKTOP_NOTIFICATION, TRUE ); 179 179 tr_bencDictAddBool( d, PREF_KEY_SHOW_MORE_TRACKER_INFO, FALSE ); 180 tr_bencDictAddBool( d, PREF_KEY_SHOW_MORE_PEER_INFO, FALSE ); 180 181 tr_bencDictAddBool( d, PREF_KEY_SHOW_BACKUP_TRACKERS, FALSE ); 181 182 tr_bencDictAddStr( d, PREF_KEY_STATUSBAR_STATS, "total-ratio" ); -
trunk/gtk/details.c
r9747 r9793 87 87 GtkListStore * webseed_store; 88 88 GtkWidget * webseed_view; 89 GtkWidget * peer_view; 90 GtkWidget * more_peer_details_check; 89 91 90 92 GtkListStore * trackers; … … 1087 1089 PEER_COL_CLIENT, 1088 1090 PEER_COL_PROGRESS, 1091 PEER_COL_UPLOAD_REQUEST_COUNT_INT, 1092 PEER_COL_UPLOAD_REQUEST_COUNT_STRING, 1093 PEER_COL_DOWNLOAD_REQUEST_COUNT_INT, 1094 PEER_COL_DOWNLOAD_REQUEST_COUNT_STRING, 1089 1095 PEER_COL_ENCRYPTION_STOCK_ID, 1090 1096 PEER_COL_STATUS, … … 1104 1110 case PEER_COL_CLIENT: return _( "Client" ); 1105 1111 case PEER_COL_PROGRESS: return _( "%" ); 1112 case PEER_COL_UPLOAD_REQUEST_COUNT_INT: 1113 case PEER_COL_UPLOAD_REQUEST_COUNT_STRING: return _( "Up Reqs" ); 1114 case PEER_COL_DOWNLOAD_REQUEST_COUNT_INT: 1115 case PEER_COL_DOWNLOAD_REQUEST_COUNT_STRING: return _( "Dn Reqs" ); 1106 1116 case PEER_COL_STATUS: return _( "Status" ); 1107 1117 default: return ""; … … 1123 1133 G_TYPE_STRING, /* client */ 1124 1134 G_TYPE_INT, /* progress [0..100] */ 1135 G_TYPE_INT, /* upload request count int */ 1136 G_TYPE_STRING, /* upload request count string */ 1137 G_TYPE_INT, /* download request count int */ 1138 G_TYPE_STRING, /* download request count string */ 1125 1139 G_TYPE_STRING, /* encryption stock id */ 1126 1140 G_TYPE_STRING); /* flagString */ … … 1166 1180 char up_speed[128]; 1167 1181 char down_speed[128]; 1182 char up_count[128]; 1183 char down_count[128]; 1168 1184 1169 1185 if( peer->rateToPeer > 0.01 ) … … 1177 1193 *down_speed = '\0'; 1178 1194 1195 if( peer->pendingReqsToPeer > 0 ) 1196 g_snprintf( down_count, sizeof( down_count ), "%d", peer->pendingReqsToPeer ); 1197 else 1198 *down_count = '\0'; 1199 1200 if( peer->pendingReqsToClient > 0 ) 1201 g_snprintf( up_count, sizeof( down_count ), "%d", peer->pendingReqsToClient ); 1202 else 1203 *up_count = '\0'; 1204 1179 1205 gtk_list_store_set( store, iter, 1180 1206 PEER_COL_PROGRESS, (int)( 100.0 * peer->progress ), 1207 PEER_COL_UPLOAD_REQUEST_COUNT_INT, peer->pendingReqsToClient, 1208 PEER_COL_UPLOAD_REQUEST_COUNT_STRING, up_count, 1209 PEER_COL_DOWNLOAD_REQUEST_COUNT_INT, peer->pendingReqsToPeer, 1210 PEER_COL_DOWNLOAD_REQUEST_COUNT_STRING, down_count, 1181 1211 PEER_COL_DOWNLOAD_RATE_DOUBLE, peer->rateToClient, 1182 1212 PEER_COL_DOWNLOAD_RATE_STRING, down_speed, … … 1430 1460 #endif 1431 1461 1462 static void 1463 setPeerViewColumns( GtkTreeView * peer_view ) 1464 { 1465 int i; 1466 int n = 0; 1467 const tr_bool more = pref_flag_get( PREF_KEY_SHOW_MORE_PEER_INFO ); 1468 int view_columns[32]; 1469 GtkTreeViewColumn * c; 1470 GtkCellRenderer * r; 1471 1472 view_columns[n++] = PEER_COL_ENCRYPTION_STOCK_ID; 1473 view_columns[n++] = PEER_COL_UPLOAD_RATE_STRING; 1474 if( more ) view_columns[n++] = PEER_COL_UPLOAD_REQUEST_COUNT_STRING; 1475 view_columns[n++] = PEER_COL_DOWNLOAD_RATE_STRING; 1476 if( more ) view_columns[n++] = PEER_COL_DOWNLOAD_REQUEST_COUNT_STRING; 1477 view_columns[n++] = PEER_COL_PROGRESS; 1478 view_columns[n++] = PEER_COL_STATUS; 1479 view_columns[n++] = PEER_COL_ADDRESS; 1480 view_columns[n++] = PEER_COL_CLIENT; 1481 1482 /* remove any existing columns */ 1483 { 1484 GList * l; 1485 GList * columns = gtk_tree_view_get_columns( peer_view ); 1486 for( l=columns; l!=NULL; l=l->next ) 1487 gtk_tree_view_remove_column( peer_view, l->data ); 1488 g_list_free( columns ); 1489 } 1490 1491 for( i=0; i<n; ++i ) 1492 { 1493 const int col = view_columns[i]; 1494 const char * t = getPeerColumnName( col ); 1495 int sort_col = col; 1496 1497 switch( col ) 1498 { 1499 case PEER_COL_ADDRESS: 1500 r = gtk_cell_renderer_text_new( ); 1501 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1502 sort_col = PEER_COL_ADDRESS_COLLATED; 1503 break; 1504 1505 case PEER_COL_CLIENT: 1506 r = gtk_cell_renderer_text_new( ); 1507 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1508 break; 1509 1510 case PEER_COL_PROGRESS: 1511 r = gtk_cell_renderer_progress_new( ); 1512 c = gtk_tree_view_column_new_with_attributes( t, r, "value", PEER_COL_PROGRESS, NULL ); 1513 break; 1514 1515 case PEER_COL_ENCRYPTION_STOCK_ID: 1516 r = gtk_cell_renderer_pixbuf_new( ); 1517 g_object_set( r, "xalign", (gfloat)0.0, 1518 "yalign", (gfloat)0.5, 1519 NULL ); 1520 c = gtk_tree_view_column_new_with_attributes( t, r, "stock-id", PEER_COL_ENCRYPTION_STOCK_ID, NULL ); 1521 gtk_tree_view_column_set_sizing( c, GTK_TREE_VIEW_COLUMN_FIXED ); 1522 gtk_tree_view_column_set_fixed_width( c, 20 ); 1523 break; 1524 1525 case PEER_COL_UPLOAD_REQUEST_COUNT_STRING: 1526 r = gtk_cell_renderer_text_new( ); 1527 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1528 sort_col = PEER_COL_UPLOAD_REQUEST_COUNT_INT; 1529 break; 1530 1531 case PEER_COL_DOWNLOAD_REQUEST_COUNT_STRING: 1532 r = gtk_cell_renderer_text_new( ); 1533 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1534 sort_col = PEER_COL_DOWNLOAD_REQUEST_COUNT_INT; 1535 break; 1536 1537 case PEER_COL_DOWNLOAD_RATE_STRING: 1538 r = gtk_cell_renderer_text_new( ); 1539 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1540 sort_col = PEER_COL_DOWNLOAD_RATE_DOUBLE; 1541 break; 1542 1543 case PEER_COL_UPLOAD_RATE_STRING: 1544 r = gtk_cell_renderer_text_new( ); 1545 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1546 sort_col = PEER_COL_UPLOAD_RATE_DOUBLE; 1547 break; 1548 1549 case PEER_COL_STATUS: 1550 r = gtk_cell_renderer_text_new( ); 1551 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1552 break; 1553 1554 default: 1555 abort( ); 1556 } 1557 1558 gtk_tree_view_column_set_resizable( c, FALSE ); 1559 gtk_tree_view_column_set_sort_column_id( c, sort_col ); 1560 gtk_tree_view_append_column( GTK_TREE_VIEW( peer_view ), c ); 1561 } 1562 1563 /* the 'expander' column has a 10-pixel margin on the left 1564 that doesn't look quite correct in any of these columns... 1565 so create a non-visible column and assign it as the 1566 'expander column. */ 1567 { 1568 GtkTreeViewColumn *c = gtk_tree_view_column_new( ); 1569 gtk_tree_view_column_set_visible( c, FALSE ); 1570 gtk_tree_view_append_column( GTK_TREE_VIEW( peer_view ), c ); 1571 gtk_tree_view_set_expander_column( GTK_TREE_VIEW( peer_view ), c ); 1572 } 1573 } 1574 1575 static void 1576 onMorePeerInfoToggled( GtkToggleButton * button, struct DetailsImpl * di ) 1577 { 1578 const char * key = PREF_KEY_SHOW_MORE_PEER_INFO; 1579 const gboolean value = gtk_toggle_button_get_active( button ); 1580 tr_core_set_pref_bool( di->core, key, value ); 1581 setPeerViewColumns( GTK_TREE_VIEW( di->peer_view ) ); 1582 } 1583 1432 1584 static GtkWidget* 1433 1585 peer_page_new( struct DetailsImpl * di ) 1434 1586 { 1435 g uint i;1587 gboolean b; 1436 1588 const char * str; 1437 1589 GtkListStore *store; … … 1441 1593 GtkTreeViewColumn * c; 1442 1594 GtkCellRenderer * r; 1443 int view_columns[] = { PEER_COL_ENCRYPTION_STOCK_ID,1444 PEER_COL_UPLOAD_RATE_STRING,1445 PEER_COL_DOWNLOAD_RATE_STRING,1446 PEER_COL_PROGRESS,1447 PEER_COL_STATUS,1448 PEER_COL_ADDRESS,1449 PEER_COL_CLIENT };1450 1451 1595 1452 1596 /* webseeds */ … … 1502 1646 NULL ) ); 1503 1647 #endif 1648 di->peer_view = v; 1504 1649 1505 1650 #if GTK_CHECK_VERSION( 2,12,0 ) … … 1511 1656 G_CALLBACK( on_tree_view_button_released ), NULL ); 1512 1657 1513 for( i=0; i<G_N_ELEMENTS( view_columns ); ++i ) 1514 { 1515 const int col = view_columns[i]; 1516 const char * t = getPeerColumnName( col ); 1517 int sort_col = col; 1518 1519 switch( col ) 1520 { 1521 case PEER_COL_ADDRESS: 1522 r = gtk_cell_renderer_text_new( ); 1523 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1524 sort_col = PEER_COL_ADDRESS_COLLATED; 1525 break; 1526 1527 case PEER_COL_CLIENT: 1528 r = gtk_cell_renderer_text_new( ); 1529 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1530 break; 1531 1532 case PEER_COL_PROGRESS: 1533 r = gtk_cell_renderer_progress_new( ); 1534 c = gtk_tree_view_column_new_with_attributes( t, r, "value", PEER_COL_PROGRESS, NULL ); 1535 break; 1536 1537 case PEER_COL_ENCRYPTION_STOCK_ID: 1538 r = gtk_cell_renderer_pixbuf_new( ); 1539 g_object_set( r, "xalign", (gfloat)0.0, 1540 "yalign", (gfloat)0.5, 1541 NULL ); 1542 c = gtk_tree_view_column_new_with_attributes( t, r, "stock-id", PEER_COL_ENCRYPTION_STOCK_ID, NULL ); 1543 gtk_tree_view_column_set_sizing( c, GTK_TREE_VIEW_COLUMN_FIXED ); 1544 gtk_tree_view_column_set_fixed_width( c, 20 ); 1545 break; 1546 1547 case PEER_COL_DOWNLOAD_RATE_STRING: 1548 r = gtk_cell_renderer_text_new( ); 1549 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1550 sort_col = PEER_COL_DOWNLOAD_RATE_DOUBLE; 1551 break; 1552 1553 case PEER_COL_UPLOAD_RATE_STRING: 1554 r = gtk_cell_renderer_text_new( ); 1555 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1556 sort_col = PEER_COL_UPLOAD_RATE_DOUBLE; 1557 break; 1558 1559 case PEER_COL_STATUS: 1560 r = gtk_cell_renderer_text_new( ); 1561 c = gtk_tree_view_column_new_with_attributes( t, r, "text", col, NULL ); 1562 break; 1563 1564 default: 1565 abort( ); 1566 } 1567 1568 gtk_tree_view_column_set_resizable( c, FALSE ); 1569 gtk_tree_view_column_set_sort_column_id( c, sort_col ); 1570 gtk_tree_view_append_column( GTK_TREE_VIEW( v ), c ); 1571 } 1572 1573 /* the 'expander' column has a 10-pixel margin on the left 1574 that doesn't look quite correct in any of these columns... 1575 so create a non-visible column and assign it as the 1576 'expander column. */ 1577 { 1578 GtkTreeViewColumn *c = gtk_tree_view_column_new( ); 1579 gtk_tree_view_column_set_visible( c, FALSE ); 1580 gtk_tree_view_append_column( GTK_TREE_VIEW( v ), c ); 1581 gtk_tree_view_set_expander_column( GTK_TREE_VIEW( v ), c ); 1582 } 1658 setPeerViewColumns( GTK_TREE_VIEW( v ) ); 1583 1659 1584 1660 w = sw = gtk_scrolled_window_new( NULL, NULL ); … … 1590 1666 gtk_container_add( GTK_CONTAINER( w ), v ); 1591 1667 1592 1593 1668 vbox = gtk_vbox_new( FALSE, GUI_PAD ); 1594 1669 gtk_container_set_border_width( GTK_CONTAINER( vbox ), GUI_PAD_BIG ); … … 1598 1673 gtk_paned_pack2( GTK_PANED( v ), sw, TRUE, TRUE ); 1599 1674 gtk_box_pack_start( GTK_BOX( vbox ), v, TRUE, TRUE, 0 ); 1675 1676 w = gtk_check_button_new_with_mnemonic( _( "Show _more details" ) ); 1677 di->more_peer_details_check = w; 1678 b = pref_flag_get( PREF_KEY_SHOW_MORE_PEER_INFO ); 1679 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( w ), b ); 1680 g_signal_connect( w, "toggled", G_CALLBACK( onMorePeerInfoToggled ), di ); 1681 gtk_box_pack_start( GTK_BOX( vbox ), w, FALSE, FALSE, 0 ); 1682 1600 1683 1601 1684 /* ip-to-GtkTreeRowReference */ -
trunk/gtk/tr-prefs.h
r9671 r9793 32 32 #define PREF_KEY_PLAY_DOWNLOAD_COMPLETE_SOUND "play-download-complete-sound" 33 33 #define PREF_KEY_SHOW_MORE_TRACKER_INFO "show-tracker-scrapes" 34 #define PREF_KEY_SHOW_MORE_PEER_INFO "show-extra-peer-details" 34 35 #define PREF_KEY_SHOW_BACKUP_TRACKERS "show-backup-trackers" 35 36 #define PREF_KEY_START "start-added-torrents" -
trunk/libtransmission/peer-common.h
r9671 r9793 34 34 batch them together to send enough requests to 35 35 meet our bandwidth goals for the next N seconds */ 36 REQUEST_BUF_SECS = 10, 37 38 /** how long we'll let requests we've made stay pending 39 before we cancel them */ 40 REQUEST_TTL_SECS = 30 36 REQUEST_BUF_SECS = 10 41 37 }; 42 38 -
trunk/libtransmission/peer-mgr.c
r9783 r9793 86 86 87 87 /* the minimum we'll wait before attempting to reconnect to a peer */ 88 MINIMUM_RECONNECT_INTERVAL_SECS = 5 88 MINIMUM_RECONNECT_INTERVAL_SECS = 5, 89 90 /** how long we'll let requests we've made linger before we cancel them */ 91 REQUEST_TTL_SECS = 45 89 92 }; 90 93 … … 619 622 620 623 static void 621 requestListAdd( Torrent * t, const time_t now,tr_block_index_t block, tr_peer * peer )624 requestListAdd( Torrent * t, tr_block_index_t block, tr_peer * peer ) 622 625 { 623 626 struct block_request key; … … 635 638 key.block = block; 636 639 key.peer = peer; 637 key.sentAt = now;640 key.sentAt = tr_time( ); 638 641 639 642 /* insert the request to our array... */ … … 658 661 } 659 662 } 660 /*fprintf( stderr, "added request of block %lu from peer %p... " 663 664 if( peer != NULL ) 665 { 666 ++peer->pendingReqsToPeer; 667 assert( peer->pendingReqsToPeer >= 0 ); 668 } 669 670 /*fprintf( stderr, "added request of block %lu from peer %s... " 661 671 "there are now %d block\n", 662 (unsigned long)block, peer, t->requestCount );*/672 (unsigned long)block, tr_atomAddrStr( peer->atom ), t->requestCount );*/ 663 673 } 664 674 … … 713 723 const int pos = b - t->requests; 714 724 assert( pos < t->requestCount ); 725 726 if( b->peer != NULL ) 727 { 728 --b->peer->pendingReqsToPeer; 729 assert( b->peer->pendingReqsToPeer >= 0 ); 730 } 731 715 732 memmove( t->requests + pos, 716 733 t->requests + pos + 1, 717 734 sizeof( struct block_request ) * ( --t->requestCount - pos ) ); 718 /*fprintf( stderr, "removing request of block %lu from peer % p... "735 /*fprintf( stderr, "removing request of block %lu from peer %s... " 719 736 "there are now %d block requests left\n", 720 (unsigned long)block, peer, t->requestCount );*/737 (unsigned long)block, tr_atomAddrStr( peer->atom ), t->requestCount );*/ 721 738 } 722 739 } … … 952 969 struct weighted_piece * pieces; 953 970 const tr_bitset * have = &peer->have; 954 const time_t now = tr_time( );955 971 956 972 /* sanity clause */ … … 1001 1017 1002 1018 /* update our own tables */ 1003 requestListAdd( t, now,b, peer );1019 requestListAdd( t, b, peer ); 1004 1020 ++p->requestCount; 1005 1021 } … … 2195 2211 tr_strlcpy( stat->client, ( peer->client ? peer->client : "" ), 2196 2212 sizeof( stat->client ) ); 2197 stat->port = ntohs( peer->atom->port ); 2198 stat->from = atom->from; 2199 stat->progress = peer->progress; 2200 stat->isEncrypted = tr_peerIoIsEncrypted( peer->io ) ? 1 : 0; 2201 stat->rateToPeer = tr_peerGetPieceSpeed( peer, now, TR_CLIENT_TO_PEER ); 2202 stat->rateToClient = tr_peerGetPieceSpeed( peer, now, TR_PEER_TO_CLIENT ); 2203 stat->peerIsChoked = peer->peerIsChoked; 2204 stat->peerIsInterested = peer->peerIsInterested; 2205 stat->clientIsChoked = peer->clientIsChoked; 2206 stat->clientIsInterested = peer->clientIsInterested; 2207 stat->isIncoming = tr_peerIoIsIncoming( peer->io ); 2208 stat->isDownloadingFrom = clientIsDownloadingFrom( tor, peer ); 2209 stat->isUploadingTo = clientIsUploadingTo( peer ); 2210 stat->isSeed = ( atom->uploadOnly == UPLOAD_ONLY_YES ) || ( peer->progress >= 1.0 ); 2213 stat->port = ntohs( peer->atom->port ); 2214 stat->from = atom->from; 2215 stat->progress = peer->progress; 2216 stat->isEncrypted = tr_peerIoIsEncrypted( peer->io ) ? 1 : 0; 2217 stat->rateToPeer = tr_peerGetPieceSpeed( peer, now, TR_CLIENT_TO_PEER ); 2218 stat->rateToClient = tr_peerGetPieceSpeed( peer, now, TR_PEER_TO_CLIENT ); 2219 stat->peerIsChoked = peer->peerIsChoked; 2220 stat->peerIsInterested = peer->peerIsInterested; 2221 stat->clientIsChoked = peer->clientIsChoked; 2222 stat->clientIsInterested = peer->clientIsInterested; 2223 stat->isIncoming = tr_peerIoIsIncoming( peer->io ); 2224 stat->isDownloadingFrom = clientIsDownloadingFrom( tor, peer ); 2225 stat->isUploadingTo = clientIsUploadingTo( peer ); 2226 stat->isSeed = ( atom->uploadOnly == UPLOAD_ONLY_YES ) || ( peer->progress >= 1.0 ); 2227 stat->pendingReqsToPeer = peer->pendingReqsToPeer; 2228 stat->pendingReqsToClient = peer->pendingReqsToClient; 2211 2229 2212 2230 pch = stat->flagStr; … … 3086 3104 } 3087 3105 3088 static time_t tr_now = 0;3089 3090 3106 /* best come first, worst go last */ 3091 3107 static int … … 3097 3113 const struct peer_atom * b = * (const struct peer_atom**) vb; 3098 3114 const int data_time_cutoff_secs = 60 * 60; 3115 const time_t tr_now = tr_time( ); 3099 3116 3100 3117 assert( tr_isAtom( a ) ); … … 3160 3177 i = 0; 3161 3178 if( keepCount < maxAtomCount ) { 3162 tr_now = tr_time( );3163 3179 qsort( test, testCount, sizeof( struct peer_atom * ), compareAtomPtrsByShelfDate ); 3164 3180 while( i<testCount && keepCount<maxAtomCount ) -
trunk/libtransmission/peer-mgr.h
r9784 r9793 91 91 uint8_t encryption_preference; 92 92 tr_port dht_port; 93 94 /* how many requests the peer has made that we haven't responded to yet */ 95 int pendingReqsToClient; 96 97 /* how many requests we've made and are currently awaiting a response for */ 98 int pendingReqsToPeer; 99 93 100 struct tr_peerIo * io; 94 101 struct peer_atom * atom; -
trunk/libtransmission/peer-msgs.c
r9786 r9793 180 180 /*tr_bool haveFastSet;*/ 181 181 182 int activeRequestCount;183 182 int desiredRequestCount; 184 183 … … 210 209 211 210 struct peer_request peerAskedFor[REQQ]; 212 int peerAskedForCount;213 211 214 212 int peerAskedForMetadata[METADATA_REQQ]; … … 757 755 popNextRequest( tr_peermsgs * msgs, struct peer_request * setme ) 758 756 { 759 if( msgs->peer AskedForCount == 0 )757 if( msgs->peer->pendingReqsToClient == 0 ) 760 758 return FALSE; 761 759 … … 763 761 764 762 tr_removeElementFromArray( msgs->peerAskedFor, 0, sizeof( struct peer_request ), 765 msgs->peer AskedForCount-- );763 msgs->peer->pendingReqsToClient-- ); 766 764 767 765 return TRUE; … … 836 834 return reqIsValid( msgs, req->index, req->offset, req->length ); 837 835 } 838 839 836 840 837 void … … 1258 1255 else if( peerIsChoked ) 1259 1256 dbgmsg( msgs, "rejecting request from choked peer" ); 1260 else if( msgs->peer AskedForCount + 1 >= REQQ )1257 else if( msgs->peer->pendingReqsToClient + 1 >= REQQ ) 1261 1258 dbgmsg( msgs, "rejecting request ... reqq is full" ); 1262 1259 else … … 1264 1261 1265 1262 if( allow ) 1266 msgs->peerAskedFor[msgs->peer AskedForCount++] = *req;1263 msgs->peerAskedFor[msgs->peer->pendingReqsToClient++] = *req; 1267 1264 else if( fext ) 1268 1265 protocolSendReject( msgs, req ); … … 1374 1371 1375 1372 static void updateDesiredRequestCount( tr_peermsgs * msgs, uint64_t now ); 1376 1377 static void1378 decrementActiveRequestCount( tr_peermsgs * msgs )1379 {1380 if( msgs->activeRequestCount > 0 )1381 msgs->activeRequestCount--;1382 }1383 1373 1384 1374 static int … … 1472 1462 dbgmsg( msgs, "got a Cancel %u:%u->%u", r.index, r.offset, r.length ); 1473 1463 1474 for( i=0; i<msgs->peer AskedForCount; ++i ) {1464 for( i=0; i<msgs->peer->pendingReqsToClient; ++i ) { 1475 1465 const struct peer_request * req = msgs->peerAskedFor + i; 1476 1466 if( ( req->index == r.index ) && ( req->offset == r.offset ) && ( req->length == r.length ) ) … … 1478 1468 } 1479 1469 1480 if( i < msgs->peer AskedForCount )1470 if( i < msgs->peer->pendingReqsToClient ) 1481 1471 tr_removeElementFromArray( msgs->peerAskedFor, i, sizeof( struct peer_request ), 1482 msgs->peer AskedForCount-- );1472 msgs->peer->pendingReqsToClient-- ); 1483 1473 break; 1484 1474 } … … 1548 1538 tr_peerIoReadUint32( msgs->peer->io, inbuf, &r.offset ); 1549 1539 tr_peerIoReadUint32( msgs->peer->io, inbuf, &r.length ); 1550 if( fext ) { 1551 decrementActiveRequestCount( msgs ); 1540 if( fext ) 1552 1541 fireGotRej( msgs, &r ); 1553 }else {1542 else { 1554 1543 fireError( msgs, EMSGSIZE ); 1555 1544 return READ_ERR; … … 1633 1622 1634 1623 addPeerToBlamefield( msgs, req->index ); 1635 decrementActiveRequestCount( msgs );1636 1624 fireGotBlock( msgs, req ); 1637 1625 return 0; … … 1715 1703 int estimatedBlocksInPeriod; 1716 1704 double rate; 1717 const int floor = 4;1705 const int floor = 2; 1718 1706 const int seconds = REQUEST_BUF_SECS; 1719 1707 … … 1779 1767 updateBlockRequests( tr_peermsgs * msgs ) 1780 1768 { 1781 const int MIN_BATCH_SIZE = 4; 1782 const int numwant = msgs->desiredRequestCount - msgs->activeRequestCount; 1783 1784 /* make sure we have enough block requests queued up */ 1785 if( numwant >= MIN_BATCH_SIZE ) 1769 if( ( msgs->desiredRequestCount > 0 ) && 1770 ( msgs->peer->pendingReqsToPeer <= ( msgs->desiredRequestCount * 0.66 ) ) ) 1786 1771 { 1787 1772 int i; 1788 1773 int n; 1774 const int numwant = msgs->desiredRequestCount - msgs->peer->pendingReqsToPeer; 1789 1775 tr_block_index_t * blocks = tr_new( tr_block_index_t, numwant ); 1790 1776 … … 1798 1784 } 1799 1785 1800 msgs->activeRequestCount += n;1801 1802 1786 tr_free( blocks ); 1803 1787 } … … 1810 1794 1811 1795 /* Maintain 12 prefetched blocks per unchoked peer */ 1812 for( i=msgs->prefetchCount; i<msgs->peer AskedForCount && i<12; ++i )1796 for( i=msgs->prefetchCount; i<msgs->peer->pendingReqsToClient && i<12; ++i ) 1813 1797 { 1814 1798 const struct peer_request * req = msgs->peerAskedFor + i; … … 2369 2353 m->outMessagesBatchPeriod = LOW_PRIORITY_INTERVAL_SECS; 2370 2354 m->incoming.block = evbuffer_new( ); 2371 m->peerAskedForCount = 0;2372 2355 evtimer_set( &m->pexTimer, pexPulse, m ); 2373 2356 tr_timerAdd( &m->pexTimer, PEX_INTERVAL_SECS, 0 ); -
trunk/libtransmission/transmission.h
r9725 r9793 1317 1317 typedef struct tr_peer_stat 1318 1318 { 1319 tr_bool isEncrypted; 1320 tr_bool isDownloadingFrom; 1321 tr_bool isUploadingTo; 1322 tr_bool isSeed; 1323 1324 tr_bool peerIsChoked; 1325 tr_bool peerIsInterested; 1326 tr_bool clientIsChoked; 1327 tr_bool clientIsInterested; 1328 tr_bool isIncoming; 1329 1330 uint8_t from; 1331 tr_port port; 1332 1333 char addr[TR_INET6_ADDRSTRLEN]; 1334 char client[80]; 1335 char flagStr[32]; 1336 1337 float progress; 1338 float rateToPeer; 1339 float rateToClient; 1319 tr_bool isEncrypted; 1320 tr_bool isDownloadingFrom; 1321 tr_bool isUploadingTo; 1322 tr_bool isSeed; 1323 1324 tr_bool peerIsChoked; 1325 tr_bool peerIsInterested; 1326 tr_bool clientIsChoked; 1327 tr_bool clientIsInterested; 1328 tr_bool isIncoming; 1329 1330 uint8_t from; 1331 tr_port port; 1332 1333 char addr[TR_INET6_ADDRSTRLEN]; 1334 char client[80]; 1335 char flagStr[32]; 1336 1337 float progress; 1338 float rateToPeer; 1339 float rateToClient; 1340 1341 /* how many requests the peer has made that we haven't responded to yet */ 1342 int pendingReqsToClient; 1343 1344 /* how many requests we've made and are currently awaiting a response for */ 1345 int pendingReqsToPeer; 1340 1346 } 1341 1347 tr_peer_stat;
Note: See TracChangeset
for help on using the changeset viewer.