From 1703642f865090d4d9d87c2bdf20057a9ca52e44 Mon Sep 17 00:00:00 2001 From: theoneandonlywoj Date: Fri, 19 Jan 2024 23:58:25 +0000 Subject: [PATCH] Support for Tapo Origin not being compatible with RFC4566. --- lib/ex_sdp/origin.ex | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/ex_sdp/origin.ex b/lib/ex_sdp/origin.ex index 49d9767..383e51e 100644 --- a/lib/ex_sdp/origin.ex +++ b/lib/ex_sdp/origin.ex @@ -10,7 +10,7 @@ defmodule ExSDP.Origin do """ use Bunch.Access - alias ExSDP.{Address, Utils} + alias ExSDP.{Address} @enforce_keys [ :session_id, @@ -55,7 +55,7 @@ defmodule ExSDP.Origin do {:ok, t()} | {:error, :invalid_addrtype | :invalid_address} def parse(origin) do with {:ok, [username, sess_id, sess_version, nettype, addrtype, address]} <- - Utils.split(origin, " ", 6), + extract_info(origin), {:ok, addrtype} <- Address.parse_addrtype(addrtype), {:ok, address} <- Address.parse_address(address) do # check whether fqdn @@ -75,6 +75,23 @@ defmodule ExSDP.Origin do end end + @spec extract_info(String.t()) :: + {:error, :too_few_fields} | {:ok, [String.t()]} + def extract_info(origin) do + origin + |> String.split(" ", trim: True) + |> case do + [_username, _sess_id, _sess_version, _nettype, _addrtype, _] = values -> + {:ok, values} + + [username, sess_id, sess_version, nettype, _, addrtype, address] -> + {:ok, [username, sess_id, sess_version, nettype, addrtype, address]} + + _ -> + {:error, :too_few_fields} + end + end + @doc """ Increments `session_version` field.