Message.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2022, the SerenityOS developers.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/Error.h>
  9. #include <AK/NonnullRefPtrVector.h>
  10. #include <AK/RefCounted.h>
  11. #include <AK/RefPtr.h>
  12. #include <unistd.h>
  13. namespace IPC {
  14. class AutoCloseFileDescriptor : public RefCounted<AutoCloseFileDescriptor> {
  15. public:
  16. AutoCloseFileDescriptor(int fd)
  17. : m_fd(fd)
  18. {
  19. }
  20. ~AutoCloseFileDescriptor()
  21. {
  22. if (m_fd != -1)
  23. close(m_fd);
  24. }
  25. int value() const { return m_fd; }
  26. private:
  27. int m_fd;
  28. };
  29. struct MessageBuffer {
  30. Vector<u8, 1024> data;
  31. NonnullRefPtrVector<AutoCloseFileDescriptor, 1> fds;
  32. };
  33. enum class ErrorCode : u32 {
  34. PeerDisconnected
  35. };
  36. template<typename Value>
  37. using IPCErrorOr = ErrorOr<Value, ErrorCode>;
  38. class Message {
  39. public:
  40. virtual ~Message() = default;
  41. virtual u32 endpoint_magic() const = 0;
  42. virtual int message_id() const = 0;
  43. virtual char const* message_name() const = 0;
  44. virtual bool valid() const = 0;
  45. virtual MessageBuffer encode() const = 0;
  46. protected:
  47. Message() = default;
  48. };
  49. }