Library for MQTT

Committer:
pavleradojkovic
Date:
Mon Jun 20 16:24:43 2022 +0000
Revision:
0:ba7e439238ab
Inital commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pavleradojkovic 0:ba7e439238ab 1 /*
pavleradojkovic 0:ba7e439238ab 2 * Copyright (c) 2019, ARM Limited, All Rights Reserved
pavleradojkovic 0:ba7e439238ab 3 * SPDX-License-Identifier: Apache-2.0
pavleradojkovic 0:ba7e439238ab 4 *
pavleradojkovic 0:ba7e439238ab 5 * Licensed under the Apache License, Version 2.0 (the "License"); you may
pavleradojkovic 0:ba7e439238ab 6 * not use this file except in compliance with the License.
pavleradojkovic 0:ba7e439238ab 7 * You may obtain a copy of the License at
pavleradojkovic 0:ba7e439238ab 8 *
pavleradojkovic 0:ba7e439238ab 9 * http://www.apache.org/licenses/LICENSE-2.0
pavleradojkovic 0:ba7e439238ab 10 *
pavleradojkovic 0:ba7e439238ab 11 * Unless required by applicable law or agreed to in writing, software
pavleradojkovic 0:ba7e439238ab 12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
pavleradojkovic 0:ba7e439238ab 13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
pavleradojkovic 0:ba7e439238ab 14 * See the License for the specific language governing permissions and
pavleradojkovic 0:ba7e439238ab 15 * limitations under the License.
pavleradojkovic 0:ba7e439238ab 16 */
pavleradojkovic 0:ba7e439238ab 17
pavleradojkovic 0:ba7e439238ab 18 #ifndef _MQTTNETWORK_H_
pavleradojkovic 0:ba7e439238ab 19 #define _MQTTNETWORK_H_
pavleradojkovic 0:ba7e439238ab 20
pavleradojkovic 0:ba7e439238ab 21 #include "NetworkInterface.h"
pavleradojkovic 0:ba7e439238ab 22 #include "TCPSocket.h"
pavleradojkovic 0:ba7e439238ab 23 #include "MQTTNetworkUtil.h"
pavleradojkovic 0:ba7e439238ab 24
pavleradojkovic 0:ba7e439238ab 25 class MQTTNetwork {
pavleradojkovic 0:ba7e439238ab 26 public:
pavleradojkovic 0:ba7e439238ab 27 MQTTNetwork(NetworkInterface *aNetwork) : network(aNetwork)
pavleradojkovic 0:ba7e439238ab 28 {
pavleradojkovic 0:ba7e439238ab 29 socket = new TCPSocket();
pavleradojkovic 0:ba7e439238ab 30 }
pavleradojkovic 0:ba7e439238ab 31
pavleradojkovic 0:ba7e439238ab 32 ~MQTTNetwork()
pavleradojkovic 0:ba7e439238ab 33 {
pavleradojkovic 0:ba7e439238ab 34 delete socket;
pavleradojkovic 0:ba7e439238ab 35 }
pavleradojkovic 0:ba7e439238ab 36
pavleradojkovic 0:ba7e439238ab 37 int read(unsigned char *buffer, int len, int timeout)
pavleradojkovic 0:ba7e439238ab 38 {
pavleradojkovic 0:ba7e439238ab 39 return accumulate_mqtt_read(socket, buffer, len, timeout);
pavleradojkovic 0:ba7e439238ab 40 }
pavleradojkovic 0:ba7e439238ab 41
pavleradojkovic 0:ba7e439238ab 42 int write(unsigned char *buffer, int len, int timeout)
pavleradojkovic 0:ba7e439238ab 43 {
pavleradojkovic 0:ba7e439238ab 44 return mqtt_write(socket, buffer, len, timeout);
pavleradojkovic 0:ba7e439238ab 45 }
pavleradojkovic 0:ba7e439238ab 46
pavleradojkovic 0:ba7e439238ab 47 int connect(const char *hostname, int port)
pavleradojkovic 0:ba7e439238ab 48 {
pavleradojkovic 0:ba7e439238ab 49 int ret = NSAPI_ERROR_OK;
pavleradojkovic 0:ba7e439238ab 50 if ((ret = socket->open(network)) != NSAPI_ERROR_OK) {
pavleradojkovic 0:ba7e439238ab 51 return ret;
pavleradojkovic 0:ba7e439238ab 52 }
pavleradojkovic 0:ba7e439238ab 53 SocketAddress addr;
pavleradojkovic 0:ba7e439238ab 54 if (network->gethostbyname(hostname, &addr) != NSAPI_ERROR_OK) {
pavleradojkovic 0:ba7e439238ab 55 return NSAPI_ERROR_DNS_FAILURE;
pavleradojkovic 0:ba7e439238ab 56 }
pavleradojkovic 0:ba7e439238ab 57 addr.set_port(port);
pavleradojkovic 0:ba7e439238ab 58 return socket->connect(addr);
pavleradojkovic 0:ba7e439238ab 59 }
pavleradojkovic 0:ba7e439238ab 60
pavleradojkovic 0:ba7e439238ab 61 int disconnect()
pavleradojkovic 0:ba7e439238ab 62 {
pavleradojkovic 0:ba7e439238ab 63 return socket->close();
pavleradojkovic 0:ba7e439238ab 64 }
pavleradojkovic 0:ba7e439238ab 65
pavleradojkovic 0:ba7e439238ab 66 private:
pavleradojkovic 0:ba7e439238ab 67 NetworkInterface *network;
pavleradojkovic 0:ba7e439238ab 68 TCPSocket *socket;
pavleradojkovic 0:ba7e439238ab 69 };
pavleradojkovic 0:ba7e439238ab 70
pavleradojkovic 0:ba7e439238ab 71 #endif // _MQTTNETWORK_H_