160 lines
3.9 KiB
Plaintext
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";
|
|
}
|
|
|
|
}
|