Home | History | Annotate | Download | only in base
      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 
     28 namespace rtc {
     29 
     30 class AsyncResolverTest;
     31 
     32 // AsyncResolver will perform async DNS resolution, signaling the result on
     33 // the SignalDone from AsyncResolverInterface when the operation completes.
     34 class AsyncResolver : public SignalThread, public AsyncResolverInterface {
     35  public:
     36   AsyncResolver();
     37   ~AsyncResolver() override;
     38 
     39   void Start(const SocketAddress& addr) override;
     40   bool GetResolvedAddress(int family, SocketAddress* addr) const override;
     41   int GetError() const override;
     42   void Destroy(bool wait) override;
     43 
     44   const std::vector<IPAddress>& addresses() const { return addresses_; }
     45   void set_error(int error) { error_ = error; }
     46 
     47  protected:
     48   void DoWork() override;
     49   void OnWorkDone() override;
     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.
     59 const char* inet_ntop(int af, const void *src, char* dst, socklen_t size);
     60 int inet_pton(int af, const char* src, void *dst);
     61 
     62 bool HasIPv6Enabled();
     63 }  // namespace rtc
     64 
     65 #endif  // WEBRTC_BASE_NETHELPERS_H_
     66