aboutsummaryrefslogtreecommitdiff
path: root/xmpp-vala/src/module/xep/0167_jingle_rtp/session_info_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/session_info_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/session_info_type.vala')
-rw-r--r--xmpp-vala/src/module/xep/0167_jingle_rtp/session_info_type.vala67
1 files changed, 67 insertions, 0 deletions
diff --git a/xmpp-vala/src/module/xep/0167_jingle_rtp/session_info_type.vala b/xmpp-vala/src/module/xep/0167_jingle_rtp/session_info_type.vala
new file mode 100644
index 00000000..d36255f0
--- /dev/null
+++ b/xmpp-vala/src/module/xep/0167_jingle_rtp/session_info_type.vala
@@ -0,0 +1,67 @@
+using Gee;
+using Xmpp;
+using Xmpp.Xep;
+
+namespace Xmpp.Xep.JingleRtp {
+
+ public enum CallSessionInfo {
+ ACTIVE,
+ HOLD,
+ UNHOLD,
+ MUTE,
+ UNMUTE,
+ RINGING
+ }
+
+ public class SessionInfoType : Jingle.SessionInfoNs, Object {
+ public const string NS_URI = "urn:xmpp:jingle:apps:rtp:info:1";
+ public string ns_uri { get { return NS_URI; } }
+
+ public signal void info_received(Jingle.Session session, CallSessionInfo info);
+ public signal void mute_update_received(Jingle.Session session, bool mute, string name);
+
+ public void handle_content_session_info(XmppStream stream, Jingle.Session session, StanzaNode info, Iq.Stanza iq) throws Jingle.IqError {
+ switch (info.name) {
+ case "active":
+ info_received(session, CallSessionInfo.ACTIVE);
+ break;
+ case "hold":
+ info_received(session, CallSessionInfo.HOLD);
+ break;
+ case "unhold":
+ info_received(session, CallSessionInfo.UNHOLD);
+ break;
+ case "mute":
+ string? name = info.get_attribute("name");
+ mute_update_received(session, true, name);
+ info_received(session, CallSessionInfo.MUTE);
+ break;
+ case "unmute":
+ string? name = info.get_attribute("name");
+ mute_update_received(session, false, name);
+ info_received(session, CallSessionInfo.UNMUTE);
+ break;
+ case "ringing":
+ info_received(session, CallSessionInfo.RINGING);
+ break;
+ }
+ }
+
+ public void send_mute(Jingle.Session session, bool mute, string media) {
+ string node_name = mute ? "mute" : "unmute";
+
+ foreach (Jingle.Content content in session.contents.values) {
+ Parameters? parameters = content.content_params as Parameters;
+ if (parameters != null && parameters.media == media) {
+ StanzaNode session_info_content = new StanzaNode.build(node_name, NS_URI).add_self_xmlns().put_attribute("name", content.content_name);
+ session.send_session_info(session_info_content);
+ }
+ }
+ }
+
+ public void send_ringing(Jingle.Session session) {
+ StanzaNode session_info_content = new StanzaNode.build("ringing", NS_URI).add_self_xmlns();
+ session.send_session_info(session_info_content);
+ }
+ }
+}