connect_flags.hpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Copyright Takatoshi Kondo 2015
  2. //
  3. // Distributed under the Boost Software License, Version 1.0.
  4. // (See accompanying file LICENSE_1_0.txt or copy at
  5. // http://www.boost.org/LICENSE_1_0.txt)
  6. #if !defined(MQTT_CONNECT_FLAGS_HPP)
  7. #define MQTT_CONNECT_FLAGS_HPP
  8. #include <cstdint>
  9. #include <mqtt/namespace.hpp>
  10. #include <mqtt/publish.hpp>
  11. namespace MQTT_NS {
  12. namespace connect_flags {
  13. constexpr char const clean_session = 0b00000010;
  14. constexpr char const clean_start = 0b00000010;
  15. constexpr char const will_flag = 0b00000100;
  16. constexpr char const will_retain = 0b00100000;
  17. constexpr char const password_flag = 0b01000000;
  18. constexpr char const user_name_flag = static_cast<char>(0b10000000u);
  19. constexpr bool has_clean_session(char v) {
  20. return (v & clean_session) != 0;
  21. }
  22. constexpr bool has_clean_start(char v) {
  23. return (v & clean_start) != 0;
  24. }
  25. constexpr bool has_will_flag(char v) {
  26. return (v & will_flag) != 0;
  27. }
  28. constexpr retain has_will_retain(char v) {
  29. return ((v & will_retain) != 0)
  30. ? retain::yes
  31. : retain::no;
  32. }
  33. constexpr bool has_password_flag(char v) {
  34. return (v & password_flag) != 0;
  35. }
  36. constexpr bool has_user_name_flag(char v) {
  37. return (v & user_name_flag) != 0;
  38. }
  39. constexpr void set_will_qos(char& v, qos qos_value) {
  40. v |= static_cast<char>(static_cast<std::uint8_t>(qos_value) << 3);
  41. }
  42. constexpr qos will_qos(char v) {
  43. return static_cast<qos>((v & 0b00011000) >> 3);
  44. }
  45. } // namespace connect_flags
  46. } // namespace MQTT_NS
  47. #endif // MQTT_CONNECT_FLAGS_HPP