File 4129-megaco-Types-and-spec-for-megaco-decode_sdp-1.patch of Package erlang
From c034caab7694bec51c0d01746f3af342226d8078 Mon Sep 17 00:00:00 2001
From: Micael Karlberg <bmk@erlang.org>
Date: Fri, 22 Dec 2023 16:20:09 +0100
Subject: [PATCH 09/46] [megaco] Types and spec for megaco:decode_sdp/1
Needed to add a ref-file for megaco_sdp, to hold
the *types* exported by that module.
OTP-18920
---
lib/megaco/doc/src/Makefile | 2 +
lib/megaco/doc/src/files.mk | 3 +-
lib/megaco/doc/src/megaco.xml | 55 ++++-
lib/megaco/doc/src/megaco_sdp.xml | 303 +++++++++++++++++++++++++++
lib/megaco/doc/src/ref_man.xml | 1 +
lib/megaco/doc/src/specs.xml | 1 +
lib/megaco/src/app/megaco.erl | 26 ++-
lib/megaco/src/engine/megaco_sdp.erl | 56 ++++-
8 files changed, 434 insertions(+), 13 deletions(-)
create mode 100644 lib/megaco/doc/src/megaco_sdp.xml
diff --git a/lib/megaco/doc/src/Makefile b/lib/megaco/doc/src/Makefile
index ff8f88c938..aa480b409c 100644
--- a/lib/megaco/doc/src/Makefile
+++ b/lib/megaco/doc/src/Makefile
@@ -47,6 +47,7 @@ XML_FILES = \
SPECS_FILES = \
$(SPECDIR)/specs_megaco.xml \
$(SPECDIR)/specs_megaco_encoder.xml \
+ $(SPECDIR)/specs_megaco_sdp.xml \
$(SPECDIR)/specs_megaco_user.xml
TOP_SPECS_FILE = specs.xml
@@ -130,3 +131,4 @@ $(HTMLDIR)/megaco_transport_mechanisms.html: megaco_transport_mechanisms.xml
$(HTMLDIR)/megaco_transport.html: megaco_transport.xml
$(HTMLDIR)/megaco_udp.html: megaco_udp.xml
$(HTMLDIR)/megaco_user.html: megaco_user.xml
+$(HTMLDIR)/megaco_sdp.html: megaco_sdp.xml
diff --git a/lib/megaco/doc/src/files.mk b/lib/megaco/doc/src/files.mk
index 2baeeb45ea..597f8d7739 100644
--- a/lib/megaco/doc/src/files.mk
+++ b/lib/megaco/doc/src/files.mk
@@ -33,7 +33,8 @@ XML_REF3_FILES = \
megaco_user.xml \
megaco_tcp.xml \
megaco_transport.xml \
- megaco_udp.xml
+ megaco_udp.xml \
+ megaco_sdp.xml
XML_PART_FILES = \
part.xml
diff --git a/lib/megaco/doc/src/megaco.xml b/lib/megaco/doc/src/megaco.xml
index 6791dcd112..654dc2e07d 100644
--- a/lib/megaco/doc/src/megaco.xml
+++ b/lib/megaco/doc/src/megaco.xml
@@ -201,6 +201,50 @@
</desc>
</datatype>
+ <datatype>
+ <name name="property_parm"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="property_group"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="property_groups"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="sdp"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
</datatypes>
<section>
@@ -2124,17 +2168,8 @@ megaco_incr_timer() = #megaco_incr_timer{}
</func>
<func>
- <name since="">decode_sdp(PP) -> {ok, SDP} | {error, Reason}</name>
+ <name name="decode_sdp" arity="1" clause_i="1" since=""/>
<fsummary>Decode an property parameter construct</fsummary>
- <type>
- <v>PP = property_parm() | property_group() | property_groups() | asn1_NOVALUE</v>
- <v>SDP = sdp() | decode_sdp_property_group() | decode_sdp_property_groups() | asn1_NOVALUE</v>
- <v>decode_sdp() = sdp() | {property_parm(), DecodeError}</v>
- <v>decode_sdp_property_group() = [decode_sdp()]</v>
- <v>decode_sdp_property_groups() = [decode_sdp_property_group()]</v>
- <v>DecodeError = term()</v>
- <v>Reason = term()</v>
- </type>
<desc>
<p>Decode (parse) a property parameter construct.</p>
<p>When decoding <c><![CDATA[property_group()]]></c> or
diff --git a/lib/megaco/doc/src/megaco_sdp.xml b/lib/megaco/doc/src/megaco_sdp.xml
new file mode 100644
index 0000000000..9d6c946c30
--- /dev/null
+++ b/lib/megaco/doc/src/megaco_sdp.xml
@@ -0,0 +1,303 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE erlref SYSTEM "erlref.dtd">
+
+<erlref>
+ <header>
+ <copyright>
+ <year>2023</year><year>2023</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ </legalnotice>
+
+ <title>megaco_sdp</title>
+ <prepared></prepared>
+ <responsible></responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>2023-12-22</date>
+ <rev>%VSN%</rev>
+ <file>megaco_sdp.xml</file>
+ </header>
+ <module since="">megaco_sdp</module>
+ <modulesummary>SDP utility module.</modulesummary>
+ <description>
+ <p>This module contains various things related to SDP.</p>
+ </description>
+
+ <datatypes>
+ <datatype>
+ <name name="property_parm"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="property_group"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="property_groups"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="sdp"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="sdp_v"/>
+ <desc>
+ <p>
+ Protocol version.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_o"/>
+ <desc>
+ <p>
+ Owner/creator and session identifier.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_s"/>
+ <desc>
+ <p>
+ Session name.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_i"/>
+ <desc>
+ <p>
+ Session information.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_u"/>
+ <desc>
+ <p>
+ URI of description.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_e"/>
+ <desc>
+ <p>
+ Email address.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_p"/>
+ <desc>
+ <p>
+ Phone number.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_c"/>
+ <desc>
+ <p>
+ Connection information.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_b"/>
+ <desc>
+ <p>
+ Bandwidth information.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_k"/>
+ <desc>
+ <p>
+ Encryption key.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_a"/>
+ <desc>
+ <p>
+ Session attribute.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_a_rtpmap"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="sdp_a_ptime"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="sdp_a_quality"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="sdp_a_fmtp"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="sdp_z"/>
+ <desc>
+ <p>
+ Time zone adjustment.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_t"/>
+ <!--
+ <desc>
+ <p>
+ Time the session is active.
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="sdp_r"/>
+ <desc>
+ <p>
+ Repeat times.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_m"/>
+ <desc>
+ <p>
+ Media name and transport address.
+ </p>
+ </desc>
+ </datatype>
+
+ <datatype>
+ <name name="sdp_property_parm"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="sdp_property_group"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ <datatype>
+ <name name="sdp_property_groups"/>
+ <!--
+ <desc>
+ <p>
+ TBD
+ </p>
+ </desc>
+ -->
+ </datatype>
+
+ </datatypes>
+
+</erlref>
+
diff --git a/lib/megaco/doc/src/ref_man.xml b/lib/megaco/doc/src/ref_man.xml
index 395ac80e0d..5168e48dbd 100644
--- a/lib/megaco/doc/src/ref_man.xml
+++ b/lib/megaco/doc/src/ref_man.xml
@@ -45,5 +45,6 @@
<xi:include href="megaco_codec_mstone1.xml"/>
<xi:include href="megaco_codec_mstone2.xml"/>
<xi:include href="megaco_codec_transform.xml"/>
+ <xi:include href="megaco_sdp.xml"/>
</application>
diff --git a/lib/megaco/doc/src/specs.xml b/lib/megaco/doc/src/specs.xml
index a36a772166..3e12934dd7 100644
--- a/lib/megaco/doc/src/specs.xml
+++ b/lib/megaco/doc/src/specs.xml
@@ -2,5 +2,6 @@
<specs xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="../specs/specs_megaco.xml"/>
<xi:include href="../specs/specs_megaco_encoder.xml"/>
+ <xi:include href="../specs/specs_megaco_sdp.xml"/>
<xi:include href="../specs/specs_megaco_user.xml"/>
</specs>
diff --git a/lib/megaco/src/app/megaco.erl b/lib/megaco/src/app/megaco.erl
index b97c5ad377..f25c202dd5 100644
--- a/lib/megaco/src/app/megaco.erl
+++ b/lib/megaco/src/app/megaco.erl
@@ -108,7 +108,12 @@
action_reply/0,
error_desc/0,
transaction_reply/0,
- protocol_version/0
+ protocol_version/0,
+
+ property_parm/0,
+ property_group/0,
+ property_groups/0,
+ sdp/0
]).
-type void() :: term().
@@ -169,6 +174,10 @@
-type send_handle() :: term().
+-type property_parm() :: megaco_sdp:property_parm().
+-type property_group() :: megaco_sdp:property_group().
+-type property_groups() :: megaco_sdp:property_groups().
+-type sdp() :: megaco_sdp:sdp().
-include("megaco_internal.hrl").
@@ -669,6 +678,21 @@ encode_sdp(SDP) ->
%% Decode a property parm construct into a SDP construct
%%-----------------------------------------------------------------
+-spec decode_sdp(PP) -> {ok, SDP} | {error, Reason} when
+ PP :: property_parm() |
+ property_group() |
+ property_groups() |
+ asn1_NOVALUE,
+ SDP :: sdp() |
+ DecodeSdpPropertyGroup |
+ DecodeSdpPropertyGroups |
+ asn1_NOVALUE,
+ DecodeSdpPropertyGroup :: [DecodeSDP],
+ DecodeSdpPropertyGroups :: [DecodeSdpPropertyGroup],
+ DecodeSDP :: sdp() | {property_parm(), DecodeError},
+ DecodeError :: term(),
+ Reason :: term().
+
decode_sdp(PP) ->
megaco_sdp:decode(PP).
diff --git a/lib/megaco/src/engine/megaco_sdp.erl b/lib/megaco/src/engine/megaco_sdp.erl
index ac37b353f0..20455eea41 100644
--- a/lib/megaco/src/engine/megaco_sdp.erl
+++ b/lib/megaco/src/engine/megaco_sdp.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2016. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2023. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -46,12 +46,66 @@
get_sdp_record_from_PropertyGroup/2
]).
+-export_type([
+ property_parm/0,
+ property_group/0,
+ property_groups/0,
+
+ sdp/0,
+ sdp_v/0,
+ sdp_c/0, sdp_o/0, sdp_s/0, sdp_i/0, sdp_u/0,
+ sdp_e/0, sdp_p/0, sdp_b/0, sdp_z/0, sdp_k/0,
+ sdp_a/0, sdp_a_rtpmap/0, sdp_a_ptime/0,
+ sdp_a_quality/0, sdp_a_fmtp/0,
+ sdp_t/0, sdp_r/0, sdp_m/0,
+ sdp_property_parm/0,
+ sdp_property_group/0,
+ sdp_property_groups/0
+ ]).
+
%%----------------------------------------------------------------------
%% Internal exports
%%----------------------------------------------------------------------
+%%----------------------------------------------------------------------
+%% Types
+%%----------------------------------------------------------------------
+
+-type property_parm() :: #'PropertyParm'{}.
+-type property_group() :: [property_parm()].
+-type property_groups() :: [property_group()].
+
+-type sdp() :: sdp_o() | sdp_s() | sdp_i() | sdp_u() | sdp_e() |
+ sdp_p() | sdp_c() | sdp_b() | sdp_k() | sdp_a() |
+ sdp_a_rtpmap() | sdp_a_ptime() |
+ sdp_z() | sdp_t() | sdp_r() | sdp_m().
+
+-type sdp_v() :: #megaco_sdp_v{}. % Protocol version
+-type sdp_o() :: #megaco_sdp_o{}. % Owner/creator and session identifier
+-type sdp_s() :: #megaco_sdp_s{}. % Session name
+-type sdp_i() :: #megaco_sdp_i{}. % Session information
+-type sdp_u() :: #megaco_sdp_u{}. % URI of description
+-type sdp_e() :: #megaco_sdp_e{}. % Email address
+-type sdp_p() :: #megaco_sdp_p{}. % Phone number
+-type sdp_c() :: #megaco_sdp_c{}. % Connection information
+-type sdp_b() :: #megaco_sdp_b{}. % Bandwidth information
+-type sdp_k() :: #megaco_sdp_k{}. % Encryption key
+-type sdp_a() :: #megaco_sdp_a{}. % Session attribute
+-type sdp_a_rtpmap() :: #megaco_sdp_a_rtpmap{}.
+-type sdp_a_ptime() :: #megaco_sdp_a_ptime{}.
+-type sdp_a_quality() :: #megaco_sdp_a_quality{}.
+-type sdp_a_fmtp() :: #megaco_sdp_a_fmtp{}.
+-type sdp_z() :: #megaco_sdp_z{}. % Time zone adjustment
+-type sdp_t() :: #megaco_sdp_t{}. % Time the session is active
+-type sdp_r() :: #megaco_sdp_r{}. % Repeat times
+-type sdp_m() :: #megaco_sdp_m{}. % Media name and transport address
+-type sdp_property_parm() :: sdp() | property_parm().
+-type sdp_property_group() :: [sdp_property_parm()].
+-type sdp_property_groups() :: [sdp_property_group()].
+
+
%%----------------------------------------------------------------------
%% Macros
%%----------------------------------------------------------------------
--
2.35.3