aboutsummaryrefslogtreecommitdiff
path: root/xmpp-vala/src/module/xep/0167_jingle_rtp/payload_type.vala
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2021-03-21 12:41:32 +0100
committerMarvin W <git@larma.de>2021-03-21 12:41:32 +0100
commitdfd79401044834b164c50f5948986719eabf8127 (patch)
tree36505c4a3236db71cf9d837a6dde612c8a107a2b /xmpp-vala/src/module/xep/0167_jingle_rtp/payload_type.vala
parentd703b7c09d5eea81ec383fd09c9d320199e6d577 (diff)
downloaddino-dfd79401044834b164c50f5948986719eabf8127.tar.gz
dino-dfd79401044834b164c50f5948986719eabf8127.zip
Add support for Jingle RTP sessions (XEP-0167) to xmpp-vala
Co-authored-by: fiaxh <git@lightrise.org>
Diffstat (limited to 'xmpp-vala/src/module/xep/0167_jingle_rtp/payload_type.vala')
-rw-r--r--xmpp-vala/src/module/xep/0167_jingle_rtp/payload_type.vala52
1 files changed, 52 insertions, 0 deletions
diff --git a/xmpp-vala/src/module/xep/0167_jingle_rtp/payload_type.vala b/xmpp-vala/src/module/xep/0167_jingle_rtp/payload_type.vala
new file mode 100644
index 00000000..452f1d65
--- /dev/null
+++ b/xmpp-vala/src/module/xep/0167_jingle_rtp/payload_type.vala
@@ -0,0 +1,52 @@
+using Gee;
+using Xmpp;
+using Xmpp.Xep;
+
+public class Xmpp.Xep.JingleRtp.PayloadType {
+ public uint8 id { get; set; }
+ public string? name { get; set; }
+ public uint8 channels { get; set; default = 1; }
+ public uint32 clockrate { get; set; }
+ public uint32 maxptime { get; set; }
+ public uint32 ptime { get; set; }
+ public Map<string, string> parameters = new HashMap<string, string>();
+
+ public static PayloadType parse(StanzaNode node) {
+ PayloadType payloadType = new PayloadType();
+ payloadType.channels = (uint8) node.get_attribute_uint("channels", payloadType.channels);
+ payloadType.clockrate = node.get_attribute_uint("clockrate");
+ payloadType.id = (uint8) node.get_attribute_uint("id");
+ payloadType.maxptime = node.get_attribute_uint("maxptime");
+ payloadType.name = node.get_attribute("name");
+ payloadType.ptime = node.get_attribute_uint("ptime");
+ foreach (StanzaNode parameter in node.get_subnodes("parameter")) {
+ payloadType.parameters[parameter.get_attribute("name")] = parameter.get_attribute("value");
+ }
+ return payloadType;
+ }
+
+ public StanzaNode to_xml() {
+ StanzaNode node = new StanzaNode.build("payload-type", NS_URI)
+ .put_attribute("id", id.to_string());
+ if (channels != 1) node.put_attribute("channels", channels.to_string());
+ if (clockrate != 0) node.put_attribute("clockrate", clockrate.to_string());
+ if (maxptime != 0) node.put_attribute("maxptime", maxptime.to_string());
+ if (name != null) node.put_attribute("name", name);
+ if (ptime != 0) node.put_attribute("ptime", ptime.to_string());
+ foreach (string parameter in parameters.keys) {
+ node.put_node(new StanzaNode.build("parameter", NS_URI)
+ .put_attribute("name", parameter)
+ .put_attribute("value", parameters[parameter]));
+ }
+ return node;
+ }
+
+ public static bool equals_func(PayloadType a, PayloadType b) {
+ return a.id == b.id &&
+ a.name == b.name &&
+ a.channels == b.channels &&
+ a.clockrate == b.clockrate &&
+ a.maxptime == b.maxptime &&
+ a.ptime == b.ptime;
+ }
+} \ No newline at end of file