| 65 | } |
| 66 | |
| 67 | void subscribe_command::deserialize(const std::vector<byte_t>& _buffer, error_e& _error) { |
| 68 | |
| 69 | size_t its_size(COMMAND_HEADER_SIZE + sizeof(service_) + sizeof(instance_) + sizeof(eventgroup_) + sizeof(major_) + sizeof(event_) |
| 70 | + sizeof(pending_id_)); |
| 71 | |
| 72 | if (its_size > _buffer.size()) { |
| 73 | |
| 74 | _error = error_e::ERROR_NOT_ENOUGH_BYTES; |
| 75 | return; |
| 76 | } |
| 77 | |
| 78 | // deserialize header |
| 79 | command::deserialize(_buffer, _error); |
| 80 | if (_error != error_e::ERROR_OK) |
| 81 | return; |
| 82 | |
| 83 | // deserialize subscription |
| 84 | subscribe_command_base::deserialize(_buffer, _error); |
| 85 | if (_error != error_e::ERROR_OK) |
| 86 | return; |
| 87 | |
| 88 | // deserialize filter |
| 89 | size_t its_offset(its_size); |
| 90 | if (_buffer.size() - its_offset >= sizeof(bool) + sizeof(bool) + sizeof(int64_t)) { |
| 91 | |
| 92 | filter_ = std::make_shared<debounce_filter_impl_t>(); |
| 93 | std::memcpy(&filter_->on_change_, &_buffer[its_offset], sizeof(filter_->on_change_)); |
| 94 | its_offset += sizeof(filter_->on_change_); |
| 95 | std::memcpy(&filter_->on_change_resets_interval_, &_buffer[its_offset], sizeof(filter_->on_change_resets_interval_)); |
| 96 | its_offset += sizeof(filter_->on_change_resets_interval_); |
| 97 | std::memcpy(&filter_->interval_, &_buffer[its_offset], sizeof(filter_->interval_)); |
| 98 | its_offset += sizeof(filter_->interval_); |
| 99 | |
| 100 | while (_buffer.size() - its_offset >= sizeof(size_t) + sizeof(byte_t)) { |
| 101 | |
| 102 | size_t its_key; |
| 103 | byte_t its_value; |
| 104 | |
| 105 | std::memcpy(&its_key, &_buffer[its_offset], sizeof(its_key)); |
| 106 | if (filter_->ignore_.contains(its_key)) { |
| 107 | |
| 108 | _error = error_e::ERROR_MALFORMED; |
| 109 | return; |
| 110 | } |
| 111 | |
| 112 | its_offset += sizeof(its_key); |
| 113 | its_value = _buffer[its_offset]; |
| 114 | its_offset += sizeof(its_value); |
| 115 | |
| 116 | filter_->ignore_.emplace(std::make_pair(its_key, its_value)); |
| 117 | } |
| 118 | |
| 119 | std::memcpy(&filter_->send_current_value_after_, &_buffer[its_offset], sizeof(filter_->send_current_value_after_)); |
| 120 | its_offset += sizeof(filter_->send_current_value_after_); |
| 121 | } |
| 122 | } |
| 123 | |
| 124 | } // namespace protocol |
nothing calls this directly
no test coverage detected