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