base-call: created an unique function to switch call's state and reason
This commit is contained in:

committed by
Aleksander Morgado

parent
65a64c9248
commit
5a281dbd34
@@ -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 ) {
|
||||||
@@ -862,12 +860,17 @@ mm_base_call_new_from_properties (MMBaseModem *modem,
|
|||||||
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);
|
||||||
|
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user