Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

did_recv_ACK function received ACK vector uint fix #56

Open
wants to merge 14 commits into
base: master
Choose a base branch
from
26 changes: 24 additions & 2 deletions stream/include/marlin/stream/StreamTransport.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1424,6 +1424,13 @@ void StreamTransport<DelegateType, DatagramTransport>::did_recv_ACK(
continue;
}

//TODO: if either of high, low+1 are negative throw encoding error
// https://tools.ietf.org/html/draft-ietf-quic-transport-34#section-19.3.1
//Tips https://wesmckinney.com/blog/avoid-unsigned-integers/
if ( low+1 > high){
break;
}

// Get packets within range [low+1, high]
auto low_iter = sent_packets.lower_bound(low + 1);
auto high_iter = sent_packets.upper_bound(high);
Expand Down Expand Up @@ -1475,11 +1482,12 @@ void StreamTransport<DelegateType, DatagramTransport>::did_recv_ACK(
fully_acked = false;
break;
}

// TODO: Handle delegate->did_send return type for connection continuation
delegate->did_send(
*this,
std::move(iter->data)
);

}

if(fully_acked) {
Expand Down Expand Up @@ -1529,6 +1537,7 @@ void StreamTransport<DelegateType, DatagramTransport>::did_recv_ACK(

return;
}

}

high = low;
Expand Down Expand Up @@ -1981,7 +1990,10 @@ void StreamTransport<DelegateType, DatagramTransport>::did_recv(
// FLUSHCONF
case 9: did_recv_FLUSHCONF(std::move(packet));
break;
// UNKNOWN
case 12: did_recv_CLOSE(std::move(packet));
break;
case 11: did_recv_CLOSECONF(std::move(packet));
break; // UNKNOWN
default: SPDLOG_TRACE("UNKNOWN <<< {}", dst_addr.to_string());
break;
}
Expand Down Expand Up @@ -2124,6 +2136,9 @@ int StreamTransport<DelegateType, DatagramTransport>::send(

template<typename DelegateType, template<typename> class DatagramTransport>
void StreamTransport<DelegateType, DatagramTransport>::close(uint16_t reason) {
if( !is_active() )
return;

// Preserve conn ids so retries work
auto src_conn_id = this->src_conn_id;
auto dst_conn_id = this->dst_conn_id;
Expand All @@ -2142,6 +2157,9 @@ void StreamTransport<DelegateType, DatagramTransport>::close(uint16_t reason) {

template<typename DelegateType, template<typename> class DatagramTransport>
void StreamTransport<DelegateType, DatagramTransport>::close_timer_cb() {
if ( !is_active() )
return;

if(state_timer_interval >= 8000) { // Abort on too many retries
SPDLOG_DEBUG(
"Stream transport {{ Src: {}, Dst: {} }}: Close timeout",
Expand Down Expand Up @@ -2175,6 +2193,8 @@ double StreamTransport<DelegateType, DatagramTransport>::get_rtt() {

template<typename DelegateType, template<typename> class DatagramTransport>
void StreamTransport<DelegateType, DatagramTransport>::skip_timer_cb(RecvStream& stream) {
if ( !is_active() )
return;
if(stream.state_timer_interval >= 64000) { // Abort on too many retries
stream.state_timer_interval = 0;
SPDLOG_DEBUG(
Expand Down Expand Up @@ -2227,6 +2247,8 @@ void StreamTransport<DelegateType, DatagramTransport>::skip_stream(

template<typename DelegateType, template<typename> class DatagramTransport>
void StreamTransport<DelegateType, DatagramTransport>::flush_timer_cb(SendStream& stream) {
if ( !is_active() )
return;
if(stream.state_timer_interval >= 64000) { // Abort on too many retries
stream.state_timer_interval = 0;
SPDLOG_DEBUG(
Expand Down