@@ -163,7 +163,8 @@ defmodule MOQX do
163163
164164 @ typedoc "Subscribe options accepted by `subscribe/4` and `subscribe_track/4`."
165165 @ type subscribe_opt ::
166- { :delivery_timeout_ms , non_neg_integer ( ) }
166+ { :rendezvous_timeout_ms , non_neg_integer ( ) }
167+ | { :delivery_timeout_ms , non_neg_integer ( ) }
167168 | { :init_data , binary ( ) }
168169 | { :track_meta , map ( ) }
169170 | { :track , Track . t ( ) }
@@ -693,7 +694,9 @@ defmodule MOQX do
693694
694695 Supported options:
695696
696- - `:delivery_timeout_ms` -- MOQT DELIVERY TIMEOUT (parameter type `0x02`) in milliseconds
697+ - `:rendezvous_timeout_ms` -- how long the relay may wait for publisher availability
698+ before rejecting the request (encoded as MOQT DELIVERY TIMEOUT parameter `0x02`)
699+ - `:delivery_timeout_ms` -- deprecated alias for `:rendezvous_timeout_ms`
697700 - `:init_data` -- binary init segment/configuration to surface in `:moqx_track_init`
698701 - `:track_meta` -- map surfaced in `:moqx_track_init`
699702 - `:track` -- `%MOQX.Catalog.Track{}` convenience; fills `:init_data` and `:track_meta`
@@ -715,8 +718,7 @@ defmodule MOQX do
715718 { :ok , subscription_handle ( ) } | { :error , MOQX.RequestError . t ( ) }
716719 def subscribe ( session , broadcast_path , track_name , opts )
717720 when is_binary ( broadcast_path ) and is_binary ( track_name ) and is_list ( opts ) do
718- delivery_timeout_ms =
719- opts |> Keyword . get ( :delivery_timeout_ms ) |> normalize_delivery_timeout_ms! ( )
721+ rendezvous_timeout_ms = normalize_rendezvous_timeout_ms! ( opts )
720722
721723 { init_data , track_meta } = normalize_subscribe_track_payload! ( opts )
722724
@@ -726,7 +728,7 @@ defmodule MOQX do
726728 session ,
727729 broadcast_path ,
728730 track_name ,
729- delivery_timeout_ms ,
731+ rendezvous_timeout_ms ,
730732 init_data ,
731733 track_meta
732734 ) do
@@ -790,7 +792,7 @@ defmodule MOQX do
790792 end
791793
792794 defp validate_subscribe_opts_keys! ( opts ) do
793- allowed_keys = [ :delivery_timeout_ms , :init_data , :track_meta , :track ]
795+ allowed_keys = [ :rendezvous_timeout_ms , : delivery_timeout_ms, :init_data , :track_meta , :track ]
794796
795797 case Keyword . keys ( opts ) -- allowed_keys do
796798 [ ] -> :ok
@@ -843,15 +845,33 @@ defmodule MOQX do
843845 "expected :track_meta to be a map, got: #{ inspect ( track_meta ) } "
844846 end
845847
846- defp normalize_delivery_timeout_ms! ( nil ) , do: nil
848+ defp normalize_rendezvous_timeout_ms! ( opts ) do
849+ rendezvous_timeout_ms = Keyword . get ( opts , :rendezvous_timeout_ms )
850+ delivery_timeout_ms = Keyword . get ( opts , :delivery_timeout_ms )
847851
848- defp normalize_delivery_timeout_ms! ( delivery_timeout_ms )
849- when is_integer ( delivery_timeout_ms ) and delivery_timeout_ms >= 0 ,
850- do: delivery_timeout_ms
852+ case { rendezvous_timeout_ms , delivery_timeout_ms } do
853+ { nil , nil } ->
854+ nil
851855
852- defp normalize_delivery_timeout_ms! ( delivery_timeout_ms ) do
856+ { timeout_ms , nil } ->
857+ normalize_timeout_ms! ( timeout_ms , :rendezvous_timeout_ms )
858+
859+ { nil , timeout_ms } ->
860+ normalize_timeout_ms! ( timeout_ms , :delivery_timeout_ms )
861+
862+ { _rendezvous , _delivery } ->
863+ raise ArgumentError ,
864+ "subscribe/4 accepts only one of :rendezvous_timeout_ms or :delivery_timeout_ms"
865+ end
866+ end
867+
868+ defp normalize_timeout_ms! ( timeout_ms , _key )
869+ when is_integer ( timeout_ms ) and timeout_ms >= 0 ,
870+ do: timeout_ms
871+
872+ defp normalize_timeout_ms! ( timeout_ms , key ) do
853873 raise ArgumentError ,
854- "expected :delivery_timeout_ms to be a non-negative integer, got: #{ inspect ( delivery_timeout_ms ) } "
874+ "expected #{ inspect ( key ) } to be a non-negative integer, got: #{ inspect ( timeout_ms ) } "
855875 end
856876
857877 # ---------------------------------------------------------------------------
0 commit comments