osmo-ttcn3-hacks/library/SDP_Templates.ttcn

160 lines
3.9 KiB
Plaintext

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";
}
}