network_consumer_registration.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include "platform.h"
  2. namespace sunrise::client::hooks::network {
  3. std::atomic<sunrise::client::network::HttpConsumer> g_httpConsumer{};
  4. std::atomic<sunrise::client::network::BapConsumer> g_bapConsumer{};
  5. } // namespace sunrise::client::hooks::network
  6. namespace sunrise::client::network {
  7. /** Registers the single in-process HTTP consumer. */
  8. bool register_http_consumer(HttpConsumer consumer) noexcept {
  9. if (consumer == nullptr) {
  10. return false;
  11. }
  12. HttpConsumer expected = nullptr;
  13. return hooks::network::g_httpConsumer.compare_exchange_strong(
  14. expected, consumer, std::memory_order_release, std::memory_order_relaxed);
  15. }
  16. /** @param consumer Consumer removed only when it owns the registration slot. */
  17. void unregister_http_consumer(HttpConsumer consumer) noexcept {
  18. HttpConsumer expected = consumer;
  19. (void)hooks::network::g_httpConsumer.compare_exchange_strong(
  20. expected, nullptr, std::memory_order_release, std::memory_order_relaxed);
  21. }
  22. /** Registers the single in-process BAP consumer. */
  23. bool register_bap_consumer(BapConsumer consumer) noexcept {
  24. if (consumer == nullptr) {
  25. return false;
  26. }
  27. BapConsumer expected = nullptr;
  28. return hooks::network::g_bapConsumer.compare_exchange_strong(
  29. expected, consumer, std::memory_order_release, std::memory_order_relaxed);
  30. }
  31. /** @param consumer Consumer removed only when it owns the registration slot. */
  32. void unregister_bap_consumer(BapConsumer consumer) noexcept {
  33. BapConsumer expected = consumer;
  34. (void)hooks::network::g_bapConsumer.compare_exchange_strong(
  35. expected, nullptr, std::memory_order_release, std::memory_order_relaxed);
  36. }
  37. } // namespace sunrise::client::network