// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "iioservice/libiioservice_ipc/sensor_client_dbus.h"

#include <chromeos/dbus/service_constants.h>
#include <dbus/object_proxy.h>

namespace iioservice {

void SensorClientDbus::BootstrapMojoConnection() {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sensor_sequence_checker_);
  DCHECK(sensor_bus_);

  dbus::ObjectProxy* proxy = sensor_bus_->GetObjectProxy(
      ::mojo_connection_service::kMojoConnectionServiceServiceName,
      dbus::ObjectPath(
          ::mojo_connection_service::kMojoConnectionServiceServicePath));

  dbus::MethodCall method_call(
      ::mojo_connection_service::kMojoConnectionServiceInterface,
      ::mojo_connection_service::
          kBootstrapMojoConnectionForSensorClientsMethod);
  dbus::MessageWriter writer(&method_call);
  proxy->CallMethod(&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
                    base::BindOnce(&SensorClientDbus::OnBootstrapMojoResponse,
                                   weak_factory_.GetWeakPtr()));
}

void SensorClientDbus::OnInvitationReceived(
    mojo::IncomingInvitation invitation) {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sensor_sequence_checker_);

  // Bind primordial message pipe to a SensorHalClient implementation.
  OnClientReceived(mojo::PendingReceiver<cros::mojom::SensorHalClient>(
      invitation.ExtractMessagePipe(
          ::mojo_connection_service::
              kBootstrapMojoConnectionForSensorClientsChannelToken)));
}

}  // namespace iioservice
