Changeset 7397 for trunk/libtransmission/peer-mgr.c
- Timestamp:
- Dec 15, 2008, 12:17:08 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/peer-mgr.c
r7361 r7397 1347 1347 if( !tr_sessionIsAddressBlocked( t->manager->session, &pex->addr ) ) 1348 1348 ensureAtomExists( t, &pex->addr, pex->port, pex->flags, from ); 1349 1349 1350 1350 managerUnlock( manager ); 1351 1351 } … … 1372 1372 } 1373 1373 1374 *pexCount = n; 1375 return pex; 1376 } 1377 1378 tr_pex * 1379 tr_peerMgrCompact6ToPex( const void * compact, 1380 size_t compactLen, 1381 const uint8_t * added_f, 1382 size_t added_f_len, 1383 size_t * pexCount ) 1384 { 1385 size_t i; 1386 size_t n = compactLen / 18; 1387 const uint8_t * walk = compact; 1388 tr_pex * pex = tr_new0( tr_pex, n ); 1389 1390 for( i = 0; i < n; ++i ) 1391 { 1392 pex[i].addr.type = TR_AF_INET6; 1393 memcpy( &pex[i].addr.addr.addr6.s6_addr, walk, 16 ); walk += 16; 1394 memcpy( &pex[i].port, walk, 2 ); walk += 2; 1395 if( added_f && ( n == added_f_len ) ) 1396 pex[i].flags = added_f[i]; 1397 } 1398 1399 *pexCount = n; 1400 return pex; 1401 } 1402 1403 tr_pex * 1404 tr_peerMgrArrayToPex( const void * array, 1405 size_t arrayLen, 1406 size_t * pexCount ) 1407 { 1408 size_t i; 1409 size_t n = arrayLen / ( sizeof( tr_address ) + 2 ); 1410 /*size_t n = arrayLen / sizeof( tr_peerArrayElement );*/ 1411 const uint8_t * walk = array; 1412 tr_pex * pex = tr_new0( tr_pex, n ); 1413 1414 for( i = 0 ; i < n ; i++ ) { 1415 memcpy( &pex[i].addr, walk, sizeof( tr_address ) ); 1416 memcpy( &pex[i].port, walk + sizeof( tr_address ), 2 ); 1417 pex[i].flags = 0x00; 1418 walk += sizeof( tr_address ) + 2; 1419 } 1420 1374 1421 *pexCount = n; 1375 1422 return pex; … … 1435 1482 1436 1483 int 1437 tr_peerMgrGetPeers( tr_peerMgr *manager,1484 tr_peerMgrGetPeers( tr_peerMgr * manager, 1438 1485 const uint8_t * torrentHash, 1439 tr_pex ** setme_pex ) 1486 tr_pex ** setme_pex, 1487 uint8_t af) 1440 1488 { 1441 1489 int peerCount = 0; 1490 int peersReturning = 0; 1442 1491 const Torrent * t; 1443 1492 … … 1453 1502 int i; 1454 1503 const tr_peer ** peers = (const tr_peer **) tr_ptrArrayPeek( t->peers, &peerCount ); 1504 /* for now, this will waste memory on torrents that have both 1505 * ipv6 and ipv4 peers */ 1455 1506 tr_pex * pex = tr_new( tr_pex, peerCount ); 1456 1507 tr_pex * walk = pex; … … 1459 1510 { 1460 1511 const tr_peer * peer = peers[i]; 1461 const struct peer_atom * atom = getExistingAtom( t, &peer->addr ); 1462 1463 walk->addr = peer->addr; 1464 walk->port = peer->port; 1465 walk->flags = 0; 1466 if( peerPrefersCrypto( peer ) ) 1467 walk->flags |= ADDED_F_ENCRYPTION_FLAG; 1468 if( ( atom->uploadOnly == UPLOAD_ONLY_YES ) || ( peer->progress >= 1.0 ) ) 1469 walk->flags |= ADDED_F_SEED_FLAG; 1512 if( peer->addr.type == af ) 1513 { 1514 const struct peer_atom * atom = getExistingAtom( t, &peer->addr ); 1515 memcpy( &walk->addr, &peer->addr, sizeof( walk->addr ) ); 1516 walk->port = peer->port; 1517 walk->flags = 0; 1518 if( peerPrefersCrypto( peer ) ) 1519 walk->flags |= ADDED_F_ENCRYPTION_FLAG; 1520 if( ( atom->uploadOnly == UPLOAD_ONLY_YES ) || 1521 ( peer->progress >= 1.0 ) ) 1522 walk->flags |= ADDED_F_SEED_FLAG; 1523 peersReturning++; 1524 } 1470 1525 } 1471 1526 1472 1527 assert( ( walk - pex ) == peerCount ); 1473 qsort( pex, peer Count, sizeof( tr_pex ), tr_pexCompare );1528 qsort( pex, peersReturning, sizeof( tr_pex ), tr_pexCompare ); 1474 1529 *setme_pex = pex; 1475 1530 } 1476 1531 1477 1532 managerUnlock( manager ); 1478 return peer Count;1533 return peersReturning; 1479 1534 } 1480 1535 … … 1786 1841 const struct peer_atom * atom = getExistingAtom( t, &peer->addr ); 1787 1842 tr_peer_stat * stat = ret + i; 1788 1789 tr_ntop( &peer->addr, stat->addr, sizeof(stat->addr) ); 1790 tr_strlcpy( stat->client, (peer->client ? peer->client : ""), sizeof(stat->client) ); 1843 tr_address norm_addr; 1844 1845 memcpy( &norm_addr, &peer->addr, sizeof( tr_address ) ); 1846 tr_normalizeV4Mapped( &norm_addr ); 1847 tr_ntop( &norm_addr, stat->addr, sizeof( stat->addr ) ); 1848 tr_strlcpy( stat->client, ( peer->client ? peer->client : "" ), 1849 sizeof( stat->client ) ); 1791 1850 stat->port = ntohs( peer->port ); 1792 1851 stat->from = atom->from;
Note: See TracChangeset
for help on using the changeset viewer.