Changeset 7361 for trunk/libtransmission/peer-msgs.c
- Timestamp:
- Dec 12, 2008, 2:44:21 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/peer-msgs.c
r7357 r7361 294 294 int outMessagesBatchPeriod; 295 295 296 tr_peer * info;296 tr_peer * peer; 297 297 298 298 tr_session * session; 299 299 tr_torrent * torrent; 300 tr_peerIo * io;301 300 302 301 tr_publisher_t * publisher; … … 308 307 struct request_list clientWillAskFor; 309 308 310 tr_timer * pexTimer; 309 tr_timer * pexTimer; 310 tr_pex * pex; 311 311 312 312 time_t clientSentPexAt; … … 316 316 time_t outMessagesBatchedAt; 317 317 318 tr_bitfield * peerAllowedPieces;319 320 318 struct tr_incoming incoming; 321 322 tr_pex * pex;323 319 324 320 /* if the peer supports the Extension Protocol in BEP 10 and … … 349 345 tr_getLogTimeStr( timestr, sizeof( timestr ) ), 350 346 msgs->torrent->info.name, 351 tr_peerIoGetAddrStr( msgs-> io ),352 msgs-> info->client );347 tr_peerIoGetAddrStr( msgs->peer->io ), 348 msgs->peer->client ); 353 349 va_start( args, fmt ); 354 350 evbuffer_add_vprintf( buf, fmt, args ); … … 392 388 protocolSendReject( tr_peermsgs * msgs, const struct peer_request * req ) 393 389 { 394 tr_peerIo * io = msgs-> io;390 tr_peerIo * io = msgs->peer->io; 395 391 struct evbuffer * out = msgs->outMessages; 396 392 397 assert( tr_peerIoSupportsFEXT( msgs-> io ) );393 assert( tr_peerIoSupportsFEXT( msgs->peer->io ) ); 398 394 399 395 tr_peerIoWriteUint32( io, out, sizeof( uint8_t ) + 3 * sizeof( uint32_t ) ); … … 411 407 const struct peer_request * req ) 412 408 { 413 tr_peerIo * io = msgs-> io;409 tr_peerIo * io = msgs->peer->io; 414 410 struct evbuffer * out = msgs->outMessages; 415 411 … … 429 425 const struct peer_request * req ) 430 426 { 431 tr_peerIo * io = msgs-> io;427 tr_peerIo * io = msgs->peer->io; 432 428 struct evbuffer * out = msgs->outMessages; 433 429 … … 447 443 uint32_t index ) 448 444 { 449 tr_peerIo * io = msgs-> io;445 tr_peerIo * io = msgs->peer->io; 450 446 struct evbuffer * out = msgs->outMessages; 451 447 … … 463 459 protocolSendAllowedFast( tr_peermsgs * msgs, uint32_t pieceIndex ) 464 460 { 465 tr_peerIo * io = msgs-> io;461 tr_peerIo * io = msgs->peer->io; 466 462 struct evbuffer * out = msgs->outMessages; 467 463 468 assert( tr_peerIoSupportsFEXT( msgs-> io ) );464 assert( tr_peerIoSupportsFEXT( msgs->peer->io ) ); 469 465 470 466 tr_peerIoWriteUint32( io, out, sizeof(uint8_t) + sizeof(uint32_t) ); … … 481 477 int choke ) 482 478 { 483 tr_peerIo * io = msgs-> io;479 tr_peerIo * io = msgs->peer->io; 484 480 struct evbuffer * out = msgs->outMessages; 485 481 … … 495 491 protocolSendHaveAll( tr_peermsgs * msgs ) 496 492 { 497 tr_peerIo * io = msgs-> io;493 tr_peerIo * io = msgs->peer->io; 498 494 struct evbuffer * out = msgs->outMessages; 499 495 500 assert( tr_peerIoSupportsFEXT( msgs-> io ) );496 assert( tr_peerIoSupportsFEXT( msgs->peer->io ) ); 501 497 502 498 tr_peerIoWriteUint32( io, out, sizeof( uint8_t ) ); … … 511 507 protocolSendHaveNone( tr_peermsgs * msgs ) 512 508 { 513 tr_peerIo * io = msgs-> io;509 tr_peerIo * io = msgs->peer->io; 514 510 struct evbuffer * out = msgs->outMessages; 515 511 516 assert( tr_peerIoSupportsFEXT( msgs-> io ) );512 assert( tr_peerIoSupportsFEXT( msgs->peer->io ) ); 517 513 518 514 tr_peerIoWriteUint32( io, out, sizeof( uint8_t ) ); … … 533 529 publish( tr_peermsgs * msgs, tr_peer_event * e ) 534 530 { 535 assert( msgs-> info);536 assert( msgs-> info->msgs == msgs );537 538 tr_publisherPublish( msgs->publisher, msgs-> info, e );531 assert( msgs->peer ); 532 assert( msgs->peer->msgs == msgs ); 533 534 tr_publisherPublish( msgs->publisher, msgs->peer, e ); 539 535 } 540 536 … … 570 566 tr_peer_event e = blankEvent; 571 567 e.eventType = TR_PEER_PEER_PROGRESS; 572 e.progress = msgs-> info->progress;568 e.progress = msgs->peer->progress; 573 569 publish( msgs, &e ); 574 570 } … … 700 696 { 701 697 #if 0 702 const tr_bool fext = tr_peerIoSupportsFEXT( msgs-> io );703 const int peerIsNeedy = msgs-> info->progress < 0.10;698 const tr_bool fext = tr_peerIoSupportsFEXT( msgs->peer->io ); 699 const int peerIsNeedy = msgs->peer->progress < 0.10; 704 700 705 701 if( fext && peerIsNeedy && !msgs->haveFastSet ) 706 702 { 707 703 size_t i; 708 const struct tr_address * addr = tr_peerIoGetAddress( msgs-> io, NULL );704 const struct tr_address * addr = tr_peerIoGetAddress( msgs->peer->io, NULL ); 709 705 const tr_info * inf = &msgs->torrent->info; 710 706 const size_t numwant = MIN( MAX_FAST_SET_SIZE, inf->pieceCount ); … … 726 722 727 723 static int 728 isPieceInteresting( const tr_peermsgs * peer,724 isPieceInteresting( const tr_peermsgs * msgs, 729 725 tr_piece_index_t piece ) 730 726 { 731 const tr_torrent * torrent = peer->torrent;727 const tr_torrent * torrent = msgs->torrent; 732 728 733 729 return ( !torrent->info.pieces[piece].dnd ) /* we want it */ 734 730 && ( !tr_cpPieceIsComplete( torrent->completion, piece ) ) /* !have */ 735 && ( tr_bitfieldHas( peer->info->have, piece ) ); /* peer has it */731 && ( tr_bitfieldHas( msgs->peer->have, piece ) ); /* peer has it */ 736 732 } 737 733 … … 754 750 bitfield = tr_cpPieceBitfield( torrent->completion ); 755 751 756 if( !msgs-> info->have )752 if( !msgs->peer->have ) 757 753 return TRUE; 758 754 759 assert( bitfield->byteCount == msgs-> info->have->byteCount );755 assert( bitfield->byteCount == msgs->peer->have->byteCount ); 760 756 761 757 for( i = 0; i < torrent->info.pieceCount; ++i ) … … 775 771 assert( weAreInterested == 0 || weAreInterested == 1 ); 776 772 777 msgs-> info->clientIsInterested = weAreInterested;773 msgs->peer->clientIsInterested = weAreInterested; 778 774 dbgmsg( msgs, "Sending %s", weAreInterested ? "Interested" : "Not Interested" ); 779 tr_peerIoWriteUint32( msgs-> io, out, sizeof( uint8_t ) );780 tr_peerIoWriteUint8 ( msgs-> io, out, weAreInterested ? BT_INTERESTED : BT_NOT_INTERESTED );775 tr_peerIoWriteUint32( msgs->peer->io, out, sizeof( uint8_t ) ); 776 tr_peerIoWriteUint8 ( msgs->peer->io, out, weAreInterested ? BT_INTERESTED : BT_NOT_INTERESTED ); 781 777 pokeBatchPeriod( msgs, HIGH_PRIORITY_INTERVAL_SECS ); 782 778 dbgOutMessageLen( msgs ); … … 788 784 const int i = isPeerInteresting( msgs ); 789 785 790 if( i != msgs-> info->clientIsInterested )786 if( i != msgs->peer->clientIsInterested ) 791 787 sendInterest( msgs, i ); 792 788 if( i ) … … 805 801 { 806 802 struct peer_request req; 807 const int mustSendCancel = tr_peerIoSupportsFEXT( msgs-> io );803 const int mustSendCancel = tr_peerIoSupportsFEXT( msgs->peer->io ); 808 804 809 805 while( popNextRequest( msgs, &req ) ) … … 820 816 821 817 assert( msgs ); 822 assert( msgs-> info);818 assert( msgs->peer ); 823 819 assert( choke == 0 || choke == 1 ); 824 820 825 if( msgs-> info->chokeChangedAt > fibrillationTime )821 if( msgs->peer->chokeChangedAt > fibrillationTime ) 826 822 { 827 823 dbgmsg( msgs, "Not changing choke to %d to avoid fibrillation", choke ); 828 824 } 829 else if( msgs-> info->peerIsChoked != choke )830 { 831 msgs-> info->peerIsChoked = choke;825 else if( msgs->peer->peerIsChoked != choke ) 826 { 827 msgs->peer->peerIsChoked = choke; 832 828 if( choke ) 833 829 cancelAllRequestsToClient( msgs ); 834 830 protocolSendChoke( msgs, choke ); 835 msgs-> info->chokeChangedAt = now;831 msgs->peer->chokeChangedAt = now; 836 832 } 837 833 } … … 876 872 time_t oldestAllowed; 877 873 struct request_list tmp = REQUEST_LIST_INIT; 878 const tr_bool fext = tr_peerIoSupportsFEXT( msgs-> io );874 const tr_bool fext = tr_peerIoSupportsFEXT( msgs->peer->io ); 879 875 880 876 /* cancel requests that have been queued for too long */ … … 913 909 if( count > min ) 914 910 return; 915 if( msgs-> info->clientIsChoked )911 if( msgs->peer->clientIsChoked ) 916 912 return; 917 913 if( !tr_torrentIsPieceTransferAllowed( msgs->torrent, TR_PEER_TO_CLIENT ) ) … … 923 919 924 920 assert( requestIsValid( msgs, &req ) ); 925 assert( tr_bitfieldHas( msgs-> info->have, req.index ) );921 assert( tr_bitfieldHas( msgs->peer->have, req.index ) ); 926 922 927 923 /* don't ask for it if we've already got it... this block may have … … 973 969 974 970 /* don't send requests to choked clients */ 975 if( !doForce && msgs-> info->clientIsChoked ) {971 if( !doForce && msgs->peer->clientIsChoked ) { 976 972 dbgmsg( msgs, "declining request because they're choking us" ); 977 973 return TR_ADDREQ_CLIENT_CHOKED; … … 979 975 980 976 /* peer doesn't have this piece */ 981 if( !doForce && !tr_bitfieldHas( msgs-> info->have, index ) )977 if( !doForce && !tr_bitfieldHas( msgs->peer->have, index ) ) 982 978 return TR_ADDREQ_MISSING; 983 979 … … 1107 1103 buf = tr_bencSave( &val, &len ); 1108 1104 1109 tr_peerIoWriteUint32( msgs-> io, out, 2 * sizeof( uint8_t ) + len );1110 tr_peerIoWriteUint8 ( msgs-> io, out, BT_LTEP );1111 tr_peerIoWriteUint8 ( msgs-> io, out, LTEP_HANDSHAKE );1112 tr_peerIoWriteBytes ( msgs-> io, out, buf, len );1105 tr_peerIoWriteUint32( msgs->peer->io, out, 2 * sizeof( uint8_t ) + len ); 1106 tr_peerIoWriteUint8 ( msgs->peer->io, out, BT_LTEP ); 1107 tr_peerIoWriteUint8 ( msgs->peer->io, out, LTEP_HANDSHAKE ); 1108 tr_peerIoWriteBytes ( msgs->peer->io, out, buf, len ); 1113 1109 pokeBatchPeriod( msgs, IMMEDIATE_PRIORITY_INTERVAL_SECS ); 1114 1110 dbgOutMessageLen( msgs ); … … 1128 1124 uint8_t * tmp = tr_new( uint8_t, len ); 1129 1125 1130 tr_peerIoReadBytes( msgs-> io, inbuf, tmp, len );1126 tr_peerIoReadBytes( msgs->peer->io, inbuf, tmp, len ); 1131 1127 msgs->peerSentLtepHandshake = 1; 1132 1128 … … 1142 1138 /* does the peer prefer encrypted connections? */ 1143 1139 if( tr_bencDictFindInt( &val, "e", &i ) ) 1144 msgs-> info->encryption_preference = i ? ENCRYPTION_PREFERENCE_YES1140 msgs->peer->encryption_preference = i ? ENCRYPTION_PREFERENCE_YES 1145 1141 : ENCRYPTION_PREFERENCE_NO; 1146 1142 … … 1161 1157 /* get peer's listening port */ 1162 1158 if( tr_bencDictFindInt( &val, "p", &i ) ) { 1163 msgs-> info->port = htons( (uint16_t)i );1164 dbgmsg( msgs, "msgs->port is now %hu", msgs-> info->port );1159 msgs->peer->port = htons( (uint16_t)i ); 1160 dbgmsg( msgs, "msgs->port is now %hu", msgs->peer->port ); 1165 1161 } 1166 1162 … … 1183 1179 size_t added_len; 1184 1180 1185 tr_peerIoReadBytes( msgs-> io, inbuf, tmp, msglen );1181 tr_peerIoReadBytes( msgs->peer->io, inbuf, tmp, msglen ); 1186 1182 1187 1183 if( tr_torrentAllowsPex( tor ) … … 1215 1211 uint8_t ltep_msgid; 1216 1212 1217 tr_peerIoReadUint8( msgs-> io, inbuf, <ep_msgid );1213 tr_peerIoReadUint8( msgs->peer->io, inbuf, <ep_msgid ); 1218 1214 msglen--; 1219 1215 … … 1222 1218 dbgmsg( msgs, "got ltep handshake" ); 1223 1219 parseLtepHandshake( msgs, msglen, inbuf ); 1224 if( tr_peerIoSupportsLTEP( msgs-> io ) )1220 if( tr_peerIoSupportsLTEP( msgs->peer->io ) ) 1225 1221 { 1226 1222 sendLtepHandshake( msgs ); … … 1251 1247 return READ_LATER; 1252 1248 1253 tr_peerIoReadUint32( msgs-> io, inbuf, &len );1249 tr_peerIoReadUint32( msgs->peer->io, inbuf, &len ); 1254 1250 1255 1251 if( len == 0 ) /* peer sent us a keepalive message */ … … 1278 1274 return READ_LATER; 1279 1275 1280 tr_peerIoReadUint8( msgs-> io, inbuf, &id );1276 tr_peerIoReadUint8( msgs->peer->io, inbuf, &id ); 1281 1277 msgs->incoming.id = id; 1282 1278 … … 1297 1293 updatePeerProgress( tr_peermsgs * msgs ) 1298 1294 { 1299 msgs-> info->progress = tr_bitfieldCountTrueBits( msgs->info->have ) / (float)msgs->torrent->info.pieceCount;1300 dbgmsg( msgs, "peer progress is %f", msgs-> info->progress );1295 msgs->peer->progress = tr_bitfieldCountTrueBits( msgs->peer->have ) / (float)msgs->torrent->info.pieceCount; 1296 dbgmsg( msgs, "peer progress is %f", msgs->peer->progress ); 1301 1297 updateFastSet( msgs ); 1302 1298 updateInterest( msgs ); … … 1308 1304 const struct peer_request * req ) 1309 1305 { 1310 const tr_bool fext = tr_peerIoSupportsFEXT( msgs-> io );1306 const tr_bool fext = tr_peerIoSupportsFEXT( msgs->peer->io ); 1311 1307 const int reqIsValid = requestIsValid( msgs, req ); 1312 1308 const int clientHasPiece = reqIsValid && tr_cpPieceIsComplete( msgs->torrent->completion, req->index ); 1313 const int peerIsChoked = msgs-> info->peerIsChoked;1309 const int peerIsChoked = msgs->peer->peerIsChoked; 1314 1310 1315 1311 int allow = FALSE; … … 1390 1386 return READ_LATER; 1391 1387 1392 tr_peerIoReadUint32( msgs-> io, inbuf, &req->index );1393 tr_peerIoReadUint32( msgs-> io, inbuf, &req->offset );1388 tr_peerIoReadUint32( msgs->peer->io, inbuf, &req->index ); 1389 tr_peerIoReadUint32( msgs->peer->io, inbuf, &req->offset ); 1394 1390 req->length = msgs->incoming.length - 9; 1395 1391 dbgmsg( msgs, "got incoming block header %u:%u->%u", req->index, req->offset, req->length ); … … 1405 1401 uint8_t * buf = tr_new( uint8_t, n ); 1406 1402 assert( EVBUFFER_LENGTH( inbuf ) >= n ); 1407 tr_peerIoReadBytes( msgs-> io, inbuf, buf, n );1403 tr_peerIoReadBytes( msgs->peer->io, inbuf, buf, n ); 1408 1404 evbuffer_add( msgs->incoming.block, buf, n ); 1409 1405 fireClientGotData( msgs, n, TRUE ); … … 1439 1435 const uint8_t id = msgs->incoming.id; 1440 1436 const size_t startBufLen = EVBUFFER_LENGTH( inbuf ); 1441 const tr_bool fext = tr_peerIoSupportsFEXT( msgs-> io );1437 const tr_bool fext = tr_peerIoSupportsFEXT( msgs->peer->io ); 1442 1438 1443 1439 --msglen; /* id length */ … … 1459 1455 case BT_CHOKE: 1460 1456 dbgmsg( msgs, "got Choke" ); 1461 msgs-> info->clientIsChoked = 1;1457 msgs->peer->clientIsChoked = 1; 1462 1458 if( !fext ) 1463 1459 cancelAllRequestsToPeer( msgs, FALSE ); … … 1466 1462 case BT_UNCHOKE: 1467 1463 dbgmsg( msgs, "got Unchoke" ); 1468 msgs-> info->clientIsChoked = 0;1464 msgs->peer->clientIsChoked = 0; 1469 1465 fireNeedReq( msgs ); 1470 1466 break; … … 1472 1468 case BT_INTERESTED: 1473 1469 dbgmsg( msgs, "got Interested" ); 1474 msgs-> info->peerIsInterested = 1;1470 msgs->peer->peerIsInterested = 1; 1475 1471 break; 1476 1472 1477 1473 case BT_NOT_INTERESTED: 1478 1474 dbgmsg( msgs, "got Not Interested" ); 1479 msgs-> info->peerIsInterested = 0;1475 msgs->peer->peerIsInterested = 0; 1480 1476 break; 1481 1477 1482 1478 case BT_HAVE: 1483 tr_peerIoReadUint32( msgs-> io, inbuf, &ui32 );1479 tr_peerIoReadUint32( msgs->peer->io, inbuf, &ui32 ); 1484 1480 dbgmsg( msgs, "got Have: %u", ui32 ); 1485 if( tr_bitfieldAdd( msgs-> info->have, ui32 ) ) {1481 if( tr_bitfieldAdd( msgs->peer->have, ui32 ) ) { 1486 1482 fireError( msgs, ERANGE ); 1487 1483 return READ_ERR; … … 1496 1492 dbgmsg( msgs, "got a bitfield" ); 1497 1493 msgs->peerSentBitfield = 1; 1498 tr_peerIoReadBytes( msgs-> io, inbuf, msgs->info->have->bits, msglen );1494 tr_peerIoReadBytes( msgs->peer->io, inbuf, msgs->peer->have->bits, msglen ); 1499 1495 updatePeerProgress( msgs ); 1500 1496 fireNeedReq( msgs ); … … 1505 1501 { 1506 1502 struct peer_request r; 1507 tr_peerIoReadUint32( msgs-> io, inbuf, &r.index );1508 tr_peerIoReadUint32( msgs-> io, inbuf, &r.offset );1509 tr_peerIoReadUint32( msgs-> io, inbuf, &r.length );1503 tr_peerIoReadUint32( msgs->peer->io, inbuf, &r.index ); 1504 tr_peerIoReadUint32( msgs->peer->io, inbuf, &r.offset ); 1505 tr_peerIoReadUint32( msgs->peer->io, inbuf, &r.length ); 1510 1506 dbgmsg( msgs, "got Request: %u:%u->%u", r.index, r.offset, r.length ); 1511 1507 peerMadeRequest( msgs, &r ); … … 1516 1512 { 1517 1513 struct peer_request r; 1518 tr_peerIoReadUint32( msgs-> io, inbuf, &r.index );1519 tr_peerIoReadUint32( msgs-> io, inbuf, &r.offset );1520 tr_peerIoReadUint32( msgs-> io, inbuf, &r.length );1514 tr_peerIoReadUint32( msgs->peer->io, inbuf, &r.index ); 1515 tr_peerIoReadUint32( msgs->peer->io, inbuf, &r.offset ); 1516 tr_peerIoReadUint32( msgs->peer->io, inbuf, &r.length ); 1521 1517 dbgmsg( msgs, "got a Cancel %u:%u->%u", r.index, r.offset, r.length ); 1522 1518 if( reqListRemove( &msgs->peerAskedFor, &r ) && fext ) … … 1531 1527 case BT_PORT: 1532 1528 dbgmsg( msgs, "Got a BT_PORT" ); 1533 tr_peerIoReadUint16( msgs-> io, inbuf, &msgs->info->port );1529 tr_peerIoReadUint16( msgs->peer->io, inbuf, &msgs->peer->port ); 1534 1530 break; 1535 1531 1536 1532 case BT_FEXT_SUGGEST: 1537 1533 dbgmsg( msgs, "Got a BT_FEXT_SUGGEST" ); 1538 tr_peerIoReadUint32( msgs-> io, inbuf, &ui32 );1534 tr_peerIoReadUint32( msgs->peer->io, inbuf, &ui32 ); 1539 1535 if( fext ) 1540 1536 fireClientGotSuggest( msgs, ui32 ); … … 1547 1543 case BT_FEXT_ALLOWED_FAST: 1548 1544 dbgmsg( msgs, "Got a BT_FEXT_ALLOWED_FAST" ); 1549 tr_peerIoReadUint32( msgs-> io, inbuf, &ui32 );1545 tr_peerIoReadUint32( msgs->peer->io, inbuf, &ui32 ); 1550 1546 if( fext ) 1551 1547 fireClientGotAllowedFast( msgs, ui32 ); … … 1559 1555 dbgmsg( msgs, "Got a BT_FEXT_HAVE_ALL" ); 1560 1556 if( fext ) { 1561 tr_bitfieldAddRange( msgs-> info->have, 0, msgs->torrent->info.pieceCount );1557 tr_bitfieldAddRange( msgs->peer->have, 0, msgs->torrent->info.pieceCount ); 1562 1558 updatePeerProgress( msgs ); 1563 1559 } else { … … 1571 1567 dbgmsg( msgs, "Got a BT_FEXT_HAVE_NONE" ); 1572 1568 if( fext ) { 1573 tr_bitfieldClear( msgs-> info->have );1569 tr_bitfieldClear( msgs->peer->have ); 1574 1570 updatePeerProgress( msgs ); 1575 1571 } else { … … 1583 1579 struct peer_request r; 1584 1580 dbgmsg( msgs, "Got a BT_FEXT_REJECT" ); 1585 tr_peerIoReadUint32( msgs-> io, inbuf, &r.index );1586 tr_peerIoReadUint32( msgs-> io, inbuf, &r.offset );1587 tr_peerIoReadUint32( msgs-> io, inbuf, &r.length );1581 tr_peerIoReadUint32( msgs->peer->io, inbuf, &r.index ); 1582 tr_peerIoReadUint32( msgs->peer->io, inbuf, &r.offset ); 1583 tr_peerIoReadUint32( msgs->peer->io, inbuf, &r.length ); 1588 1584 if( fext ) 1589 1585 reqListRemove( &msgs->clientAskedFor, &r ); … … 1602 1598 default: 1603 1599 dbgmsg( msgs, "peer sent us an UNKNOWN: %d", (int)id ); 1604 tr_peerIoDrain( msgs-> io, inbuf, msglen );1600 tr_peerIoDrain( msgs->peer->io, inbuf, msglen ); 1605 1601 break; 1606 1602 } … … 1630 1626 addPeerToBlamefield( tr_peermsgs * msgs, uint32_t index ) 1631 1627 { 1632 if( !msgs-> info->blame )1633 msgs-> info->blame = tr_bitfieldNew( msgs->torrent->info.pieceCount );1634 tr_bitfieldAdd( msgs-> info->blame, index );1628 if( !msgs->peer->blame ) 1629 msgs->peer->blame = tr_bitfieldNew( msgs->torrent->info.pieceCount ); 1630 tr_bitfieldAdd( msgs->peer->blame, index ); 1635 1631 } 1636 1632 … … 1748 1744 { 1749 1745 tr_peermsgs * msgs = vmsgs; 1750 const double rateToClient = tr_peerGetPieceSpeed( msgs-> info, TR_PEER_TO_CLIENT );1746 const double rateToClient = tr_peerGetPieceSpeed( msgs->peer, TR_PEER_TO_CLIENT ); 1751 1747 const int estimatedBlocksInNext30Seconds = 1752 1748 ( rateToClient * 30 * 1024 ) / msgs->torrent->blockSize; … … 1764 1760 struct peer_request req; 1765 1761 const int haveMessages = EVBUFFER_LENGTH( msgs->outMessages ) != 0; 1766 const tr_bool fext = tr_peerIoSupportsFEXT( msgs-> io );1762 const tr_bool fext = tr_peerIoSupportsFEXT( msgs->peer->io ); 1767 1763 1768 1764 /** … … 1779 1775 const size_t len = EVBUFFER_LENGTH( msgs->outMessages ); 1780 1776 /* flush the protocol messages */ 1781 dbgmsg( msgs, "flushing outMessages... to %p (length is %zu)", msgs-> io, len );1782 tr_peerIoWriteBuf( msgs-> io, msgs->outMessages, FALSE );1777 dbgmsg( msgs, "flushing outMessages... to %p (length is %zu)", msgs->peer->io, len ); 1778 tr_peerIoWriteBuf( msgs->peer->io, msgs->outMessages, FALSE ); 1783 1779 msgs->clientSentAnythingAt = now; 1784 1780 msgs->outMessagesBatchedAt = 0; … … 1791 1787 **/ 1792 1788 1793 if( ( tr_peerIoGetWriteBufferSpace( msgs-> io ) >= msgs->torrent->blockSize )1789 if( ( tr_peerIoGetWriteBufferSpace( msgs->peer->io ) >= msgs->torrent->blockSize ) 1794 1790 && popNextRequest( msgs, &req ) ) 1795 1791 { … … 1805 1801 msgs = NULL; 1806 1802 } else { 1807 tr_peerIo * io = msgs-> io;1803 tr_peerIo * io = msgs->peer->io; 1808 1804 struct evbuffer * out = evbuffer_new( ); 1809 1805 dbgmsg( msgs, "sending block %u:%u->%u", req.index, req.offset, req.length ); … … 1835 1831 { 1836 1832 dbgmsg( msgs, "sending a keepalive message" ); 1837 tr_peerIoWriteUint32( msgs-> io, msgs->outMessages, 0 );1833 tr_peerIoWriteUint32( msgs->peer->io, msgs->outMessages, 0 ); 1838 1834 pokeBatchPeriod( msgs, IMMEDIATE_PRIORITY_INTERVAL_SECS ); 1839 1835 } … … 1919 1915 } 1920 1916 1921 tr_peerIoWriteUint32( msgs-> io, out,1917 tr_peerIoWriteUint32( msgs->peer->io, out, 1922 1918 sizeof( uint8_t ) + field->byteCount ); 1923 tr_peerIoWriteUint8 ( msgs-> io, out, BT_BITFIELD );1924 tr_peerIoWriteBytes ( msgs-> io, out, field->bits, field->byteCount );1919 tr_peerIoWriteUint8 ( msgs->peer->io, out, BT_BITFIELD ); 1920 tr_peerIoWriteBytes ( msgs->peer->io, out, field->bits, field->byteCount ); 1925 1921 dbgmsg( msgs, "sending bitfield... outMessage size is now %zu", 1926 1922 EVBUFFER_LENGTH( out ) ); … … 1936 1932 tellPeerWhatWeHave( tr_peermsgs * msgs ) 1937 1933 { 1938 const tr_bool fext = tr_peerIoSupportsFEXT( msgs-> io );1934 const tr_bool fext = tr_peerIoSupportsFEXT( msgs->peer->io ); 1939 1935 1940 1936 if( fext && ( tr_cpGetStatus( msgs->torrent->completion ) == TR_SEED ) ) … … 2089 2085 /* write the pex message */ 2090 2086 benc = tr_bencSave( &val, &bencLen ); 2091 tr_peerIoWriteUint32( msgs-> io, out, 2 * sizeof( uint8_t ) + bencLen );2092 tr_peerIoWriteUint8 ( msgs-> io, out, BT_LTEP );2093 tr_peerIoWriteUint8 ( msgs-> io, out, msgs->ut_pex_id );2094 tr_peerIoWriteBytes ( msgs-> io, out, benc, bencLen );2087 tr_peerIoWriteUint32( msgs->peer->io, out, 2 * sizeof( uint8_t ) + bencLen ); 2088 tr_peerIoWriteUint8 ( msgs->peer->io, out, BT_LTEP ); 2089 tr_peerIoWriteUint8 ( msgs->peer->io, out, msgs->ut_pex_id ); 2090 tr_peerIoWriteBytes ( msgs->peer->io, out, benc, bencLen ); 2095 2091 pokeBatchPeriod( msgs, HIGH_PRIORITY_INTERVAL_SECS ); 2096 2092 dbgmsg( msgs, "sending a pex message; outMessage size is now %zu", EVBUFFER_LENGTH( out ) ); … … 2134 2130 m = tr_new0( tr_peermsgs, 1 ); 2135 2131 m->publisher = tr_publisherNew( ); 2136 m-> info= peer;2132 m->peer = peer; 2137 2133 m->session = torrent->session; 2138 2134 m->torrent = torrent; 2139 m->io = peer->io; 2140 m->info->clientIsChoked = 1; 2141 m->info->peerIsChoked = 1; 2142 m->info->clientIsInterested = 0; 2143 m->info->peerIsInterested = 0; 2144 m->info->have = tr_bitfieldNew( torrent->info.pieceCount ); 2135 m->peer->clientIsChoked = 1; 2136 m->peer->peerIsChoked = 1; 2137 m->peer->clientIsInterested = 0; 2138 m->peer->peerIsInterested = 0; 2139 m->peer->have = tr_bitfieldNew( torrent->info.pieceCount ); 2145 2140 m->state = AWAITING_BT_LENGTH; 2146 2141 m->pexTimer = tr_timerNew( m->session, pexPulse, m, PEX_INTERVAL ); … … 2149 2144 m->outMessagesBatchPeriod = LOW_PRIORITY_INTERVAL_SECS; 2150 2145 m->incoming.block = evbuffer_new( ); 2151 m->peerAllowedPieces = NULL;2152 2146 m->peerAskedFor = REQUEST_LIST_INIT; 2153 2147 m->clientAskedFor = REQUEST_LIST_INIT; … … 2157 2151 *setme = tr_publisherSubscribe( m->publisher, func, userData ); 2158 2152 2159 if( tr_peerIoSupportsLTEP( m->io ) )2153 if( tr_peerIoSupportsLTEP( peer->io ) ) 2160 2154 sendLtepHandshake( m ); 2161 2155 2162 2156 tellPeerWhatWeHave( m ); 2163 2157 2164 tr_peerIoSetTimeoutSecs( m-> io, 150 ); /* timeout after N seconds of inactivity */2165 tr_peerIoSetIOFuncs( m-> io, canRead, didWrite, gotError, m );2158 tr_peerIoSetTimeoutSecs( m->peer->io, 150 ); /* timeout after N seconds of inactivity */ 2159 tr_peerIoSetIOFuncs( m->peer->io, canRead, didWrite, gotError, m ); 2166 2160 ratePulse( m ); 2167 2161 … … 2180 2174 reqListClear( &msgs->peerAskedFor ); 2181 2175 2182 tr_bitfieldFree( msgs->peerAllowedPieces );2183 2176 evbuffer_free( msgs->incoming.block ); 2184 2177 evbuffer_free( msgs->outMessages );
Note: See TracChangeset
for help on using the changeset viewer.