diff options
author | Matt Porter <mporter@konsulko.com> | 2017-05-19 12:56:35 -0400 |
---|---|---|
committer | Matt Porter <mporter@konsulko.com> | 2017-05-19 14:58:25 -0400 |
commit | 53f6222d2ca009c86f301a630e4bf81d25c86feb (patch) | |
tree | f6e30413b1c9c8d960cbb7952dc9a55f0d667f7e /telephony-binding/telephony-binding.c | |
parent | 91520f0839b47641162b2f4ba5e788f6a602b4e4 (diff) |
Refactor telephony binding voicecall object management
Refactor the voicecall object lifecycle management in the
telephony binding using g_object-derived handles. Instead
of passing around and managing raw strings as a handle to
a voicecall, we use the voicecall object itself returned
from the new dbus proxy init. This simplifies memory
management of these objects that are created and freed
each time as calls are dialed/answered and terminated. It
then simplifies the forthcoming call answering support.
AGL-Bug: SPEC-600
Change-Id: I89efed1eb7927f4ffe2d1eaed295e0aa914efdcc
Signed-off-by: Matt Porter <mporter@konsulko.com>
Diffstat (limited to 'telephony-binding/telephony-binding.c')
-rw-r--r-- | telephony-binding/telephony-binding.c | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/telephony-binding/telephony-binding.c b/telephony-binding/telephony-binding.c index bf618ce..134432c 100644 --- a/telephony-binding/telephony-binding.c +++ b/telephony-binding/telephony-binding.c @@ -18,7 +18,6 @@ #include <glib.h> #include <json-c/json.h> -#include <string.h> #include <afb/afb-binding.h> #include <afb/afb-service-itf.h> @@ -30,12 +29,11 @@ static const struct afb_binding_interface *interface; static OrgOfonoVoiceCallManager *vcm; -static gchar *incoming_call; -static gchar *voice_call; +static OrgOfonoVoiceCall *incoming_call, *voice_call; static void dial(struct afb_req request) { - struct json_object *query, *val, *ret; + struct json_object *query, *val; const char *number; query = afb_req_json(request); @@ -47,12 +45,8 @@ static void dial(struct afb_req request) afb_req_fail(request, "active call", NULL); } else { DEBUG(interface, "dial: %s...\n", number); - voice_call = ofono_voicecallmanager_dial(vcm, (gchar *)number, ""); - DEBUG(interface, "voice_call: %s\n", voice_call); - if (voice_call) { - ret = json_object_new_object(); - json_object_object_add(ret, "VoiceCall", json_object_new_string(voice_call)); - afb_req_success(request, ret, NULL); + if (ofono_voicecallmanager_dial(vcm, (gchar *)number, "")) { + afb_req_success(request, NULL, NULL); } else { ERROR(interface, "dial: failed to dial number\n"); afb_req_fail(request, "failed dial", NULL); @@ -67,10 +61,9 @@ static void dial(struct afb_req request) static void hangup(struct afb_req request) { if (voice_call) { - DEBUG(interface, "Hangup voice call: %s\n", voice_call); - ofono_hangup(voice_call); + DEBUG(interface, "Hangup voice call\n"); + ofono_voicecall_hangup(voice_call); afb_req_success(request, NULL, NULL); - voice_call = NULL; } else { ERROR(interface, "Hangup: no active call"); afb_req_fail(request, "failed hangup", NULL); @@ -85,7 +78,7 @@ static void incoming_call_cb(OrgOfonoVoiceCallManager *manager, gchar *op, gchar call_info = json_object_new_object(); json_object_object_add(call_info, "clip", json_object_new_string(clip)); afb_daemon_broadcast_event(interface->daemon, "incomingCall", call_info); - incoming_call = strdup(op); + incoming_call = ofono_voicecall_new(op); } static void dialing_call_cb(OrgOfonoVoiceCallManager *manager, gchar *op, gchar *colp) @@ -95,14 +88,18 @@ static void dialing_call_cb(OrgOfonoVoiceCallManager *manager, gchar *op, gchar call_info = json_object_new_object(); json_object_object_add(call_info, "colp", json_object_new_string(colp)); afb_daemon_broadcast_event(interface->daemon, "dialingCall", call_info); + voice_call = ofono_voicecall_new(op); } static void terminated_call_cb(OrgOfonoVoiceCallManager *manager, gchar *op) { if (incoming_call) { - free(incoming_call); + ofono_voicecall_free(incoming_call); incoming_call = NULL; + } else if (voice_call) { + ofono_voicecall_free(voice_call); } + voice_call = NULL; afb_daemon_broadcast_event(interface->daemon, "terminatedCall", NULL); } |