blob: f1bb1e017aa90822b3b73c68bd66d18f777c1293 [file] [log] [blame]
/*
* Copyright 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "avb_messages.h"
#include <stdio.h>
#include <string.h>
namespace avb {
uint32_t RollbackIndexRequest::GetSerializedSize() const {
return sizeof(value_) + sizeof(slot_);
}
uint32_t RollbackIndexRequest::Serialize(uint8_t* payload,
const uint8_t* end) const {
if (payload + GetSerializedSize() > end)
return 0;
memcpy(payload, &value_, sizeof(value_));
payload += sizeof(value_);
memcpy(payload, &slot_, sizeof(slot_));
payload += sizeof(slot_);
return GetSerializedSize();
}
int RollbackIndexRequest::Deserialize(const uint8_t* payload,
const uint8_t* end) {
if (payload + GetSerializedSize() != end)
return ERR_NOT_VALID;
memcpy(&value_, payload, sizeof(value_));
payload += sizeof(value_);
memcpy(&slot_, payload, sizeof(slot_));
payload += sizeof(slot_);
return NO_ERROR;
}
uint32_t RollbackIndexResponse::GetSerializedSize() const {
return sizeof(value_);
}
uint32_t RollbackIndexResponse::Serialize(uint8_t* payload,
const uint8_t* end) const {
if (payload + GetSerializedSize() > end)
return 0;
memcpy(payload, &value_, sizeof(value_));
payload += sizeof(value_);
return GetSerializedSize();
}
int RollbackIndexResponse::Deserialize(const uint8_t* payload,
const uint8_t* end) {
if (payload + GetSerializedSize() != end)
return ERR_NOT_VALID;
memcpy(&value_, payload, sizeof(value_));
payload += sizeof(value_);
return NO_ERROR;
}
uint32_t GetVersionResponse::GetSerializedSize() const {
return sizeof(version_);
}
uint32_t GetVersionResponse::Serialize(uint8_t* payload,
const uint8_t* end) const {
if (payload + GetSerializedSize() > end)
return 0;
memcpy(payload, &version_, sizeof(version_));
payload += sizeof(version_);
return GetSerializedSize();
}
int GetVersionResponse::Deserialize(const uint8_t* payload,
const uint8_t* end) {
if (payload + GetSerializedSize() != end)
return ERR_NOT_VALID;
memcpy(&version_, payload, sizeof(version_));
payload += sizeof(version_);
return NO_ERROR;
}
uint32_t PermanentAttributesMessage::GetSerializedSize() const {
return attributes_size_;
}
uint32_t PermanentAttributesMessage::Serialize(uint8_t* payload,
const uint8_t* end) const {
if (static_cast<uint32_t>(end - payload) != attributes_size_)
return 0;
memcpy(payload, attributes_.get(), attributes_size_);
return attributes_size_;
}
int PermanentAttributesMessage::Deserialize(const uint8_t* payload,
const uint8_t* end) {
if (end < payload)
return ERR_NOT_VALID;
attributes_size_ = end - payload;
attributes_.reset(new uint8_t[attributes_size_]);
if (!attributes_.get())
return ERR_NO_MEMORY;
memcpy(attributes_.get(), payload, attributes_size_);
return NO_ERROR;
}
uint32_t LockStateMessage::GetSerializedSize() const {
return sizeof(lock_state_);
}
uint32_t LockStateMessage::Serialize(uint8_t* payload,
const uint8_t* end) const {
if (payload + GetSerializedSize() > end)
return 0;
memcpy(payload, &lock_state_, sizeof(lock_state_));
payload += sizeof(lock_state_);
return GetSerializedSize();
}
int LockStateMessage::Deserialize(const uint8_t* payload, const uint8_t* end) {
if (payload + GetSerializedSize() != end)
return ERR_NOT_VALID;
memcpy(&lock_state_, payload, sizeof(lock_state_));
payload += sizeof(lock_state_);
return NO_ERROR;
}
}; // namespace avb