diff options
-rw-r--r-- | hcid/dbus-adapter.c | 1 | ||||
-rw-r--r-- | hcid/dbus-sdp.c | 33 |
2 files changed, 24 insertions, 10 deletions
diff --git a/hcid/dbus-adapter.c b/hcid/dbus-adapter.c index b32569f6..da2d0372 100644 --- a/hcid/dbus-adapter.c +++ b/hcid/dbus-adapter.c @@ -3253,6 +3253,7 @@ static DBusSignalVTable adapter_signals[] = { { "RemoteDeviceConnected", "s" }, { "RemoteDeviceDisconnectRequested", "s" }, { "RemoteDeviceDisconnected", "s" }, + { "RemoteIdentifiersUpdated", "sas" }, { "BondingCreated", "s" }, { "BondingRemoved", "s" }, { "TrustAdded", "s" }, diff --git a/hcid/dbus-sdp.c b/hcid/dbus-sdp.c index 17e2d284..aa19c512 100644 --- a/hcid/dbus-sdp.c +++ b/hcid/dbus-sdp.c @@ -774,9 +774,9 @@ static void remote_svc_identifiers_completed_cb(uint8_t type, uint16_t err, struct transaction_context *ctxt = udata; const char *src, *dst, *puuid; const char *devid_uuid = "00001200-0000-1000-8000-00805f9b34fb"; + char **identifiers; DBusMessage *reply; GSList *l = NULL; - DBusMessageIter iter, array_iter; int scanned, extracted = 0, len = 0, recsize = 0; uint8_t dtd = 0; @@ -861,18 +861,31 @@ static void remote_svc_identifiers_completed_cb(uint8_t type, uint16_t err, return; /* Wait the response */ reply = dbus_message_new_method_return(ctxt->rq); - dbus_message_iter_init_append(reply, &iter); - dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, - DBUS_TYPE_STRING_AS_STRING, &array_iter); - for (l = ctxt->identifiers; l; l = l->next) { - puuid = l->data; - dbus_message_iter_append_basic(&array_iter, - DBUS_TYPE_STRING, &puuid); - } + identifiers = g_new(char *, g_slist_length(ctxt->identifiers)); - dbus_message_iter_close_container(&iter, &array_iter); + for (l = ctxt->identifiers, len = 0; l; l = l->next, len++) + identifiers[len] = l->data; + + dbus_message_append_args(reply, + DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, + &identifiers, len, + DBUS_TYPE_INVALID); send_message_and_unref(ctxt->conn, reply); + + if (len) + dbus_connection_emit_signal(ctxt->conn, + dbus_message_get_path(ctxt->rq), + ADAPTER_INTERFACE, + "RemoteIdentifiersUpdated", + DBUS_TYPE_STRING, &dst, + DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, + &identifiers, len, + DBUS_TYPE_INVALID); + + if (identifiers) + g_free(identifiers); + failed: transaction_context_free(ctxt, TRUE); } |