147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/*
247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org *  Copyright 2008 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_NETHELPERS_H_
1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define WEBRTC_BASE_NETHELPERS_H_
1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#if defined(WEBRTC_POSIX)
1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <netdb.h>
1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <stddef.h>
1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#elif WEBRTC_WIN
1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <winsock2.h>  // NOLINT
1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif
2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <list>
2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/asyncresolverinterface.h"
2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/signalthread.h"
2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/sigslot.h"
2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/socketaddress.h"
2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc {
2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass AsyncResolverTest;
3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// AsyncResolver will perform async DNS resolution, signaling the result on
3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// the SignalDone from AsyncResolverInterface when the operation completes.
3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass AsyncResolver : public SignalThread, public AsyncResolverInterface {
3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public:
3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  AsyncResolver();
3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual ~AsyncResolver() {}
3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual void Start(const SocketAddress& addr);
4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual bool GetResolvedAddress(int family, SocketAddress* addr) const;
4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual int GetError() const { return error_; }
4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual void Destroy(bool wait) { SignalThread::Destroy(wait); }
4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  const std::vector<IPAddress>& addresses() const { return addresses_; }
4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  void set_error(int error) { error_ = error; }
4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org protected:
4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual void DoWork();
4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  virtual void OnWorkDone();
5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private:
5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  SocketAddress addr_;
5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  std::vector<IPAddress> addresses_;
5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org  int error_;
5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org};
5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// rtc namespaced wrappers for inet_ntop and inet_pton so we can avoid
5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// the windows-native versions of these.
5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgconst char* inet_ntop(int af, const void *src, char* dst, socklen_t size);
6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgint inet_pton(int af, const char* src, void *dst);
6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgbool HasIPv6Enabled();
6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}  // namespace rtc
6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif  // WEBRTC_BASE_NETHELPERS_H_
66