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,
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;
}
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)
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)
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';
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];
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;
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);
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, };
}
}
g_variant_iter_free(iter);
- g_variant_unref(dict_param);
}
} else if (strcasecmp(signal_name, "ProfileStateChanged") == 0) {
char *profile_uuid = NULL;
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);
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);
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);
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,
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;
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);
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;
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);
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;
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");
}
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
g_free(name);
}
+ if (query == NULL) {
+ ERR("Query is NULL");
+ return;
+ }
+
status = contacts_db_get_records_with_query(query, -1, -1,
&record_list);
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;
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);
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);