Hi Andrew,
On 09/08/2010 12:59 PM, Andrzej Zaborowski wrote:
One of the clean-up commits changed the semantics of the dial
request
callback's parameter (NULL if call setup failed, non-NULL if success
or user cancelled).
---
src/stk.c | 2 +-
src/voicecall.c | 14 ++++++++++++++
2 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/src/stk.c b/src/stk.c
index b469467..b6ed4c3 100644
--- a/src/stk.c
+++ b/src/stk.c
@@ -1419,7 +1419,7 @@ static void call_setup_connected(struct ofono_call *call, void
*data)
static struct ofono_error error = { .type = OFONO_ERROR_TYPE_FAILURE };
static unsigned char facility_rejected_result[] = { 0x9d };
- if (!call) {
+ if (!call || call->status == CALL_STATUS_DISCONNECTED) {
If the call has been disconnected by the user, shouldn't we be sending
USER_CANCEL? At least that is what the old behavior implies.
memset(&rsp, 0, sizeof(rsp));
rsp.result.type = STK_RESULT_TYPE_NETWORK_UNAVAILABLE;
diff --git a/src/voicecall.c b/src/voicecall.c
index 3bd4dff..e536089 100644
--- a/src/voicecall.c
+++ b/src/voicecall.c
@@ -361,6 +361,16 @@ static DBusMessage *voicecall_deflect(DBusConnection *conn,
return NULL;
}
+static void dial_request_user_cancel(struct ofono_voicecall *vc,
+ struct voicecall *call)
+{
+ if (!vc->dial_req)
+ return;
+
+ if (!call || call == vc->dial_req->call)
+ dial_request_finish(vc->dial_req->call->vc, TRUE);
+}
+
static DBusMessage *voicecall_hangup(DBusConnection *conn,
DBusMessage *msg, void *data)
{
@@ -372,6 +382,8 @@ static DBusMessage *voicecall_hangup(DBusConnection *conn,
if (vc->pending)
return __ofono_error_busy(msg);
+ dial_request_user_cancel(vc, v);
+
I don't see the need for this part, don't we already take care of this
in voicecall_set_call_status?
switch (call->status) {
case CALL_STATUS_DISCONNECTED:
return __ofono_error_failed(msg);
@@ -1278,6 +1290,8 @@ static DBusMessage *manager_hangup_all(DBusConnection *conn,
return reply;
}
+ dial_request_user_cancel(vc, NULL);
+
Same as above...
vc->flags |= VOICECALLS_FLAG_MULTI_RELEASE;
vc->pending = dbus_message_ref(msg);
Regards,
-Denis