aboutsummaryrefslogtreecommitdiff
path: root/xmpp-vala/src/module/xep/0167_jingle_rtp/session_info_type.vala
diff options
context:
space:
mode:
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..32cd9016
--- /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) {
+ 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);
+ }
+ }
+}