if (state == PURPLE_MEDIA_STATE_END && !id && !participant) {
if (chat->media) {
chat->media = NULL;
- chime_call_set_mute(chat->call, TRUE);
+ chime_call_set_silent(chat->call, TRUE);
}
}
}
TRUE);
if (!chat->media) {
/* XX: Report error, but not with purple_media_error()! */
- chime_call_set_mute(chat->call, TRUE);
+ chime_call_set_silent(chat->call, TRUE);
return;
}
purple_media_error(chat->media, _("Error adding media stream\n"));
purple_media_end(chat->media, NULL, NULL);
chat->media = NULL;
- chime_call_set_mute(chat->call, TRUE);
+ chime_call_set_silent(chat->call, TRUE);
return;
}
purple_media_error(chat->media, _("Error setting Chime OPUS codec\n"));
purple_media_end(chat->media, NULL, NULL);
chat->media = NULL;
- chime_call_set_mute(chat->call, TRUE);
+ chime_call_set_silent(chat->call, TRUE);
return;
}
purple_media_codec_list_free(codecs);
{
struct chime_chat *chat = _chat;
if (chat->call)
- chime_call_set_mute(chat->call, FALSE);
+ chime_call_set_silent(chat->call, FALSE);
}
GList *chime_purple_chat_menu(PurpleChat *pchat)
chime_debug("Got AuthMessage authorised %d %d\n", msg->has_authorized, msg->authorized);
if (msg->has_authorized && msg->authorized) {
do_send_rt_packet(audio, NULL);
- chime_call_audio_set_state(audio, audio->muted ? CHIME_AUDIO_STATE_AUDIOLESS :
+ chime_call_audio_set_state(audio, audio->silent ? CHIME_AUDIO_STATE_AUDIOLESS :
(audio->local_mute ? CHIME_AUDIO_STATE_AUDIO_MUTED : CHIME_AUDIO_STATE_AUDIO));
}
gst_app_sink_set_callbacks(appsink, &chime_appsink_callbacks, audio, chime_appsink_destroy);
}
-ChimeCallAudio *chime_call_audio_open(ChimeConnection *cxn, ChimeCall *call, gboolean muted)
+ChimeCallAudio *chime_call_audio_open(ChimeConnection *cxn, ChimeCall *call, gboolean silent)
{
ChimeCallAudio *audio = g_new0(ChimeCallAudio, 1);
audio->call = call;
audio->audio_msg.has_sample_time = 1;
audio->audio_msg.sample_time = g_random_int();
- chime_call_transport_connect(audio, muted);
+ chime_call_transport_connect(audio, silent);
chime_call_audio_set_state(audio, CHIME_AUDIO_STATE_CONNECTING);
return audio;
}
/* Reopen the transport with/without audio enabled at all. */
-void chime_call_audio_reopen(ChimeCallAudio *audio, gboolean muted)
+void chime_call_audio_reopen(ChimeCallAudio *audio, gboolean silent)
{
- chime_call_audio_local_mute(audio, muted);
- if (muted != audio->muted) {
+ chime_call_audio_local_mute(audio, silent);
+ if (silent != audio->silent) {
if (audio->send_rt_source)
g_source_remove(audio->send_rt_source);
if (audio->data_ack_source)
g_source_remove(audio->data_ack_source);
chime_call_transport_disconnect(audio, TRUE);
- chime_call_transport_connect(audio, muted);
+ chime_call_transport_connect(audio, silent);
chime_call_audio_set_state(audio, CHIME_AUDIO_STATE_CONNECTING);
}
}
+gboolean chime_call_audio_get_silent(ChimeCallAudio *audio)
+{
+ return audio->silent;
+}
+
/* Set client-side muting, when the audio is actually connected */
void chime_call_audio_local_mute(ChimeCallAudio *audio, gboolean muted)
{
struct _ChimeCallAudio {
ChimeCall *call;
ChimeAudioState state;
- gboolean local_mute;
- gboolean muted;
+ gboolean local_mute; /* Listening but not sending from mic */
+ gboolean silent; /* No audio; only participant data */
GMutex transport_lock;
SoupWebsocketConnection *ws;
guint data_ack_source;
};
/* Called from ChimeMeeting */
-ChimeCallAudio *chime_call_audio_open(ChimeConnection *cxn, ChimeCall *call, gboolean muted);
+ChimeCallAudio *chime_call_audio_open(ChimeConnection *cxn, ChimeCall *call, gboolean silent);
void chime_call_audio_close(ChimeCallAudio *audio, gboolean hangup);
-void chime_call_audio_reopen(ChimeCallAudio *audio, gboolean muted);
+void chime_call_audio_reopen(ChimeCallAudio *audio, gboolean silent);
+gboolean chime_call_audio_get_silent(ChimeCallAudio *audio);
void chime_call_audio_set_state(ChimeCallAudio *audio, ChimeAudioState state);
void chime_call_audio_local_mute(ChimeCallAudio *audio, gboolean muted);
/* Called from audio code */
-void chime_call_transport_connect(ChimeCallAudio *audio, gboolean muted);
+void chime_call_transport_connect(ChimeCallAudio *audio, gboolean silent);
void chime_call_transport_disconnect(ChimeCallAudio *audio, gboolean hangup);
void chime_call_transport_send_packet(ChimeCallAudio *audio, enum xrp_pkt_type type, const ProtobufCMessage *message);
msg.has_codec = TRUE;
msg.flags = FLAGS__FLAG_HAS_PROFILE_TABLE | FLAGS__FLAG_HAS_CLIENT_STATUS;
- if (audio->muted)
+ if (audio->silent)
msg.flags |= FLAGS__FLAG_MUTE;
msg.has_flags = TRUE;
msg.has_codec = TRUE;
msg.flags = FLAGS__FLAG_HAS_PROFILE_TABLE;
- if (audio->muted)
+ if (audio->silent)
msg.flags |= FLAGS__FLAG_MUTE;
msg.has_flags = TRUE;
}
-void chime_call_transport_connect(ChimeCallAudio *audio, gboolean muted)
+void chime_call_transport_connect(ChimeCallAudio *audio, gboolean silent)
{
/* Grrr, GDtlsClientConnection doesn't actually exist yet. Let's stick
with the WebSocket for now... */
SoupURI *uri = soup_uri_new_printf(chime_call_get_audio_ws_url(audio->call), "/audio");
SoupMessage *msg = soup_message_new_from_uri("GET", uri);
- audio->muted = muted;
+ audio->silent = silent;
char *protocols[] = { (char *)"opus-med", NULL };
gchar *origin = g_strdup_printf("http://%s", soup_uri_get_host(uri));
}
}
-void chime_call_set_mute(ChimeCall *call, gboolean muted)
+void chime_call_set_silent(ChimeCall *call, gboolean silent)
{
if (call->audio)
- chime_call_audio_reopen(call->audio, muted);
+ chime_call_audio_reopen(call->audio, silent);
+}
+
+gboolean chime_call_get_silent(ChimeCall *call)
+{
+ if (call->audio)
+ return chime_call_audio_get_silent(call->audio);
+ else
+ return TRUE;
}
void chime_call_set_local_mute(ChimeCall *call, gboolean muted)
const gchar *chime_call_get_stun_server_url(ChimeCall *self);
/* Is this an audio-less call, where we are just "checked in"? */
-void chime_call_set_mute(ChimeCall *call, gboolean muted);
+void chime_call_set_silent(ChimeCall *call, gboolean muted);
+gboolean chime_call_get_silent(ChimeCall *call);
/* Audio call, but we want to be quiet now. */
void chime_call_set_local_mute(ChimeCall *call, gboolean muted);