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)