Message.h 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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/Function.h>
  8. #include <AK/RefCounted.h>
  9. #include <AK/RefPtr.h>
  10. #include <AK/Vector.h>
  11. #include <unistd.h>
  12. namespace IPC {
  13. class AutoCloseFileDescriptor : public RefCounted<AutoCloseFileDescriptor> {
  14. public:
  15. AutoCloseFileDescriptor(int fd)
  16. : m_fd(fd)
  17. {
  18. }
  19. ~AutoCloseFileDescriptor()
  20. {
  21. if (m_fd != -1)
  22. close(m_fd);
  23. }
  24. int value() const { return m_fd; }
  25. private:
  26. int m_fd;
  27. };
  28. struct MessageBuffer {
  29. Vector<u8, 1024> data;
  30. Vector<RefPtr<AutoCloseFileDescriptor>> fds;
  31. };
  32. enum class ErrorCode : u32 {
  33. PeerDisconnected
  34. };
  35. class Message {
  36. public:
  37. virtual ~Message();
  38. virtual u32 endpoint_magic() const = 0;
  39. virtual int message_id() const = 0;
  40. virtual const char* message_name() const = 0;
  41. virtual bool valid() const = 0;
  42. virtual MessageBuffer encode() const = 0;
  43. protected:
  44. Message();
  45. };
  46. }