// Copyright (c) 2019 The Chromium 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 QUICHE_QUIC_PLATFORM_IMPL_QUIC_SYSCALL_WRAPPER_H_
#define QUICHE_QUIC_PLATFORM_IMPL_QUIC_SYSCALL_WRAPPER_H_

#include <sys/socket.h>
#include <sys/types.h>

#include "quic/platform/api/quic_export.h"

struct mmsghdr;
namespace quic {

// QuicSyscallWrapper is a pass-through proxy to the real syscalls.
class QUIC_EXPORT_PRIVATE QuicSyscallWrapper {
 public:
  virtual ~QuicSyscallWrapper() = default;

  virtual ssize_t Sendmsg(int sockfd, const msghdr* msg, int flags);

  virtual int Sendmmsg(int sockfd,
                       mmsghdr* msgvec,
                       unsigned int vlen,
                       int flags);
};

// A global instance of QuicSyscallWrapper, used by some socket util functions.
QuicSyscallWrapper* GetGlobalSyscallWrapper();

// Change the global QuicSyscallWrapper to |wrapper|, for testing.
void SetGlobalSyscallWrapper(QuicSyscallWrapper* wrapper);

// ScopedGlobalSyscallWrapperOverride changes the global QuicSyscallWrapper
// during its lifetime, for testing.
class QUIC_EXPORT_PRIVATE ScopedGlobalSyscallWrapperOverride {
 public:
  explicit ScopedGlobalSyscallWrapperOverride(
      QuicSyscallWrapper* wrapper_in_scope);
  ~ScopedGlobalSyscallWrapperOverride();

 private:
  QuicSyscallWrapper* original_wrapper_;
};

}  // namespace quic

#endif  // QUICHE_QUIC_PLATFORM_IMPL_QUIC_SYSCALL_WRAPPER_H_
