make all unit tests pass msvc's /RTCc instrumentation (no implicit integer truncation in casts)

This commit is contained in:
Arvid Norberg 2014-02-05 09:38:32 +00:00
parent 114d417ef3
commit 6c22d426d4
22 changed files with 160 additions and 144 deletions

View File

@ -1456,36 +1456,36 @@ void fe_tobytes(unsigned char *s, const fe h) {
evidently 2^255 h10-2^255 q = 0. evidently 2^255 h10-2^255 q = 0.
Goal: Output h0+...+2^230 h9. Goal: Output h0+...+2^230 h9.
*/ */
s[0] = (unsigned char) (h0 >> 0); s[0] = (unsigned char) ((h0 >> 0) & 0xff);
s[1] = (unsigned char) (h0 >> 8); s[1] = (unsigned char) ((h0 >> 8) & 0xff);
s[2] = (unsigned char) (h0 >> 16); s[2] = (unsigned char) ((h0 >> 16) & 0xff);
s[3] = (unsigned char) ((h0 >> 24) | (h1 << 2)); s[3] = (unsigned char) (((h0 >> 24) | (h1 << 2)) & 0xff);
s[4] = (unsigned char) (h1 >> 6); s[4] = (unsigned char) ((h1 >> 6) & 0xff);
s[5] = (unsigned char) (h1 >> 14); s[5] = (unsigned char) ((h1 >> 14) & 0xff);
s[6] = (unsigned char) ((h1 >> 22) | (h2 << 3)); s[6] = (unsigned char) (((h1 >> 22) | (h2 << 3)) & 0xff);
s[7] = (unsigned char) (h2 >> 5); s[7] = (unsigned char) ((h2 >> 5) & 0xff);
s[8] = (unsigned char) (h2 >> 13); s[8] = (unsigned char) ((h2 >> 13) & 0xff);
s[9] = (unsigned char) ((h2 >> 21) | (h3 << 5)); s[9] = (unsigned char) (((h2 >> 21) | (h3 << 5)) & 0xff);
s[10] = (unsigned char) (h3 >> 3); s[10] = (unsigned char) ((h3 >> 3) & 0xff);
s[11] = (unsigned char) (h3 >> 11); s[11] = (unsigned char) ((h3 >> 11) & 0xff);
s[12] = (unsigned char) ((h3 >> 19) | (h4 << 6)); s[12] = (unsigned char) (((h3 >> 19) | (h4 << 6)) & 0xff);
s[13] = (unsigned char) (h4 >> 2); s[13] = (unsigned char) ((h4 >> 2) & 0xff);
s[14] = (unsigned char) (h4 >> 10); s[14] = (unsigned char) ((h4 >> 10) & 0xff);
s[15] = (unsigned char) (h4 >> 18); s[15] = (unsigned char) ((h4 >> 18) & 0xff);
s[16] = (unsigned char) (h5 >> 0); s[16] = (unsigned char) ((h5 >> 0) & 0xff);
s[17] = (unsigned char) (h5 >> 8); s[17] = (unsigned char) ((h5 >> 8) & 0xff);
s[18] = (unsigned char) (h5 >> 16); s[18] = (unsigned char) ((h5 >> 16) & 0xff);
s[19] = (unsigned char) ((h5 >> 24) | (h6 << 1)); s[19] = (unsigned char) (((h5 >> 24) | (h6 << 1)) & 0xff);
s[20] = (unsigned char) (h6 >> 7); s[20] = (unsigned char) ((h6 >> 7) & 0xff);
s[21] = (unsigned char) (h6 >> 15); s[21] = (unsigned char) ((h6 >> 15) & 0xff);
s[22] = (unsigned char) ((h6 >> 23) | (h7 << 3)); s[22] = (unsigned char) (((h6 >> 23) | (h7 << 3)) & 0xff);
s[23] = (unsigned char) (h7 >> 5); s[23] = (unsigned char) ((h7 >> 5) & 0xff);
s[24] = (unsigned char) (h7 >> 13); s[24] = (unsigned char) ((h7 >> 13) & 0xff);
s[25] = (unsigned char) ((h7 >> 21) | (h8 << 4)); s[25] = (unsigned char) (((h7 >> 21) | (h8 << 4)) & 0xff);
s[26] = (unsigned char) (h8 >> 4); s[26] = (unsigned char) ((h8 >> 4) & 0xff);
s[27] = (unsigned char) (h8 >> 12); s[27] = (unsigned char) ((h8 >> 12) & 0xff);
s[28] = (unsigned char) ((h8 >> 20) | (h9 << 6)); s[28] = (unsigned char) (((h8 >> 20) | (h9 << 6)) & 0xff);
s[29] = (unsigned char) (h9 >> 2); s[29] = (unsigned char) ((h9 >> 2) & 0xff);
s[30] = (unsigned char) (h9 >> 10); s[30] = (unsigned char) ((h9 >> 10) & 0xff);
s[31] = (unsigned char) (h9 >> 18); s[31] = (unsigned char) ((h9 >> 18) & 0xff);
} }

View File

@ -312,38 +312,38 @@ void sc_reduce(unsigned char *s) {
s11 += carry10; s11 += carry10;
s10 -= carry10 << 21; s10 -= carry10 << 21;
s[0] = (unsigned char) (s0 >> 0); s[0] = (unsigned char) ((s0 >> 0) & 0xff);
s[1] = (unsigned char) (s0 >> 8); s[1] = (unsigned char) ((s0 >> 8 & 0xff));
s[2] = (unsigned char) ((s0 >> 16) | (s1 << 5)); s[2] = (unsigned char) (((s0 >> 16) | (s1 << 5)) & 0xff);
s[3] = (unsigned char) (s1 >> 3); s[3] = (unsigned char) ((s1 >> 3) & 0xff);
s[4] = (unsigned char) (s1 >> 11); s[4] = (unsigned char) ((s1 >> 11) & 0xff);
s[5] = (unsigned char) ((s1 >> 19) | (s2 << 2)); s[5] = (unsigned char) (((s1 >> 19) | (s2 << 2)) & 0xff);
s[6] = (unsigned char) (s2 >> 6); s[6] = (unsigned char) ((s2 >> 6) & 0xff);
s[7] = (unsigned char) ((s2 >> 14) | (s3 << 7)); s[7] = (unsigned char) (((s2 >> 14) | (s3 << 7)) & 0xff);
s[8] = (unsigned char) (s3 >> 1); s[8] = (unsigned char) ((s3 >> 1) & 0xff);
s[9] = (unsigned char) (s3 >> 9); s[9] = (unsigned char) ((s3 >> 9) & 0xff);
s[10] = (unsigned char) ((s3 >> 17) | (s4 << 4)); s[10] = (unsigned char) (((s3 >> 17) | (s4 << 4)) & 0xff);
s[11] = (unsigned char) (s4 >> 4); s[11] = (unsigned char) ((s4 >> 4) & 0xff);
s[12] = (unsigned char) (s4 >> 12); s[12] = (unsigned char) ((s4 >> 12) & 0xff);
s[13] = (unsigned char) ((s4 >> 20) | (s5 << 1)); s[13] = (unsigned char) (((s4 >> 20) | (s5 << 1)) & 0xff);
s[14] = (unsigned char) (s5 >> 7); s[14] = (unsigned char) ((s5 >> 7) & 0xff);
s[15] = (unsigned char) ((s5 >> 15) | (s6 << 6)); s[15] = (unsigned char) (((s5 >> 15) | (s6 << 6)) & 0xff);
s[16] = (unsigned char) (s6 >> 2); s[16] = (unsigned char) ((s6 >> 2) & 0xff);
s[17] = (unsigned char) (s6 >> 10); s[17] = (unsigned char) ((s6 >> 10) & 0xff);
s[18] = (unsigned char) ((s6 >> 18) | (s7 << 3)); s[18] = (unsigned char) (((s6 >> 18) | (s7 << 3)) & 0xff);
s[19] = (unsigned char) (s7 >> 5); s[19] = (unsigned char) ((s7 >> 5) & 0xff);
s[20] = (unsigned char) (s7 >> 13); s[20] = (unsigned char) ((s7 >> 13) & 0xff);
s[21] = (unsigned char) (s8 >> 0); s[21] = (unsigned char) ((s8 >> 0) & 0xff);
s[22] = (unsigned char) (s8 >> 8); s[22] = (unsigned char) ((s8 >> 8) & 0xff);
s[23] = (unsigned char) ((s8 >> 16) | (s9 << 5)); s[23] = (unsigned char) (((s8 >> 16) | (s9 << 5)) & 0xff);
s[24] = (unsigned char) (s9 >> 3); s[24] = (unsigned char) ((s9 >> 3) & 0xff);
s[25] = (unsigned char) (s9 >> 11); s[25] = (unsigned char) ((s9 >> 11) & 0xff);
s[26] = (unsigned char) ((s9 >> 19) | (s10 << 2)); s[26] = (unsigned char) (((s9 >> 19) | (s10 << 2)) & 0xff);
s[27] = (unsigned char) (s10 >> 6); s[27] = (unsigned char) ((s10 >> 6) & 0xff);
s[28] = (unsigned char) ((s10 >> 14) | (s11 << 7)); s[28] = (unsigned char) (((s10 >> 14) | (s11 << 7)) & 0xff);
s[29] = (unsigned char) (s11 >> 1); s[29] = (unsigned char) ((s11 >> 1) & 0xff);
s[30] = (unsigned char) (s11 >> 9); s[30] = (unsigned char) ((s11 >> 9) & 0xff);
s[31] = (unsigned char) (s11 >> 17); s[31] = (unsigned char) ((s11 >> 17) & 0xff);
} }
@ -774,36 +774,36 @@ void sc_muladd(unsigned char *s, const unsigned char *a, const unsigned char *b,
s11 += carry10; s11 += carry10;
s10 -= carry10 << 21; s10 -= carry10 << 21;
s[0] = (unsigned char) (s0 >> 0); s[0] = (unsigned char) ((s0 >> 0) & 0xff);
s[1] = (unsigned char) (s0 >> 8); s[1] = (unsigned char) ((s0 >> 8) & 0xff);
s[2] = (unsigned char) ((s0 >> 16) | (s1 << 5)); s[2] = (unsigned char) (((s0 >> 16) | (s1 << 5)) & 0xff);
s[3] = (unsigned char) (s1 >> 3); s[3] = (unsigned char) ((s1 >> 3) & 0xff);
s[4] = (unsigned char) (s1 >> 11); s[4] = (unsigned char) ((s1 >> 11) & 0xff);
s[5] = (unsigned char) ((s1 >> 19) | (s2 << 2)); s[5] = (unsigned char) (((s1 >> 19) | (s2 << 2)) & 0xff);
s[6] = (unsigned char) (s2 >> 6); s[6] = (unsigned char) ((s2 >> 6) & 0xff);
s[7] = (unsigned char) ((s2 >> 14) | (s3 << 7)); s[7] = (unsigned char) (((s2 >> 14) | (s3 << 7)) & 0xff);
s[8] = (unsigned char) (s3 >> 1); s[8] = (unsigned char) ((s3 >> 1) & 0xff);
s[9] = (unsigned char) (s3 >> 9); s[9] = (unsigned char) ((s3 >> 9) & 0xff);
s[10] = (unsigned char) ((s3 >> 17) | (s4 << 4)); s[10] = (unsigned char) (((s3 >> 17) | (s4 << 4)) & 0xff);
s[11] = (unsigned char) (s4 >> 4); s[11] = (unsigned char) ((s4 >> 4) & 0xff);
s[12] = (unsigned char) (s4 >> 12); s[12] = (unsigned char) ((s4 >> 12) & 0xff);
s[13] = (unsigned char) ((s4 >> 20) | (s5 << 1)); s[13] = (unsigned char) (((s4 >> 20) | (s5 << 1)) & 0xff);
s[14] = (unsigned char) (s5 >> 7); s[14] = (unsigned char) ((s5 >> 7) & 0xff);
s[15] = (unsigned char) ((s5 >> 15) | (s6 << 6)); s[15] = (unsigned char) (((s5 >> 15) | (s6 << 6)) & 0xff);
s[16] = (unsigned char) (s6 >> 2); s[16] = (unsigned char) ((s6 >> 2) & 0xff);
s[17] = (unsigned char) (s6 >> 10); s[17] = (unsigned char) ((s6 >> 10) & 0xff);
s[18] = (unsigned char) ((s6 >> 18) | (s7 << 3)); s[18] = (unsigned char) (((s6 >> 18) | (s7 << 3)) & 0xff);
s[19] = (unsigned char) (s7 >> 5); s[19] = (unsigned char) ((s7 >> 5) & 0xff);
s[20] = (unsigned char) (s7 >> 13); s[20] = (unsigned char) ((s7 >> 13) & 0xff);
s[21] = (unsigned char) (s8 >> 0); s[21] = (unsigned char) ((s8 >> 0) & 0xff);
s[22] = (unsigned char) (s8 >> 8); s[22] = (unsigned char) ((s8 >> 8) & 0xff);
s[23] = (unsigned char) ((s8 >> 16) | (s9 << 5)); s[23] = (unsigned char) (((s8 >> 16) | (s9 << 5)) & 0xff);
s[24] = (unsigned char) (s9 >> 3); s[24] = (unsigned char) ((s9 >> 3) & 0xff);
s[25] = (unsigned char) (s9 >> 11); s[25] = (unsigned char) ((s9 >> 11) & 0xff);
s[26] = (unsigned char) ((s9 >> 19) | (s10 << 2)); s[26] = (unsigned char) (((s9 >> 19) | (s10 << 2)) & 0xff);
s[27] = (unsigned char) (s10 >> 6); s[27] = (unsigned char) ((s10 >> 6) & 0xff);
s[28] = (unsigned char) ((s10 >> 14) | (s11 << 7)); s[28] = (unsigned char) (((s10 >> 14) | (s11 << 7)) & 0xff);
s[29] = (unsigned char) (s11 >> 1); s[29] = (unsigned char) ((s11 >> 1) & 0xff);
s[30] = (unsigned char) (s11 >> 9); s[30] = (unsigned char) ((s11 >> 9) & 0xff);
s[31] = (unsigned char) (s11 >> 17); s[31] = (unsigned char) ((s11 >> 17) & 0xff);
} }

View File

@ -128,7 +128,7 @@ namespace libtorrent
if (m_bytes[i] != 0xff) return false; if (m_bytes[i] != 0xff) return false;
} }
int rest = m_size - num_bytes * 8; int rest = m_size - num_bytes * 8;
boost::uint8_t mask = 0xff << (8-rest); boost::uint8_t mask = (0xff << (8-rest)) & 0xff;
if (rest > 0 && (m_bytes[num_bytes] & mask) != mask) if (rest > 0 && (m_bytes[num_bytes] & mask) != mask)
return false; return false;
return true; return true;

View File

@ -50,7 +50,7 @@ struct node_entry
node_entry(node_id const& id_, udp::endpoint ep, int roundtriptime = 0xffff, bool pinged = false) node_entry(node_id const& id_, udp::endpoint ep, int roundtriptime = 0xffff, bool pinged = false)
: id(id_) : id(id_)
, endpoint(ep) , endpoint(ep)
, rtt(roundtriptime) , rtt(roundtriptime & 0xffff)
, timeout_count(pinged ? 0 : 0xff) , timeout_count(pinged ? 0 : 0xff)
{ {
#ifdef TORRENT_DHT_VERBOSE_LOGGING #ifdef TORRENT_DHT_VERBOSE_LOGGING

View File

@ -177,7 +177,7 @@ namespace libtorrent
for (int i = number_size - 1; i > 0; --i) for (int i = number_size - 1; i > 0; --i)
{ {
m_number[i] >>= n; m_number[i] >>= n;
m_number[i] |= m_number[i-1] << (8 - n); m_number[i] |= (m_number[i-1] << (8 - n)) & 0xff;
} }
m_number[0] >>= n; m_number[0] >>= n;
} }

View File

@ -366,6 +366,9 @@ namespace libtorrent
send_buffer(msg, sizeof(msg)); send_buffer(msg, sizeof(msg));
} }
char random_byte()
{ return random() & 0xff; }
void bt_peer_connection::get_specific_peer_info(peer_info& p) const void bt_peer_connection::get_specific_peer_info(peer_info& p) const
{ {
TORRENT_ASSERT(!associated_torrent().expired()); TORRENT_ASSERT(!associated_torrent().expired());
@ -441,7 +444,7 @@ namespace libtorrent
memcpy(ptr, m_dh_key_exchange->get_local_key(), dh_key_len); memcpy(ptr, m_dh_key_exchange->get_local_key(), dh_key_len);
ptr += dh_key_len; ptr += dh_key_len;
std::generate(ptr, ptr + pad_size, random); std::generate(ptr, ptr + pad_size, random_byte);
send_buffer(msg, buf_size); send_buffer(msg, buf_size);
#ifdef TORRENT_VERBOSE_LOGGING #ifdef TORRENT_VERBOSE_LOGGING
@ -571,7 +574,7 @@ namespace libtorrent
detail::write_uint16(pad_size, write_buf); // len (pad) detail::write_uint16(pad_size, write_buf); // len (pad)
// fill pad with zeroes // fill pad with zeroes
std::generate(write_buf, write_buf + pad_size, &random); std::generate(write_buf, write_buf + pad_size, random_byte);
write_buf += pad_size; write_buf += pad_size;
// append len(ia) if we are initiating // append len(ia) if we are initiating
@ -788,7 +791,7 @@ namespace libtorrent
// in anonymous mode, every peer connection // in anonymous mode, every peer connection
// has a unique peer-id // has a unique peer-id
for (int i = 0; i < 20; ++i) for (int i = 0; i < 20; ++i)
ptr[i] = random(); ptr[i] = random() & 0xff;
} }
else else
{ {

View File

@ -146,8 +146,8 @@ node_id generate_id_impl(address const& ip_, boost::uint32_t r)
id[1] = (c >> 16) & 0xff; id[1] = (c >> 16) & 0xff;
id[2] = ((c >> 8) & 0xf8) | (random() & 0x7); id[2] = ((c >> 8) & 0xf8) | (random() & 0x7);
for (int i = 3; i < 19; ++i) id[i] = random(); for (int i = 3; i < 19; ++i) id[i] = random() & 0xff;
id[19] = r; id[19] = r & 0xff;
return id; return id;
} }
@ -155,7 +155,7 @@ node_id generate_id_impl(address const& ip_, boost::uint32_t r)
node_id generate_random_id() node_id generate_random_id()
{ {
char r[20]; char r[20];
for (int i = 0; i < 20; ++i) r[i] = random(); for (int i = 0; i < 20; ++i) r[i] = random() & 0xff;
return hasher(r, 20).final(); return hasher(r, 20).final();
} }
@ -188,7 +188,7 @@ node_id generate_prefix_mask(int bits)
node_id mask(0); node_id mask(0);
int b = 0; int b = 0;
for (; b < bits - 7; b += 8) mask[b/8] |= 0xff; for (; b < bits - 7; b += 8) mask[b/8] |= 0xff;
mask[b/8] |= 0xff << (8 - (bits&7)); mask[b/8] |= (0xff << (8 - (bits&7))) & 0xff;
return mask; return mask;
} }

View File

@ -475,7 +475,7 @@ bool rpc_manager::invoke(entry& e, udp::endpoint target_addr
std::string transaction_id; std::string transaction_id;
transaction_id.resize(2); transaction_id.resize(2);
char* out = &transaction_id[0]; char* out = &transaction_id[0];
int tid = random() ^ (random() << 5); int tid = (random() ^ (random() << 5)) & 0xffff;
io::write_uint16(tid, out); io::write_uint16(tid, out);
e["t"] = transaction_id; e["t"] = transaction_id;

View File

@ -454,7 +454,7 @@ int fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs)
} }
/* store term */ /* store term */
W[ix] = ((mp_digit)_W) & MP_MASK; W[ix] = (mp_digit)(_W & MP_MASK);
/* make next carry */ /* make next carry */
_W = _W >> ((mp_word)DIGIT_BIT); _W = _W >> ((mp_word)DIGIT_BIT);

View File

@ -111,7 +111,7 @@ get_out:
#elif defined TORRENT_USE_OPENSSL #elif defined TORRENT_USE_OPENSSL
// create local key // create local key
for (int i = 0; i < sizeof(m_dh_local_secret); ++i) for (int i = 0; i < sizeof(m_dh_local_secret); ++i)
m_dh_local_secret[i] = random(); m_dh_local_secret[i] = random() & 0xff;
BIGNUM* prime = 0; BIGNUM* prime = 0;
BIGNUM* secret = 0; BIGNUM* secret = 0;
@ -146,7 +146,7 @@ get_out:
#elif defined TORRENT_USE_TOMMATH #elif defined TORRENT_USE_TOMMATH
// create local key // create local key
for (int i = 0; i < int(sizeof(m_dh_local_secret)); ++i) for (int i = 0; i < int(sizeof(m_dh_local_secret)); ++i)
m_dh_local_secret[i] = random(); m_dh_local_secret[i] = random() & 0xff;
mp_int prime; mp_int prime;
mp_int secret; mp_int secret;

View File

@ -270,13 +270,14 @@ namespace aux {
tu->system_time = min_time() + microsec(stime / 10); tu->system_time = min_time() + microsec(stime / 10);
#endif #endif
} }
#endif //TORRENT_STATS #endif //TORRENT_STATS
struct seed_random_generator struct seed_random_generator
{ {
seed_random_generator() seed_random_generator()
{ {
random_seed((unsigned int)total_microseconds(time_now_hires() - min_time())); random_seed((unsigned int)((total_microseconds(
time_now_hires() - min_time())) & 0xffffffff));
} }
}; };

View File

@ -468,7 +468,7 @@ namespace libtorrent
} }
else else
{ {
send_id = random(); send_id = random() & 0xffff;
recv_id = send_id - 1; recv_id = send_id - 1;
} }
utp_socket_impl* impl = construct_utp_impl(recv_id, send_id, str, this); utp_socket_impl* impl = construct_utp_impl(recv_id, send_id, str, this);

View File

@ -1227,7 +1227,7 @@ void utp_socket_impl::send_syn()
{ {
INVARIANT_CHECK; INVARIANT_CHECK;
m_seq_nr = random(); m_seq_nr = random() & 0xffff;
m_acked_seq_nr = (m_seq_nr - 1) & ACK_MASK; m_acked_seq_nr = (m_seq_nr - 1) & ACK_MASK;
m_loss_seq_nr = m_acked_seq_nr; m_loss_seq_nr = m_acked_seq_nr;
m_ack_nr = 0; m_ack_nr = 0;
@ -1256,7 +1256,7 @@ void utp_socket_impl::send_syn()
ptime now = time_now_hires(); ptime now = time_now_hires();
p->send_time = now; p->send_time = now;
h->timestamp_microseconds = boost::uint32_t(total_microseconds(now - min_time())); h->timestamp_microseconds = boost::uint32_t(total_microseconds(now - min_time()) & 0xffffffff);
#if TORRENT_UTP_LOG #if TORRENT_UTP_LOG
UTP_LOGV("%8p: send_syn seq_nr:%d id:%d target:%s\n" UTP_LOGV("%8p: send_syn seq_nr:%d id:%d target:%s\n"
@ -1345,7 +1345,7 @@ void utp_socket_impl::send_reset(utp_header* ph)
h.connection_id = m_send_id; h.connection_id = m_send_id;
h.timestamp_difference_microseconds = m_reply_micro; h.timestamp_difference_microseconds = m_reply_micro;
h.wnd_size = 0; h.wnd_size = 0;
h.seq_nr = random(); h.seq_nr = random() & 0xffff;
h.ack_nr = ph->seq_nr; h.ack_nr = ph->seq_nr;
ptime now = time_now_hires(); ptime now = time_now_hires();
h.timestamp_microseconds = boost::uint32_t(total_microseconds(now - min_time())); h.timestamp_microseconds = boost::uint32_t(total_microseconds(now - min_time()));
@ -1862,7 +1862,8 @@ bool utp_socket_impl::send_pkt(int flags)
// fill in the timestamp as late as possible // fill in the timestamp as late as possible
ptime now = time_now_hires(); ptime now = time_now_hires();
p->send_time = now; p->send_time = now;
h->timestamp_microseconds = boost::uint32_t(total_microseconds(now - min_time())); h->timestamp_microseconds = boost::uint32_t(
total_microseconds(now - min_time()) & 0xffffffff);
#if TORRENT_UTP_LOG #if TORRENT_UTP_LOG
UTP_LOG("%8p: sending packet seq_nr:%d ack_nr:%d type:%s " UTP_LOG("%8p: sending packet seq_nr:%d ack_nr:%d type:%s "
@ -2053,7 +2054,8 @@ bool utp_socket_impl::resend_packet(packet* p, bool fast_resend)
// update packet header // update packet header
h->timestamp_difference_microseconds = m_reply_micro; h->timestamp_difference_microseconds = m_reply_micro;
p->send_time = time_now_hires(); p->send_time = time_now_hires();
h->timestamp_microseconds = boost::uint32_t(total_microseconds(p->send_time - min_time())); h->timestamp_microseconds = boost::uint32_t(
total_microseconds(p->send_time - min_time()) & 0xffffffff);
// if the packet has a selective ack header, we'll need // if the packet has a selective ack header, we'll need
// to update it // to update it
@ -2545,8 +2547,8 @@ bool utp_socket_impl::incoming_packet(boost::uint8_t const* buf, int size
boost::uint32_t their_delay = 0; boost::uint32_t their_delay = 0;
if (ph->timestamp_microseconds != 0) if (ph->timestamp_microseconds != 0)
{ {
m_reply_micro = boost::uint32_t(total_microseconds(receive_time - min_time())) boost::uint32_t timestamp = boost::uint32_t(total_microseconds(receive_time - min_time()) & 0xffffffff);
- ph->timestamp_microseconds; m_reply_micro = timestamp - ph->timestamp_microseconds;
boost::uint32_t prev_base = m_their_delay_hist.initialized() ? m_their_delay_hist.base() : 0; boost::uint32_t prev_base = m_their_delay_hist.initialized() ? m_their_delay_hist.base() : 0;
their_delay = m_their_delay_hist.add_sample(m_reply_micro, step); their_delay = m_their_delay_hist.add_sample(m_reply_micro, step);
int base_change = m_their_delay_hist.base() - prev_base; int base_change = m_their_delay_hist.base() - prev_base;
@ -2867,7 +2869,7 @@ bool utp_socket_impl::incoming_packet(boost::uint8_t const* buf, int size
m_local_address = m_sm->local_endpoint(m_remote_address, ec).address(); m_local_address = m_sm->local_endpoint(m_remote_address, ec).address();
m_ack_nr = ph->seq_nr; m_ack_nr = ph->seq_nr;
m_seq_nr = random(); m_seq_nr = random() & 0xffff;
m_acked_seq_nr = (m_seq_nr - 1) & ACK_MASK; m_acked_seq_nr = (m_seq_nr - 1) & ACK_MASK;
m_loss_seq_nr = m_acked_seq_nr; m_loss_seq_nr = m_acked_seq_nr;
m_fast_resend_seq_nr = m_seq_nr; m_fast_resend_seq_nr = m_seq_nr;

View File

@ -91,7 +91,7 @@ int main()
| SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
#endif #endif
srand(total_microseconds(time_now_hires() - min_time())); srand((total_microseconds(time_now_hires() - min_time())) & 0x7fffffff);
#ifdef O_NONBLOCK #ifdef O_NONBLOCK
// on darwin, stdout is set to non-blocking mode by default // on darwin, stdout is set to non-blocking mode by default
// which sometimes causes tests to fail with EAGAIN just // which sometimes causes tests to fail with EAGAIN just

View File

@ -328,6 +328,7 @@ static std::map<int, proxy_t> running_proxies;
void stop_proxy(int port) void stop_proxy(int port)
{ {
fprintf(stderr, "stopping proxy on port %d\n", port);
// don't shut down proxies until the test is // don't shut down proxies until the test is
// completely done. This saves a lot of time. // completely done. This saves a lot of time.
// they're closed at the end of main() by // they're closed at the end of main() by
@ -419,7 +420,7 @@ int start_proxy(int proxy_type)
if (i->second.type == proxy_type) return i->first; if (i->second.type == proxy_type) return i->first;
} }
unsigned int seed = total_microseconds(time_now_hires() - min_time()); unsigned int seed = total_microseconds(time_now_hires() - min_time()) & 0xffffffff;
printf("random seed: %u\n", seed); printf("random seed: %u\n", seed);
std::srand(seed); std::srand(seed);
int port = 5000 + (rand() % 55000); int port = 5000 + (rand() % 55000);
@ -477,13 +478,16 @@ boost::intrusive_ptr<T> clone_ptr(boost::intrusive_ptr<T> const& ptr)
return boost::intrusive_ptr<T>(new T(*ptr)); return boost::intrusive_ptr<T>(new T(*ptr));
} }
unsigned char random_byte()
{ return std::rand() & 0xff; }
void create_random_files(std::string const& path, const int file_sizes[], int num_files) void create_random_files(std::string const& path, const int file_sizes[], int num_files)
{ {
error_code ec; error_code ec;
char* random_data = (char*)malloc(300000); char* random_data = (char*)malloc(300000);
for (int i = 0; i != num_files; ++i) for (int i = 0; i != num_files; ++i)
{ {
std::generate(random_data, random_data + 300000, &std::rand); std::generate(random_data, random_data + 300000, random_byte);
char filename[200]; char filename[200];
snprintf(filename, sizeof(filename), "test%d", i); snprintf(filename, sizeof(filename), "test%d", i);
std::string full_path = combine_path(path, filename); std::string full_path = combine_path(path, filename);
@ -617,14 +621,14 @@ setup_transfer(session* ses1, session* ses2, session* ses3
if (ses3) ses3->set_alert_mask(~(alert::progress_notification | alert::stats_notification)); if (ses3) ses3->set_alert_mask(~(alert::progress_notification | alert::stats_notification));
peer_id pid; peer_id pid;
std::generate(&pid[0], &pid[0] + 20, std::rand); std::generate(&pid[0], &pid[0] + 20, random_byte);
ses1->set_peer_id(pid); ses1->set_peer_id(pid);
std::generate(&pid[0], &pid[0] + 20, std::rand); std::generate(&pid[0], &pid[0] + 20, random_byte);
ses2->set_peer_id(pid); ses2->set_peer_id(pid);
assert(ses1->id() != ses2->id()); assert(ses1->id() != ses2->id());
if (ses3) if (ses3)
{ {
std::generate(&pid[0], &pid[0] + 20, std::rand); std::generate(&pid[0], &pid[0] + 20, random_byte);
ses3->set_peer_id(pid); ses3->set_peer_id(pid);
assert(ses3->id() != ses2->id()); assert(ses3->id() != ses2->id());
} }
@ -931,7 +935,7 @@ pid_type web_server_pid = 0;
int start_web_server(bool ssl, bool chunked_encoding) int start_web_server(bool ssl, bool chunked_encoding)
{ {
unsigned int seed = total_microseconds(time_now_hires() - min_time()); unsigned int seed = total_microseconds(time_now_hires() - min_time()) & 0xffffffff;
fprintf(stderr, "random seed: %u\n", seed); fprintf(stderr, "random seed: %u\n", seed);
std::srand(seed); std::srand(seed);
int port = 5000 + (rand() % 55000); int port = 5000 + (rand() % 55000);
@ -954,6 +958,7 @@ int start_web_server(bool ssl, bool chunked_encoding)
void stop_web_server() void stop_web_server()
{ {
if (web_server_pid == 0) return; if (web_server_pid == 0) return;
fprintf(stderr, "stopping web server\n");
stop_process(web_server_pid); stop_process(web_server_pid);
web_server_pid = 0; web_server_pid = 0;
} }

View File

@ -45,6 +45,7 @@ namespace libtorrent
} }
int EXPORT print_failures(); int EXPORT print_failures();
unsigned char EXPORT random_byte();
int EXPORT load_file(std::string const& filename, std::vector<char>& v, libtorrent::error_code& ec, int limit = 8000000); int EXPORT load_file(std::string const& filename, std::vector<char>& v, libtorrent::error_code& ec, int limit = 8000000);
void EXPORT save_file(char const* filename, char const* data, int size); void EXPORT save_file(char const* filename, char const* data, int size);

View File

@ -207,7 +207,10 @@ class SocksHandler(StreamRequestHandler):
self.send_reply(outbound_sock.getsockname()) self.send_reply(outbound_sock.getsockname())
spawn_forwarder(outbound_sock, self.request, 'destination') spawn_forwarder(outbound_sock, self.request, 'destination')
forward(self.request, outbound_sock, 'client') try:
forward(self.request, outbound_sock, 'client')
except Exception,e:
print e
def send_reply_v4(self, (bind_addr, bind_port)): def send_reply_v4(self, (bind_addr, bind_port)):
self.wfile.write('\0\x5a\0\0\0\0\0\0') self.wfile.write('\0\x5a\0\0\0\0\0\0')
@ -267,6 +270,7 @@ if __name__ == '__main__':
debug('Listening on port %d...' % listen_port) debug('Listening on port %d...' % listen_port)
server = MyTCPServer(('localhost', listen_port), SocksHandler) server = MyTCPServer(('localhost', listen_port), SocksHandler)
server.timeout = 120 server.timeout = 190
while True: while True:
server.handle_request() server.handle_request()

View File

@ -112,14 +112,14 @@ udp::endpoint rand_ep()
sha1_hash generate_next() sha1_hash generate_next()
{ {
sha1_hash ret; sha1_hash ret;
for (int i = 0; i < 20; ++i) ret[i] = rand(); for (int i = 0; i < 20; ++i) ret[i] = rand() & 0xff;
return ret; return ret;
} }
boost::array<char, 64> generate_key() boost::array<char, 64> generate_key()
{ {
boost::array<char, 64> ret; boost::array<char, 64> ret;
for (int i = 0; i < 64; ++i) ret[i] = rand(); for (int i = 0; i < 64; ++i) ret[i] = rand() & 0xff;
return ret; return ret;
} }
@ -1287,7 +1287,7 @@ int test_main()
std::vector<node_entry> temp; std::vector<node_entry> temp;
std::generate(tmp.begin(), tmp.end(), &std::rand); std::generate(tmp.begin(), tmp.end(), random_byte);
table.find_node(tmp, temp, 0, nodes.size() * 2); table.find_node(tmp, temp, 0, nodes.size() * 2);
printf("returned-all: %d\n", int(temp.size())); printf("returned-all: %d\n", int(temp.size()));
TEST_EQUAL(temp.size(), nodes.size()); TEST_EQUAL(temp.size(), nodes.size());
@ -1304,7 +1304,7 @@ int test_main()
for (int r = 0; r < reps; ++r) for (int r = 0; r < reps; ++r)
{ {
std::generate(tmp.begin(), tmp.end(), &std::rand); std::generate(tmp.begin(), tmp.end(), random_byte);
table.find_node(tmp, temp, 0, bucket_size * 2); table.find_node(tmp, temp, 0, bucket_size * 2);
printf("returned: %d\n", int(temp.size())); printf("returned: %d\n", int(temp.size()));
TEST_EQUAL(int(temp.size()), (std::min)(bucket_size * 2, int(nodes.size()))); TEST_EQUAL(int(temp.size()), (std::min)(bucket_size * 2, int(nodes.size())));

View File

@ -73,7 +73,7 @@ address rand_v4()
address rand_v6() address rand_v6()
{ {
address_v6::bytes_type bytes; address_v6::bytes_type bytes;
for (int i = 0; i < bytes.size(); ++i) bytes[i] = rand(); for (int i = 0; i < bytes.size(); ++i) bytes[i] = rand() & 0xff;
return address_v6(bytes); return address_v6(bytes);
} }
#endif #endif

View File

@ -771,8 +771,8 @@ void test_check_files(std::string const& test_path
char piece0[piece_size]; char piece0[piece_size];
char piece2[piece_size]; char piece2[piece_size];
std::generate(piece0, piece0 + piece_size, std::rand); std::generate(piece0, piece0 + piece_size, random_byte);
std::generate(piece2, piece2 + piece_size, std::rand); std::generate(piece2, piece2 + piece_size, random_byte);
libtorrent::create_torrent t(fs, piece_size, -1, 0); libtorrent::create_torrent t(fs, piece_size, -1, 0);
t.set_hash(0, hasher(piece0, piece_size).final()); t.set_hash(0, hasher(piece0, piece_size).final());
@ -1144,13 +1144,13 @@ int test_main()
// initialize test pieces // initialize test pieces
for (char* p = piece0, *end(piece0 + piece_size); p < end; ++p) for (char* p = piece0, *end(piece0 + piece_size); p < end; ++p)
*p = rand(); *p = random_byte();
for (char* p = piece1, *end(piece1 + piece_size); p < end; ++p) for (char* p = piece1, *end(piece1 + piece_size); p < end; ++p)
*p = rand(); *p = random_byte();
for (char* p = piece2, *end(piece2 + piece_size); p < end; ++p) for (char* p = piece2, *end(piece2 + piece_size); p < end; ++p)
*p = rand(); *p = random_byte();
for (char* p = piece3, *end(piece3 + piece_size); p < end; ++p) for (char* p = piece3, *end(piece3 + piece_size); p < end; ++p)
*p = rand(); *p = random_byte();
std::vector<std::string> test_paths; std::vector<std::string> test_paths;
char* env = std::getenv("TORRENT_TEST_PATHS"); char* env = std::getenv("TORRENT_TEST_PATHS");

View File

@ -252,7 +252,7 @@ int EXPORT run_http_suite(int proxy, char const* protocol, bool test_url_seed, b
{ {
piece_size = 64 * 1024; piece_size = 64 * 1024;
char* random_data = (char*)malloc(64 * 1024 * num_pieces); char* random_data = (char*)malloc(64 * 1024 * num_pieces);
std::generate(random_data, random_data + 64 * 1024 * num_pieces, &std::rand); std::generate(random_data, random_data + 64 * 1024 * num_pieces, random_byte);
std::string seed_filename = combine_path(save_path, "seed"); std::string seed_filename = combine_path(save_path, "seed");
save_file(seed_filename.c_str(), random_data, 64 * 1024 * num_pieces); save_file(seed_filename.c_str(), random_data, 64 * 1024 * num_pieces);
fs.add_file("seed", 64 * 1024 * num_pieces); fs.add_file("seed", 64 * 1024 * num_pieces);
@ -307,7 +307,7 @@ int EXPORT run_http_suite(int proxy, char const* protocol, bool test_url_seed, b
{ {
piece_size = 64 * 1024; piece_size = 64 * 1024;
char* random_data = (char*)malloc(64 * 1024 * num_pieces); char* random_data = (char*)malloc(64 * 1024 * num_pieces);
std::generate(random_data, random_data + 64 * 1024 * num_pieces, &std::rand); std::generate(random_data, random_data + 64 * 1024 * num_pieces, random_byte);
save_file(combine_path(save_path, "seed").c_str(), random_data, 64 * 1024 * num_pieces); save_file(combine_path(save_path, "seed").c_str(), random_data, 64 * 1024 * num_pieces);
free(random_data); free(random_data);
} }

View File

@ -18,7 +18,7 @@ except:
class http_server_with_timeout(BaseHTTPServer.HTTPServer): class http_server_with_timeout(BaseHTTPServer.HTTPServer):
allow_reuse_address = True allow_reuse_address = True
timeout = 120 timeout = 190
def handle_timeout(self): def handle_timeout(self):
raise Exception('timeout') raise Exception('timeout')