base-call: created an unique function to switch call's state and reason

This commit is contained in:
Riccardo Vangelisti
2015-05-06 13:29:17 +02:00
committed by Aleksander Morgado
parent 65a64c9248
commit 5a281dbd34
2 changed files with 44 additions and 40 deletions

View File

@@ -84,9 +84,9 @@ handle_start_ready (MMBaseCall *self,
} else { } else {
/* Transition from Unknown->Dialing */ /* Transition from Unknown->Dialing */
if (mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)) == MM_CALL_STATE_UNKNOWN ) { if (mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)) == MM_CALL_STATE_UNKNOWN ) {
/* Update state */ /* Update state */
mm_gdbus_call_set_state (MM_GDBUS_CALL (ctx->self), MM_CALL_STATE_DIALING); mm_base_call_change_state(self, MM_CALL_STATE_DIALING, MM_CALL_STATE_REASON_OUTGOING_STARTED);
mm_gdbus_call_emit_state_changed(MM_GDBUS_CALL (ctx->self), MM_CALL_STATE_UNKNOWN, MM_CALL_STATE_DIALING, MM_CALL_STATE_REASON_OUTGOING_STARTED);
} }
mm_gdbus_call_complete_start (MM_GDBUS_CALL (ctx->self), ctx->invocation); mm_gdbus_call_complete_start (MM_GDBUS_CALL (ctx->self), ctx->invocation);
} }
@@ -190,8 +190,7 @@ handle_accept_ready (MMBaseCall *self,
if (mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)) == MM_CALL_STATE_RINGING_IN) { if (mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)) == MM_CALL_STATE_RINGING_IN) {
/* Update state */ /* Update state */
mm_gdbus_call_set_state (MM_GDBUS_CALL (ctx->self), MM_CALL_STATE_ACTIVE); mm_base_call_change_state(self, MM_CALL_STATE_ACTIVE, MM_CALL_STATE_REASON_ACCEPTED);
mm_gdbus_call_emit_state_changed(MM_GDBUS_CALL (ctx->self), MM_CALL_STATE_RINGING_IN, MM_CALL_STATE_ACTIVE, MM_CALL_STATE_REASON_ACCEPTED);
} }
mm_gdbus_call_complete_accept (MM_GDBUS_CALL (ctx->self), ctx->invocation); mm_gdbus_call_complete_accept (MM_GDBUS_CALL (ctx->self), ctx->invocation);
} }
@@ -296,8 +295,7 @@ handle_hangup_ready (MMBaseCall *self,
mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)) != MM_CALL_STATE_UNKNOWN ){ mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)) != MM_CALL_STATE_UNKNOWN ){
/* Update state */ /* Update state */
mm_gdbus_call_set_state (MM_GDBUS_CALL (ctx->self), MM_CALL_STATE_TERMINATED); mm_base_call_change_state(self, MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_TERMINATED);
mm_gdbus_call_emit_state_changed(MM_GDBUS_CALL (ctx->self), mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)), MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_TERMINATED);
} }
mm_gdbus_call_complete_hangup (MM_GDBUS_CALL (ctx->self), ctx->invocation); mm_gdbus_call_complete_hangup (MM_GDBUS_CALL (ctx->self), ctx->invocation);
} }
@@ -440,6 +438,25 @@ mm_base_call_get_path (MMBaseCall *self)
return self->priv->path; return self->priv->path;
} }
void
mm_base_call_change_state(MMBaseCall *self, MMCallState new_state, MMCallStateReason reason)
{
int old_state = mm_gdbus_call_get_state (MM_GDBUS_CALL (self));
g_object_set (self,
"state", new_state,
"state-reason", reason,
NULL);
mm_gdbus_call_set_state (MM_GDBUS_CALL (self), new_state);
mm_gdbus_call_set_state_reason(MM_GDBUS_CALL (self), reason);
mm_gdbus_call_emit_state_changed(MM_GDBUS_CALL (self),
old_state,
new_state,
reason);
}
/*****************************************************************************/ /*****************************************************************************/
/* Start the CALL */ /* Start the CALL */
@@ -493,19 +510,13 @@ call_start_ready (MMBaseModem *modem,
g_set_error (&error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, g_set_error (&error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
"Couldn't start the call: " "Couldn't start the call: "
"Modem response '%s'", response); "Modem response '%s'", response);
/* Update state */ /* Update state */
mm_gdbus_call_set_state (MM_GDBUS_CALL (ctx->self), MM_CALL_STATE_TERMINATED); mm_base_call_change_state(ctx->self, MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_REFUSED_OR_BUSY);
mm_gdbus_call_emit_state_changed(MM_GDBUS_CALL (ctx->self),
mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)),
MM_CALL_STATE_TERMINATED,
MM_CALL_STATE_REASON_REFUSED_OR_BUSY);
} else { } else {
/* Update state */ /* Update state */
mm_gdbus_call_set_state (MM_GDBUS_CALL (ctx->self), MM_CALL_STATE_ACTIVE); mm_base_call_change_state(ctx->self, MM_CALL_STATE_ACTIVE, MM_CALL_STATE_REASON_ACCEPTED);
mm_gdbus_call_emit_state_changed(MM_GDBUS_CALL (ctx->self),
mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)),
MM_CALL_STATE_ACTIVE,
MM_CALL_STATE_REASON_ACCEPTED);
} }
if (error) { if (error) {
@@ -544,12 +555,7 @@ call_start (MMBaseCall *self,
ctx); ctx);
/* Update state */ /* Update state */
mm_gdbus_call_set_state (MM_GDBUS_CALL (ctx->self), MM_CALL_STATE_RINGING_OUT); mm_base_call_change_state(self, MM_CALL_STATE_RINGING_OUT, MM_CALL_STATE_REASON_OUTGOING_STARTED);
mm_gdbus_call_emit_state_changed(MM_GDBUS_CALL (ctx->self),
mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)),
MM_CALL_STATE_RINGING_OUT,
MM_CALL_STATE_REASON_OUTGOING_STARTED);
g_free (cmd); g_free (cmd);
} }
@@ -607,19 +613,13 @@ call_accept_ready (MMBaseModem *modem,
g_set_error (&error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED, g_set_error (&error, MM_CORE_ERROR, MM_CORE_ERROR_FAILED,
"Couldn't accept the call: " "Couldn't accept the call: "
"Unhandled response '%s'", response); "Unhandled response '%s'", response);
/* Update state */ /* Update state */
mm_gdbus_call_set_state (MM_GDBUS_CALL (ctx->self), MM_CALL_STATE_TERMINATED); mm_base_call_change_state(ctx->self, MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_ERROR);
mm_gdbus_call_emit_state_changed(MM_GDBUS_CALL (ctx->self),
mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)),
MM_CALL_STATE_TERMINATED,
MM_CALL_STATE_REASON_ERROR);
} else { } else {
/* Update state */ /* Update state */
mm_gdbus_call_set_state (MM_GDBUS_CALL (ctx->self), MM_CALL_STATE_ACTIVE); mm_base_call_change_state(ctx->self, MM_CALL_STATE_ACTIVE, MM_CALL_STATE_REASON_ACCEPTED);
mm_gdbus_call_emit_state_changed(MM_GDBUS_CALL (ctx->self),
mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)),
MM_CALL_STATE_ACTIVE,
MM_CALL_STATE_REASON_ACCEPTED);
} }
if (error) { if (error) {
@@ -710,11 +710,7 @@ call_hangup_ready (MMBaseModem *modem,
} }
/* Update state */ /* Update state */
mm_gdbus_call_set_state (MM_GDBUS_CALL (ctx->self), MM_CALL_STATE_TERMINATED); mm_base_call_change_state(ctx->self, MM_CALL_STATE_TERMINATED, MM_CALL_STATE_REASON_TERMINATED);
mm_gdbus_call_emit_state_changed(MM_GDBUS_CALL (ctx->self),
mm_gdbus_call_get_state (MM_GDBUS_CALL (ctx->self)),
MM_CALL_STATE_TERMINATED,
MM_CALL_STATE_REASON_TERMINATED);
if (error) { if (error) {
g_simple_async_result_take_error (ctx->result, error); g_simple_async_result_take_error (ctx->result, error);
@@ -804,7 +800,7 @@ mm_base_call_delete_finish (MMBaseCall *self,
deleted = MM_BASE_CALL_GET_CLASS (self)->delete_finish (self, res, error); deleted = MM_BASE_CALL_GET_CLASS (self)->delete_finish (self, res, error);
if (deleted) if (deleted)
/* We do change the state of this call back to UNKNOWN */ /* We do change the state of this call back to UNKNOWN */
mm_gdbus_call_set_state (MM_GDBUS_CALL (self), MM_CALL_STATE_UNKNOWN); mm_base_call_change_state(self, MM_CALL_STATE_UNKNOWN, MM_CALL_STATE_REASON_UNKNOWN);
return deleted; return deleted;
} }
@@ -848,10 +844,12 @@ mm_base_call_new_from_properties (MMBaseModem *modem,
{ {
MMBaseCall *self; MMBaseCall *self;
const gchar *number; const gchar *number;
MMCallDirection direction;
g_assert (MM_IS_IFACE_MODEM_VOICE (modem)); g_assert (MM_IS_IFACE_MODEM_VOICE (modem));
number = mm_call_properties_get_number (properties); number = mm_call_properties_get_number (properties);
direction = mm_call_properties_get_direction(properties);
/* Don't create CALL from properties if either number is missing */ /* Don't create CALL from properties if either number is missing */
if ( !number ) { if ( !number ) {
@@ -861,13 +859,18 @@ mm_base_call_new_from_properties (MMBaseModem *modem,
"Cannot create call: mandatory parameter 'number' is missing"); "Cannot create call: mandatory parameter 'number' is missing");
return NULL; return NULL;
} }
/* if no direction is specified force to outgoing */
if(direction == MM_CALL_DIRECTION_UNKNOWN ) {
direction = MM_CALL_DIRECTION_OUTGOING;
}
/* Create a call object as defined by the interface */ /* Create a call object as defined by the interface */
self = mm_iface_modem_voice_create_call (MM_IFACE_MODEM_VOICE (modem)); self = mm_iface_modem_voice_create_call (MM_IFACE_MODEM_VOICE (modem));
g_object_set (self, g_object_set (self,
"state", mm_call_properties_get_state(properties), "state", mm_call_properties_get_state(properties),
"state-reason", mm_call_properties_get_state_reason(properties), "state-reason", mm_call_properties_get_state_reason(properties),
"direction", mm_call_properties_get_direction(properties), "direction", direction,
"number", number, "number", number,
NULL); NULL);

View File

@@ -91,6 +91,7 @@ MMBaseCall *mm_base_call_new_from_properties (MMBaseModem *modem,
void mm_base_call_export (MMBaseCall *self); void mm_base_call_export (MMBaseCall *self);
void mm_base_call_unexport (MMBaseCall *self); void mm_base_call_unexport (MMBaseCall *self);
const gchar *mm_base_call_get_path (MMBaseCall *self); const gchar *mm_base_call_get_path (MMBaseCall *self);
void mm_base_call_change_state(MMBaseCall *self, MMCallState new_state, MMCallStateReason reason);
void mm_base_call_delete (MMBaseCall *self, void mm_base_call_delete (MMBaseCall *self,
GAsyncReadyCallback callback, GAsyncReadyCallback callback,