#ifndef GRPC_SRC_CORE_LIB_RESOLVER_RESOLVER_H
#define GRPC_SRC_CORE_LIB_RESOLVER_RESOLVER_H
#include <grpc/support/port_platform.h>
#include <functional>
#include <string>
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/debug/trace.h"
#include "src/core/lib/gprpp/orphanable.h"
#include "src/core/lib/gprpp/ref_counted_ptr.h"
#include "src/core/lib/resolver/server_address.h"
#include "src/core/lib/service_config/service_config.h"
extern grpc_core::DebugOnlyTraceFlag grpc_trace_resolver_refcount;
#define GRPC_ARG_ADDRESS_NAME "grpc.address_name"
namespace grpc_core {
class Resolver : public InternallyRefCounted<Resolver> {
public:
struct Result {
absl::StatusOr<ServerAddressList> addresses;
absl::StatusOr<RefCountedPtr<ServiceConfig>> service_config = nullptr;
std::string resolution_note;
ChannelArgs args;
std::function<void(absl::Status)> result_health_callback;
};
class ResultHandler {
public:
virtual ~ResultHandler() {}
virtual void ReportResult(Result result) = 0; };
Resolver(const Resolver&) = delete;
Resolver& operator=(const Resolver&) = delete;
~Resolver() override = default;
virtual void StartLocked() = 0;
virtual void RequestReresolutionLocked() {}
virtual void ResetBackoffLocked() {}
void Orphan() override {
ShutdownLocked();
Unref();
}
protected:
Resolver();
virtual void ShutdownLocked() = 0;
};
}
#endif