|
| 1 | +#include "nmos/sdp_attributes.h" |
| 2 | + |
| 3 | +#include "cpprest/json_utils.h" |
| 4 | + |
| 5 | +namespace nmos |
| 6 | +{ |
| 7 | + namespace details |
| 8 | + { |
| 9 | + // hm, forward declaration for function in nmos/sdp_utils.cpp |
| 10 | + std::pair<sdp::address_type, bool> get_address_type_multicast(const utility::string_t& address); |
| 11 | + } |
| 12 | + |
| 13 | + namespace sdp_attributes |
| 14 | + { |
| 15 | + web::json::value make_extmap(const extmap& extmap) |
| 16 | + { |
| 17 | + using web::json::value_of; |
| 18 | + |
| 19 | + const bool keep_order = true; |
| 20 | + |
| 21 | + return value_of({ |
| 22 | + { sdp::fields::name, sdp::attributes::extmap }, |
| 23 | + { sdp::fields::value, value_of({ |
| 24 | + { sdp::fields::local_id, extmap.local_id }, |
| 25 | + { extmap.direction != sdp::direction{} ? sdp::fields::direction.key : U(""), extmap.direction.name }, |
| 26 | + { sdp::fields::uri, extmap.uri }, |
| 27 | + { !extmap.ext_attributes.empty() ? sdp::fields::extensionattributes.key : U(""), extmap.ext_attributes }, |
| 28 | + }, keep_order) } |
| 29 | + }, keep_order); |
| 30 | + } |
| 31 | + |
| 32 | + extmap parse_extmap(const web::json::value& extmap) |
| 33 | + { |
| 34 | + return{ sdp::fields::local_id(extmap), sdp::direction(sdp::fields::direction(extmap)), sdp::fields::uri(extmap), sdp::fields::extensionattributes(extmap) }; |
| 35 | + } |
| 36 | + |
| 37 | + web::json::value make_hkep(const hkep& hkep) |
| 38 | + { |
| 39 | + using web::json::value_of; |
| 40 | + |
| 41 | + const bool keep_order = true; |
| 42 | + |
| 43 | + return value_of({ |
| 44 | + { sdp::fields::name, sdp::attributes::hkep }, |
| 45 | + { sdp::fields::value, value_of({ |
| 46 | + { sdp::fields::port, hkep.port }, |
| 47 | + { sdp::fields::network_type, sdp::network_types::internet.name }, |
| 48 | + { sdp::fields::address_type, details::get_address_type_multicast(hkep.unicast_address).first.name }, |
| 49 | + { sdp::fields::unicast_address, hkep.unicast_address }, |
| 50 | + { sdp::fields::node_id, hkep.node_id }, |
| 51 | + { sdp::fields::port_id, hkep.port_id }, |
| 52 | + }, keep_order) } |
| 53 | + }, keep_order); |
| 54 | + } |
| 55 | + |
| 56 | + hkep parse_hkep(const web::json::value& hkep) |
| 57 | + { |
| 58 | + return{ sdp::fields::port(hkep), sdp::fields::unicast_address(hkep), sdp::fields::node_id(hkep), sdp::fields::port_id(hkep) }; |
| 59 | + } |
| 60 | + } |
| 61 | +} |
0 commit comments