--- a/jingle/action-handlers.c Sat Jul 10 00:09:56 2010 +0200
+++ b/jingle/action-handlers.c Sat Jul 10 00:21:17 2010 +0200
@@ -23,6 +23,8 @@
#include <mcabber/logprint.h>
#include <mcabber/xmpp_helper.h>
+#include <mcabber/events.h>
+#include <mcabber/hbuf.h>
#include <jingle/jingle.h>
#include <jingle/check.h>
@@ -241,9 +243,10 @@
void handle_session_initiate(LmMessage *m, JingleNode *jn)
{
GError *err = NULL;
- GSList *child = NULL;
gboolean valid_disposition = FALSE;
JingleContent *cn;
+ GString *sbuf;
+ GSList *child = NULL;
LmMessage *r;
if (!check_contents(jn, &err)) {
@@ -281,7 +284,24 @@
jingle_ack_iq(m);
- // TODO: generate an event and wait for the user's choice
+ // Wait that user accept the jingle
+ sbuf = g_string_new("");
+ g_string_printf(sbuf, "Received an invitation for a jingle session from <%s>", lm_message_get_from(m));
+
+ scr_WriteIncomingMessage(jidtodisp(lm_message_get_from(m)), sbuf->str, 0, HBB_PREFIX_INFO, 0);
+ scr_LogPrint(LPRINT_LOGNORM, "%s", sbuf->str);
+
+ {
+ const char *id;
+ char *desc = g_strdup_printf("<%s> invites you to do a jingle session", lm_message_get_from(m));
+
+ id = evs_new(desc, NULL, 0, evscallback_jingle, jn, (GDestroyNotify)NULL);
+ g_free(desc);
+ if (id)
+ g_string_printf(sbuf, "Please use /event %s accept|reject", id);
+ else
+ g_string_printf(sbuf, "Unable to create a new event!");
+ }
}
void handle_session_terminate(LmMessage *m, JingleNode *jn)
--- a/jingle/jingle.c Sat Jul 10 00:09:56 2010 +0200
+++ b/jingle/jingle.c Sat Jul 10 00:21:17 2010 +0200
@@ -30,6 +30,7 @@
#include <mcabber/logprint.h>
#include <mcabber/xmpp_helper.h>
#include <mcabber/xmpp_defines.h>
+#include <mcabber/events.h>
#include <jingle/jingle.h>
#include <jingle/check.h>
@@ -315,3 +316,40 @@
else if (content->senders == JINGLE_SENDERS_RESPONDER)
lm_message_node_set_attribute(node, "senders", "responder");
}
+
+gboolean evscallback_jingle(guint evcontext, const gchar *arg, gpointer userdata)
+{
+ JingleNode *jn = userdata;
+
+ // Demande à mcKael l'utilité de ce truc
+ /*
+ if (G_UNLIKELY(!jn)) {
+ scr_LogPrint(LPRINT_LOGNORM, "Error in evs callback.");
+ return FALSE;
+ }
+ */
+
+ if (evcontext == EVS_CONTEXT_TIMEOUT) {
+ scr_LogPrint(LPRINT_LOGNORM, "Jingle event from %s timed out, cancelled.", jn->initiator);
+ jingle_free_jinglenode(jn);
+ return FALSE;
+ }
+ if (evcontext = EVS_CONTEXT_CANCEL) {
+ scr_LogPrint(LPRINT_LOGNORM, "Jingle event from %s cancelled.", jn->initiator);
+ jingle_free_jinglenode(jn);
+ return FALSE;
+ }
+ if (!(evcontext == EVS_CONTEXT_ACCEPT || evcontext == EVS_CONTEXT_REJECT)) {
+ jingle_free_jinglenode(jn);
+ return FALSE;
+ }
+
+ if (evcontext == EVS_CONTEXT_ACCEPT) {
+ jingle_send_session_accept(jn);
+ } else {
+ // TODO: detroy the JingleNode and send a session-reject
+ jingle_free_jinglenode(jn);
+ }
+
+ return FALSE;
+}
--- a/jingle/jingle.h Sat Jul 10 00:09:56 2010 +0200
+++ b/jingle/jingle.h Sat Jul 10 00:21:17 2010 +0200
@@ -115,5 +115,5 @@
void jingle_ack_iq(LmMessage *m);
JingleAction jingle_action_from_str(const gchar* string);
LmMessage *lm_message_from_jinglenode(const JingleNode *jn, const gchar *to);
-
+gboolean evscallback_jingle(guint evcontext, const gchar *arg, gpointer userdata);
#endif