147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/*
247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Copyright 2013 The WebRTC Project Authors. All rights reserved.
347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *
447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Use of this source code is governed by a BSD-style license
547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  that can be found in the LICENSE file in the root of the source
647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  tree. An additional intellectual property rights grant can be found
747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  in the file PATENTS.  All contributing project authors may
847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */
1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifndef WEBRTC_BASE_ASYNCRESOLVERINTERFACE_H_
1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define WEBRTC_BASE_ASYNCRESOLVERINTERFACE_H_
1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/sigslot.h"
1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/socketaddress.h"
1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc {
1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// This interface defines the methods to resolve the address asynchronously.
2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass AsyncResolverInterface {
2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public:
2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  AsyncResolverInterface() {}
2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual ~AsyncResolverInterface() {}
2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Start address resolve process.
2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual void Start(const SocketAddress& addr) = 0;
2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Returns top most resolved address of |family|
2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual bool GetResolvedAddress(int family, SocketAddress* addr) const = 0;
2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Returns error from resolver.
3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual int GetError() const = 0;
3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Delete the resolver.
3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual void Destroy(bool wait) = 0;
3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Returns top most resolved IPv4 address if address is resolved successfully.
3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // Otherwise returns address set in SetAddress.
3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  SocketAddress address() const {
3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    SocketAddress addr;
3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    GetResolvedAddress(AF_INET, &addr);
3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    return addr;
3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  }
4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  // This signal is fired when address resolve process is completed.
4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  sigslot::signal1<AsyncResolverInterface*> SignalDone;
4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org};
4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}  // namespace rtc
4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
48