Luis Amell / IBMIoTF-2

Dependencies:   MQTT

Revision:
18:ce12e2072cbb
Parent:
5:ea9f483e0294
Child:
22:d9576c025cd7
--- a/MQTTNetwork.h	Tue Sep 17 23:40:07 2019 +0000
+++ b/MQTTNetwork.h	Sun Oct 20 23:21:52 2019 -0400
@@ -17,6 +17,9 @@
 #ifndef MQTTNetwork_H
 #define MQTTNetwork_H
 
+//mbed
+#include "mbed.h"
+
 // Network related header files
 #include "NetworkInterface.h"
 #include "EthernetInterface.h"
@@ -32,16 +35,16 @@
 //Include certificates header
 #include "Certificates.h"
 
+extern Serial pc;
+
 namespace IoTF {
 
      //Class to represent Network layer
      class MQTTNetwork {
          private:
-             //Pointer member for ethernet interface
-             NetworkInterface* network;
-
+             
              //Pointer member to represent socket
-             TCPSocket* socket;
+             TCPSocket socket;
 
              //Variable to stored server port
              int serverPort;
@@ -53,14 +56,18 @@
              mbedtls_ssl_context* _ssl;
              mbedtls_ssl_config* _ssl_conf;
          public:
-             //Default constructor to initialize network, mbedTLS structures
+             //Pointer member for ethernet interface
+             NetworkInterface *network;
+
+            //Default constructor to initialize network, mbedTLS structures
              MQTTNetwork(): serverPort(1883){
                  //Instantiate new ethernet interface
                  network = new EthernetInterface();
                  //Connect to ethernet interface
                  network->connect();
                  //Create socket with created ethernet interface
-                 socket = new TCPSocket(network);
+                 //socket = new TCPSocket(network);
+                 //TCPSocket*  socket;
 
                  //Instantiate mbedTLS structures
                  _entropy = new mbedtls_entropy_context();
@@ -77,11 +84,11 @@
                  mbedtls_ssl_config_init(_ssl_conf);
              }
 
-             //Getter method to return underlying EthernetInterface
-             NetworkInterface* getEth()
-             {
-                 return network;
-             }
+            //  //Getter method to return underlying EthernetInterface
+            //  NetworkInterface* getEth()
+            //  {
+            //      return network;
+            //  }
 
              //Destructor to release the resources
              ~MQTTNetwork() {
@@ -93,7 +100,7 @@
                  mbedtls_ssl_config_free(_ssl_conf);
 
                  //Free the allocated memory for socket and network pointers
-                 delete socket;
+                 //delete socket;
                  delete network;
 
                  //Free the allocated memory for mbedTLS structures
@@ -110,21 +117,24 @@
              int connect(const char*host, int port){
                 int rc = -1;
 
+                socket.open(network);
                 serverPort = port;
                 if(port == 1883)
                      //Establish unsecured socket connection
-                     rc = socket->connect(host, port);
+                     
+                     rc = socket.connect(host, port);
                 else{
                         //Establish secure socket connection using SSL/TLS
                         //Perform mbedTLS initialization
                         if((rc = initializeTLS(host)) == 0){
-                           if((rc = socket->connect(host, port))==0){
-                             printf("Socket connection to %s:%d successful...\r\n",host,port);
+                           //if((rc = socket->connect(host, port))==0){
+                               if((rc = socket.connect(host, port))==0){
+                             pc.printf("Socket connection to %s:%d successful...\r\n",host,port);
                              //Perform SSL handshake
                              if ((rc = mbedtls_ssl_handshake(_ssl)) < 0) {
                                      if (rc != MBEDTLS_ERR_SSL_WANT_READ &&
                                              rc != MBEDTLS_ERR_SSL_WANT_WRITE) {
-                                     printf("mbedtls_ssl_handshake failed - 0x%x\r\n", -rc);
+                                     pc.printf("mbedtls_ssl_handshake failed - 0x%x\r\n", -rc);
                                      }
                                     goto exit;
                              }
@@ -144,14 +154,14 @@
                      if ((rc = mbedtls_ctr_drbg_seed(_ctr_drbg, mbedtls_entropy_func, _entropy,
                                        (const unsigned char *) tlsClientName,
                                        sizeof (tlsClientName))) != 0) {
-                         printf("mbedtls_crt_drbg_init failed - 0x%x\r\n", -rc);
+                         pc.printf("mbedtls_crt_drbg_init failed - 0x%x\r\n", -rc);
                          goto exit;
                      }
 
                      //Parse certificates into mbedTLS structure
                      if ((rc = mbedtls_x509_crt_parse(_cacert, (const unsigned char *) serverCert,
                                         sizeof(serverCert))) != 0) {
-                         printf("mbedtls_x509_crt_parse for serverCert failed - 0x%x\r\n", -rc);
+                         pc.printf("mbedtls_x509_crt_parse for serverCert failed - 0x%x\r\n", -rc);
                          goto exit;
                      }
 
@@ -160,7 +170,7 @@
                                      MBEDTLS_SSL_IS_CLIENT,
                                      MBEDTLS_SSL_TRANSPORT_STREAM,
                                      MBEDTLS_SSL_PRESET_DEFAULT)) != 0) {
-                         printf("mbedtls_ssl_config_defaults failed - 0x%x\r\n", -rc);
+                         pc.printf("mbedtls_ssl_config_defaults failed - 0x%x\r\n", -rc);
                          goto exit;
                      }
 
@@ -174,7 +184,7 @@
 
                      //Perform mbedTLS ssl setup
                      if ((rc = mbedtls_ssl_setup(_ssl, _ssl_conf)) != 0) {
-                         printf("mbedtls_ssl_setup failed - 0x%x\r\n", -rc);
+                         pc.printf("mbedtls_ssl_setup failed - 0x%x\r\n", -rc);
                          goto exit;
                      }
 
@@ -182,7 +192,7 @@
                      mbedtls_ssl_set_hostname(_ssl, hostName);
 
                      //Set buffer I/O methods for SSL connection
-                     mbedtls_ssl_set_bio(_ssl, static_cast<void *>(socket),
+                     mbedtls_ssl_set_bio(_ssl, static_cast<void *>(&socket),
                                                 tlsWrite, tlsRead, NULL );
 
                exit:
@@ -208,7 +218,7 @@
                  int rc = 0;
 
                  if(serverPort == 1883)
-                     rc = socket->recv(buffer,len);
+                     rc = socket.recv(buffer,len);
                  else
                      rc = mbedtls_ssl_read(_ssl, (unsigned char *) buffer, len);
 
@@ -220,7 +230,7 @@
                  int rc = 0;
 
                  if(serverPort == 1883)
-                     rc = socket->send(buffer,len);
+                     rc = socket.send(buffer,len);
                  else
                      rc = mbedtls_ssl_write(_ssl, (const unsigned char *) buffer, len);
 
@@ -229,7 +239,7 @@
 
              //Method to close socket connection
              void disconnect(){
-                 socket->close();
+                 socket.close();
              }
 
      };