blob: d39400c2f8545ebafe38989e32d7a1174ae46b9c [file] [log] [blame]
henrike@webrtc.org47be73b2014-05-13 18:00:26 +00001/*
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_