blob: fdf32545fbc5165753ba6f4ee96d14fd3f21e657 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_SDP_CLIENT_H_
#define SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_SDP_CLIENT_H_
#include <lib/async/cpp/task.h>
#include <unordered_map>
#include <fbl/ref_ptr.h>
#include "src/connectivity/bluetooth/core/bt-host/l2cap/scoped_channel.h"
#include "src/connectivity/bluetooth/core/bt-host/sdp/pdu.h"
#include "src/connectivity/bluetooth/core/bt-host/sdp/sdp.h"
#include "src/connectivity/bluetooth/core/bt-host/sdp/status.h"
namespace bt::sdp {
// The SDP client connects to the SDP server on a remote device and can perform
// search requests and returns results. It is expected to be short-lived.
// More than one client can be connected to the same host.
class Client {
public:
// Create a new SDP client on the given |channel|. |channel| must be
// un-activated. |channel| must not be null.
static std::unique_ptr<Client> Create(fbl::RefPtr<l2cap::Channel> channel);
virtual ~Client() = default;
// Perform a ServiceSearchAttribute transaction, searching for the UUIDs in
// |search_pattern|, and requesting the attributes in |req_attributes|.
// If |req_attributes| is empty, all attributes will be requested.
// Results are returned asynchronously:
// - |result_cb| is called for each service which matches the pattern with
// the attributes requested. As long as true is returned, it can still
// be called.
// - when no more services remain, the result_cb status will be
// HostError::kNotFound. The return value is ignored.
using SearchResultCallback =
fit::function<bool(sdp::Status, const std::map<AttributeId, DataElement>&)>;
virtual void ServiceSearchAttributes(std::unordered_set<UUID> search_pattern,
const std::unordered_set<AttributeId>& req_attributes,
SearchResultCallback result_cb,
async_dispatcher_t* cb_dispatcher) = 0;
};
} // namespace bt::sdp
#endif // SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_SDP_CLIENT_H_