1/* 2 * Copyright 2008 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11#ifndef WEBRTC_BASE_NETHELPERS_H_ 12#define WEBRTC_BASE_NETHELPERS_H_ 13 14#if defined(WEBRTC_POSIX) 15#include <netdb.h> 16#include <stddef.h> 17#elif WEBRTC_WIN 18#include <winsock2.h> // NOLINT 19#endif 20 21#include <list> 22 23#include "webrtc/base/asyncresolverinterface.h" 24#include "webrtc/base/signalthread.h" 25#include "webrtc/base/sigslot.h" 26#include "webrtc/base/socketaddress.h" 27 28namespace rtc { 29 30class AsyncResolverTest; 31 32// AsyncResolver will perform async DNS resolution, signaling the result on 33// the SignalDone from AsyncResolverInterface when the operation completes. 34class AsyncResolver : public SignalThread, public AsyncResolverInterface { 35 public: 36 AsyncResolver(); 37 virtual ~AsyncResolver() {} 38 39 virtual void Start(const SocketAddress& addr); 40 virtual bool GetResolvedAddress(int family, SocketAddress* addr) const; 41 virtual int GetError() const { return error_; } 42 virtual void Destroy(bool wait) { SignalThread::Destroy(wait); } 43 44 const std::vector<IPAddress>& addresses() const { return addresses_; } 45 void set_error(int error) { error_ = error; } 46 47 protected: 48 virtual void DoWork(); 49 virtual void OnWorkDone(); 50 51 private: 52 SocketAddress addr_; 53 std::vector<IPAddress> addresses_; 54 int error_; 55}; 56 57// rtc namespaced wrappers for inet_ntop and inet_pton so we can avoid 58// the windows-native versions of these. 59const char* inet_ntop(int af, const void *src, char* dst, socklen_t size); 60int inet_pton(int af, const char* src, void *dst); 61 62bool HasIPv6Enabled(); 63} // namespace rtc 64 65#endif // WEBRTC_BASE_NETHELPERS_H_ 66