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