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

openSUSE Build Service is sponsored by