158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_API_MDNS_DNS_SD_DELEGATE_H_
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_API_MDNS_DNS_SD_DELEGATE_H_
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <string>
958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <vector>
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace extensions {
1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)struct DnsSdService {
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string service_name;
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string service_host_port;
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::string ip_address;
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  std::vector<std::string> service_data;
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  DnsSdService();
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual ~DnsSdService();
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  bool operator==(const DnsSdService& other) const {
2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return service_name == other.service_name &&
2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)           service_host_port == other.service_host_port &&
2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)           ip_address == other.ip_address &&
2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)           service_data == other.service_data;
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  bool operator!=(const DnsSdService& other) const {
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return !(*this == other);
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Delegate that is notified when a watched service is added, updated or
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// removed.
3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class DnsSdDelegate {
3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public:
3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void ServiceChanged(const std::string& service_type,
3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              bool added,
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              const DnsSdService& service) = 0;
4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual void ServiceRemoved(const std::string& service_type,
4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                              const std::string& service_name) = 0;
438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual void ServicesFlushed(const std::string& service_type) = 0;
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace extensions
4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_API_MDNS_DNS_SD_DELEGATE_H_
49