// Copyright 2016 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ARC_NETWORKD_MULTICAST_SOCKET_H_
#define ARC_NETWORKD_MULTICAST_SOCKET_H_

#include <netinet/ip.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>

#include <memory>
#include <string>

#include <base/files/scoped_file.h>
#include <base/macros.h>
#include <base/message_loop/message_loop.h>

using MessageLoopForIO = base::MessageLoopForIO;

namespace arc_networkd {

// Wrapper around various syscalls used for multicast socket communications.
class MulticastSocket {
 public:
  MulticastSocket() {}
  virtual ~MulticastSocket();

  bool Bind(const std::string& ifname,
            const struct in_addr& mcast_addr,
            unsigned short port,
            MessageLoopForIO::Watcher* parent);
  bool SendTo(const void* data, size_t len, const struct sockaddr_in& addr);

  static ssize_t RecvFromFd(int fd,
                            void* data,
                            size_t len,
                            struct sockaddr_in* addr);

  int fd() const { return fd_.get(); }
  time_t last_used() const { return last_used_; }
  const struct in_addr interface_ip() const { return interface_ip_; }

  struct sockaddr_in int_addr;

 protected:
  base::ScopedFD fd_;
  time_t last_used_;
  struct in_addr interface_ip_;
  MessageLoopForIO::FileDescriptorWatcher watcher_;
};

}  // namespace arc_networkd

#endif  // ARC_NETWORKD_MULTICAST_SOCKET_H_
