load("@fbcode//quic:defs.bzl", "mvfst_cpp_library")

oncall("traffic_protocols")

mvfst_cpp_library(
    name = "quic_batch_writer",
    srcs = [
        "QuicBatchWriter.cpp",
    ] + select({
        "DEFAULT": [
            "QuicBatchWriterFactory.cpp",
            "QuicGsoBatchWriters.cpp",
        ],
        "fbsource//tools/build_defs/config/apps/shared:quic-gso-batch-writer-enabled-android": [
            "QuicBatchWriterFactoryMobileGSO.cpp",
            "QuicGsoBatchWriters.cpp",
        ],
        "ovr_config//os/constraints:android": ["QuicBatchWriterFactoryMobile.cpp"],
        "ovr_config//os/constraints:iphoneos": ["QuicBatchWriterFactoryMobile.cpp"],
    }),
    headers = [
        "QuicBatchWriter.h",
        "QuicBatchWriterFactory.h",
    ] + select({
        "DEFAULT": ["QuicGsoBatchWriters.h"],
        "fbsource//tools/build_defs/config/apps/shared:quic-gso-batch-writer-enabled-android": [
            "QuicGsoBatchWriters.h",
        ],
        "ovr_config//os/constraints:android": [],
        "ovr_config//os/constraints:iphoneos": [],
    }),
    deps = [
        "//quic/common:buf_accessor",
    ],
    exported_deps = [
        "//folly:portability",
        "//folly/io:iobuf",
        "//quic:config",
        "//quic:constants",
        "//quic/common:mvfst_logging",
        "//quic/common/events:eventbase",
        "//quic/common/udpsocket:quic_async_udp_socket",
        "//quic/state:quic_state_machine",
    ],
)

mvfst_cpp_library(
    name = "quic_callbacks",
    srcs = [],
    headers = [
        "QuicCallbacks.h",
    ],
    deps = [],
    exported_deps = [
        "//quic:exception",
    ],
)

mvfst_cpp_library(
    name = "transport_info",
    srcs = [],
    headers = [
        "TransportInfo.h",
    ],
    deps = [],
    exported_deps = [
        "//quic/common:optional",
        "//quic/congestion_control:congestion_controller",
    ],
)

mvfst_cpp_library(
    name = "transport",
    srcs = [
        "QuicTransportBase.cpp",
    ],
    headers = [
        "QuicSocket.h",
        "QuicTransportBase.h",
    ],
    deps = [
        ":quic_batch_writer",
        "//folly:chrono",
        "//folly:scope_guard",
        "//quic/common:mvfst_logging",
        "//quic/common:time_util",
        "//quic/logging:qlogger_constants",
        "//quic/logging:qlogger_macros",
        "//quic/loss:loss",
        "//quic/observer:socket_observer_macros",
        "//quic/state:pacing_functions",
        "//quic/state:state_functions",
        "//quic/state:stream_functions",
    ],
    exported_deps = [
        ":transport_lite",
        "//folly:exception_wrapper",
        "//folly:maybe_managed_ptr",
        "//folly:portability",
        "//folly/io:iobuf",
        "//quic:constants",
        "//quic:exception",
        "//quic/common:function_ref",
        "//quic/common:network_data",
        "//quic/common:optional",
        "//quic/common/events:eventbase",
        "//quic/common/events:quic_timer",
        "//quic/common/udpsocket:quic_async_udp_socket",
        "//quic/congestion_control:congestion_controller_factory",
        "//quic/observer:socket_observer_container",
        "//quic/priority:priority_queue",
        "//quic/state:early_data_app_params_handler",
        "//quic/state:quic_state_machine",
    ] + select({
        "DEFAULT": [
            "//quic/congestion_control:copa",
            "//quic/congestion_control:cubic",
            "//quic/congestion_control:newreno",
        ],
        "ovr_config//os/constraints:android": [
            "//quic/congestion_control:copa",
            "//quic/congestion_control:cubic",
        ],
        "ovr_config//os/constraints:iphoneos": [
            "//quic/congestion_control:copa",
            "//quic/congestion_control:cubic",
        ],
    }),
)

mvfst_cpp_library(
    name = "transport_lite",
    srcs = [
        "QuicTransportBaseLite.cpp",
    ],
    headers = [
        "QuicSocketLite.h",
        "QuicTransportBaseLite.h",
    ],
    deps = [
        ":loop_detector_callback",
        "//folly:scope_guard",
        "//quic/congestion_control:congestion_controller_factory",
        "//quic/congestion_control:ecn_l4s_tracker",
        "//quic/congestion_control:pacer_factory",
        "//quic/flowcontrol:flow_control",
        "//quic/logging:qlogger_macros",
        "//quic/logging/oops_logger:oops_logger",
        "//quic/loss:loss",
        "//quic/observer:socket_observer_macros",
        "//quic/state:connection_oops_fields",
        "//quic/state:pacing_functions",
        "//quic/state:stream_functions",
        "//quic/state/stream:stream",
    ],
    exported_deps = [
        ":quic_batch_writer",
        ":quic_callbacks",
        ":transport_helpers",
        ":transport_info",
        "//fizz/protocol:certificate_base",
        "//folly:maybe_managed_ptr",
        "//folly/io/async:delayed_destruction",
        "//quic:exception",
        "//quic/codec:types",
        "//quic/common:function_ref",
        "//quic/common:mvfst_logging",
        "//quic/common/events:eventbase",
        "//quic/common/events:quic_timer",
        "//quic/common/udpsocket:quic_async_udp_socket",
        "//quic/handshake:handshake",
        "//quic/handshake:transport_parameters",
        "//quic/observer:socket_observer_container",
        "//quic/state:quic_state_machine",
    ],
)

mvfst_cpp_library(
    name = "ack_scheduler",
    srcs = [
        "QuicAckScheduler.cpp",
    ],
    headers = [
        "QuicAckScheduler.h",
    ],
    deps = [
        "//quic/codec:codec",
        "//quic/logging/oops_logger:oops_logger",
        "//quic/state:connection_oops_fields",
    ],
    exported_deps = [
        "//quic:constants",
        "//quic/state:quic_state_machine",
    ],
)

mvfst_cpp_library(
    name = "transport_helpers",
    srcs = [
        "IoBufQuicBatch.cpp",
        "QuicPacketScheduler.cpp",
        "QuicTransportFunctions.cpp",
    ],
    headers = [
        "IoBufQuicBatch.h",
        "QuicPacketScheduler.h",
        "QuicTransportFunctions.h",
    ],
    deps = [
        "//folly/tracing:static_tracepoint",
        "//quic/common:buf_accessor",
        "//quic/common:mvfst_logging",
        "//quic/common:socket_util",
        "//quic/common:string_utils",
        "//quic/happyeyeballs:happyeyeballs",
        "//quic/logging:qlogger_macros",
        "//quic/logging/oops_logger:oops_logger",
        "//quic/loss:loss",
        "//quic/state:ack_frequency_functions",
        "//quic/state:ack_handler",
        "//quic/state:connection_oops_fields",
        "//quic/state:simple_frame_functions",
    ],
    exported_deps = [
        ":ack_scheduler",
        ":quic_batch_writer",
        "//folly/lang:assume",
        "//quic:constants",
        "//quic:exception",
        "//quic/client:state_and_handshake",
        "//quic/codec:codec",
        "//quic/codec:pktbuilder",
        "//quic/codec:pktrebuilder",
        "//quic/codec:types",
        "//quic/common:expected",
        "//quic/common:function_ref",
        "//quic/common/udpsocket:quic_async_udp_socket",
        "//quic/flowcontrol:flow_control",
        "//quic/handshake:transport_parameters",
        "//quic/state:quic_state_machine",
        "//quic/state:state_functions",
        "//quic/state:stats_callback",
        "//quic/state:stream_functions",
    ],
)

mvfst_cpp_library(
    name = "loop_detector_callback",
    headers = ["LoopDetectorCallback.h"],
    exported_deps = [
        "//quic:constants",
    ],
)

mvfst_cpp_library(
    name = "stream_async_transport",
    srcs = [
        "QuicStreamAsyncTransport.cpp",
    ],
    headers = [
        "QuicStreamAsyncTransport.h",
    ],
    deps = [
        "//quic/common:mvfst_check",
        "//quic/common:mvfst_logging",
        "//quic/common/address:quic_socket_address_bridge",
        "//quic/common/events:folly_eventbase",
    ],
    exported_deps = [
        ":transport",
        "//folly/io/async:async_transport",
        "//quic/common/events:eventbase",
    ],
)
