Message.h 1010 B

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