Move SDP templates to its own SDP_Templates.ttcn file
SDP is used in other protocols than MGCP, eg. SIP.
Change-Id: I0610b4cf5533e46a3401c65e60c7cce975c85412
diff --git a/library/SDP_Templates.ttcn b/library/SDP_Templates.ttcn
new file mode 100644
index 0000000..525da8e
--- /dev/null
+++ b/library/SDP_Templates.ttcn
@@ -0,0 +1,159 @@
+module SDP_Templates {
+
+/* SDP Templates, building on top of SDP_Types from Ericsson.
+ *
+ * (C) 2017 by Harald Welte <laforge@gnumonks.org>
+ * All rights reserved.
+ *
+ * Released under the terms of GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ */
+
+import from SDP_Types all;
+
+/* SDP Templates */
+template SDP_Origin ts_SDP_origin(charstring addr, charstring session_id,
+ charstring session_version := "1",
+ charstring addr_type := "IP4",
+ charstring user_name := "-") := {
+ user_name := user_name,
+ session_id := session_id,
+ session_version := session_version,
+ net_type := "IN",
+ addr_type := addr_type,
+ addr := addr
+}
+
+template SDP_connection ts_SDP_connection_IP(charstring addr, charstring addr_type := "IP4",
+ template integer ttl := omit,
+ template integer num_of_addr := omit) :={
+ net_type := "IN",
+ addr_type := addr_type,
+ conn_addr := {
+ addr := addr,
+ ttl := ttl,
+ num_of_addr := num_of_addr
+ }
+}
+
+template SDP_connection tr_SDP_connection_IP(template charstring addr, template charstring addr_type := ?,
+ template integer ttl := *,
+ template integer num_of_addr := *) := {
+ net_type := "IN",
+ addr_type := addr_type,
+ conn_addr := {
+ addr := addr,
+ ttl := ttl,
+ num_of_addr := num_of_addr
+ }
+}
+
+template SDP_time ts_SDP_time(charstring beg, charstring end) := {
+ time_field := {
+ start_time := beg,
+ stop_time := end
+ },
+ time_repeat := omit
+}
+
+template SDP_media_desc ts_SDP_media_desc(integer port_number, SDP_fmt_list fmts,
+ SDP_attribute_list attributes) := {
+ media_field := {
+ media := "audio",
+ ports := {
+ port_number := port_number,
+ num_of_ports := omit
+ },
+ transport := "RTP/AVP",
+ fmts := fmts
+ },
+ information := omit,
+ connections := omit,
+ bandwidth := omit,
+ key := omit,
+ attributes := attributes
+}
+
+template SDP_media_desc tr_SDP_media_desc(template integer port_number := ?,
+ template SDP_fmt_list fmts := ?,
+ template SDP_attribute_list attributes := ?) := {
+ media_field := {
+ media := "audio",
+ ports := {
+ port_number := port_number,
+ num_of_ports := omit
+ },
+ transport := "RTP/AVP",
+ fmts := fmts
+ },
+ information := *,
+ connections := *,
+ bandwidth := *,
+ key := *,
+ attributes := attributes
+}
+
+/* master template for generating SDP based in template arguments */
+template SDP_Message ts_SDP(charstring local_addr, charstring remote_addr,
+ charstring session_id, charstring session_version,
+ integer rtp_port, SDP_fmt_list fmts,
+ SDP_attribute_list attributes) := {
+ protocol_version := 0,
+ origin := ts_SDP_origin(local_addr, session_id, session_version, f_sdp_addr2addrtype(local_addr)),
+ session_name := "-",
+ information := omit,
+ uri := omit,
+ emails := omit,
+ phone_numbers := omit,
+ connection := ts_SDP_connection_IP(remote_addr, f_sdp_addr2addrtype(remote_addr)),
+ bandwidth := omit,
+ times := { ts_SDP_time("0","0") },
+ timezone_adjustments := omit,
+ key := omit,
+ attributes := omit,
+ media_list := { ts_SDP_media_desc(rtp_port, fmts, attributes) }
+}
+
+template SDP_Message tr_SDP(template charstring remote_addr := ?, template integer rtp_port := ?) := {
+ protocol_version := 0,
+ origin := ?,
+ session_name := ?,
+ information := *,
+ uri := *,
+ emails := *,
+ phone_numbers := *,
+ connection := tr_SDP_connection_IP(remote_addr, ?),
+ bandwidth := *,
+ times := ?,
+ timezone_adjustments := *,
+ key := *,
+ attributes := *,
+ media_list := { tr_SDP_media_desc(rtp_port) }
+}
+
+template SDP_attribute ts_SDP_rtpmap(integer fmt, charstring val) := {
+ rtpmap := {
+ attr_value := int2str(fmt) & " " & val
+ }
+}
+template SDP_attribute ts_SDP_ptime(integer p) := {
+ ptime := {
+ attr_value := int2str(p)
+ }
+}
+template SDP_attribute ts_SDP_fmtp(integer fmt, charstring val) := {
+ fmtp := {
+ attr_value := int2str(fmt) & " " & val
+ }
+}
+
+function f_sdp_addr2addrtype(charstring addr) return charstring {
+ for (var integer i := 0; i < lengthof(addr); i := i + 1) {
+ if (addr[i] == ":") {
+ return "IP6";
+ }
+ }
+ return "IP4";
+}
+
+}