defprotocol Mediasoup.Transport do @moduledoc """ https://mediasoup.org/documentation/v3/mediasoup/api/#Transport """ def id(transport) def close(transport) def closed?(transport) def consume(transport, option) def consume_data(transport, option) def produce(transport, option) def produce_data(transport, option) def sctp_parameters(transport) def sctp_state(transport) def get_stats(transport) def event(transport, listener) def dump(transport) end defimpl Mediasoup.Transport, for: [Mediasoup.WebRtcTransport, Mediasoup.PipeTransport] do def id(transport), do: @for.id(transport) def close(transport), do: @for.close(transport) def closed?(transport), do: @for.closed?(transport) def consume(transport, option), do: @for.consume(transport, option) def consume_data(transport, option), do: @for.consume_data(transport, option) def produce(transport, option), do: @for.produce(transport, option) def produce_data(transport, option), do: @for.produce_data(transport, option) def sctp_parameters(transport), do: @for.sctp_parameters(transport) def sctp_state(transport), do: @for.sctp_state(transport) def get_stats(transport), do: @for.get_stats(transport) def event(transport, listener), do: @for.event(transport, listener) def dump(transport), do: @for.dump(transport) end defmodule TransportTuple do @moduledoc """ https://mediasoup.org/documentation/v3/mediasoup/api/#TransportTuple """ @enforce_keys [:local_port, :protocol, :local_address] defstruct [:local_port, :protocol, :local_address, remote_ip: nil, remote_port: nil] @type t :: %TransportTuple{ :local_address => String.t(), :local_port => integer(), :remote_ip => String.t(), :remote_port => integer(), :protocol => :udp | :tcp } def protocol_to_atom("udp"), do: :udp def protocol_to_atom("tcp"), do: :tcp end