Mercurial > pidgin
comparison libpurple/protocols/jabber/jingle/session.c @ 29327:c4f836780e1c
propagate from branch 'im.pidgin.pidgin' (head 5e3164a6a1df028fc66f7e072be0d78d9d995389)
to branch 'im.pidgin.pidgin.next.minor' (head 6ee3a8d962ff2bb002967cc29bd5aa0b45bc2028)
author | John Bailey <rekkanoryo@rekkanoryo.org> |
---|---|
date | Sat, 28 Nov 2009 02:22:49 +0000 |
parents | 90361789d5ac 39716f7d2c93 |
children | c38f6e6bf4ce |
comparison
equal
deleted
inserted
replaced
28661:588a7aef5f7c | 29327:c4f836780e1c |
---|---|
369 purple_debug_info("jingle", "lookup: %p\n", session); | 369 purple_debug_info("jingle", "lookup: %p\n", session); |
370 | 370 |
371 return session; | 371 return session; |
372 } | 372 } |
373 | 373 |
374 #if GLIB_CHECK_VERSION(2,4,0) | |
375 static gboolean find_by_jid_ghr(gpointer key, | 374 static gboolean find_by_jid_ghr(gpointer key, |
376 gpointer value, gpointer user_data) | 375 gpointer value, gpointer user_data) |
377 { | 376 { |
378 JingleSession *session = (JingleSession *)value; | 377 JingleSession *session = (JingleSession *)value; |
379 const gchar *jid = user_data; | 378 const gchar *jid = user_data; |
389 g_free(cmp_jid); | 388 g_free(cmp_jid); |
390 | 389 |
391 return FALSE; | 390 return FALSE; |
392 } | 391 } |
393 | 392 |
394 #else /* GLIB_CHECK_VERSION 2.4.0 */ | |
395 | |
396 /* Ugly code; g_hash_table_find version above is much nicer */ | |
397 struct session_find_jid | |
398 { | |
399 const gchar *jid; | |
400 JingleSession *ret; | |
401 gboolean use_bare; | |
402 }; | |
403 | |
404 static void find_by_jid_ghr(gpointer key, gpointer value, gpointer user_data) | |
405 { | |
406 JingleSession *session = (JingleSession *)value; | |
407 struct session_find_jid *data = user_data; | |
408 gchar *remote_jid; | |
409 gchar *cmp_jid; | |
410 | |
411 if (data->ret != NULL) | |
412 return; | |
413 | |
414 remote_jid = jingle_session_get_remote_jid(session); | |
415 cmp_jid = data->use_bare ? jabber_get_bare_jid(remote_jid) | |
416 : g_strdup(remote_jid); | |
417 g_free(remote_jid); | |
418 | |
419 if (g_str_equal(data->jid, cmp_jid)) | |
420 data->ret = session; | |
421 | |
422 g_free(cmp_jid); | |
423 } | |
424 #endif /* GLIB_CHECK_VERSION 2.4.0 */ | |
425 | |
426 JingleSession * | 393 JingleSession * |
427 jingle_session_find_by_jid(JabberStream *js, const gchar *jid) | 394 jingle_session_find_by_jid(JabberStream *js, const gchar *jid) |
428 { | 395 { |
429 #if GLIB_CHECK_VERSION(2,4,0) | |
430 return js->sessions != NULL ? | 396 return js->sessions != NULL ? |
431 g_hash_table_find(js->sessions, | 397 g_hash_table_find(js->sessions, |
432 find_by_jid_ghr, (gpointer)jid) : NULL; | 398 find_by_jid_ghr, (gpointer)jid) : NULL; |
433 #else | |
434 struct session_find_jid data; | |
435 | |
436 if (js->sessions == NULL) | |
437 return NULL; | |
438 | |
439 data.jid = jid; | |
440 data.ret = NULL; | |
441 data.use_bare = g_utf8_strchr(jid, -1, '/') == NULL; | |
442 | |
443 g_hash_table_foreach(js->sessions, find_by_jid_ghr, &data); | |
444 return data.ret; | |
445 #endif | |
446 } | 399 } |
447 | 400 |
448 static xmlnode * | 401 static xmlnode * |
449 jingle_add_jingle_packet(JingleSession *session, | 402 jingle_add_jingle_packet(JingleSession *session, |
450 JabberIq *iq, JingleActionType action) | 403 JabberIq *iq, JingleActionType action) |