Home | History | Annotate | Download | only in dns
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef NET_DNS_ADDRESS_SORTER_H_
      6 #define NET_DNS_ADDRESS_SORTER_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/callback.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "net/base/net_export.h"
     12 
     13 namespace net {
     14 
     15 class AddressList;
     16 
     17 // Sorts AddressList according to RFC3484, by likelihood of successful
     18 // connection. Depending on the platform, the sort could be performed
     19 // asynchronously by the OS, or synchronously by local implementation.
     20 // AddressSorter does not necessarily preserve port numbers on the sorted list.
     21 class NET_EXPORT AddressSorter {
     22  public:
     23   typedef base::Callback<void(bool success,
     24                               const AddressList& list)> CallbackType;
     25 
     26   virtual ~AddressSorter() {}
     27 
     28   // Sorts |list|, which must include at least one IPv6 address.
     29   // Calls |callback| upon completion. Could complete synchronously. Could
     30   // complete after this AddressSorter is destroyed.
     31   virtual void Sort(const AddressList& list,
     32                     const CallbackType& callback) const = 0;
     33 
     34   // Creates platform-dependent AddressSorter.
     35   static scoped_ptr<AddressSorter> CreateAddressSorter();
     36 
     37  protected:
     38   AddressSorter() {}
     39 
     40  private:
     41   DISALLOW_COPY_AND_ASSIGN(AddressSorter);
     42 };
     43 
     44 }  // namespace net
     45 
     46 #endif  // NET_DNS_ADDRESS_SORTER_H_
     47