[-]
[+]
|
Changed |
_service:tar_git:ofono.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:ofono.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,6 +2,6 @@
<service name="tar_git">
<param name="url">https://git.merproject.org/slava/ofono.git</param>
<param name="branch">master</param>
- <param name="revision">babea14</param>
+ <param name="revision">0e1a587</param>
</service>
</services>
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.17+git34.tar.bz2/ofono/drivers/ril/ril_voicecall.c
^
|
@@ -650,20 +650,11 @@
}
}
-static void ril_voicecall_clcc_poll_on_success(GRilIoChannel *io,
- int status, const void *data, guint len, void *user_data)
-{
- if (status == RIL_E_SUCCESS) {
- ril_voicecall_clcc_poll((struct ril_voicecall *)user_data);
- }
-}
-
static void ril_voicecall_create_multiparty(struct ofono_voicecall *vc,
ofono_voicecall_cb_t cb, void *data)
{
- struct ril_voicecall *vd = ril_voicecall_get_data(vc);
- grilio_queue_send_request_full(vd->q, NULL, RIL_REQUEST_CONFERENCE,
- ril_voicecall_clcc_poll_on_success, NULL, vd);
+ ril_voicecall_request(RIL_REQUEST_CONFERENCE,
+ vc, 0, NULL, cb, data);
}
static void ril_voicecall_transfer(struct ofono_voicecall *vc,
@@ -676,14 +667,17 @@
static void ril_voicecall_private_chat(struct ofono_voicecall *vc, int id,
ofono_voicecall_cb_t cb, void *data)
{
- struct ril_voicecall *vd = ril_voicecall_get_data(vc);
GRilIoRequest *req = grilio_request_sized_new(8);
+ struct ofono_error error;
+
+ DBG("Private chat with id %d", id);
grilio_request_append_int32(req, 1);
grilio_request_append_int32(req, id);
- grilio_queue_send_request_full(vd->q, req,
- RIL_REQUEST_SEPARATE_CONNECTION,
- ril_voicecall_clcc_poll_on_success, NULL, vd);
+
+ ril_voicecall_request(RIL_REQUEST_SEPARATE_CONNECTION,
+ vc, 0, req, NULL, NULL);
grilio_request_unref(req);
+ cb(ril_error_ok(&error), data);
}
static void ril_voicecall_swap_without_accept(struct ofono_voicecall *vc,
|
[-]
[+]
|
Changed |
_service:tar_git:ofono-1.17+git34.tar.bz2/ofono/src/call-forwarding.c
^
|
@@ -60,6 +60,7 @@
GSList *cf_conditions[4];
int flags;
DBusMessage *pending;
+ GSList *pending_get_prop;
int query_next;
int query_end;
struct cf_ss_request *ss_req;
@@ -529,6 +530,14 @@
return reply;
}
+static void cf_send_properties(gpointer data, gpointer user_data)
+{
+ DBusMessage *msg = data;
+ DBusMessage *reply = cf_get_properties_reply(msg, user_data);
+
+ __ofono_dbus_pending_reply(&msg, reply);
+}
+
static void get_query_cf_callback(const struct ofono_error *error, int total,
const struct ofono_call_forwarding_condition *list,
void *data)
@@ -549,8 +558,9 @@
}
if (cf->query_next == CALL_FORWARDING_TYPE_NOT_REACHABLE) {
- __ofono_dbus_pending_reply(&cf->pending,
- cf_get_properties_reply(cf->pending, cf));
+ g_slist_foreach(cf->pending_get_prop, cf_send_properties, cf);
+ g_slist_free(cf->pending_get_prop);
+ cf->pending_get_prop = NULL;
return;
}
@@ -577,11 +587,18 @@
if (cf->driver->query == NULL)
return __ofono_error_not_implemented(msg);
+ if (cf->pending_get_prop) {
+ /* GetProperties is already in progress */
+ cf->pending_get_prop = g_slist_append(cf->pending_get_prop,
+ dbus_message_ref(msg));
+ return NULL;
+ }
+
if (__ofono_call_forwarding_is_busy(cf) ||
__ofono_ussd_is_busy(cf->ussd))
return __ofono_error_busy(msg);
- cf->pending = dbus_message_ref(msg);
+ cf->pending_get_prop = g_slist_append(NULL, dbus_message_ref(msg));
cf->query_next = 0;
get_query_next_cf_cond(cf);
@@ -1268,7 +1285,7 @@
gboolean __ofono_call_forwarding_is_busy(struct ofono_call_forwarding *cf)
{
- return cf->pending ? TRUE : FALSE;
+ return cf->pending || cf->pending_get_prop;
}
static void sim_cfis_read_cb(int ok, int total_length, int record,
@@ -1378,6 +1395,13 @@
DBUS_TYPE_BOOLEAN, &cfu_voice);
}
+static void cf_cancel_get_prop(gpointer data)
+{
+ DBusMessage *msg = data;
+
+ __ofono_dbus_pending_reply(&msg, __ofono_error_canceled(msg));
+}
+
static void call_forwarding_unregister(struct ofono_atom *atom)
{
struct ofono_call_forwarding *cf = __ofono_atom_get_data(atom);
@@ -1385,6 +1409,11 @@
DBusConnection *conn = ofono_dbus_get_connection();
struct ofono_modem *modem = __ofono_atom_get_modem(cf->atom);
+ if (cf->pending_get_prop) {
+ g_slist_free_full(cf->pending_get_prop, cf_cancel_get_prop);
+ cf->pending_get_prop = NULL;
+ }
+
ofono_modem_remove_interface(modem, OFONO_CALL_FORWARDING_INTERFACE);
g_dbus_unregister_interface(conn, path,
OFONO_CALL_FORWARDING_INTERFACE);
|