* @param caller_id identity of the caller
* @param callee GNS name of the callee (used to locate the callee's record)
* @param speaker speaker to use (will be used automatically immediately once the
- * #GNUNET_CONVERSATION_EC_READY event is generated); we will NOT generate
+ * #GNUNET_CONVERSATION_EC_CALL_PICKED_UP event is generated); we will NOT generate
* a ring tone on the speaker
* @param mic microphone to use (will be used automatically immediately once the
- * #GNUNET_CONVERSATION_EC_READY event is generated)
+ * #GNUNET_CONVERSATION_EC_CALL_PICKED_UP event is generated)
* @param event_handler how to notify the owner of the phone about events
* @param event_handler_cls closure for @a event_handler
*/
* Terminate a call. The call may be ringing or ready at this time.
*
* @param call call to terminate
- * @param reason if the call was active (ringing or ready) this will be the
- * reason given to the other user for why we hung up
*/
void
GNUNET_CONVERSATION_call_stop (struct GNUNET_CONVERSATION_Call *call)
call->mic->disable_microphone (call->mic->cls);
if (CS_SHUTDOWN != call->state)
{
+ call->state = CS_SHUTDOWN;
e = GNUNET_MQ_msg (hang, GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_HANG_UP);
GNUNET_MQ_notify_sent (e, &finish_stop, call);
GNUNET_MQ_send (call->mq, e);
- call->state = CS_SHUTDOWN;
return;
}
if (NULL != call->mq)
void
GNUNET_CONVERSATION_call_suspend (struct GNUNET_CONVERSATION_Call *call)
{
- GNUNET_break (0);
+ struct GNUNET_MQ_Envelope *e;
+ struct ClientPhoneSuspendMessage *suspend;
+
+ GNUNET_assert ( (CS_SUSPENDED_CALLEE == call->state) ||
+ (CS_ACTIVE == call->state) );
+ if (CS_ACTIVE == call->state)
+ {
+ call->speaker->disable_speaker (call->speaker->cls);
+ call->mic->disable_microphone (call->mic->cls);
+ }
+ call->speaker = NULL;
+ call->mic = NULL;
+ e = GNUNET_MQ_msg (suspend, GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_SUSPEND);
+ GNUNET_MQ_send (call->mq, e);
+ if (CS_SUSPENDED_CALLER == call->state)
+ call->state = CS_SUSPENDED_BOTH;
+ else
+ call->state = CS_SUSPENDED_CALLER;
}
/**
- * Resumes a call after #GNUNET_CONVERSATION_call_pause.
+ * Resumes a call after #GNUNET_CONVERSATION_call_suspend.
*
* @param call call to resume
- * @param speaker speaker to use (will be used automatically immediately once the
- * #GNUNET_CONVERSATION_EC_READY event is generated); we will NOT generate
+ * @param speaker speaker to use
* a ring tone on the speaker
- * @param mic microphone to use (will be used automatically immediately once the
- * #GNUNET_CONVERSATION_EC_READY event is generated)
+ * @param mic microphone to use
*/
void
GNUNET_CONVERSATION_call_resume (struct GNUNET_CONVERSATION_Call *call,
struct GNUNET_SPEAKER_Handle *speaker,
struct GNUNET_MICROPHONE_Handle *mic)
{
- GNUNET_break (0);
+ struct GNUNET_MQ_Envelope *e;
+ struct ClientPhoneResumeMessage *resume;
+
+ GNUNET_assert ( (CS_SUSPENDED_CALLER == call->state) ||
+ (CS_SUSPENDED_BOTH == call->state) );
+ e = GNUNET_MQ_msg (resume, GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_RESUME);
+ GNUNET_MQ_send (call->mq, e);
+ call->speaker = speaker;
+ call->mic = mic;
+ if (CS_SUSPENDED_CALLER == call->state)
+ {
+ call->state = CS_ACTIVE;
+ call->speaker->enable_speaker (call->speaker->cls);
+ call->mic->enable_microphone (call->mic->cls,
+ &transmit_call_audio,
+ call);
+ }
+ else
+ {
+ call->state = CS_SUSPENDED_CALLEE;
+ }
}