2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file dbus_message_in.cpp
18 * @author Marcin Niesluchowski (m.niesluchow@samsung.com)
20 * @brief DBus incoming message wrapper class source file
23 #include <dbus_message_in.h>
25 #include <dpl/test/test_runner.h>
30 MessageIn::MessageIn(DBusMessage *message, bool ref)
33 RUNNER_ASSERT(m_message != nullptr);
35 dbus_message_ref(m_message);
38 MessageIn::MessageIn(MessageIn &&other)
39 : m_message(other.m_message)
41 other.m_message = nullptr;
44 MessageIn::~MessageIn()
46 if (m_message != nullptr)
47 dbus_message_unref(m_message);
50 int MessageIn::getType()
52 return dbus_message_get_type(m_message);
55 bool MessageIn::isMethodCall(const std::string &interface, const std::string &method)
57 dbus_bool_t ret = dbus_message_is_method_call(m_message,
63 bool MessageIn::isSignal(const std::string &interface, const std::string &signalName)
65 dbus_bool_t ret = dbus_message_is_signal(m_message,
71 bool MessageIn::isError(const std::string &errorName)
73 dbus_bool_t ret = dbus_message_is_error(m_message,
78 MessageIn::Iterator MessageIn::iterInit()
80 return Iterator(this->m_message);
83 MessageIn::Iterator::Iterator(DBusMessage* message)
85 dbus_message_iter_init(message, &m_iterator);
88 MessageIn::Iterator::Iterator(DBusMessageIter *iteratorOver)
90 dbus_message_iter_recurse(iteratorOver, &m_iterator);
93 bool MessageIn::Iterator::next()
95 return dbus_message_iter_next(&m_iterator) != FALSE;
98 void MessageIn::Iterator::expectNext()
100 RUNNER_ASSERT_MSG(next(), "No next argument in message");
103 int MessageIn::Iterator::getArgType()
105 return dbus_message_iter_get_arg_type(&m_iterator);
108 void MessageIn::Iterator::expectArgType(int argType)
110 int argTypeActual = getArgType();
111 RUNNER_ASSERT_MSG(argTypeActual == argType, "Wrong argument type in message"
112 << " Actual: " << argTypeActual
113 << " Expected: " << argType);
116 void MessageIn::Iterator::expectArgTypeValid()
118 RUNNER_ASSERT_MSG(getArgType() != DBUS_TYPE_INVALID, "Invalid argument type in message");
121 char MessageIn::Iterator::getArgChar()
123 return getArg<char>();
126 bool MessageIn::Iterator::getArgBool()
129 dbus_message_iter_get_basic(&m_iterator, &value);
130 return value != FALSE;
133 int16_t MessageIn::Iterator::getArgInt16()
135 return getArg<int16_t>();
138 uint16_t MessageIn::Iterator::getArgUint16()
140 return getArg<uint16_t>();
143 int32_t MessageIn::Iterator::getArgInt32()
145 return getArg<int32_t>();
148 uint32_t MessageIn::Iterator::getArgUint32()
150 return getArg<uint32_t>();
153 int64_t MessageIn::Iterator::getArgInt64()
155 return getArg<int64_t>();
158 uint64_t MessageIn::Iterator::getArgUint64()
160 return getArg<uint64_t>();
163 double MessageIn::Iterator::getArgDouble()
165 return getArg<double>();
168 std::string MessageIn::Iterator::getArgString()
171 dbus_message_iter_get_basic(&m_iterator, &value);
172 return std::string(value);
175 MessageIn::Iterator MessageIn::Iterator::recurse()
177 return Iterator(&(this->m_iterator));