# HG changeset patch # User Mike Ruprecht # Date 1231063014 0 # Node ID 607d82dce00ecd9b9fcfa167d88e838d03354576 # Parent 7caa7e2ce8700ebbb307358583ce67dc3ab54722 Have XMPP use the new ready signal. diff -r 7caa7e2ce870 -r 607d82dce00e libpurple/media.c --- a/libpurple/media.c Sun Jan 04 07:42:12 2009 +0000 +++ b/libpurple/media.c Sun Jan 04 09:56:54 2009 +0000 @@ -642,7 +642,8 @@ GList *sessions; gboolean conf_ready = TRUE; - if ((session != NULL) && ((session->accepted == FALSE) || + if ((session != NULL) && ((media->priv->initiator == FALSE && + session->accepted == FALSE) || (purple_media_codecs_ready(media, session->id) == FALSE))) return; @@ -652,28 +653,31 @@ PurpleMediaSession *session_data = sessions->data; GList *streams = purple_media_get_streams(media, session_data->id, NULL); + gboolean session_ready = TRUE; - if ((session_data->accepted == FALSE) || + if ((media->priv->initiator == FALSE && + session_data->accepted == FALSE) || (purple_media_codecs_ready( media, session_data->id) == FALSE)) conf_ready = FALSE; for (; streams; streams = g_list_delete_link(streams, streams)) { PurpleMediaStream *stream = streams->data; - if (stream->candidates_prepared == TRUE && - session_data == session) + if (stream->candidates_prepared == FALSE) { + session_ready = FALSE; + conf_ready = FALSE; + } else if (session_data == session) g_signal_emit(media, purple_media_signals[READY_NEW], 0, session_data->id, stream->participant); } - if (session == session_data || session == NULL) + if (session_ready == TRUE && + (session == session_data || session == NULL)) g_signal_emit(media, purple_media_signals[READY_NEW], 0, session_data->id, NULL); } if (conf_ready == TRUE) { - g_list_free(sessions); - } else { g_signal_emit(media, purple_media_signals[READY_NEW], 0, NULL, NULL); } diff -r 7caa7e2ce870 -r 607d82dce00e libpurple/protocols/jabber/jingle/rtp.c --- a/libpurple/protocols/jabber/jingle/rtp.c Sun Jan 04 07:42:12 2009 +0000 +++ b/libpurple/protocols/jabber/jingle/rtp.c Sun Jan 04 09:56:54 2009 +0000 @@ -164,27 +164,6 @@ } } -static gboolean -jingle_rtp_ready_to_initiate(JingleSession *session, PurpleMedia *media) -{ - if (jingle_session_is_initiator(session)) { - GList *iter = jingle_session_get_contents(session); - for (; iter; iter = g_list_next(iter)) { - JingleContent *content = iter->data; - gchar *name = jingle_content_get_name(content); - if (!JINGLE_IS_RTP(content) - || JINGLE_RTP_GET_PRIVATE(content)->codecs_ready == FALSE - || JINGLE_RTP_GET_PRIVATE(content)->candidates_ready == FALSE) { - g_free(name); - return FALSE; - } - g_free(name); - } - return TRUE; - } - return FALSE; -} - gchar * jingle_rtp_get_media_type(JingleContent *content) { @@ -328,12 +307,6 @@ jingle_content_set_pending_transport(content, transport); jingle_content_accept_transport(content); - - if (jingle_rtp_ready_to_initiate(session, media)) { - jabber_iq_send(jingle_session_to_packet(session, JINGLE_SESSION_INITIATE)); - if (JINGLE_IS_ICEUDP(transport)) - jabber_iq_send(jingle_session_to_packet(session, JINGLE_TRANSPORT_INFO)); - } } static void @@ -343,31 +316,24 @@ } static void -jingle_rtp_codecs_ready_cb(PurpleMedia *media, gchar *sid, JingleSession *session) +jingle_rtp_ready_cb(PurpleMedia *media, gchar *sid, gchar *name, JingleSession *session) { - JingleContent *content = jingle_session_find_content(session, sid, "initiator"); - - if (content == NULL) - content = jingle_session_find_content(session, sid, "responder"); + purple_debug_info("rtp", "ready-new: session: %s name: %s\n", sid, name); - if (JINGLE_RTP_GET_PRIVATE(content)->codecs_ready == FALSE) { - JINGLE_RTP_GET_PRIVATE(content)->codecs_ready = - purple_media_codecs_ready(media, sid); + if (sid == NULL && name == NULL && jingle_session_is_initiator(session) == TRUE) { + GList *contents = jingle_session_get_contents(session); - if (jingle_rtp_ready_to_initiate(session, media)) { + jabber_iq_send(jingle_session_to_packet(session, JINGLE_SESSION_INITIATE)); + + for (; contents; contents = g_list_next(contents)) { + JingleContent *content = (JingleContent *)contents->data; JingleTransport *transport = jingle_content_get_transport(content); - jabber_iq_send(jingle_session_to_packet(session, JINGLE_SESSION_INITIATE)); if (JINGLE_IS_ICEUDP(transport)) jabber_iq_send(jingle_session_to_packet(session, JINGLE_TRANSPORT_INFO)); } } } -static void -jingle_rtp_ready_new_cb(PurpleMedia *media, gchar *sid, gchar *name, JingleSession *session) { - purple_debug_info("rtp", "ready-new: session: %s name: %s\n", sid, name); -} - static PurpleMedia * jingle_rtp_create_media(JingleContent *content) { @@ -407,10 +373,8 @@ G_CALLBACK(jingle_rtp_candidates_prepared_cb), session); g_signal_connect(G_OBJECT(media), "candidate-pair", G_CALLBACK(jingle_rtp_candidate_pair_established_cb), session); - g_signal_connect(G_OBJECT(media), "codecs-ready", - G_CALLBACK(jingle_rtp_codecs_ready_cb), session); g_signal_connect(G_OBJECT(media), "ready-new", - G_CALLBACK(jingle_rtp_ready_new_cb), session); + G_CALLBACK(jingle_rtp_ready_cb), session); g_object_unref(session); return media;