diff options
Diffstat (limited to 'modem/call-service.c')
-rw-r--r-- | modem/call-service.c | 633 |
1 files changed, 241 insertions, 392 deletions
diff --git a/modem/call-service.c b/modem/call-service.c index 89c3a0a..96529af 100644 --- a/modem/call-service.c +++ b/modem/call-service.c @@ -41,7 +41,7 @@ /* ---------------------------------------------------------------------- */ -G_DEFINE_TYPE (ModemCallService, modem_call_service, G_TYPE_OBJECT); +G_DEFINE_TYPE (ModemCallService, modem_call_service, MODEM_TYPE_OFACE); /* Properties */ enum @@ -54,11 +54,10 @@ enum /* Signals */ enum { - SIGNAL_CONNECTED, SIGNAL_INCOMING, SIGNAL_CREATED, SIGNAL_USER_CONNECTION, - SIGNAL_EMERGENCY_NUMBERS_CHANGED, + SIGNAL_REMOVED, N_SIGNALS }; @@ -66,8 +65,6 @@ static guint signals[N_SIGNALS]; struct _ModemCallServicePrivate { - DBusGProxy *proxy; /* D-Bus proxy to call server */ - /* < object_path, call instance > */ GHashTable *instances; @@ -85,44 +82,50 @@ struct _ModemCallServicePrivate ModemCall *active, *hold; - struct { - GQueue queue[1]; - GError *error; - } connecting; - unsigned user_connection:1; /* Do we have in-band connection? */ - unsigned connected:1, disconnected:1, signals :1, dispose_has_run:1; + unsigned signals :1; unsigned :0; }; /* ---------------------------------------------------------------------- */ -static ModemOfonoPropsReply reply_to_call_manager_get_properties; -static ModemOfonoPropChangedCb on_manager_property_changed; - static void modem_call_service_connect_to_instance (ModemCallService *self, ModemCall *ci); static void modem_call_service_disconnect_instance (ModemCallService *self, ModemCall *ci); +static ModemCall *modem_call_service_ensure_instance (ModemCallService *self, + char const *object_path, + GHashTable *properties); + static ModemRequestCallNotify modem_call_request_dial_reply; static ModemRequestCallNotify modem_call_conference_request_reply; -static void modem_call_service_check_connected (ModemCallService *self, - ModemRequest *request, - GError const *error); - #if nomore static void on_user_connection (DBusGProxy *proxy, gboolean attached, ModemCallService *self); #endif + static void on_modem_call_state (ModemCall *, ModemCallState, ModemCallService *); -static void on_modem_call_terminated (ModemCall *, ModemCallService *); + +/* ---------------------------------------------------------------------- */ + +#define RETURN_IF_NOT_VALID(self) \ + g_return_if_fail (self != NULL && \ + modem_oface_is_connected (MODEM_OFACE (self))) + +#define RETURN_VAL_IF_NOT_VALID(self, val) \ + g_return_val_if_fail (self != NULL && \ + modem_oface_is_connected (MODEM_OFACE (self)), (val)) + +#define RETURN_NULL_IF_NOT_VALID(self) RETURN_VAL_IF_NOT_VALID (self, NULL) + +#define DBUS_PROXY(x) modem_oface_dbus_proxy (MODEM_OFACE (x)) /* ---------------------------------------------------------------------- */ @@ -136,14 +139,14 @@ modem_call_service_constructed (GObject *object) static void modem_call_service_init (ModemCallService *self) { + DEBUG ("enter"); + self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self, MODEM_TYPE_CALL_SERVICE, ModemCallServicePrivate); g_queue_init (self->priv->dialing.queue); g_queue_init (self->priv->dialing.created); - g_queue_init (self->priv->connecting.queue); - self->priv->instances = g_hash_table_new_full ( g_str_hash, g_str_equal, g_free, g_object_unref); } @@ -198,61 +201,161 @@ modem_call_service_dispose (GObject *object) { DEBUG ("enter"); - ModemCall *ci; - GHashTableIter iter[1]; + if (G_OBJECT_CLASS (modem_call_service_parent_class)->dispose) + G_OBJECT_CLASS (modem_call_service_parent_class)->dispose (object); +} + + +static void +modem_call_service_finalize (GObject *object) +{ + DEBUG ("enter"); + ModemCallService *self = MODEM_CALL_SERVICE (object); ModemCallServicePrivate *priv = self->priv; - if (priv->dispose_has_run) - return; + g_strfreev (priv->emergency_numbers), priv->emergency_numbers = NULL; - modem_call_service_disconnect (self); + g_hash_table_destroy (priv->instances); - priv->dispose_has_run = TRUE; + G_OBJECT_CLASS (modem_call_service_parent_class)->finalize (object); - g_hash_table_iter_init (iter, priv->instances); - while (g_hash_table_iter_next (iter, NULL, (gpointer)&ci)) + DEBUG ("leave"); +} + +/* ---------------------------------------------------------------------- */ + +static ModemOfaceManagedReply reply_to_call_manager_get_calls; + +static void on_manager_call_added (DBusGProxy *proxy, + char const *path, GHashTable *properties, + gpointer user_data); + +static void on_manager_call_removed (DBusGProxy *proxy, + char const *path, + gpointer user_data); + +static char const * +modem_call_service_property_mapper (char const *name) +{ + if (!strcmp (name, "EmergencyNumbers")) + return "emergency-numbers"; + return NULL; +} + +static void +reply_to_call_manager_get_calls (ModemOface *_self, + ModemRequest *request, + GPtrArray *array, + GError const *error, + gpointer user_data) +{ + ModemCallService *self = MODEM_CALL_SERVICE (_self); + + DEBUG ("enter"); + + if (!error) { - modem_call_service_disconnect_instance (self, ci); + guint i; + + for (i = 0; i < array->len; i++) + { + GValueArray *va = g_ptr_array_index (array, i); + char const *path = g_value_get_boxed (va->values + 0); + GHashTable *properties = g_value_get_boxed (va->values + 1); + + modem_call_service_ensure_instance (self, path, properties); + } } - ci = priv->conference.instance; - modem_call_service_disconnect_instance (self, ci); + modem_oface_check_connected (_self, request, error); +} + +/** Connect to call service */ +static void +modem_call_service_connect (ModemOface *_self) +{ + DEBUG ("(%p): enter", _self); - if (priv->proxy) - g_object_run_dispose (G_OBJECT (priv->proxy)); + ModemCallService *self = MODEM_CALL_SERVICE (_self); + ModemCallServicePrivate *priv = self->priv; - if (G_OBJECT_CLASS (modem_call_service_parent_class)->dispose) - G_OBJECT_CLASS (modem_call_service_parent_class)->dispose (object); + if (!priv->signals) + { + DBusGProxy *proxy = DBUS_PROXY (_self); - DEBUG ("leave"); + priv->signals = TRUE; + +#define CONNECT(p, handler, name, signature...) \ + dbus_g_proxy_add_signal (p, (name), ##signature); \ + dbus_g_proxy_connect_signal (p, (name), G_CALLBACK (handler), self, NULL) + + CONNECT (proxy, on_manager_call_added, "CallAdded", + DBUS_TYPE_G_OBJECT_PATH, MODEM_TYPE_DBUS_DICT, G_TYPE_INVALID); + + CONNECT (proxy, on_manager_call_removed, "CallRemoved", + DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID); + +#undef CONNECT + } + + modem_oface_connect_properties (_self, TRUE); + + modem_oface_add_connect_request (_self, + modem_oface_request_managed (_self, "GetCalls", + reply_to_call_manager_get_calls, NULL)); } +/** Disconnect from call service */ static void -modem_call_service_finalize (GObject *object) +modem_call_service_disconnect (ModemOface *_self) { - DEBUG ("enter"); + DEBUG ("(%p): enter", _self); - ModemCallService *self = MODEM_CALL_SERVICE (object); + ModemCallService *self = MODEM_CALL_SERVICE (_self); ModemCallServicePrivate *priv = self->priv; + GHashTableIter iter[1]; + ModemCall *ci; - if (priv->proxy) g_object_unref (priv->proxy), priv->proxy = NULL; - g_strfreev (priv->emergency_numbers), priv->emergency_numbers = NULL; - g_clear_error (&priv->connecting.error); + while (!g_queue_is_empty (priv->dialing.queue)) + { + ModemRequest *request = g_queue_pop_head (priv->dialing.queue); + modem_request_cancel (request); + } - g_hash_table_destroy (priv->instances); + if (priv->signals) + { + priv->signals = FALSE; - G_OBJECT_CLASS (modem_call_service_parent_class)->finalize (object); + dbus_g_proxy_disconnect_signal (DBUS_PROXY (self), "CallAdded", + G_CALLBACK (on_manager_call_added), self); + dbus_g_proxy_disconnect_signal (DBUS_PROXY (self), "CallRemoved", + G_CALLBACK (on_manager_call_removed), self); + } - DEBUG ("leave"); + for (g_hash_table_iter_init (iter, priv->instances); + g_hash_table_iter_next (iter, NULL, (gpointer)&ci); + g_hash_table_iter_init (iter, priv->instances)) + { + modem_call_service_disconnect_instance (self, ci); + } + + ci = priv->conference.instance; + modem_call_service_disconnect_instance (self, ci); + + modem_oface_disconnect_properties (_self); } +/* ---------------------------------------------------------------------- */ static void modem_call_service_class_init (ModemCallServiceClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); + ModemOfaceClass *oface_class = MODEM_OFACE_CLASS (klass); + + DEBUG ("enter"); g_type_class_add_private (klass, sizeof (ModemCallServicePrivate)); @@ -262,6 +365,10 @@ modem_call_service_class_init (ModemCallServiceClass *klass) object_class->dispose = modem_call_service_dispose; object_class->finalize = modem_call_service_finalize; + oface_class->property_mapper = modem_call_service_property_mapper; + oface_class->connect = modem_call_service_connect; + oface_class->disconnect = modem_call_service_disconnect; + /* Properties */ g_object_class_install_property (object_class, PROP_EMERGENCY_NUMBERS, g_param_spec_boxed ("emergency-numbers", @@ -272,14 +379,6 @@ modem_call_service_class_init (ModemCallServiceClass *klass) G_PARAM_STATIC_STRINGS)); /* Signals to emit */ - signals[SIGNAL_CONNECTED] = - g_signal_new ("connected", G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - signals[SIGNAL_INCOMING] = g_signal_new ("incoming", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, @@ -298,69 +397,64 @@ modem_call_service_class_init (ModemCallServiceClass *klass) G_TYPE_NONE, 2, MODEM_TYPE_CALL, G_TYPE_STRING); - signals[SIGNAL_USER_CONNECTION] = - g_signal_new ("user-connection", G_OBJECT_CLASS_TYPE (klass), + signals[SIGNAL_REMOVED] = + g_signal_new ("removed", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, 0, NULL, NULL, - g_cclosure_marshal_VOID__BOOLEAN, + _modem__marshal_VOID__OBJECT, G_TYPE_NONE, 1, - G_TYPE_BOOLEAN); + MODEM_TYPE_CALL); - signals[SIGNAL_EMERGENCY_NUMBERS_CHANGED] = - g_signal_new ("emergency-numbers-changed", G_OBJECT_CLASS_TYPE (klass), + signals[SIGNAL_USER_CONNECTION] = + g_signal_new ("user-connection", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, 0, NULL, NULL, - g_cclosure_marshal_VOID__BOXED, + g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, - G_TYPE_STRV); - + G_TYPE_BOOLEAN); - modem_error_domain_prefix (0); /* Init errors */ + DEBUG ("leave"); } /* ---------------------------------------------------------------------- */ -#define RETURN_NULL_IF_NOT_VALID(self) \ - g_return_val_if_fail (self != NULL && self->priv->proxy != NULL && \ - !self->priv->dispose_has_run, NULL) +static void +modem_call_service_connect_to_instance (ModemCallService *self, + ModemCall *instance) +{ + ModemCallServicePrivate *priv = self->priv; + gchar const *object_path; -/* ---------------------------------------------------------------------- */ + if (!instance) + return; -static ModemOfonoGetDescsReply reply_to_call_manager_get_calls; + g_signal_connect (instance, "state", G_CALLBACK (on_modem_call_state), self); -static void on_manager_call_added (DBusGProxy *proxy, - char const *path, - GHashTable *properties, - gpointer user_data); + modem_oface_connect (MODEM_OFACE (instance)); -/* ---------------------------------------------------------------------- */ + object_path = modem_call_get_path (instance); -static void -modem_call_service_connect_to_instance (ModemCallService *self, - ModemCall *instance) -{ - if (instance) - { - g_signal_connect (instance, "state", - G_CALLBACK (on_modem_call_state), self); - g_signal_connect_after (instance, "terminated", - G_CALLBACK (on_modem_call_terminated), self); - } + g_hash_table_insert (priv->instances, g_strdup (object_path), instance); } static void modem_call_service_disconnect_instance (ModemCallService *self, ModemCall *instance) { - if (instance) - { - g_signal_handlers_disconnect_by_func (instance, - on_modem_call_state, self); - g_signal_handlers_disconnect_by_func (instance, - on_modem_call_terminated, self); - } + ModemCallServicePrivate *priv = self->priv; + + if (!instance) + return; + + g_hash_table_remove (priv->instances, modem_call_get_path (instance)); + + g_signal_handlers_disconnect_by_func (instance, on_modem_call_state, self); + + g_signal_emit (self, signals[SIGNAL_REMOVED], 0, instance); + + modem_oface_disconnect (MODEM_OFACE (instance)); } static ModemCall * @@ -372,9 +466,10 @@ modem_call_service_ensure_instance (ModemCallService *self, char *key; GValue *value; GHashTableIter iter[1]; - char const *remote; + gchar const *remote; ModemCallState state; gboolean incoming = FALSE, originating = FALSE; + DBusGProxy *proxy; ModemCall *ci; DEBUG ("path %s", object_path); @@ -425,27 +520,28 @@ modem_call_service_ensure_instance (ModemCallService *self, return NULL; } + proxy = modem_ofono_proxy (object_path, OFONO_IFACE_CALL); + ci = g_object_new (MODEM_TYPE_CALL, + "dbus-proxy", proxy, "call-service", self, - "object-path", object_path, - "remote", remote, "state", state, "terminating", !originating, "originating", originating, NULL); + modem_oface_update_properties (MODEM_OFACE (ci), properties); modem_call_service_connect_to_instance (self, ci); - g_hash_table_insert (priv->instances, g_strdup (object_path), ci); if (incoming) { - DEBUG ("emit \"incoming\"(%s (%p), %s)", + DEBUG ("emit \"incoming\" (\"%s\" (%p), \"%s\")", modem_call_get_name (ci), ci, remote); g_signal_emit (self, signals[SIGNAL_INCOMING], 0, ci, remote); } else if (g_queue_is_empty (priv->dialing.queue)) { - DEBUG ("emit \"created\"(%s (%p), %s)", + DEBUG ("emit \"created\" (\"%s\" (%p), \"%s\")", modem_call_get_name (ci), ci, remote); g_signal_emit (self, signals[SIGNAL_CREATED], 0, ci, remote); } @@ -463,6 +559,7 @@ modem_call_service_get_dialed (ModemCallService *self, { ModemCallServicePrivate *priv = self->priv; ModemCall *ci; + DBusGProxy *proxy; ci = g_hash_table_lookup (priv->instances, object_path); if (ci) @@ -475,89 +572,26 @@ modem_call_service_get_dialed (ModemCallService *self, return ci; } + proxy = modem_ofono_proxy (object_path, OFONO_IFACE_CALL); + ci = g_object_new (MODEM_TYPE_CALL, + "dbus-proxy", proxy, "call-service", self, - "object-path", object_path, "remote", remote, "state", MODEM_CALL_STATE_DIALING, + "ofono-state", "dialing", "terminating", FALSE, "originating", TRUE, NULL); modem_call_service_connect_to_instance (self, ci); - g_hash_table_insert (priv->instances, g_strdup (object_path), ci); return ci; } /* ---------------------------------------------------------------------- */ - -DBusGProxy * -_modem_call_service_proxy (ModemCallService *self) -{ - RETURN_NULL_IF_NOT_VALID (self); - - return self->priv->proxy; -} - -/* ---------------------------------------------------------------------- */ /* ModemCallService interface */ -gboolean -modem_call_service_connect (ModemCallService *self, - char const *object_path) -{ - ModemCallServicePrivate *priv = self->priv; - - if (priv->dispose_has_run) - return FALSE; - - if (priv->disconnected) - return FALSE; - - if (priv->connected) - return TRUE; - - if (!g_queue_is_empty (priv->connecting.queue)) - return TRUE; - - g_clear_error (&priv->connecting.error); - - if (!priv->proxy) - priv->proxy = modem_ofono_proxy (object_path, - OFONO_IFACE_CALL_MANAGER); - - if (!priv->proxy) - { - g_error ("Failed to proxy the call service"); - return FALSE; - } - - if (!priv->signals) - { - priv->signals = TRUE; - - modem_ofono_proxy_connect_to_property_changed ( - priv->proxy, on_manager_property_changed, self); - - dbus_g_proxy_add_signal (priv->proxy, "CallAdded", - DBUS_TYPE_G_OBJECT_PATH, MODEM_TYPE_DBUS_DICT, G_TYPE_INVALID); - - dbus_g_proxy_connect_signal (priv->proxy, "CallAdded", - G_CALLBACK (on_manager_call_added), self, NULL); - } - - g_queue_push_tail (priv->connecting.queue, - modem_ofono_proxy_request_properties (priv->proxy, - reply_to_call_manager_get_properties, self, NULL)); - - g_queue_push_tail (priv->connecting.queue, - modem_ofono_request_descs (self, priv->proxy, - "GetCalls", reply_to_call_manager_get_calls, NULL)); - - return TRUE; -} - #if 0 static void refresh_conference_memberships (ModemCallService *self, @@ -598,76 +632,6 @@ refresh_conference_memberships (ModemCallService *self, #endif static void -on_manager_property_changed (DBusGProxy *proxy, - char const *property, - GValue const *value, - gpointer user_data) -{ - ModemCallService *self = MODEM_CALL_SERVICE (user_data); - - if (DEBUGGING) - { - char *s; - DEBUG ("enter"); - s = g_strdup_value_contents (value); - DEBUG ("%s = %s", property, s); - g_free (s); - } - - if (!strcmp (property, "EmergencyNumbers")) - { - g_object_set_property (G_OBJECT (self), "emergency-numbers", value); - g_signal_emit (self, signals[SIGNAL_EMERGENCY_NUMBERS_CHANGED], 0, - modem_call_get_emergency_numbers (self)); - } -#if 0 - else if (!strcmp (property, "MultipartyCalls")) - { - refresh_conference_memberships (self, g_value_get_boxed (value)); - } -#endif -} - -static void -reply_to_call_manager_get_properties (gpointer _self, - ModemRequest *request, - GHashTable *properties, - GError const *error, - gpointer user_data) -{ - ModemCallService *self = MODEM_CALL_SERVICE (_self); - - DEBUG ("enter"); - - if (!error) - { - GValue *value; - - value = g_hash_table_lookup (properties, "EmergencyNumbers"); - if (value) - { - g_object_set_property (G_OBJECT (self), "emergency-numbers", value); - } - - if (DEBUGGING) - { - char *key; - GHashTableIter iter[1]; - - for (g_hash_table_iter_init (iter, properties); - g_hash_table_iter_next (iter, (gpointer)&key, (gpointer)&value);) - { - char *s = g_strdup_value_contents (value); - DEBUG ("%s = %s", key, s); - g_free (s); - } - } - } - - modem_call_service_check_connected (self, request, error); -} - -static void on_manager_call_added (DBusGProxy *proxy, char const *path, GHashTable *properties, @@ -681,133 +645,25 @@ on_manager_call_added (DBusGProxy *proxy, } static void -reply_to_call_manager_get_calls (gpointer _self, - ModemRequest *request, - GPtrArray *array, - GError const *error, - gpointer user_data) -{ - ModemCallService *self = _self; - - DEBUG ("enter"); - - if (!error) - { - guint i; - - for (i = 0; i < array->len; i++) - { - GValueArray *va = g_ptr_array_index (array, i); - char const *path = g_value_get_boxed (va->values + 0); - GHashTable *properties = g_value_get_boxed (va->values + 1); - - modem_call_service_ensure_instance (self, path, properties); - } - } - - modem_call_service_check_connected (self, request, error); -} - -static void -modem_call_service_check_connected (ModemCallService *self, - ModemRequest *request, - GError const *error) -{ - ModemCallServicePrivate *priv = self->priv; - - if (g_queue_find (priv->connecting.queue, request)) - { - g_queue_remove (priv->connecting.queue, request); - - if (error) - { - if (!priv->connecting.error || - priv->connecting.error->domain == DBUS_GERROR) - { - g_clear_error (&priv->connecting.error); - g_set_error (&priv->connecting.error, - error->domain, error->code, - "%s", error->message); - } - - modem_critical (MODEM_SERVICE_CALL, GERROR_MSG_FMT, - GERROR_MSG_CODE (priv->connecting.error)); - } - - if (g_queue_is_empty (priv->connecting.queue)) - { - priv->connected = priv->connecting.error == NULL; - DEBUG ("emit \"connected\"(%s)", priv->connected ? "TRUE" : "FALSE"); - g_signal_emit (self, signals[SIGNAL_CONNECTED], 0); - } - } -} - -/** Disconnect from call service */ -void -modem_call_service_disconnect (ModemCallService *self) +on_manager_call_removed (DBusGProxy *proxy, + char const *path, + gpointer user_data) { - DEBUG ("(%p): enter", self); + DEBUG ("%s", path); + ModemCallService *self = MODEM_CALL_SERVICE (user_data); ModemCallServicePrivate *priv = self->priv; - unsigned was_connected = priv->connected; - - g_return_if_fail (!priv->dispose_has_run); - - if (priv->disconnected) - return; + ModemCall *ci = g_hash_table_lookup (priv->instances, path); - priv->connected = FALSE; - priv->disconnected = TRUE; - - while (!g_queue_is_empty (priv->connecting.queue)) - { - ModemRequest *request = g_queue_pop_head (priv->connecting.queue); - modem_request_cancel (request); - } - - while (!g_queue_is_empty (priv->dialing.queue)) - { - ModemRequest *request = g_queue_pop_head (priv->connecting.queue); - modem_request_cancel (request); - } - - if (priv->signals) + if (ci) { - priv->signals = FALSE; - - modem_ofono_proxy_disconnect_from_property_changed ( - priv->proxy, on_manager_property_changed, self); - - dbus_g_proxy_disconnect_signal (priv->proxy, "CallAdded", - G_CALLBACK (on_manager_call_added), self); + modem_call_service_disconnect_instance (self, ci); } - - g_clear_error (&priv->connecting.error); - - if (was_connected) - g_signal_emit (self, signals[SIGNAL_CONNECTED], 0); } -gboolean -modem_call_service_is_connected (ModemCallService const *self) -{ - return MODEM_IS_CALL_SERVICE (self) && self->priv->connected; -} - -gboolean -modem_call_service_is_connecting (ModemCallService const *self) -{ - return MODEM_IS_CALL_SERVICE (self) - && !g_queue_is_empty (self->priv->connecting.queue); -} - - void modem_call_service_resume (ModemCallService *self) { - DEBUG ("enter"); - GHashTableIter iter[1]; ModemCall *membercall = NULL; ModemCall *ci; @@ -815,11 +671,14 @@ modem_call_service_resume (ModemCallService *self) ModemCallConference *mcc; #endif - if (!self->priv->connected) - return; + DEBUG ("enter"); + RETURN_IF_NOT_VALID (self); + /* XXX/KV: no such signal */ +#if 0 g_signal_emit (self, signals[SIGNAL_EMERGENCY_NUMBERS_CHANGED], 0, modem_call_get_emergency_numbers (self)); +#endif g_hash_table_iter_init (iter, self->priv->instances); while (g_hash_table_iter_next (iter, NULL, (gpointer)&ci)) @@ -1038,11 +897,9 @@ modem_call_request_dial (ModemCallService *self, ModemRequest *request; ModemCallServicePrivate *priv = self->priv; - RETURN_NULL_IF_NOT_VALID (self); - DEBUG ("called"); - g_return_val_if_fail (priv->connected, NULL); + RETURN_NULL_IF_NOT_VALID (self); g_return_val_if_fail (destination != NULL, NULL); g_return_val_if_fail (callback != NULL, NULL); @@ -1057,7 +914,7 @@ modem_call_request_dial (ModemCallService *self, else clir_str = ""; - request = modem_request_begin (self, priv->proxy, + request = modem_request_begin (self, DBUS_PROXY (self), "Dial", modem_call_request_dial_reply, G_CALLBACK (callback), user_data, G_TYPE_STRING, destination, @@ -1108,10 +965,11 @@ modem_call_request_dial_reply (DBusGProxy *proxy, { ci = modem_call_service_get_dialed (self, object_path, destination); } - else { - object_path = NULL; - modem_error_fix (&error); - } + else + { + object_path = NULL; + modem_error_fix (&error); + } if (ci) { @@ -1122,29 +980,31 @@ modem_call_request_dial_reply (DBusGProxy *proxy, "call create request to \"%s\" successful", destination); } - else { - char ebuffer[32]; + else + { + char ebuffer[32]; - modem_message (MODEM_SERVICE_CALL, - "call create request to \"%s\" failed: %s.%s: %s", - destination, - modem_error_domain_prefix (error->domain), - modem_error_name (error, ebuffer, sizeof ebuffer), - error->message); + modem_message (MODEM_SERVICE_CALL, + "call create request to \"%s\" failed: %s.%s: %s", + destination, + modem_error_domain_prefix (error->domain), + modem_error_name (error, ebuffer, sizeof ebuffer), + error->message); - DEBUG ("%s: " GERROR_MSG_FMT, OFONO_IFACE_CALL_MANAGER ".Dial", - GERROR_MSG_CODE (error)); - } + DEBUG ("%s: " GERROR_MSG_FMT, OFONO_IFACE_CALL_MANAGER ".Dial", + GERROR_MSG_CODE (error)); + } if (modem_request_get_data (request, "call-canceled")) { if (ci) modem_call_request_release (ci, NULL, NULL); } - else { - g_assert (ci || error); - callback (self, request, ci, error, user_data); - } + else + { + g_assert (ci || error); + callback (self, request, ci, error, user_data); + } if (g_queue_find (priv->dialing.queue, request)) g_queue_remove (priv->dialing.queue, request); @@ -1172,11 +1032,12 @@ on_modem_call_state (ModemCall *ci, ModemCallState state, ModemCallService *self) { - ModemCallServicePrivate *priv = MODEM_CALL_SERVICE (self)->priv; + ModemCallServicePrivate *priv; gboolean releasing = FALSE; - if (priv->disconnected) - return; + RETURN_IF_NOT_VALID (self); + + priv = self->priv; switch (state) { @@ -1254,18 +1115,6 @@ on_modem_call_state (ModemCall *ci, #endif } -static void -on_modem_call_terminated (ModemCall *ci, - ModemCallService *self) -{ - char const *path; - ModemCallServicePrivate *priv = self->priv; - - path = modem_call_get_path (ci); - if (path) - g_hash_table_remove (priv->instances, path); -} - ModemRequest * modem_call_request_conference (ModemCallService *self, ModemCallServiceReply *callback, @@ -1273,7 +1122,7 @@ modem_call_request_conference (ModemCallService *self, { RETURN_NULL_IF_NOT_VALID (self); - return modem_request (MODEM_CALL_SERVICE (self), self->priv->proxy, + return modem_request (MODEM_CALL_SERVICE (self), DBUS_PROXY (self), "CreateMultiparty", modem_call_conference_request_reply, G_CALLBACK (callback), user_data, |