state(Client::READING_REQUEST),
stream(NULL),
header_or_error_bytes_sent(0),
- stream_pos(0)
+ stream_pos(0),
+ bytes_sent(0),
+ bytes_lost(0),
+ num_loss_events(0)
{
request.reserve(1024);
stream(stream),
header_or_error(serialized.header_or_error()),
header_or_error_bytes_sent(serialized.header_or_error_bytes_sent()),
- stream_pos(serialized.stream_pos())
+ stream_pos(serialized.stream_pos()),
+ bytes_sent(serialized.bytes_sent()),
+ bytes_lost(serialized.bytes_lost()),
+ num_loss_events(serialized.num_loss_events())
{
- if (stream->mark_pool != NULL) {
+ if (stream != NULL && stream->mark_pool != NULL) {
fwmark = stream->mark_pool->get_mark();
} else {
fwmark = 0; // No mark.
serialized.set_header_or_error(header_or_error);
serialized.set_header_or_error_bytes_sent(serialized.header_or_error_bytes_sent());
serialized.set_stream_pos(stream_pos);
+ serialized.set_bytes_sent(bytes_sent);
+ serialized.set_bytes_lost(bytes_lost);
+ serialized.set_num_loss_events(num_loss_events);
return serialized;
}
stats.stream_id = stream_id;
stats.remote_addr = remote_addr;
stats.connect_time = connect_time;
- stats.bytes_sent = stream_pos;
+ stats.bytes_sent = bytes_sent;
+ stats.bytes_lost = bytes_lost;
+ stats.num_loss_events = num_loss_events;
return stats;
}