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