chore: fix some fixmes (#1449)

* chore: remove assertions that were flagged for removal

* chore: remove unneeded check

* refactor: move tr_peerIoAddrStr to net.h

* refactor: formatter API now takes size_t args

* chore: remove out-of-date FIXME comment

* refactor: cleanup logging win32 ifdefs
This commit is contained in:
Charles Kerr 2020-09-13 16:43:29 -05:00 committed by GitHub
parent 09cc4c7a68
commit a4dd67ae45
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 82 additions and 67 deletions

View File

@ -131,7 +131,12 @@ struct tr_handshake
*** ***
**/ **/
#define dbgmsg(handshake, ...) tr_logAddDeepNamed(tr_peerIoGetAddrStr((handshake)->io), __VA_ARGS__) #define dbgmsg(handshake, ...) \
do { \
char addrstr[TR_ADDRSTRLEN]; \
tr_peerIoGetAddrStr(handshake->io, addrstr, sizeof(addrstr)); \
tr_logAddDeepNamed(addrstr, __VA_ARGS__); \
} while(0)
static char const* getStateName(handshake_state_t const state) static char const* getStateName(handshake_state_t const state)
{ {

View File

@ -33,11 +33,6 @@ static inline bool IsDebuggerPresent(void)
return false; return false;
} }
static inline void OutputDebugStringA(void const* data)
{
TR_UNUSED(data);
}
#endif #endif
/*** /***
@ -175,13 +170,10 @@ void tr_logAddDeep(char const* file, int line, char const* name, char const* fmt
if (fp != TR_BAD_SYS_FILE || IsDebuggerPresent()) if (fp != TR_BAD_SYS_FILE || IsDebuggerPresent())
{ {
va_list args;
char timestr[64];
char* message;
size_t message_len;
struct evbuffer* buf = evbuffer_new(); struct evbuffer* buf = evbuffer_new();
char* base = tr_sys_path_basename(file, NULL); char* base = tr_sys_path_basename(file, NULL);
char timestr[64];
evbuffer_add_printf(buf, "[%s] ", tr_logGetTimeStr(timestr, sizeof(timestr))); evbuffer_add_printf(buf, "[%s] ", tr_logGetTimeStr(timestr, sizeof(timestr)));
if (name != NULL) if (name != NULL)
@ -189,13 +181,18 @@ void tr_logAddDeep(char const* file, int line, char const* name, char const* fmt
evbuffer_add_printf(buf, "%s ", name); evbuffer_add_printf(buf, "%s ", name);
} }
va_list args;
va_start(args, fmt); va_start(args, fmt);
evbuffer_add_vprintf(buf, fmt, args); evbuffer_add_vprintf(buf, fmt, args);
va_end(args); va_end(args);
evbuffer_add_printf(buf, " (%s:%d)" TR_NATIVE_EOL_STR, base, line); evbuffer_add_printf(buf, " (%s:%d)" TR_NATIVE_EOL_STR, base, line);
/* FIXME (libevent2) ifdef this out for nonwindows platforms */
message = evbuffer_free_to_str(buf, &message_len); size_t message_len = 0;
char* const message = evbuffer_free_to_str(buf, &message_len);
#ifdef _WIN32
OutputDebugStringA(message); OutputDebugStringA(message);
#endif
if (fp != TR_BAD_SYS_FILE) if (fp != TR_BAD_SYS_FILE)
{ {

View File

@ -41,7 +41,7 @@
#include "fdlimit.h" /* tr_fdSocketClose() */ #include "fdlimit.h" /* tr_fdSocketClose() */
#include "log.h" #include "log.h"
#include "net.h" #include "net.h"
#include "peer-io.h" /* tr_peerIoAddrStr() FIXME this should be moved to net.h */ #include "peer-socket.h" /* for struct tr_peer_socket */
#include "session.h" /* tr_sessionGetPublicAddress() */ #include "session.h" /* tr_sessionGetPublicAddress() */
#include "tr-assert.h" #include "tr-assert.h"
#include "tr-macros.h" #include "tr-macros.h"
@ -86,6 +86,14 @@ char* tr_net_strerror(char* buf, size_t buflen, int err)
return buf; return buf;
} }
char const* tr_address_and_port_to_string(char* buf, size_t buflen, tr_address const* addr, tr_port port)
{
char addr_buf[INET6_ADDRSTRLEN];
tr_address_to_string_with_buf(addr, addr_buf, sizeof(addr_buf));
tr_snprintf(buf, buflen, "[%s]:%u", addr_buf, ntohs(port));
return buf;
}
char const* tr_address_to_string_with_buf(tr_address const* addr, char* buf, size_t buflen) char const* tr_address_to_string_with_buf(tr_address const* addr, char* buf, size_t buflen)
{ {
TR_ASSERT(tr_address_is_valid(addr)); TR_ASSERT(tr_address_is_valid(addr));
@ -350,8 +358,9 @@ struct tr_peer_socket tr_netOpenPeerSocket(tr_session* session, tr_address const
if (tr_logGetDeepEnabled()) if (tr_logGetDeepEnabled())
{ {
tr_logAddDeep(__FILE__, __LINE__, NULL, "New OUTGOING connection %" PRIdMAX " (%s)", (intmax_t)s, char addrstr[TR_ADDRSTRLEN];
tr_peerIoAddrStr(addr, port)); tr_address_and_port_to_string(addrstr, sizeof(addrstr), addr, port);
tr_logAddDeep(__FILE__, __LINE__, NULL, "New OUTGOING connection %" PRIdMAX " (%s)", (intmax_t)s, addrstr);
} }
return ret; return ret;
@ -404,8 +413,8 @@ static tr_socket_t tr_netBindTCPImpl(tr_address const* addr, tr_port port, bool
} }
optval = 1; optval = 1;
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void const*)&optval, sizeof(optval)); (void)setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void const*)&optval, sizeof(optval));
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void const*)&optval, sizeof(optval)); (void)setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void const*)&optval, sizeof(optval));
#ifdef IPV6_V6ONLY #ifdef IPV6_V6ONLY

View File

@ -105,6 +105,8 @@ char const* tr_address_to_string(tr_address const* addr);
char const* tr_address_to_string_with_buf(tr_address const* addr, char* buf, size_t buflen); char const* tr_address_to_string_with_buf(tr_address const* addr, char* buf, size_t buflen);
char const* tr_address_and_port_to_string(char* buf, size_t buflen, tr_address const* addr, tr_port port);
bool tr_address_from_string(tr_address* setme, char const* string); bool tr_address_from_string(tr_address* setme, char const* string);
bool tr_address_from_sockaddr_storage(tr_address* setme, tr_port* port, struct sockaddr_storage const* src); bool tr_address_from_sockaddr_storage(tr_address* setme, tr_port* port, struct sockaddr_storage const* src);

View File

@ -70,7 +70,12 @@ static size_t guessPacketOverhead(size_t d)
*** ***
**/ **/
#define dbgmsg(io, ...) tr_logAddDeepNamed(tr_peerIoGetAddrStr(io), __VA_ARGS__) #define dbgmsg(io, ...) \
do { \
char addrstr[TR_ADDRSTRLEN]; \
tr_peerIoGetAddrStr(io, addrstr, sizeof(addrstr)); \
tr_logAddDeepNamed(addrstr, __VA_ARGS__); \
} while(0)
/** /**
*** ***
@ -966,16 +971,18 @@ tr_address const* tr_peerIoGetAddress(tr_peerIo const* io, tr_port* port)
return &io->addr; return &io->addr;
} }
char const* tr_peerIoAddrStr(tr_address const* addr, tr_port port) char const* tr_peerIoGetAddrStr(tr_peerIo const* io, char* buf, size_t buflen)
{ {
static char buf[512]; if (tr_isPeerIo(io))
tr_snprintf(buf, sizeof(buf), "[%s]:%u", tr_address_to_string(addr), ntohs(port)); {
return buf; tr_address_and_port_to_string(buf, buflen, &io->addr, io->port);
} }
else
{
tr_strlcpy(buf, "error", buflen);
}
char const* tr_peerIoGetAddrStr(tr_peerIo const* io) return buf;
{
return tr_isPeerIo(io) ? tr_peerIoAddrStr(&io->addr, io->port) : "error";
} }
void tr_peerIoSetIOFuncs(tr_peerIo* io, tr_can_read_cb readcb, tr_did_write_cb writecb, tr_net_error_cb errcb, void* userData) void tr_peerIoSetIOFuncs(tr_peerIo* io, tr_can_read_cb readcb, tr_did_write_cb writecb, tr_net_error_cb errcb, void* userData)

View File

@ -182,9 +182,7 @@ static inline tr_session* tr_peerIoGetSession(tr_peerIo* io)
return io->session; return io->session;
} }
char const* tr_peerIoAddrStr(struct tr_address const* addr, tr_port port); char const* tr_peerIoGetAddrStr(tr_peerIo const* io, char* buf, size_t buflen);
char const* tr_peerIoGetAddrStr(tr_peerIo const* io);
struct tr_address const* tr_peerIoGetAddress(tr_peerIo const* io, tr_port* port); struct tr_address const* tr_peerIoGetAddress(tr_peerIo const* io, tr_port* port);

View File

@ -155,7 +155,10 @@ static bool tr_isAtom(struct peer_atom const* atom)
static char const* tr_atomAddrStr(struct peer_atom const* atom) static char const* tr_atomAddrStr(struct peer_atom const* atom)
{ {
return atom != NULL ? tr_peerIoAddrStr(&atom->addr, atom->port) : "[no atom]"; static char addrstr[TR_ADDRSTRLEN];
return atom != NULL ?
tr_address_and_port_to_string(addrstr, sizeof(addrstr), &atom->addr, atom->port) :
"[no atom]";
} }
struct block_request struct block_request
@ -3866,7 +3869,6 @@ static void bandwidthPulse(evutil_socket_t fd, short what, void* vmgr)
tr_session* session = mgr->session; tr_session* session = mgr->session;
managerLock(mgr); managerLock(mgr);
/* FIXME: this next line probably isn't necessary... */
pumpAllPeers(mgr); pumpAllPeers(mgr);
/* allocate bandwidth to the peers */ /* allocate bandwidth to the peers */

View File

@ -267,12 +267,16 @@ static void myDebug(char const* file, int line, struct tr_peerMsgs const* msgs,
{ {
va_list args; va_list args;
char timestr[64]; char timestr[64];
char addrstr[TR_ADDRSTRLEN];
struct evbuffer* buf = evbuffer_new(); struct evbuffer* buf = evbuffer_new();
char* base = tr_sys_path_basename(file, NULL); char* base = tr_sys_path_basename(file, NULL);
char* message; char* message;
evbuffer_add_printf(buf, "[%s] %s - %s [%s]: ", tr_logGetTimeStr(timestr, sizeof(timestr)), tr_torrentName( evbuffer_add_printf(buf, "[%s] %s - %s [%s]: ",
msgs->torrent), tr_peerIoGetAddrStr(msgs->io), tr_quark_get_string(msgs->peer.client, NULL)); tr_logGetTimeStr(timestr, sizeof(timestr)),
tr_torrentName(msgs->torrent),
tr_peerIoGetAddrStr(msgs->io, addrstr, sizeof(addrstr)),
tr_quark_get_string(msgs->peer.client, NULL));
va_start(args, fmt); va_start(args, fmt);
evbuffer_add_vprintf(buf, fmt, args); evbuffer_add_vprintf(buf, fmt, args);
va_end(args); va_end(args);
@ -660,13 +664,6 @@ static bool tr_peerMsgsCalculateActive(tr_peerMsgs const* msgs, tr_direction dir
if (direction == TR_CLIENT_TO_PEER) if (direction == TR_CLIENT_TO_PEER)
{ {
is_active = tr_peerMsgsIsPeerInterested(msgs) && !tr_peerMsgsIsPeerChoked(msgs); is_active = tr_peerMsgsIsPeerInterested(msgs) && !tr_peerMsgsIsPeerChoked(msgs);
/* FIXME: https://trac.transmissionbt.com/ticket/5505
if (is_active)
{
TR_ASSERT(!tr_peerIsSeed(&msgs->peer));
}
*/
} }
else /* TR_PEER_TO_CLIENT */ else /* TR_PEER_TO_CLIENT */
{ {
@ -2706,7 +2703,6 @@ bool tr_peerMsgsIsIncomingConnection(tr_peerMsgs const* msgs)
bool tr_isPeerMsgs(void const* msgs) bool tr_isPeerMsgs(void const* msgs)
{ {
/* FIXME: this is pretty crude */
return msgs != NULL && ((struct tr_peerMsgs*)msgs)->magic_number == MAGIC_NUMBER; return msgs != NULL && ((struct tr_peerMsgs*)msgs)->magic_number == MAGIC_NUMBER;
} }

View File

@ -178,8 +178,10 @@ static void accept_incoming_peer(evutil_socket_t fd, short what, void* vsession)
{ {
if (tr_logGetDeepEnabled()) if (tr_logGetDeepEnabled())
{ {
char addrstr[TR_ADDRSTRLEN];
tr_address_and_port_to_string(addrstr, sizeof(addrstr), &clientAddr, clientPort);
tr_logAddDeep(__FILE__, __LINE__, NULL, "new incoming connection %" PRIdMAX " (%s)", (intmax_t)clientSocket, tr_logAddDeep(__FILE__, __LINE__, NULL, "new incoming connection %" PRIdMAX " (%s)", (intmax_t)clientSocket,
tr_peerIoAddrStr(&clientAddr, clientPort)); addrstr);
} }
tr_peerMgrAddIncoming(session->peerMgr, &clientAddr, clientPort, tr_peer_socket_tcp_create(clientSocket)); tr_peerMgrAddIncoming(session->peerMgr, &clientAddr, clientPort, tr_peer_socket_tcp_create(clientSocket));

View File

@ -164,6 +164,8 @@
#define TR_INET6_ADDRSTRLEN 46 #define TR_INET6_ADDRSTRLEN 46
#define TR_ADDRSTRLEN 64
#define TR_BAD_SIZE ((size_t)-1) #define TR_BAD_SIZE ((size_t)-1)
/* Guard C code in headers, while including them from C++ */ /* Guard C code in headers, while including them from C++ */

View File

@ -47,21 +47,18 @@ void UTP_Close(struct UTPSocket* socket)
{ {
tr_logAddNamedError(MY_NAME, "UTP_Close(%p) was called.", socket); tr_logAddNamedError(MY_NAME, "UTP_Close(%p) was called.", socket);
dbgmsg("UTP_Close(%p) was called.", socket); dbgmsg("UTP_Close(%p) was called.", socket);
TR_ASSERT(false); /* FIXME: this is too much for the long term, but probably needed in the short term */
} }
void UTP_RBDrained(struct UTPSocket* socket) void UTP_RBDrained(struct UTPSocket* socket)
{ {
tr_logAddNamedError(MY_NAME, "UTP_RBDrained(%p) was called.", socket); tr_logAddNamedError(MY_NAME, "UTP_RBDrained(%p) was called.", socket);
dbgmsg("UTP_RBDrained(%p) was called.", socket); dbgmsg("UTP_RBDrained(%p) was called.", socket);
TR_ASSERT(false); /* FIXME: this is too much for the long term, but probably needed in the short term */
} }
bool UTP_Write(struct UTPSocket* socket, size_t count) bool UTP_Write(struct UTPSocket* socket, size_t count)
{ {
tr_logAddNamedError(MY_NAME, "UTP_RBDrained(%p, %zu) was called.", socket, count); tr_logAddNamedError(MY_NAME, "UTP_RBDrained(%p, %zu) was called.", socket, count);
dbgmsg("UTP_RBDrained(%p, %zu) was called.", socket, count); dbgmsg("UTP_RBDrained(%p, %zu) was called.", socket, count);
TR_ASSERT(false); /* FIXME: this is too much for the long term, but probably needed in the short term */
return false; return false;
} }

View File

@ -1959,7 +1959,7 @@ uint64_t tr_ntohll(uint64_t x)
struct formatter_unit struct formatter_unit
{ {
char* name; char* name;
int64_t value; size_t value;
}; };
struct formatter_units struct formatter_units
@ -1975,10 +1975,10 @@ enum
TR_FMT_TB TR_FMT_TB
}; };
static void formatter_init(struct formatter_units* units, unsigned int kilo, char const* kb, char const* mb, char const* gb, static void formatter_init(struct formatter_units* units, size_t kilo, char const* kb, char const* mb, char const* gb,
char const* tb) char const* tb)
{ {
uint64_t value; size_t value;
value = kilo; value = kilo;
units->units[TR_FMT_KB].name = tr_strdup(kb); units->units[TR_FMT_KB].name = tr_strdup(kb);
@ -1997,7 +1997,7 @@ static void formatter_init(struct formatter_units* units, unsigned int kilo, cha
units->units[TR_FMT_TB].value = value; units->units[TR_FMT_TB].value = value;
} }
static char* formatter_get_size_str(struct formatter_units const* u, char* buf, int64_t bytes, size_t buflen) static char* formatter_get_size_str(struct formatter_units const* u, char* buf, size_t bytes, size_t buflen)
{ {
int precision; int precision;
double value; double value;
@ -2043,21 +2043,21 @@ static char* formatter_get_size_str(struct formatter_units const* u, char* buf,
static struct formatter_units size_units; static struct formatter_units size_units;
void tr_formatter_size_init(unsigned int kilo, char const* kb, char const* mb, char const* gb, char const* tb) void tr_formatter_size_init(size_t kilo, char const* kb, char const* mb, char const* gb, char const* tb)
{ {
formatter_init(&size_units, kilo, kb, mb, gb, tb); formatter_init(&size_units, kilo, kb, mb, gb, tb);
} }
char* tr_formatter_size_B(char* buf, int64_t bytes, size_t buflen) char* tr_formatter_size_B(char* buf, size_t bytes, size_t buflen)
{ {
return formatter_get_size_str(&size_units, buf, bytes, buflen); return formatter_get_size_str(&size_units, buf, bytes, buflen);
} }
static struct formatter_units speed_units; static struct formatter_units speed_units;
unsigned int tr_speed_K = 0U; size_t tr_speed_K = 0;
void tr_formatter_speed_init(unsigned int kilo, char const* kb, char const* mb, char const* gb, char const* tb) void tr_formatter_speed_init(size_t kilo, char const* kb, char const* mb, char const* gb, char const* tb)
{ {
tr_speed_K = kilo; tr_speed_K = kilo;
formatter_init(&speed_units, kilo, kb, mb, gb, tb); formatter_init(&speed_units, kilo, kb, mb, gb, tb);
@ -2095,15 +2095,15 @@ char* tr_formatter_speed_KBps(char* buf, double KBps, size_t buflen)
static struct formatter_units mem_units; static struct formatter_units mem_units;
unsigned int tr_mem_K = 0U; size_t tr_mem_K = 0;
void tr_formatter_mem_init(unsigned int kilo, char const* kb, char const* mb, char const* gb, char const* tb) void tr_formatter_mem_init(size_t kilo, char const* kb, char const* mb, char const* gb, char const* tb)
{ {
tr_mem_K = kilo; tr_mem_K = kilo;
formatter_init(&mem_units, kilo, kb, mb, gb, tb); formatter_init(&mem_units, kilo, kb, mb, gb, tb);
} }
char* tr_formatter_mem_B(char* buf, int64_t bytes_per_second, size_t buflen) char* tr_formatter_mem_B(char* buf, size_t bytes_per_second, size_t buflen)
{ {
return formatter_get_size_str(&mem_units, buf, bytes_per_second, buflen); return formatter_get_size_str(&mem_units, buf, bytes_per_second, buflen);
} }

View File

@ -378,32 +378,30 @@ uint64_t tr_ntohll(uint64_t);
/* example: tr_formatter_size_init(1024, _("KiB"), _("MiB"), _("GiB"), _("TiB")); */ /* example: tr_formatter_size_init(1024, _("KiB"), _("MiB"), _("GiB"), _("TiB")); */
void tr_formatter_size_init(unsigned int kilo, char const* kb, char const* mb, char const* gb, char const* tb); void tr_formatter_size_init(size_t kilo, char const* kb, char const* mb, char const* gb, char const* tb);
void tr_formatter_speed_init(unsigned int kilo, char const* kb, char const* mb, char const* gb, char const* tb); void tr_formatter_speed_init(size_t kilo, char const* kb, char const* mb, char const* gb, char const* tb);
void tr_formatter_mem_init(unsigned int kilo, char const* kb, char const* mb, char const* gb, char const* tb); void tr_formatter_mem_init(size_t kilo, char const* kb, char const* mb, char const* gb, char const* tb);
extern unsigned int tr_speed_K; extern size_t tr_speed_K;
extern unsigned int tr_mem_K; extern size_t tr_mem_K;
extern unsigned int tr_size_K; extern size_t tr_size_K;
/* format a speed from KBps into a user-readable string. */ /* format a speed from KBps into a user-readable string. */
char* tr_formatter_speed_KBps(char* buf, double KBps, size_t buflen); char* tr_formatter_speed_KBps(char* buf, double KBps, size_t buflen);
// FIXME(ckerr): bytes should be a size_t
/* format a memory size from bytes into a user-readable string. */ /* format a memory size from bytes into a user-readable string. */
char* tr_formatter_mem_B(char* buf, int64_t bytes, size_t buflen); char* tr_formatter_mem_B(char* buf, size_t bytes, size_t buflen);
/* format a memory size from MB into a user-readable string. */ /* format a memory size from MB into a user-readable string. */
static inline char* tr_formatter_mem_MB(char* buf, double MBps, size_t buflen) static inline char* tr_formatter_mem_MB(char* buf, double MBps, size_t buflen)
{ {
return tr_formatter_mem_B(buf, (int64_t)(MBps * tr_mem_K * tr_mem_K), buflen); return tr_formatter_mem_B(buf, (size_t)(MBps * tr_mem_K * tr_mem_K), buflen);
} }
// FIXME(ckerr): bytes should be a size_t
/* format a file size from bytes into a user-readable string. */ /* format a file size from bytes into a user-readable string. */
char* tr_formatter_size_B(char* buf, int64_t bytes, size_t buflen); char* tr_formatter_size_B(char* buf, size_t bytes, size_t buflen);
void tr_formatter_get_units(void* dict); void tr_formatter_get_units(void* dict);