| 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 |
| } |
| } |
| |
| /* rfc3312 */ |
| const charstring c_SDP_PRECON_TYPE_qos := "qos"; |
| const charstring c_SDP_PRECON_STRENGTH_TAG_mandatory := "mandatory"; |
| const charstring c_SDP_PRECON_STRENGTH_TAG_optional := "optional"; |
| const charstring c_SDP_PRECON_STRENGTH_TAG_none := "none"; |
| const charstring c_SDP_PRECON_STRENGTH_TAG_failure := "failure"; |
| const charstring c_SDP_PRECON_STRENGTH_TAG_unknown := "unknown"; |
| const charstring c_SDP_PRECON_STATUS_TYPE_e2e := "e2e"; |
| const charstring c_SDP_PRECON_STATUS_TYPE_local := "local"; |
| const charstring c_SDP_PRECON_STATUS_TYPE_remote := "remote"; |
| const charstring c_SDP_PRECON_DIR_TAG_none := "none"; |
| const charstring c_SDP_PRECON_DIR_TAG_send := "send"; |
| const charstring c_SDP_PRECON_DIR_TAG_recv := "recv"; |
| const charstring c_SDP_PRECON_DIR_TAG_sendrecv := "sendrecv"; |
| |
| template (present) SDP_attribute tr_SDP_curr(charstring status_type, |
| charstring dir_tag, |
| charstring precondition_type := c_SDP_PRECON_TYPE_qos) := { |
| curr := { |
| attr_value := precondition_type & " " & status_type & " " & dir_tag |
| } |
| } |
| template (present) SDP_attribute tr_SDP_curr_present := { |
| curr := { |
| attr_value := ? |
| } |
| } |
| template (value) SDP_attribute ts_SDP_curr(charstring status_type, |
| charstring dir_tag, |
| charstring precondition_type := c_SDP_PRECON_TYPE_qos) := { |
| curr := { |
| attr_value := precondition_type & " " & status_type & " " & dir_tag |
| } |
| } |
| |
| template (present) SDP_attribute tr_SDP_des(charstring status_type, |
| charstring strength_tag, |
| charstring dir_tag, |
| charstring precondition_type := c_SDP_PRECON_TYPE_qos) := { |
| curr := { |
| attr_value := precondition_type & " " & strength_tag & " " & status_type & " " & dir_tag |
| } |
| } |
| template (present) SDP_attribute tr_SDP_des_present := { |
| des := { |
| attr_value := ? |
| } |
| } |
| template (value) SDP_attribute ts_SDP_des(charstring status_type, |
| charstring strength_tag, |
| charstring dir_tag, |
| charstring precondition_type := c_SDP_PRECON_TYPE_qos) := { |
| des := { |
| attr_value := precondition_type & " " & strength_tag & " " & status_type & " " & dir_tag |
| } |
| } |
| |
| template (present) SDP_attribute tr_SDP_conf(charstring status_type, |
| charstring dir_tag, |
| charstring precondition_type := c_SDP_PRECON_TYPE_qos) := { |
| conf := { |
| attr_value := precondition_type & " " & status_type & " " & dir_tag |
| } |
| } |
| template (present) SDP_attribute tr_SDP_conf_present := { |
| conf := { |
| attr_value := ? |
| } |
| } |
| template (value) SDP_attribute ts_SDP_conf(charstring status_type, |
| charstring dir_tag, |
| charstring precondition_type := c_SDP_PRECON_TYPE_qos) := { |
| conf := { |
| attr_value := precondition_type & " " & status_type & " " & dir_tag |
| } |
| } |
| |
| 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"; |
| } |
| |
| } |