async Task<byte[]> ReceiveTillEnd() {
// TODO: Keep looping for multi packets (process each header to find if there are more)
// and concatenate them in the right order
var response = await _state.Client.ReceiveWithTimeoutAfter(DefaultReceiveTimeout).ConfigureAwait(false);
_state.StopSW();
return ProcessPacketHeader(response.Buffer) ?? await ReceiveTillEnd().ConfigureAwait(false);
}