mirror of
https://github.com/transmission/transmission
synced 2025-02-23 14:40:43 +00:00
(trunk libT) inline parts of peer-io and bandwidth, too
This commit is contained in:
parent
199e38dd66
commit
73f500e5be
5 changed files with 222 additions and 292 deletions
|
@ -26,21 +26,6 @@
|
|||
****
|
||||
***/
|
||||
|
||||
enum
|
||||
{
|
||||
HISTORY_MSEC = 2000,
|
||||
INTERVAL_MSEC = HISTORY_MSEC,
|
||||
GRANULARITY_MSEC = 50,
|
||||
HISTORY_SIZE = ( INTERVAL_MSEC / GRANULARITY_MSEC ),
|
||||
MAGIC_NUMBER = 43143
|
||||
};
|
||||
|
||||
struct bratecontrol
|
||||
{
|
||||
int newest;
|
||||
struct { uint64_t date, size; } transfers[HISTORY_SIZE];
|
||||
};
|
||||
|
||||
static float
|
||||
getSpeed( const struct bratecontrol * r, int interval_msec )
|
||||
{
|
||||
|
@ -82,30 +67,6 @@ bytesUsed( struct bratecontrol * r, size_t size )
|
|||
*******
|
||||
******/
|
||||
|
||||
struct tr_band
|
||||
{
|
||||
tr_bool isLimited;
|
||||
tr_bool honorParentLimits;
|
||||
size_t bytesLeft;
|
||||
double desiredSpeed;
|
||||
struct bratecontrol raw;
|
||||
struct bratecontrol piece;
|
||||
};
|
||||
|
||||
struct tr_bandwidth
|
||||
{
|
||||
struct tr_band band[2];
|
||||
struct tr_bandwidth * parent;
|
||||
int magicNumber;
|
||||
tr_session * session;
|
||||
tr_ptrArray children; /* struct tr_bandwidth */
|
||||
tr_ptrArray peers; /* tr_peerIo */
|
||||
};
|
||||
|
||||
/***
|
||||
****
|
||||
***/
|
||||
|
||||
static inline int
|
||||
comparePointers( const void * a, const void * b )
|
||||
{
|
||||
|
@ -115,12 +76,6 @@ comparePointers( const void * a, const void * b )
|
|||
return 0;
|
||||
}
|
||||
|
||||
tr_bool
|
||||
tr_isBandwidth( const tr_bandwidth * b )
|
||||
{
|
||||
return ( b != NULL ) && ( b->magicNumber == MAGIC_NUMBER );
|
||||
}
|
||||
|
||||
/***
|
||||
****
|
||||
***/
|
||||
|
@ -195,48 +150,6 @@ tr_bandwidthHonorParentLimits( tr_bandwidth * b,
|
|||
****
|
||||
***/
|
||||
|
||||
void
|
||||
tr_bandwidthSetDesiredSpeed( tr_bandwidth * b,
|
||||
tr_direction dir,
|
||||
double desiredSpeed )
|
||||
{
|
||||
assert( tr_isBandwidth( b ) );
|
||||
assert( tr_isDirection( dir ) );
|
||||
|
||||
b->band[dir].desiredSpeed = desiredSpeed;
|
||||
}
|
||||
|
||||
double
|
||||
tr_bandwidthGetDesiredSpeed( const tr_bandwidth * b,
|
||||
tr_direction dir )
|
||||
{
|
||||
assert( tr_isBandwidth( b ) );
|
||||
assert( tr_isDirection( dir ) );
|
||||
|
||||
return b->band[dir].desiredSpeed;
|
||||
}
|
||||
|
||||
void
|
||||
tr_bandwidthSetLimited( tr_bandwidth * b,
|
||||
tr_direction dir,
|
||||
tr_bool isLimited )
|
||||
{
|
||||
assert( tr_isBandwidth( b ) );
|
||||
assert( tr_isDirection( dir ) );
|
||||
|
||||
b->band[dir].isLimited = isLimited;
|
||||
}
|
||||
|
||||
tr_bool
|
||||
tr_bandwidthIsLimited( const tr_bandwidth * b,
|
||||
tr_direction dir )
|
||||
{
|
||||
assert( tr_isBandwidth( b ) );
|
||||
assert( tr_isDirection( dir ) );
|
||||
|
||||
return b->band[dir].isLimited;
|
||||
}
|
||||
|
||||
#if 0
|
||||
#warning do not check the code in with this enabled
|
||||
#define DEBUG_DIRECTION TR_UP
|
||||
|
@ -358,7 +271,6 @@ tr_bandwidthAddPeer( tr_bandwidth * b,
|
|||
assert( tr_isBandwidth( b ) );
|
||||
assert( tr_isPeerIo( peerIo ) );
|
||||
|
||||
tr_ptrArrayInsertSorted( &b->peers, peerIo, comparePointers );
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -17,6 +17,42 @@
|
|||
#ifndef TR_BANDWIDTH_H
|
||||
#define TR_BANDWIDTH_H
|
||||
|
||||
#include "transmission.h"
|
||||
#include "ptrarray.h"
|
||||
|
||||
struct tr_peerIo;
|
||||
|
||||
/* these are PRIVATE IMPLEMENTATION details that should not be touched.
|
||||
* it's included in the header for inlining and composition. */
|
||||
enum
|
||||
{
|
||||
HISTORY_MSEC = 2000,
|
||||
INTERVAL_MSEC = HISTORY_MSEC,
|
||||
GRANULARITY_MSEC = 50,
|
||||
HISTORY_SIZE = ( INTERVAL_MSEC / GRANULARITY_MSEC ),
|
||||
MAGIC_NUMBER = 43143
|
||||
};
|
||||
|
||||
/* these are PRIVATE IMPLEMENTATION details that should not be touched.
|
||||
* it's included in the header for inlining and composition. */
|
||||
struct bratecontrol
|
||||
{
|
||||
int newest;
|
||||
struct { uint64_t date, size; } transfers[HISTORY_SIZE];
|
||||
};
|
||||
|
||||
/* these are PRIVATE IMPLEMENTATION details that should not be touched.
|
||||
* it's included in the header for inlining and composition. */
|
||||
struct tr_band
|
||||
{
|
||||
tr_bool isLimited;
|
||||
tr_bool honorParentLimits;
|
||||
size_t bytesLeft;
|
||||
double desiredSpeed;
|
||||
struct bratecontrol raw;
|
||||
struct bratecontrol piece;
|
||||
};
|
||||
|
||||
/**
|
||||
* Bandwidth is an object for measuring and constraining bandwidth speeds.
|
||||
*
|
||||
|
@ -56,10 +92,20 @@
|
|||
* and call tr_bandwidthClamp() before performing I/O to see how much
|
||||
* bandwidth they can safely use.
|
||||
*/
|
||||
typedef struct tr_bandwidth
|
||||
{
|
||||
/* these are PRIVATE IMPLEMENTATION details that should not be touched.
|
||||
* it's included in the header for inlining and composition. */
|
||||
|
||||
typedef struct tr_bandwidth tr_bandwidth;
|
||||
struct tr_band band[2];
|
||||
struct tr_bandwidth * parent;
|
||||
int magicNumber;
|
||||
tr_session * session;
|
||||
tr_ptrArray children; /* struct tr_bandwidth */
|
||||
tr_ptrArray peers; /* tr_peerIo */
|
||||
}
|
||||
tr_bandwidth;
|
||||
|
||||
struct tr_peerIo;
|
||||
|
||||
/**
|
||||
***
|
||||
|
@ -74,8 +120,10 @@ tr_bandwidth*
|
|||
void tr_bandwidthFree ( tr_bandwidth * bandwidth );
|
||||
|
||||
/** @brief test to see if the pointer refers to a live bandwidth object */
|
||||
extern inline tr_bool
|
||||
tr_isBandwidth ( const tr_bandwidth * bandwidth );
|
||||
static inline tr_bool tr_isBandwidth( const tr_bandwidth * b )
|
||||
{
|
||||
return ( b != NULL ) && ( b->magicNumber == MAGIC_NUMBER );
|
||||
}
|
||||
|
||||
/******
|
||||
*******
|
||||
|
@ -86,33 +134,42 @@ extern inline tr_bool
|
|||
* @see tr_bandwidthAllocate
|
||||
* @see tr_bandwidthGetDesiredSpeed
|
||||
*/
|
||||
extern inline void
|
||||
tr_bandwidthSetDesiredSpeed ( tr_bandwidth * bandwidth,
|
||||
tr_direction direction,
|
||||
double desiredSpeed );
|
||||
static inline void tr_bandwidthSetDesiredSpeed( tr_bandwidth * bandwidth,
|
||||
tr_direction dir,
|
||||
double desiredSpeed )
|
||||
{
|
||||
bandwidth->band[dir].desiredSpeed = desiredSpeed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Get the desired speed (in KiB/s) for ths bandwidth subtree.
|
||||
* @see tr_bandwidthSetDesiredSpeed
|
||||
*/
|
||||
extern inline double
|
||||
static inline double
|
||||
tr_bandwidthGetDesiredSpeed( const tr_bandwidth * bandwidth,
|
||||
tr_direction direction );
|
||||
tr_direction dir )
|
||||
{
|
||||
return bandwidth->band[dir].desiredSpeed;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Set whether or not this bandwidth should throttle its peer-io's speeds
|
||||
*/
|
||||
extern inline void
|
||||
tr_bandwidthSetLimited ( tr_bandwidth * bandwidth,
|
||||
tr_direction direction,
|
||||
tr_bool isLimited );
|
||||
static inline void tr_bandwidthSetLimited( tr_bandwidth * bandwidth,
|
||||
tr_direction dir,
|
||||
tr_bool isLimited )
|
||||
{
|
||||
bandwidth->band[dir].isLimited = isLimited;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return nonzero if this bandwidth throttles its peer-ios speeds
|
||||
*/
|
||||
extern inline tr_bool
|
||||
tr_bandwidthIsLimited ( const tr_bandwidth * bandwidth,
|
||||
tr_direction direction );
|
||||
static inline tr_bool tr_bandwidthIsLimited( const tr_bandwidth * bandwidth,
|
||||
tr_direction dir )
|
||||
{
|
||||
return bandwidth->band[dir].isLimited;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief allocate the next period_msec's worth of bandwidth for the peer-ios to consume
|
||||
|
@ -132,18 +189,12 @@ size_t tr_bandwidthClamp ( const tr_bandwidth * bandwidth,
|
|||
*******
|
||||
******/
|
||||
|
||||
/**
|
||||
* @brief Get the raw total of bytes read or sent by this bandwidth subtree.
|
||||
*/
|
||||
extern inline double
|
||||
tr_bandwidthGetRawSpeed ( const tr_bandwidth * bandwidth,
|
||||
/** @brief Get the raw total of bytes read or sent by this bandwidth subtree. */
|
||||
double tr_bandwidthGetRawSpeed( const tr_bandwidth * bandwidth,
|
||||
tr_direction direction );
|
||||
|
||||
/**
|
||||
* @brief Get the number of piece data bytes read or sent by this bandwidth subtree.
|
||||
*/
|
||||
extern inline double
|
||||
tr_bandwidthGetPieceSpeed ( const tr_bandwidth * bandwidth,
|
||||
/** @brief Get the number of piece data bytes read or sent by this bandwidth subtree. */
|
||||
double tr_bandwidthGetPieceSpeed( const tr_bandwidth * bandwidth,
|
||||
tr_direction direction );
|
||||
|
||||
/**
|
||||
|
@ -180,15 +231,13 @@ void tr_bandwidthHonorParentLimits ( tr_bandwidth * bandwidth,
|
|||
* @brief add a tr_peerIo to this bandwidth's list.
|
||||
* They will be notified when more bandwidth is made available for them to consume.
|
||||
*/
|
||||
extern inline void
|
||||
tr_bandwidthAddPeer ( tr_bandwidth * bandwidth,
|
||||
void tr_bandwidthAddPeer( tr_bandwidth * bandwidth,
|
||||
struct tr_peerIo * peerIo );
|
||||
|
||||
/**
|
||||
* @brief remove a peer-io from this bandwidth's list.
|
||||
*/
|
||||
extern inline void
|
||||
tr_bandwidthRemovePeer ( tr_bandwidth * bandwidth,
|
||||
void tr_bandwidthRemovePeer( tr_bandwidth * bandwidth,
|
||||
struct tr_peerIo * peerIo );
|
||||
|
||||
#endif
|
||||
|
|
|
@ -78,43 +78,6 @@ struct tr_datatype
|
|||
struct __tr_list head;
|
||||
};
|
||||
|
||||
struct tr_peerIo
|
||||
{
|
||||
tr_bool isEncrypted;
|
||||
tr_bool isIncoming;
|
||||
tr_bool peerIdIsSet;
|
||||
tr_bool extendedProtocolSupported;
|
||||
tr_bool fastExtensionSupported;
|
||||
|
||||
int magicNumber;
|
||||
|
||||
uint8_t encryptionMode;
|
||||
tr_port port;
|
||||
int socket;
|
||||
|
||||
uint8_t peerId[SHA_DIGEST_LENGTH];
|
||||
time_t timeCreated;
|
||||
|
||||
tr_session * session;
|
||||
|
||||
tr_address addr;
|
||||
|
||||
tr_can_read_cb canRead;
|
||||
tr_did_write_cb didWrite;
|
||||
tr_net_error_cb gotError;
|
||||
void * userData;
|
||||
|
||||
tr_bandwidth * bandwidth;
|
||||
tr_crypto * crypto;
|
||||
|
||||
struct evbuffer * inbuf;
|
||||
struct evbuffer * outbuf;
|
||||
struct __tr_list outbuf_datatypes; /* struct tr_datatype */
|
||||
|
||||
struct event event_read;
|
||||
struct event event_write;
|
||||
};
|
||||
|
||||
/***
|
||||
****
|
||||
***/
|
||||
|
@ -799,34 +762,6 @@ tr_peerIoWriteBytes( tr_peerIo * io,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
tr_peerIoWriteUint8( tr_peerIo * io,
|
||||
struct evbuffer * outbuf,
|
||||
uint8_t writeme )
|
||||
{
|
||||
tr_peerIoWriteBytes( io, outbuf, &writeme, sizeof( uint8_t ) );
|
||||
}
|
||||
|
||||
void
|
||||
tr_peerIoWriteUint16( tr_peerIo * io,
|
||||
struct evbuffer * outbuf,
|
||||
uint16_t writeme )
|
||||
{
|
||||
uint16_t tmp = htons( writeme );
|
||||
|
||||
tr_peerIoWriteBytes( io, outbuf, &tmp, sizeof( uint16_t ) );
|
||||
}
|
||||
|
||||
void
|
||||
tr_peerIoWriteUint32( tr_peerIo * io,
|
||||
struct evbuffer * outbuf,
|
||||
uint32_t writeme )
|
||||
{
|
||||
uint32_t tmp = htonl( writeme );
|
||||
|
||||
tr_peerIoWriteBytes( io, outbuf, &tmp, sizeof( uint32_t ) );
|
||||
}
|
||||
|
||||
/***
|
||||
****
|
||||
***/
|
||||
|
@ -856,34 +791,6 @@ tr_peerIoReadBytes( tr_peerIo * io,
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
tr_peerIoReadUint8( tr_peerIo * io,
|
||||
struct evbuffer * inbuf,
|
||||
uint8_t * setme )
|
||||
{
|
||||
tr_peerIoReadBytes( io, inbuf, setme, sizeof( uint8_t ) );
|
||||
}
|
||||
|
||||
void
|
||||
tr_peerIoReadUint16( tr_peerIo * io,
|
||||
struct evbuffer * inbuf,
|
||||
uint16_t * setme )
|
||||
{
|
||||
uint16_t tmp;
|
||||
tr_peerIoReadBytes( io, inbuf, &tmp, sizeof( uint16_t ) );
|
||||
*setme = ntohs( tmp );
|
||||
}
|
||||
|
||||
void
|
||||
tr_peerIoReadUint32( tr_peerIo * io,
|
||||
struct evbuffer * inbuf,
|
||||
uint32_t * setme )
|
||||
{
|
||||
uint32_t tmp;
|
||||
tr_peerIoReadBytes( io, inbuf, &tmp, sizeof( uint32_t ) );
|
||||
*setme = ntohl( tmp );
|
||||
}
|
||||
|
||||
void
|
||||
tr_peerIoDrain( tr_peerIo * io,
|
||||
struct evbuffer * inbuf,
|
||||
|
@ -899,12 +806,6 @@ tr_peerIoDrain( tr_peerIo * io,
|
|||
}
|
||||
}
|
||||
|
||||
int
|
||||
tr_peerIoGetAge( const tr_peerIo * io )
|
||||
{
|
||||
return time( NULL ) - io->timeCreated;
|
||||
}
|
||||
|
||||
/***
|
||||
****
|
||||
***/
|
||||
|
@ -981,22 +882,6 @@ tr_peerIoFlush( tr_peerIo * io, tr_direction dir, size_t limit )
|
|||
return ret;
|
||||
}
|
||||
|
||||
struct evbuffer *
|
||||
tr_peerIoGetReadBuffer( tr_peerIo * io )
|
||||
{
|
||||
assert( tr_isPeerIo( io ) );
|
||||
|
||||
return io->inbuf;
|
||||
}
|
||||
|
||||
tr_bool
|
||||
tr_peerIoHasBandwidthLeft( const tr_peerIo * io, tr_direction dir )
|
||||
{
|
||||
assert( tr_isPeerIo( io ) );
|
||||
|
||||
return tr_bandwidthClamp( io->bandwidth, dir, 1024 ) > 0;
|
||||
}
|
||||
|
||||
/***
|
||||
****
|
||||
****/
|
||||
|
@ -1043,3 +928,13 @@ tr_peerIoSetEnabled( tr_peerIo * io,
|
|||
else
|
||||
event_disable( io, event );
|
||||
}
|
||||
|
||||
tr_bool
|
||||
tr_peerIoHasBandwidthLeft( const tr_peerIo * io,
|
||||
tr_direction dir )
|
||||
{
|
||||
assert( tr_isPeerIo( io ) );
|
||||
|
||||
return tr_bandwidthClamp( io->bandwidth, dir, 1024 ) > 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,11 +21,77 @@
|
|||
***
|
||||
**/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <event.h>
|
||||
|
||||
#include "transmission.h"
|
||||
#include "list.h" /* __tr_list */
|
||||
#include "net.h" /* tr_address */
|
||||
|
||||
struct evbuffer;
|
||||
struct tr_address;
|
||||
struct tr_bandwidth;
|
||||
struct tr_crypto;
|
||||
typedef struct tr_peerIo tr_peerIo;
|
||||
struct tr_peerIo;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
READ_NOW,
|
||||
READ_LATER,
|
||||
READ_ERR
|
||||
}
|
||||
ReadState;
|
||||
|
||||
typedef ReadState ( *tr_can_read_cb )( struct tr_peerIo * io,
|
||||
void * user_data,
|
||||
size_t * setme_piece_byte_count );
|
||||
|
||||
typedef void ( *tr_did_write_cb )( struct tr_peerIo * io,
|
||||
size_t bytesWritten,
|
||||
int wasPieceData,
|
||||
void * userData );
|
||||
|
||||
typedef void ( *tr_net_error_cb )( struct tr_peerIo * io,
|
||||
short what,
|
||||
void * userData );
|
||||
|
||||
typedef struct tr_peerIo
|
||||
{
|
||||
tr_bool isEncrypted;
|
||||
tr_bool isIncoming;
|
||||
tr_bool peerIdIsSet;
|
||||
tr_bool extendedProtocolSupported;
|
||||
tr_bool fastExtensionSupported;
|
||||
|
||||
int magicNumber;
|
||||
|
||||
uint8_t encryptionMode;
|
||||
tr_port port;
|
||||
int socket;
|
||||
|
||||
uint8_t peerId[SHA_DIGEST_LENGTH];
|
||||
time_t timeCreated;
|
||||
|
||||
tr_session * session;
|
||||
|
||||
tr_address addr;
|
||||
|
||||
tr_can_read_cb canRead;
|
||||
tr_did_write_cb didWrite;
|
||||
tr_net_error_cb gotError;
|
||||
void * userData;
|
||||
|
||||
struct tr_bandwidth * bandwidth;
|
||||
struct tr_crypto * crypto;
|
||||
|
||||
struct evbuffer * inbuf;
|
||||
struct evbuffer * outbuf;
|
||||
struct __tr_list outbuf_datatypes; /* struct tr_datatype */
|
||||
|
||||
struct event event_read;
|
||||
struct event event_write;
|
||||
}
|
||||
tr_peerIo;
|
||||
|
||||
/**
|
||||
***
|
||||
|
@ -83,7 +149,10 @@ int tr_peerIoReconnect( tr_peerIo * io );
|
|||
|
||||
tr_bool tr_peerIoIsIncoming( const tr_peerIo * io );
|
||||
|
||||
extern inline int tr_peerIoGetAge( const tr_peerIo * io );
|
||||
static inline int tr_peerIoGetAge( const tr_peerIo * io )
|
||||
{
|
||||
return time( NULL ) - io->timeCreated;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
@ -99,27 +168,6 @@ const uint8_t* tr_peerIoGetPeersId( const tr_peerIo * io );
|
|||
***
|
||||
**/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
READ_NOW,
|
||||
READ_LATER,
|
||||
READ_ERR
|
||||
}
|
||||
ReadState;
|
||||
|
||||
typedef ReadState ( *tr_can_read_cb )( tr_peerIo * io,
|
||||
void * user_data,
|
||||
size_t * setme_piece_byte_count );
|
||||
|
||||
typedef void ( *tr_did_write_cb )( tr_peerIo * io,
|
||||
size_t bytesWritten,
|
||||
int wasPieceData,
|
||||
void * userData );
|
||||
|
||||
typedef void ( *tr_net_error_cb )( tr_peerIo * io,
|
||||
short what,
|
||||
void * userData );
|
||||
|
||||
void tr_peerIoSetIOFuncs ( tr_peerIo * io,
|
||||
tr_can_read_cb readcb,
|
||||
tr_did_write_cb writecb,
|
||||
|
@ -163,37 +211,58 @@ void tr_peerIoWriteBytes( tr_peerIo * io,
|
|||
const void * bytes,
|
||||
size_t byteCount );
|
||||
|
||||
void tr_peerIoWriteUint8( tr_peerIo * io,
|
||||
static inline void tr_peerIoWriteUint8( tr_peerIo * io,
|
||||
struct evbuffer * outbuf,
|
||||
uint8_t writeme );
|
||||
uint8_t writeme )
|
||||
{
|
||||
tr_peerIoWriteBytes( io, outbuf, &writeme, sizeof( uint8_t ) );
|
||||
}
|
||||
|
||||
void tr_peerIoWriteUint16( tr_peerIo * io,
|
||||
static inline void tr_peerIoWriteUint16( tr_peerIo * io,
|
||||
struct evbuffer * outbuf,
|
||||
uint16_t writeme );
|
||||
uint16_t writeme )
|
||||
{
|
||||
const uint16_t tmp = htons( writeme );
|
||||
tr_peerIoWriteBytes( io, outbuf, &tmp, sizeof( uint16_t ) );
|
||||
}
|
||||
|
||||
void tr_peerIoWriteUint32( tr_peerIo * io,
|
||||
static inline void tr_peerIoWriteUint32( tr_peerIo * io,
|
||||
struct evbuffer * outbuf,
|
||||
uint32_t writeme );
|
||||
uint32_t writeme )
|
||||
{
|
||||
const uint32_t tmp = htonl( writeme );
|
||||
tr_peerIoWriteBytes( io, outbuf, &tmp, sizeof( uint32_t ) );
|
||||
}
|
||||
|
||||
void tr_peerIoReadBytes( tr_peerIo * io,
|
||||
struct evbuffer * inbuf,
|
||||
void * bytes,
|
||||
size_t byteCount );
|
||||
|
||||
extern inline void
|
||||
tr_peerIoReadUint8( tr_peerIo * io,
|
||||
static inline void tr_peerIoReadUint8( tr_peerIo * io,
|
||||
struct evbuffer * inbuf,
|
||||
uint8_t * setme );
|
||||
uint8_t * setme )
|
||||
{
|
||||
tr_peerIoReadBytes( io, inbuf, setme, sizeof( uint8_t ) );
|
||||
}
|
||||
|
||||
extern inline void
|
||||
tr_peerIoReadUint16( tr_peerIo * io,
|
||||
static inline void tr_peerIoReadUint16( tr_peerIo * io,
|
||||
struct evbuffer * inbuf,
|
||||
uint16_t * setme );
|
||||
uint16_t * setme )
|
||||
{
|
||||
uint16_t tmp;
|
||||
tr_peerIoReadBytes( io, inbuf, &tmp, sizeof( uint16_t ) );
|
||||
*setme = ntohs( tmp );
|
||||
}
|
||||
|
||||
extern inline void
|
||||
tr_peerIoReadUint32( tr_peerIo * io,
|
||||
static inline void tr_peerIoReadUint32( tr_peerIo * io,
|
||||
struct evbuffer * inbuf,
|
||||
uint32_t * setme );
|
||||
uint32_t * setme )
|
||||
{
|
||||
uint32_t tmp;
|
||||
tr_peerIoReadBytes( io, inbuf, &tmp, sizeof( uint32_t ) );
|
||||
*setme = ntohl( tmp );
|
||||
}
|
||||
|
||||
void tr_peerIoDrain( tr_peerIo * io,
|
||||
struct evbuffer * inbuf,
|
||||
|
@ -213,13 +282,13 @@ void tr_peerIoBandwidthUsed( tr_peerIo * io,
|
|||
size_t byteCount,
|
||||
int isPieceData );
|
||||
|
||||
tr_bool tr_peerIoHasBandwidthLeft( const tr_peerIo * io,
|
||||
tr_direction dir );
|
||||
|
||||
/**
|
||||
***
|
||||
**/
|
||||
|
||||
extern inline tr_bool tr_peerIoHasBandwidthLeft( const tr_peerIo * io,
|
||||
tr_direction direction );
|
||||
|
||||
void tr_peerIoSetEnabled( tr_peerIo * io,
|
||||
tr_direction dir,
|
||||
tr_bool isEnabled );
|
||||
|
@ -228,9 +297,16 @@ int tr_peerIoFlush( tr_peerIo * io,
|
|||
tr_direction dir,
|
||||
size_t byteLimit );
|
||||
|
||||
extern inline struct evbuffer * tr_peerIoGetReadBuffer( tr_peerIo * io );
|
||||
/**
|
||||
***
|
||||
**/
|
||||
|
||||
static inline struct evbuffer * tr_peerIoGetReadBuffer( tr_peerIo * io )
|
||||
{
|
||||
assert( tr_isPeerIo( io ) );
|
||||
|
||||
return io->inbuf;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -40,8 +40,7 @@ void tr_peerMsgsSetChoke( tr_peermsgs *,
|
|||
void tr_peerMsgsHave( tr_peermsgs * msgs,
|
||||
uint32_t pieceIndex );
|
||||
|
||||
extern inline void
|
||||
tr_peerMsgsPulse( tr_peermsgs * msgs );
|
||||
void tr_peerMsgsPulse( tr_peermsgs * msgs );
|
||||
|
||||
void tr_peerMsgsCancel( tr_peermsgs * msgs,
|
||||
uint32_t pieceIndex,
|
||||
|
@ -56,8 +55,7 @@ tr_addreq_t tr_peerMsgsAddRequest( tr_peermsgs * peer,
|
|||
uint32_t offset,
|
||||
uint32_t length );
|
||||
|
||||
extern inline void
|
||||
tr_peerMsgsUnsubscribe( tr_peermsgs * peer,
|
||||
void tr_peerMsgsUnsubscribe( tr_peermsgs * peer,
|
||||
tr_publisher_tag tag );
|
||||
|
||||
size_t tr_generateAllowedSet( tr_piece_index_t * setmePieces,
|
||||
|
|
Loading…
Reference in a new issue