summaryrefslogtreecommitdiff
path: root/implementation/message/src/deserializer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'implementation/message/src/deserializer.cpp')
-rw-r--r--implementation/message/src/deserializer.cpp29
1 files changed, 19 insertions, 10 deletions
diff --git a/implementation/message/src/deserializer.cpp b/implementation/message/src/deserializer.cpp
index 0e33faa..cff4596 100644
--- a/implementation/message/src/deserializer.cpp
+++ b/implementation/message/src/deserializer.cpp
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
+// Copyright (C) 2014-2021 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
@@ -164,17 +164,18 @@ bool deserializer::look_ahead(std::size_t _index, uint32_t &_value) const {
return true;
}
-message_impl * deserializer::deserialize_message() {
- message_impl* deserialized_message = new message_impl;
- if (0 != deserialized_message) {
- if (false == deserialized_message->deserialize(this)) {
- VSOMEIP_ERROR << "SOME/IP message deserialization failed!";
- delete deserialized_message;
- deserialized_message = nullptr;
- }
+message_impl * deserializer::deserialize_message() try {
+ std::unique_ptr<message_impl> deserialized_message{new message_impl};
+ if (false == deserialized_message->deserialize(this)) {
+ VSOMEIP_ERROR << "SOME/IP message deserialization failed!";
+ deserialized_message = nullptr;
}
- return deserialized_message;
+ return deserialized_message.release();
+}
+catch (const std::exception& e) {
+ VSOMEIP_ERROR << "SOME/IP message deserialization failed with exception: " << e.what();
+ return nullptr;
}
void deserializer::set_data(const byte_t *_data, std::size_t _length) {
@@ -189,6 +190,14 @@ void deserializer::set_data(const byte_t *_data, std::size_t _length) {
}
}
+void
+deserializer::set_data(const std::vector<byte_t> &_data) {
+
+ data_ = std::move(_data);
+ position_ = data_.begin();
+ remaining_ = data_.size();
+}
+
void deserializer::append_data(const byte_t *_data, std::size_t _length) {
std::vector<byte_t>::difference_type offset = (position_ - data_.begin());
data_.insert(data_.end(), _data, _data + _length);