iface-modem-voice: always create plugin-specified call objects
The Voice interface logic must always use the create_call() object from its own interface to create call objects, as that is the method that plugins can subclass to provide plugin-specific call objects. This applies to both incoming and outgoing calls.
This commit is contained in:

committed by
Dan Williams

parent
fc0feee654
commit
44413308b2
@@ -939,48 +939,6 @@ mm_base_call_new (MMBaseModem *modem)
|
|||||||
NULL));
|
NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
MMBaseCall *
|
|
||||||
mm_base_call_new_from_properties (MMBaseModem *modem,
|
|
||||||
MMCallProperties *properties,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
MMBaseCall *self;
|
|
||||||
const gchar *number;
|
|
||||||
MMCallDirection direction;
|
|
||||||
|
|
||||||
g_assert (MM_IS_IFACE_MODEM_VOICE (modem));
|
|
||||||
|
|
||||||
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 */
|
|
||||||
if (!number) {
|
|
||||||
g_set_error (error,
|
|
||||||
MM_CORE_ERROR,
|
|
||||||
MM_CORE_ERROR_INVALID_ARGS,
|
|
||||||
"Cannot create call: mandatory parameter 'number' is missing");
|
|
||||||
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 */
|
|
||||||
self = mm_iface_modem_voice_create_call (MM_IFACE_MODEM_VOICE (modem));
|
|
||||||
g_object_set (self,
|
|
||||||
"state", mm_call_properties_get_state (properties),
|
|
||||||
"state-reason", mm_call_properties_get_state_reason (properties),
|
|
||||||
"direction", direction,
|
|
||||||
"number", number,
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
/* Only export once properly created */
|
|
||||||
mm_base_call_export (self);
|
|
||||||
|
|
||||||
return self;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@@ -91,11 +91,8 @@ struct _MMBaseCallClass {
|
|||||||
|
|
||||||
GType mm_base_call_get_type (void);
|
GType mm_base_call_get_type (void);
|
||||||
|
|
||||||
/* This one can be overridden by plugins */
|
/* This one can be overriden by plugins */
|
||||||
MMBaseCall *mm_base_call_new (MMBaseModem *modem);
|
MMBaseCall *mm_base_call_new (MMBaseModem *modem);
|
||||||
MMBaseCall *mm_base_call_new_from_properties (MMBaseModem *modem,
|
|
||||||
MMCallProperties *properties,
|
|
||||||
GError **error);
|
|
||||||
|
|
||||||
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);
|
||||||
|
@@ -38,14 +38,46 @@ mm_iface_modem_voice_bind_simple_status (MMIfaceModemVoice *self,
|
|||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
MMBaseCall *
|
static MMBaseCall *
|
||||||
mm_iface_modem_voice_create_call (MMIfaceModemVoice *self)
|
create_call (MMIfaceModemVoice *self)
|
||||||
{
|
{
|
||||||
g_assert (MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->create_call != NULL);
|
g_assert (MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->create_call != NULL);
|
||||||
|
|
||||||
return MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->create_call (self);
|
return MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->create_call (self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static MMBaseCall *
|
||||||
|
create_call_from_properties (MMIfaceModemVoice *self,
|
||||||
|
MMCallProperties *properties,
|
||||||
|
GError **error)
|
||||||
|
{
|
||||||
|
MMBaseCall *call;
|
||||||
|
const gchar *number;
|
||||||
|
|
||||||
|
/* Don't create CALL from properties if either number is missing */
|
||||||
|
number = mm_call_properties_get_number (properties) ;
|
||||||
|
if (!number) {
|
||||||
|
g_set_error (error,
|
||||||
|
MM_CORE_ERROR,
|
||||||
|
MM_CORE_ERROR_INVALID_ARGS,
|
||||||
|
"Cannot create call: mandatory parameter 'number' is missing");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create a call object as defined by the interface */
|
||||||
|
g_assert (MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->create_call != NULL);
|
||||||
|
call = MM_IFACE_MODEM_VOICE_GET_INTERFACE (self)->create_call (self);
|
||||||
|
g_object_set (call,
|
||||||
|
"state", mm_call_properties_get_state (properties),
|
||||||
|
"state-reason", mm_call_properties_get_state_reason (properties),
|
||||||
|
"direction", mm_call_properties_get_direction (properties),
|
||||||
|
"number", number,
|
||||||
|
NULL);
|
||||||
|
return call;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
|
||||||
void
|
void
|
||||||
mm_iface_modem_voice_incoming_call (MMIfaceModemVoice *self)
|
mm_iface_modem_voice_incoming_call (MMIfaceModemVoice *self)
|
||||||
{
|
{
|
||||||
@@ -71,7 +103,7 @@ mm_iface_modem_voice_incoming_call (MMIfaceModemVoice *self)
|
|||||||
}
|
}
|
||||||
|
|
||||||
mm_dbg ("Creating new incoming call...");
|
mm_dbg ("Creating new incoming call...");
|
||||||
call = mm_base_call_new (MM_BASE_MODEM (self));
|
call = create_call (self);
|
||||||
g_object_set (call,
|
g_object_set (call,
|
||||||
"state", MM_CALL_STATE_RINGING_IN,
|
"state", MM_CALL_STATE_RINGING_IN,
|
||||||
"state-reason", MM_CALL_STATE_REASON_INCOMING_NEW,
|
"state-reason", MM_CALL_STATE_REASON_INCOMING_NEW,
|
||||||
@@ -270,9 +302,7 @@ handle_create_auth_ready (MMBaseModem *self,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
call = mm_base_call_new_from_properties (MM_BASE_MODEM (self),
|
call = create_call_from_properties (MM_IFACE_MODEM_VOICE (self), properties, &error);
|
||||||
properties,
|
|
||||||
&error);
|
|
||||||
if (!call) {
|
if (!call) {
|
||||||
g_object_unref (properties);
|
g_object_unref (properties);
|
||||||
g_dbus_method_invocation_take_error (ctx->invocation, error);
|
g_dbus_method_invocation_take_error (ctx->invocation, error);
|
||||||
@@ -294,7 +324,8 @@ handle_create_auth_ready (MMBaseModem *self,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add it to the list */
|
/* Only export once properly created */
|
||||||
|
mm_base_call_export (call);
|
||||||
mm_call_list_add_call (list, call);
|
mm_call_list_add_call (list, call);
|
||||||
|
|
||||||
/* Complete the DBus call */
|
/* Complete the DBus call */
|
||||||
|
@@ -117,7 +117,6 @@ void mm_iface_modem_voice_bind_simple_status (MMIfaceModemVoice *self,
|
|||||||
MMSimpleStatus *status);
|
MMSimpleStatus *status);
|
||||||
|
|
||||||
/* CALL creation */
|
/* CALL creation */
|
||||||
MMBaseCall *mm_iface_modem_voice_create_call (MMIfaceModemVoice *self);
|
|
||||||
void mm_iface_modem_voice_incoming_call (MMIfaceModemVoice *self);
|
void mm_iface_modem_voice_incoming_call (MMIfaceModemVoice *self);
|
||||||
gboolean mm_iface_modem_voice_update_incoming_call_number (MMIfaceModemVoice *self,
|
gboolean mm_iface_modem_voice_update_incoming_call_number (MMIfaceModemVoice *self,
|
||||||
gchar *number,
|
gchar *number,
|
||||||
|
Reference in New Issue
Block a user