1 // Copyright (C) 2014-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
2 // This Source Code Form is subject to the terms of the Mozilla Public
3 // License, v. 2.0. If a copy of the MPL was not distributed with this
4 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 
6 #include "../include/message_impl.hpp"
7 #include "../include/remote_subscription_ack.hpp"
8 #include "../../routing/include/remote_subscription.hpp"
9 
10 namespace vsomeip_v3 {
11 namespace sd {
12 
remote_subscription_ack(const boost::asio::ip::address & _address)13 remote_subscription_ack::remote_subscription_ack(const boost::asio::ip::address &_address)
14     : is_complete_(false),
15       is_done_(false),
16       target_address_(_address) {
17     messages_.push_back(std::make_shared<message_impl>());
18 }
19 
20 bool
is_complete() const21 remote_subscription_ack::is_complete() const {
22     return is_complete_;
23 }
24 
25 void
complete()26 remote_subscription_ack::complete() {
27     is_complete_ = true;
28 }
29 
30 bool
is_done() const31 remote_subscription_ack::is_done() const {
32     return is_done_;
33 }
34 
35 void
done()36 remote_subscription_ack::done() {
37     is_done_ = true;
38 }
39 
40 std::vector<std::shared_ptr<message_impl> >
get_messages() const41 remote_subscription_ack::get_messages() const {
42     return messages_;
43 }
44 
get_current_message() const45 std::shared_ptr<message_impl> remote_subscription_ack::get_current_message() const {
46     return messages_.back();
47 }
48 
add_message()49 std::shared_ptr<message_impl> remote_subscription_ack::add_message() {
50     messages_.emplace_back(std::make_shared<message_impl>());
51     return messages_.back();
52 }
53 
54 boost::asio::ip::address
get_target_address() const55 remote_subscription_ack::get_target_address() const {
56     return target_address_;
57 }
58 
59 bool
is_pending() const60 remote_subscription_ack::is_pending() const {
61     for (const auto& its_subscription : subscriptions_) {
62         if (its_subscription->is_pending()
63                 && its_subscription->get_answers() != 0) {
64             return true;
65         }
66     }
67     return false;
68 }
69 
70 std::set<std::shared_ptr<remote_subscription> >
get_subscriptions() const71 remote_subscription_ack::get_subscriptions() const {
72     return subscriptions_;
73 }
74 
75 void
add_subscription(const std::shared_ptr<remote_subscription> & _subscription)76 remote_subscription_ack::add_subscription(
77         const std::shared_ptr<remote_subscription> &_subscription) {
78     subscriptions_.insert(_subscription);
79 }
80 
81 bool
has_subscription() const82 remote_subscription_ack::has_subscription() const {
83     return (0 < subscriptions_.size());
84 }
85 
get_lock()86 std::unique_lock<std::recursive_mutex> remote_subscription_ack::get_lock() {
87     return std::unique_lock<std::recursive_mutex>(mutex_);
88 }
89 
90 } // namespace sd
91 } // namespace vsomeip_v3
92