From 6380317dda35e4c90c83bd6849d8c9fba22a8ae1 Mon Sep 17 00:00:00 2001 From: DoHyun Pyun Date: Wed, 6 Sep 2017 15:50:46 +0900 Subject: [PATCH] Apply tizen 3.0 based product patchsets ---------------------------------------------------- commit 5af925889097dd358930615e9035a36fd5e26c14 Author: DoHyun Pyun Date: Thu Feb 23 08:37:46 2017 +0900 Fix the build error for wearable and IVI profile ---------------------------------------------------- Change-Id: I971d222892de723806f342e52074220398984333 Signed-off-by: DoHyun Pyun --- CMakeLists.txt | 3 ++- ag-agent/bluetooth-ag-agent.c | 47 +++++++++++++++++++++++++++++------------ ag-agent/bluetooth-ag-agent.h | 1 + ag-agent/bluetooth-ag-manager.c | 4 ++-- bt-ipsp/bt-ipsp.c | 2 +- bt-ipsp/bt-ipsp.h | 4 ++++ packaging/bluetooth-agent.spec | 2 ++ pb-agent/bluetooth_pb_agent.c | 47 +++++++++++++++++++++++++++++------------ pb-agent/bluetooth_pb_vcard.h | 2 +- 9 files changed, 80 insertions(+), 32 deletions(-) mode change 100755 => 100644 ag-agent/bluetooth-ag-agent.c mode change 100755 => 100644 ag-agent/bluetooth-ag-manager.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 86d8c7a..3da6309 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,4 +7,5 @@ ADD_SUBDIRECTORY(hf-agent) ADD_SUBDIRECTORY(map-agent) ADD_SUBDIRECTORY(pb-agent) ADD_SUBDIRECTORY(ag-agent) -ADD_SUBDIRECTORY(bt-ipsp) \ No newline at end of file +ADD_SUBDIRECTORY(bt-ipsp) +ADD_SUBDIRECTORY(hid-agent) \ No newline at end of file diff --git a/ag-agent/bluetooth-ag-agent.c b/ag-agent/bluetooth-ag-agent.c old mode 100755 new mode 100644 index d6f9bbb..2d7e7fc --- a/ag-agent/bluetooth-ag-agent.c +++ b/ag-agent/bluetooth-ag-agent.c @@ -1978,6 +1978,9 @@ static void __bt_ag_close_sco(bt_ag_info_t *hs) if (hs->sco_id) __bt_ag_agent_remove_watch(&hs->sco_id); + + if (hs->sco_incoming_id) + __bt_ag_agent_remove_watch(&hs->sco_incoming_id); } static gboolean __bt_ag_sco_server_conn_cb(GIOChannel *chan, @@ -1994,6 +1997,9 @@ static gboolean __bt_ag_sco_server_conn_cb(GIOChannel *chan, if (ag_info->sco_id) __bt_ag_agent_remove_watch(&ag_info->sco_id); + if (ag_info->sco_incoming_id) + __bt_ag_agent_remove_watch(&ag_info->sco_incoming_id); + if (ag_info->watch_id) _bt_ag_set_headset_state(ag_info, HEADSET_STATE_CONNECTED); return FALSE; @@ -2055,7 +2061,7 @@ static gboolean __bt_ag_sco_server_cb(GIOChannel *chan, } ag_info->sco = sco_io; - ag_info->sco_id = g_io_add_watch(sco_io, G_IO_HUP | G_IO_ERR | G_IO_NVAL, + ag_info->sco_incoming_id = g_io_add_watch(sco_io, G_IO_HUP | G_IO_ERR | G_IO_NVAL, __bt_ag_sco_server_conn_cb, ag_info); if (remote_dev_path) @@ -2544,6 +2550,7 @@ static gboolean __bt_ag_event_handler(GIOChannel *channel, size_t available_buffer; int fd; bt_ag_info_t *bt_ag_info = (bt_ag_info_t *)user_data; + int err_return = 0; if (cond & G_IO_NVAL) @@ -2571,7 +2578,7 @@ static gboolean __bt_ag_event_handler(GIOChannel *channel, goto failed; } - memcpy(&slconn->buffer[slconn->start], event_buf, len); + memcpy(&slconn->buffer[slconn->start + slconn->length], event_buf, len); slconn->length += len; slconn->buffer[slconn->start + slconn->length] = '\0'; @@ -2582,8 +2589,10 @@ static gboolean __bt_ag_event_handler(GIOChannel *channel, off_t cmd_len; get_cr = strchr(&slconn->buffer[slconn->start], '\r'); - if (!get_cr) + if (!get_cr) { + ERR("Broken AT command received, break"); break; + } cmd_len = 1 + (off_t) get_cr - (off_t) &slconn->buffer[slconn->start]; @@ -2598,22 +2607,31 @@ static gboolean __bt_ag_event_handler(GIOChannel *channel, err = 0; } - if (err == -EINVAL) { - ERR("Unrecognized command: %s", - &slconn->buffer[slconn->start]); - err = _bt_ag_send_response(bt_ag_info, - HFP_STATE_MNGR_ERR_NOT_SUPPORTED); - if (err < 0) - goto failed; - } else if (err < 0) + if (err < 0) { + switch (err) { + case -EINVAL: + err_return = HFP_STATE_MNGR_ERR_NOT_SUPPORTED; + break; + case -EACCES: + err_return = HFP_STATE_MNGR_ERR_NOT_ALLOWED; + break; + default: + err_return = HFP_STATE_MNGR_ERR_NOT_SUPPORTED; + break; + } ERR("Error handling command %s: %s (%d)", &slconn->buffer[slconn->start], strerror(-err), -err); + err = _bt_ag_send_response(bt_ag_info, + err_return); + if (err < 0) + goto failed; + } slconn->start += cmd_len; slconn->length -= cmd_len; - if (!slconn->length) + if (slconn->length <= 0) slconn->start = 0; } return TRUE; @@ -2824,7 +2842,6 @@ static gboolean __bt_ag_agent_connection_release(bt_ag_info_t *hs) if (hs->sco) { __bt_ag_close_sco(hs); _bt_ag_set_headset_state(hs, HEADSET_STATE_CONNECTED); - hs->sco = NULL; } __bt_ag_agent_remove_watch(&hs->watch_id); @@ -3118,6 +3135,9 @@ static void __bt_ag_agent_method(GDBusConnection *connection, g_free(codec); g_free(nrec); + } else { + ret = BT_HFP_AGENT_ERROR_NOT_CONNECTED; + goto fail; } } else if (g_strcmp0(method_name, "Disconnect") == 0) { char hdset_address[18] = { 0, }; @@ -4258,7 +4278,6 @@ static void __bt_ag_agent_media_filter_cb(GDBusConnection *connection, } } g_variant_iter_free(iter); - g_variant_unref(dict_param); } } else if (strcasecmp(signal_name, "ProfileStateChanged") == 0) { char *profile_uuid = NULL; diff --git a/ag-agent/bluetooth-ag-agent.h b/ag-agent/bluetooth-ag-agent.h index 7373db2..1a6dd35 100644 --- a/ag-agent/bluetooth-ag-agent.h +++ b/ag-agent/bluetooth-ag-agent.h @@ -457,6 +457,7 @@ typedef struct { GIOChannel *rfcomm; GIOChannel *sco; guint sco_id; + guint sco_incoming_id; guint codec; gboolean auto_dc; diff --git a/ag-agent/bluetooth-ag-manager.c b/ag-agent/bluetooth-ag-manager.c old mode 100755 new mode 100644 index d909ea0..5ba4477 --- a/ag-agent/bluetooth-ag-manager.c +++ b/ag-agent/bluetooth-ag-manager.c @@ -1226,11 +1226,11 @@ void _bt_hfp_terminate_call_request(void *t_device) } else if ((t_alert = __bt_hfp_get_call_with_status( HFP_CALL_STATUS_CREATE)) != NULL) { - t_error = __bt_bt_hfp_reject_call(t_alert); + t_error = __bt_hfp_release_call(t_alert); } else if ((t_alert = __bt_hfp_get_call_with_status( HFP_CALL_STATUS_MO_ALERTING)) != NULL) { - t_error = __bt_bt_hfp_reject_call(t_alert); + t_error = __bt_hfp_release_call(t_alert); } else if ((t_alert = __bt_hfp_get_call_with_status( HFP_CALL_STATUS_COMING)) != NULL) { t_error = __bt_bt_hfp_reject_call(t_alert); diff --git a/bt-ipsp/bt-ipsp.c b/bt-ipsp/bt-ipsp.c index abf6b39..246e36d 100644 --- a/bt-ipsp/bt-ipsp.c +++ b/bt-ipsp/bt-ipsp.c @@ -212,7 +212,7 @@ gboolean __bt_ipsp_get_network_ipv6_address(const char *if_name, mobile_ap_ipv6_ return FALSE; } - while (fscanf(fd, "%4s%4s%4s%4s%4s%4s%4s%4s %2x %d %d %2x %20s", + while (fscanf(fd, "%4s%4s%4s%4s%4s%4s%4s%4s %2x %d %d %2x %19s", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5], addr[6], addr[7], &if_idx, &prefix_len, &scope, &if_flag, name) != EOF) { diff --git a/bt-ipsp/bt-ipsp.h b/bt-ipsp/bt-ipsp.h index c783c54..81a35d2 100644 --- a/bt-ipsp/bt-ipsp.h +++ b/bt-ipsp/bt-ipsp.h @@ -92,4 +92,8 @@ extern "C" { #define IP_CMD "/usr/sbin/ip" +#ifdef __cplusplus +} +#endif + #endif diff --git a/packaging/bluetooth-agent.spec b/packaging/bluetooth-agent.spec index 73efaff..a6c56a6 100644 --- a/packaging/bluetooth-agent.spec +++ b/packaging/bluetooth-agent.spec @@ -157,8 +157,10 @@ ln -sf %{_libdir}/systemd/system/bluetooth-pbap-agent.service %{_sysconfdir}/sys %license LICENSE %{_bindir}/bluetooth-hf-agent %{_bindir}/bluetooth-ag-agent +%{_bindir}/bluetooth-hid-agent %{_datadir}/dbus-1/system-services/org.bluez.hf_agent.service %{_datadir}/dbus-1/system-services/org.bluez.ag_agent.service +%{_datadir}/dbus-1/system-services/org.bluez.hid_agent.service %{_sysconfdir}/dbus-1/system.d/bluetooth-ag-agent.conf %{_sysconfdir}/dbus-1/system.d/bluetooth-hf-agent.conf %exclude %{_libdir}/systemd/system/bluetooth-map-agent.service diff --git a/pb-agent/bluetooth_pb_agent.c b/pb-agent/bluetooth_pb_agent.c index 134b4d4..e132ee7 100644 --- a/pb-agent/bluetooth_pb_agent.c +++ b/pb-agent/bluetooth_pb_agent.c @@ -478,7 +478,7 @@ static GVariant *__bt_pb_get_phonebook(PbAgentData *agent, const char *name, FN_START; GVariant *phonebook; PhoneBookType pb_type = TELECOM_NONE; - GVariantBuilder *vcards = g_variant_builder_new(G_VARIANT_TYPE("as")); + GVariantBuilder *vcards; INFO("name: %s filter: %lld format: %d max_list_count: %d list_start_offset: %d\n", name, filter, format, max_list_count, list_start_offset); @@ -493,6 +493,8 @@ static GVariant *__bt_pb_get_phonebook(PbAgentData *agent, const char *name, return NULL; } + vcards = g_variant_builder_new(G_VARIANT_TYPE("as")); + if (max_list_count > 0) { __bluetooth_pb_get_vcards(agent, pb_type, filter, format, max_list_count, list_start_offset, vcards); @@ -564,7 +566,7 @@ static GVariant *__bt_pb_get_phonebook_list(PbAgentData *agent, GVariant *phonebook_list; PhoneBookType pb_type = TELECOM_NONE; - GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("a(ssu)")); + GVariantBuilder *builder; DBG_SECURE("name: %s\n", name); @@ -578,6 +580,8 @@ static GVariant *__bt_pb_get_phonebook_list(PbAgentData *agent, return NULL; } + builder = g_variant_builder_new(G_VARIANT_TYPE("a(ssu)")); + __bluetooth_pb_get_list(agent, pb_type, builder); INFO("pb_type[%d] / number of missed_call[%d]", pb_type, @@ -593,8 +597,7 @@ static GVariant *__bt_pb_get_phonebook_list(PbAgentData *agent, phonebook_list = g_variant_new("(a(ssu)u)", builder, 0); } - if (builder) - g_variant_builder_unref(builder); + g_variant_builder_unref(builder); FN_END; return phonebook_list; @@ -732,7 +735,7 @@ static GVariant *__bt_pb_get_phonebook_entries_at(PbAgentData *agent, FN_START; GVariant *phonebook_entries; PhoneBookType pb_type = TELECOM_NONE; - GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("a(ssu)")); + GVariantBuilder *builder; DBG("command: %s, start_index: %d, end_index: %d\n", command, start_index, end_index); @@ -747,12 +750,13 @@ static GVariant *__bt_pb_get_phonebook_entries_at(PbAgentData *agent, return NULL; } + builder = g_variant_builder_new(G_VARIANT_TYPE("a(ssu)")); + __bluetooth_pb_get_list_number(agent, pb_type, start_index, end_index, builder); phonebook_entries = g_variant_new("(a(ssu))", builder); - if (builder) - g_variant_builder_unref(builder); + g_variant_builder_unref(builder); FN_END; return phonebook_entries; @@ -765,7 +769,7 @@ static GVariant *__bt_pb_get_phonebook_entries_find_at(PbAgentData *agent, FN_START; GVariant *phonebook_entries; PhoneBookType pb_type = TELECOM_NONE; - GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("a(ssu)")); + GVariantBuilder *builder; DBG("command: %s, find text: %s\n", command, find_text); @@ -779,12 +783,13 @@ static GVariant *__bt_pb_get_phonebook_entries_find_at(PbAgentData *agent, return NULL; } + builder = g_variant_builder_new(G_VARIANT_TYPE("a(ssu)")); + __bluetooth_pb_get_list_name(agent, pb_type, find_text, builder); phonebook_entries = g_variant_new("(a(ssu))", builder); - if (builder) - g_variant_builder_unref(builder); + g_variant_builder_unref(builder); FN_END; return phonebook_entries; @@ -1176,6 +1181,13 @@ next: contacts_list_destroy(recordList, true); + if (is_first_condition) { + ERR("ADDRESSBOOK NOT FOUND"); + contacts_filter_destroy(filter); + contacts_query_destroy(query); + return NULL; + } + status = contacts_query_set_filter(query, filter); if (status != CONTACTS_ERROR_NONE) ERR("Could not Apply Filter"); @@ -1463,6 +1475,10 @@ static void __bluetooth_pb_get_vcards(PbAgentData *agent, PhoneBookType pb_type, } INFO("Limit is = %d and offset is =%d\n", limit, offset); + if (query == NULL) { + ERR("Query is NULL"); + return; + } /* When limit is passed as ZERO to contacts_db_get_records_with_query * API then this API will provide all available contacts in its database * (unrestricted). Now consider a case when client requests for @@ -1549,6 +1565,11 @@ static void __bluetooth_pb_get_contact_list(PbAgentData *agent, g_free(name); } + if (query == NULL) { + ERR("Query is NULL"); + return; + } + status = contacts_db_get_records_with_query(query, -1, -1, &record_list); @@ -1865,7 +1886,7 @@ static void __bluetooth_pb_get_list_number(PbAgentData *agent, DBG("type = %d", pb_type); switch (pb_type) { case TELECOM_PB: - query = __bluetooth_pb_query_person_number(); + query = __bluetooth_pb_query_person(PBAP_ADDRESSBOOK_PHONE); __bluetooth_pb_get_contact_list_number(agent, query, start_index, end_index, builder); break; @@ -2100,7 +2121,7 @@ static void __bluetooth_pb_contact_changed(const gchar *view_uri, DBG("Received contact changed cb"); - g_dbus_connection_emit_signal(conn, "org.bluez.pb_agent", + g_dbus_connection_emit_signal(conn, NULL, "/org/bluez/pb_agent", "org.bluez.PbAgent", "clear", NULL, NULL); @@ -2361,7 +2382,7 @@ int main(void) if (contacts_disconnect() != CONTACTS_ERROR_NONE) ERR("contacts_disconnect failed \n"); - g_dbus_connection_emit_signal(pb_dbus_conn, "org.bluez.pb_agent", + g_dbus_connection_emit_signal(pb_dbus_conn, NULL, "/org/bluez/pb_agent", "org.bluez.PbAgent", "clear", NULL, NULL); diff --git a/pb-agent/bluetooth_pb_vcard.h b/pb-agent/bluetooth_pb_vcard.h index 6e1b644..97fb014 100644 --- a/pb-agent/bluetooth_pb_vcard.h +++ b/pb-agent/bluetooth_pb_vcard.h @@ -26,7 +26,7 @@ #include -#define SIM_ADDRESSBOOK_PREFIX "http://tizen.samsung.com/addressbook/sim" +#define SIM_ADDRESSBOOK_PREFIX "http://tizen.org/addressbook/sim" typedef enum { PBAP_ADDRESSBOOK_PHONE, -- 2.7.4