aboutsummaryrefslogtreecommitdiff
path: root/xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala
diff options
context:
space:
mode:
Diffstat (limited to 'xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala')
-rw-r--r--xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala38
1 files changed, 38 insertions, 0 deletions
diff --git a/xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala b/xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala
new file mode 100644
index 00000000..9f0acd27
--- /dev/null
+++ b/xmpp-vala/src/module/xep/0166_jingle/jingle_flag.vala
@@ -0,0 +1,38 @@
+using Gee;
+using Xmpp;
+
+public class Xmpp.Xep.Jingle.Flag : XmppStreamFlag {
+ public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "jingle");
+
+ public HashMap<string, Session> sessions = new HashMap<string, Session>();
+ public HashMap<string, Promise<Session?>> promises = new HashMap<string, Promise<Session?>>();
+
+ // We might get transport-infos about a session before we finished fully creating the session. (e.g. telepathy outgoing calls)
+ // Thus, we "pre add" the session as soon as possible and can then await it.
+ public void pre_add_session(string sid) {
+ var promise = new Promise<Session?>();
+ promises[sid] = promise;
+ }
+
+ public void add_session(Session session) {
+ if (promises.has_key(session.sid)) {
+ promises[session.sid].set_value(session);
+ promises.unset(session.sid);
+ }
+ sessions[session.sid] = session;
+ }
+
+ public async Session? get_session(string sid) {
+ if (promises.has_key(sid)) {
+ return yield promises[sid].future.wait_async();
+ }
+ return sessions[sid];
+ }
+
+ public void remove_session(string sid) {
+ sessions.unset(sid);
+ }
+
+ public override string get_ns() { return NS_URI; }
+ public override string get_id() { return IDENTITY.id; }
+} \ No newline at end of file