SNode.C
Loading...
Searching...
No Matches
Subscribe.cpp
Go to the documentation of this file.
1/*
2 * SNode.C - a slim toolkit for network communication
3 * Copyright (C) Volker Christian <me@vchrist.at>
4 * 2020, 2021, 2022, 2023, 2024, 2025
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published
8 * by the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#include "iot/mqtt-fast/packets/Subscribe.h"
21
22#ifndef DOXYGEN_SHOULD_SKIP_THIS
23
24#include <string>
25
26#endif // DOXYGEN_SHOULD_SKIP_THIS
27
28namespace iot::mqtt_fast::packets {
29
30 Subscribe::Subscribe(uint16_t packetIdentifier, const std::list<Topic>& topics)
32 , packetIdentifier(packetIdentifier)
33 , topics(topics) {
34 // V-Header
36
37 // Payload
38 for (const iot::mqtt_fast::Topic& topic : this->topics) {
39 putString(topic.getName());
40 putInt8(topic.getRequestedQoS());
41 }
42 }
43
44 Subscribe::Subscribe(iot::mqtt_fast::ControlPacketFactory& controlPacketFactory)
45 : iot::mqtt_fast::ControlPacket(controlPacketFactory) {
46 // V-Header
48
49 // Payload
50 for (std::string name = getString(); !name.empty(); name = getString()) {
51 const uint8_t requestedQoS = getInt8();
52 topics.emplace_back(name, requestedQoS);
53 }
54
55 if (!isError()) {
56 error = topics.empty();
57 }
58 }
59
60 uint16_t Subscribe::getPacketIdentifier() const {
61 return packetIdentifier;
62 }
63
65 return topics;
66 }
67
68} // namespace iot::mqtt_fast::packets
ControlPacket(iot::mqtt_fast::ControlPacketFactory &controlPacketFactory)
void putInt16(uint16_t value)
ControlPacket(uint8_t type, uint8_t reserved=0)
const std::list< iot::mqtt_fast::Topic > & getTopics() const
Definition Subscribe.cpp:64
Subscribe(uint16_t packetIdentifier, const std::list< iot::mqtt_fast::Topic > &topics)
Definition Subscribe.cpp:30
Subscribe(iot::mqtt_fast::ControlPacketFactory &controlPacketFactory)
Definition Subscribe.cpp:44
#define MQTT_SUBSCRIBE
Definition Subscribe.h:37