text: // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #include "net/quic/congestion_control/send_algorithm_interface.h"
  
  #include "net/quic/congestion_control/tcp_cubic_sender.h"
  #include "net/quic/quic_protocol.h"
  
  namespace net {
  
  class RttStats;
  
  // Factory for send side congestion control algorithm.
  SendAlgorithmInterface* SendAlgorithmInterface::Create(
      const QuicClock* clock,
      const RttStats* rtt_stats,
      CongestionControlType congestion_control_type,
      QuicConnectionStats* stats,
      QuicPacketCount initial_congestion_window) {
    switch (congestion_control_type) {
      case kCubic:
        return new TcpCubicSender(clock, rtt_stats, false /* don't use Reno */,
                                  initial_congestion_window,
                                  kMaxTcpCongestionWindow, stats);
      case kReno:
        return new TcpCubicSender(clock, rtt_stats, true /* use Reno */,
                                  initial_congestion_window,
                                  kMaxTcpCongestionWindow, stats);
      case kBBR:
    // TODO(rtenneti): Enable BbrTcpSender.
  #if 0
        return new BbrTcpSender(clock, rtt_stats, initial_congestion_window,
                                kMaxTcpCongestionWindow, stats);
  #endif
        LOG(DFATAL) << "BbrTcpSender is not supported.";
        return nullptr;
    }
    return nullptr;
  }
  
  }  // namespace net
  