MQTT and MQTTS with wolfSSL TSL library

Dependencies:   FP MQTTPacket

Dependents:   YoPlegma

Fork of MQTT by MQTT

MQTT is light weight publish/subscribe based messaging protocol for M2M, IoT. This library was forked from MQTT https://developer.mbed.org/teams/mqtt for adding MQTTS security layer on the protocol. TLS(SSL) part of the library is by wolfSSL.https://developer.mbed.org/users/wolfSSL/code/wolfSSL/

"connect" method was extended for TLS. Rest of API's stay compatible with MQTT.

connect methode

 int connect(char* hostname, int port,  const char *certName = NULL, int timeout=1000)

The 3rd argument certName can be following values.

  • NULL: connecting with MQTT
  • pointer to certificate file: connecting with MQTTS. PEM or DER for server verification.
  • pointer to NULL string: connecting with MQTTS without server verification. This option is for prototyping only, not recommended in security perspective.

日本語:https://developer.mbed.org/users/wolfSSL/code/MQTTS/wiki/MQTTSライブラリ

Revision:
4:4ef00243708e
Parent:
3:dbff6b768d28
Child:
5:389ccac5a50c
--- a/MQTTClient.h	Mon Mar 31 15:48:45 2014 +0000
+++ b/MQTTClient.h	Mon Apr 07 12:24:36 2014 +0000
@@ -23,25 +23,16 @@
 #if !defined(MQTTCLIENT_H)
 #define MQTTCLIENT_H
 
-#include <vector>
-
 #include "mbed.h"
 #include "FP.h"
 #include "MQTTPacket.h"
-#include "include_me.h"
 
 namespace MQTT
 {
 
-class Client;
 
 enum QoS { QOS0, QOS1, QOS2 };
 
-class Result
-{
-    /* success or failure result data */
-    Client* client;
-};
 
 struct Message
 {
@@ -53,38 +44,51 @@
     size_t payloadlen;
 };
 
+template<class Network, class Thread> class Client;
+
+class Result
+{
+    /* success or failure result data */
+    Client<class Network, class Thread>* client;
+};
+
   
-class Client
+template<class Network, class Thread> class Client
 {
     
 public:    
-
-    static FP<void, Result*> None;   // default argument of no result handler to indicate call should be blocking
-    
-    Client(IPStack* ipstack, const int buffer_size = 100); 
+   
+    Client(Network* network, const int buffer_size = 100, const int command_timeout = 30);  
        
-    int connect(MQTTPacket_connectData* options = 0, FP<void, Result*> resultHandler = None);
+    int connect(MQTTPacket_connectData* options = 0, FP<void, Result*> *resultHandler = 0);
         
-    int publish(char* topic, Message* message, FP<void, Result*> resultHandler = None);
+    int publish(char* topic, Message* message, FP<void, Result*> *resultHandler = 0);
     
-    int subscribe(char* topicFilter, int qos, FP<void, Message*> messageHandler, FP<void, Result*> resultHandler = None);
+    int subscribe(char* topicFilter, int qos, FP<void, Message*> messageHandler, FP<void, Result*> *resultHandler = 0);
     
-    int unsubscribe(char* topicFilter, FP<void, Result*> resultHandler = None);
+    int unsubscribe(char* topicFilter, FP<void, Result*> *resultHandler = 0);
     
-    int disconnect(int timeout, FP<void, Result*> resultHandler = None);
+    int disconnect(int timeout, FP<void, Result*> *resultHandler = 0);
     
 private:
 
-    void cycle();
+    int cycle();
 
     int decodePacket(int* value, int timeout);
-    int readPacket(char* buf, int buflen, int timeout = -1);
+    int readPacket(int timeout = -1);
     int sendPacket(int length);
     
-    IPStack* ipstack;
+    Thread* thread;
+    Network* ipstack;
+    
     char* buf;
     int buflen;
     
+    char* readbuf;
+    int readbuflen;
+    
+    int command_timeout;
+    
 };
 
 }