static void purple_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { PurpleMedia *media; g_return_if_fail(PURPLE_IS_MEDIA(object)); media = PURPLE_MEDIA(object); switch (prop_id) { case PROP_MANAGER: g_value_set_object(value, media->priv->manager); break; case PROP_BACKEND: g_value_set_object(value, media->priv->backend); break; case PROP_ACCOUNT: g_value_set_pointer(value, media->priv->account); break; case PROP_CONFERENCE_TYPE: g_value_set_string(value, media->priv->conference_type); break; case PROP_INITIATOR: g_value_set_boolean(value, media->priv->initiator); break; case PROP_PRPL_DATA: g_value_set_pointer(value, media->priv->prpl_data); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
void purple_media_manager_remove_output_windows(PurpleMediaManager *manager, PurpleMedia *media, const gchar *session_id, const gchar *participant) { #ifdef USE_VV GList *iter; g_return_if_fail(PURPLE_IS_MEDIA(media)); iter = manager->priv->output_windows; for (; iter;) { PurpleMediaOutputWindow *ow = iter->data; iter = g_list_next(iter); if (media == ow->media && ((session_id != NULL && ow->session_id != NULL && !strcmp(session_id, ow->session_id)) || (session_id == ow->session_id)) && ((participant != NULL && ow->participant != NULL && !strcmp(participant, ow->participant)) || (participant == ow->participant))) purple_media_manager_remove_output_window( manager, ow->id); } #endif }
void purple_media_add_remote_candidates(PurpleMedia *media, const gchar *sess_id, const gchar *participant, GList *remote_candidates) { #ifdef USE_VV PurpleMediaStream *stream; g_return_if_fail(PURPLE_IS_MEDIA(media)); stream = purple_media_get_stream(media, sess_id, participant); if (stream == NULL) { purple_debug_error("media", "purple_media_add_remote_candidates: " "couldn't find stream %s %s.\n", sess_id ? sess_id : "(null)", participant ? participant : "(null)"); return; } stream->remote_candidates = g_list_concat(stream->remote_candidates, purple_media_candidate_list_copy(remote_candidates)); purple_media_backend_add_remote_candidates(media->priv->backend, sess_id, participant, remote_candidates); #endif }
gboolean purple_media_candidates_prepared(PurpleMedia *media, const gchar *session_id, const gchar *participant) { #ifdef USE_VV GList *streams; gboolean prepared = TRUE; g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); streams = purple_media_get_streams(media, session_id, participant); for (; streams; streams = g_list_delete_link(streams, streams)) { PurpleMediaStream *stream = streams->data; if (stream->candidates_prepared == FALSE) { g_list_free(streams); prepared = FALSE; break; } } return prepared; #else return FALSE; #endif }
gulong purple_media_manager_set_output_window(PurpleMediaManager *manager, PurpleMedia *media, const gchar *session_id, const gchar *participant, gulong window_id) { #ifdef USE_VV PurpleMediaOutputWindow *output_window; g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), FALSE); g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); output_window = g_new0(PurpleMediaOutputWindow, 1); output_window->id = manager->priv->next_output_window_id++; output_window->media = media; output_window->session_id = g_strdup(session_id); output_window->participant = g_strdup(participant); output_window->window_id = window_id; manager->priv->output_windows = g_list_prepend( manager->priv->output_windows, output_window); if (purple_media_get_tee(media, session_id, participant) != NULL) purple_media_manager_create_output_window(manager, media, session_id, participant); return output_window->id; #else return 0; #endif }
static PurpleMediaSession* purple_media_get_session(PurpleMedia *media, const gchar *sess_id) { g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); return (PurpleMediaSession*) (media->priv->sessions) ? g_hash_table_lookup(media->priv->sessions, sess_id) : NULL; }
PurpleMediaManager * purple_media_get_manager(PurpleMedia *media) { PurpleMediaManager *ret; g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); g_object_get(media, "manager", &ret, NULL); return ret; }
void purple_media_set_prpl_data(PurpleMedia *media, gpointer prpl_data) { #ifdef USE_VV g_return_if_fail(PURPLE_IS_MEDIA(media)); g_object_set(G_OBJECT(media), "prpl-data", prpl_data, NULL); #endif }
static void purple_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { PurpleMedia *media; g_return_if_fail(PURPLE_IS_MEDIA(object)); media = PURPLE_MEDIA(object); switch (prop_id) { case PROP_MANAGER: media->priv->manager = g_value_dup_object(value); break; case PROP_ACCOUNT: media->priv->account = g_value_get_pointer(value); break; case PROP_CONFERENCE_TYPE: media->priv->conference_type = g_value_dup_string(value); media->priv->backend = g_object_new( purple_media_manager_get_backend_type( purple_media_manager_get()), "conference-type", media->priv->conference_type, "media", media, NULL); g_signal_connect(media->priv->backend, "active-candidate-pair", G_CALLBACK( purple_media_candidate_pair_established_cb), media); g_signal_connect(media->priv->backend, "candidates-prepared", G_CALLBACK( purple_media_candidates_prepared_cb), media); g_signal_connect(media->priv->backend, "codecs-changed", G_CALLBACK( purple_media_codecs_changed_cb), media); g_signal_connect(media->priv->backend, "new-candidate", G_CALLBACK( purple_media_new_local_candidate_cb), media); break; case PROP_INITIATOR: media->priv->initiator = g_value_get_boolean(value); break; case PROP_PRPL_DATA: media->priv->prpl_data = g_value_get_pointer(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
void purple_media_set_params(PurpleMedia *media, guint num_params, GParameter *params) { #ifdef USE_VV g_return_if_fail(PURPLE_IS_MEDIA(media)); purple_media_backend_set_params(media->priv->backend, num_params, params); #endif }
gboolean purple_media_add_stream(PurpleMedia *media, const gchar *sess_id, const gchar *who, PurpleMediaSessionType type, gboolean initiator, const gchar *transmitter, guint num_params, GParameter *params) { #ifdef USE_VV PurpleMediaSession *session; g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); if (!purple_media_backend_add_stream(media->priv->backend, sess_id, who, type, initiator, transmitter, num_params, params)) { purple_debug_error("media", "Error adding stream.\n"); return FALSE; } session = purple_media_get_session(media, sess_id); if (!session) { session = g_new0(PurpleMediaSession, 1); session->id = g_strdup(sess_id); session->media = media; session->type = type; session->initiator = initiator; purple_media_add_session(media, session); g_signal_emit(media, purple_media_signals[STATE_CHANGED], 0, PURPLE_MEDIA_STATE_NEW, session->id, NULL); } if (!g_list_find_custom(media->priv->participants, who, (GCompareFunc)strcmp)) { media->priv->participants = g_list_prepend( media->priv->participants, g_strdup(who)); g_signal_emit_by_name(media, "state-changed", PURPLE_MEDIA_STATE_NEW, NULL, who); } if (purple_media_get_stream(media, sess_id, who) == NULL) { purple_media_insert_stream(session, who, initiator); g_signal_emit(media, purple_media_signals[STATE_CHANGED], 0, PURPLE_MEDIA_STATE_NEW, session->id, who); } return TRUE; #else return FALSE; #endif /* USE_VV */ }
/* XXX: Should wait until codecs-ready is TRUE before using this function */ GList * purple_media_get_codecs(PurpleMedia *media, const gchar *sess_id) { #ifdef USE_VV g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); return purple_media_backend_get_codecs(media->priv->backend, sess_id); #else return NULL; #endif }
GList * purple_media_get_session_ids(PurpleMedia *media) { #ifdef USE_VV g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); return media->priv->sessions != NULL ? g_hash_table_get_keys(media->priv->sessions) : NULL; #else return NULL; #endif }
gpointer purple_media_get_prpl_data(PurpleMedia *media) { #ifdef USE_VV gpointer prpl_data; g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); g_object_get(G_OBJECT(media), "prpl-data", &prpl_data, NULL); return prpl_data; #else return NULL; #endif }
gboolean purple_media_codecs_ready(PurpleMedia *media, const gchar *sess_id) { #ifdef USE_VV g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); return purple_media_backend_codecs_ready( media->priv->backend, sess_id); #else return FALSE; #endif }
PurpleAccount * purple_media_get_account(PurpleMedia *media) { #ifdef USE_VV PurpleAccount *account; g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); g_object_get(G_OBJECT(media), "account", &account, NULL); return account; #else return NULL; #endif }
PurpleMediaSessionType purple_media_get_session_type(PurpleMedia *media, const gchar *sess_id) { #ifdef USE_VV PurpleMediaSession *session; g_return_val_if_fail(PURPLE_IS_MEDIA(media), PURPLE_MEDIA_NONE); session = purple_media_get_session(media, sess_id); return session->type; #else return PURPLE_MEDIA_NONE; #endif }
void purple_media_set_input_volume(PurpleMedia *media, const gchar *session_id, double level) { #ifdef USE_VV g_return_if_fail(PURPLE_IS_MEDIA(media)); g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(media->priv->backend)); purple_media_backend_fs2_set_input_volume( PURPLE_MEDIA_BACKEND_FS2( media->priv->backend), session_id, level); #endif }
static void purple_media_add_session(PurpleMedia *media, PurpleMediaSession *session) { g_return_if_fail(PURPLE_IS_MEDIA(media)); g_return_if_fail(session != NULL); if (!media->priv->sessions) { purple_debug_info("media", "Creating hash table for sessions\n"); media->priv->sessions = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL); } g_hash_table_insert(media->priv->sessions, g_strdup(session->id), session); }
gboolean purple_media_set_decryption_parameters(PurpleMedia *media, const gchar *sess_id, const gchar *participant, const gchar *cipher, const gchar *auth, const gchar *key, gsize key_len) { #ifdef USE_VV g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); return purple_media_backend_set_decryption_parameters(media->priv->backend, sess_id, participant, cipher, auth, key, key_len); #else return FALSE; #endif }
gulong purple_media_set_output_window(PurpleMedia *media, const gchar *session_id, const gchar *participant, gulong window_id) { #ifdef USE_VV g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); return purple_media_manager_set_output_window(media->priv->manager, media, session_id, participant, window_id); #else return 0; #endif }
gboolean purple_media_set_send_rtcp_mux(PurpleMedia *media, const gchar *sess_id, const gchar *participant, gboolean send_rtcp_mux) { #ifdef USE_VV g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); return purple_media_backend_set_send_rtcp_mux(media->priv->backend, sess_id, participant, send_rtcp_mux); #else return FALSE; #endif }
gboolean purple_media_set_remote_codecs(PurpleMedia *media, const gchar *sess_id, const gchar *participant, GList *codecs) { #ifdef USE_VV g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); return purple_media_backend_set_remote_codecs(media->priv->backend, sess_id, participant, codecs); #else return FALSE; #endif }
GList * purple_media_get_local_candidates(PurpleMedia *media, const gchar *sess_id, const gchar *participant) { #ifdef USE_VV g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); return purple_media_backend_get_local_candidates(media->priv->backend, sess_id, participant); #else return NULL; #endif }
static void purple_media_candidates_prepared_cb(PurpleMediaBackend *backend, const gchar *sess_id, const gchar *name, PurpleMedia *media) { PurpleMediaStream *stream_data; g_return_if_fail(PURPLE_IS_MEDIA(media)); stream_data = purple_media_get_stream(media, sess_id, name); stream_data->candidates_prepared = TRUE; g_signal_emit(media, purple_media_signals[CANDIDATES_PREPARED], 0, sess_id, name); }
GList * purple_media_get_active_remote_candidates(PurpleMedia *media, const gchar *sess_id, const gchar *participant) { #ifdef USE_VV PurpleMediaStream *stream; g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); stream = purple_media_get_stream(media, sess_id, participant); return purple_media_candidate_list_copy( stream->active_remote_candidates); #else return NULL; #endif }
GstElement * purple_media_get_src(PurpleMedia *media, const gchar *sess_id) { #ifdef USE_VV g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); if (PURPLE_IS_MEDIA_BACKEND_FS2(media->priv->backend)) return purple_media_backend_fs2_get_src( PURPLE_MEDIA_BACKEND_FS2( media->priv->backend), sess_id); g_return_val_if_reached(NULL); #else return NULL; #endif }
gboolean purple_media_param_is_supported(PurpleMedia *media, const gchar *param) { #ifdef USE_VV const gchar **params; g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); g_return_val_if_fail(param != NULL, FALSE); params = purple_media_backend_get_available_params(media->priv->backend); for (; *params != NULL; ++params) if (!strcmp(*params, param)) return TRUE; #endif return FALSE; }
static PurpleMediaStream* purple_media_get_stream(PurpleMedia *media, const gchar *session, const gchar *participant) { GList *streams; g_return_val_if_fail(PURPLE_IS_MEDIA(media), NULL); streams = media->priv->streams; for (; streams; streams = g_list_next(streams)) { PurpleMediaStream *stream = streams->data; if (!strcmp(stream->session->id, session) && !strcmp(stream->participant, participant)) return stream; } return NULL; }
void purple_media_error(PurpleMedia *media, const gchar *error, ...) { #ifdef USE_VV va_list args; gchar *message; g_return_if_fail(PURPLE_IS_MEDIA(media)); va_start(args, error); message = g_strdup_vprintf(error, args); va_end(args); purple_debug_error("media", "%s\n", message); g_signal_emit(media, purple_media_signals[S_ERROR], 0, message); g_free(message); #endif }