SNode.C
Loading...
Searching...
No Matches
Connect.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/*
21 * MIT License
22 *
23 * Permission is hereby granted, free of charge, to any person obtaining a copy
24 * of this software and associated documentation files (the "Software"), to deal
25 * in the Software without restriction, including without limitation the rights
26 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
27 * copies of the Software, and to permit persons to whom the Software is
28 * furnished to do so, subject to the following conditions:
29 *
30 * The above copyright notice and this permission notice shall be included in
31 * all copies or substantial portions of the Software.
32 *
33 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
37 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
39 * THE SOFTWARE.
40 */
41
42#include "iot/mqtt-fast/packets/Connect.h"
43
44#ifndef DOXYGEN_SHOULD_SKIP_THIS
45
46#endif // DOXYGEN_SHOULD_SKIP_THIS
47
48namespace iot::mqtt_fast::packets {
49
50 Connect::Connect(const std::string& clientId, const std::string& protocol, uint8_t version, uint8_t flags, uint16_t keepAlive)
52 , protocol(protocol)
53 , level(version)
54 , flags(flags)
55 , keepAlive(keepAlive)
56 , clientId(clientId) {
57 // V-Header
62
63 // Payload
65 }
66
67 Connect::Connect(iot::mqtt_fast::ControlPacketFactory& controlPacketFactory)
68 : iot::mqtt_fast::ControlPacket(controlPacketFactory) {
69 // V-Header
74
75 usernameFlag = (flags & 0x80) != 0;
76 passwordFlag = (flags & 0x40) != 0;
77 willRetain = (flags & 0x20) != 0;
78 willQoS = (flags & 0x18) >> 3;
79 willFlag = (flags & 0x04) != 0;
80 cleanSession = (flags & 0x02) != 0;
81 reserved = (flags & 0x01) != 0;
82
83 // Payload
84 if (!isError()) {
86 } else {
87 error = true;
88 }
89
90 if (!error && willFlag) {
93 }
94
95 if (!error && usernameFlag) {
97 }
98
99 if (!error && passwordFlag) {
101 }
102 }
103
104 std::string Connect::getProtocol() const {
105 return protocol;
106 }
107
108 uint8_t Connect::getLevel() const {
109 return level;
110 }
111
112 uint8_t Connect::getFlags() const {
113 return flags;
114 }
115
116 uint16_t Connect::getKeepAlive() const {
117 return keepAlive;
118 }
119
120 const std::string& Connect::getClientId() const {
121 return clientId;
122 }
123
124 bool Connect::getUsernameFlag() const {
125 return usernameFlag;
126 }
127
128 bool Connect::getPasswordFlag() const {
129 return passwordFlag;
130 }
131
132 bool Connect::getWillRetain() const {
133 return willRetain;
134 }
135
136 uint8_t Connect::getWillQoS() const {
137 return willQoS;
138 }
139
140 bool Connect::getWillFlag() const {
141 return willFlag;
142 }
143
144 bool Connect::getCleanSession() const {
145 return cleanSession;
146 }
147
148 const std::string& Connect::getWillTopic() const {
149 return willTopic;
150 }
151
152 const std::string& Connect::getWillMessage() const {
153 return willMessage;
154 }
155
156 const std::string& Connect::getUsername() const {
157 return username;
158 }
159
160 const std::string& Connect::getPassword() const {
161 return password;
162 }
163
164} // namespace iot::mqtt_fast::packets
ControlPacket(iot::mqtt_fast::ControlPacketFactory &controlPacketFactory)
void putInt16(uint16_t value)
void putString(const std::string &value)
ControlPacket(uint8_t type, uint8_t reserved=0)
const std::string & getWillTopic() const
Definition Connect.cpp:148
Connect(const std::string &clientId, const std::string &protocol="MQTT", uint8_t version=4, uint8_t flags=0, uint16_t keepAlive=0x003C)
Definition Connect.cpp:50
std::string getProtocol() const
Definition Connect.cpp:104
const std::string & getUsername() const
Definition Connect.cpp:156
const std::string & getWillMessage() const
Definition Connect.cpp:152
const std::string & getClientId() const
Definition Connect.cpp:120
const std::string & getPassword() const
Definition Connect.cpp:160
Connect(iot::mqtt_fast::ControlPacketFactory &controlPacketFactory)
Definition Connect.cpp:67
#define MQTT_CONNECT
Definition Connect.h:58