]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - iotdev/aws-iot-device-sdk-embedded-c.git/commitdiff
Paho name changed to Eclipse Paho v1.0.1
authorPani <bhadrinp@amazon.com>
Thu, 22 Oct 2015 00:01:46 +0000 (17:01 -0700)
committerPani <bhadrinp@amazon.com>
Thu, 22 Oct 2015 00:01:46 +0000 (17:01 -0700)
Renamed the Makefiles in the samples directory
Device Shadow - Delete functionality macro fixed
subscribe_publish_sample.c file updated

This commit closes #1, closes #3

13 files changed:
CHANGELOG.md
PortingGuide.md
README.md
aws_iot_src/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl/network_openssl_wrapper.c
aws_iot_src/shadow/aws_iot_shadow.c
aws_iot_src/utils/aws_iot_version.h
sample_apps/shadow_sample/ShadowLinuxMQTTMbedtlsMakefile.mk [new file with mode: 0755]
sample_apps/shadow_sample/ShadowLinuxMQTTOpensslMakefile.mk [new file with mode: 0755]
sample_apps/shadow_sample_console_echo/EchoLinuxMQTTMbedtlsMakefile.mk [new file with mode: 0755]
sample_apps/shadow_sample_console_echo/EchoLinuxMQTTOpensslMakefile.mk [new file with mode: 0755]
sample_apps/subscribe_publish_sample/LinuxMQTTMbedtlsMakefile.mk [new file with mode: 0755]
sample_apps/subscribe_publish_sample/LinuxMQTTOpensslMakefile.mk [new file with mode: 0755]
sample_apps/subscribe_publish_sample/subscribe_publish_sample.c

index c4992d6a3055e3bad167884ebebf1594b526d015..dc124528ecf5b2b30d9bbee0f29f9900d6afaf24 100755 (executable)
@@ -1,4 +1,12 @@
-## 1.0.0 (October 8, 2015)
+## [1.0.1](https://github.com/aws/aws-iot-device-sdk-embedded-C/releases/tag/v1.0.1) (October 21,2015)
+
+Bugfixes/Improvements:
+  - Paho name changed to Eclipse Paho
+  - Renamed the Makefiles in the samples directory 
+  - Device Shadow - Delete functionality macro fixed
+  - `subscribe_publish_sample` updated
+
+## [1.0.0](https://github.com/aws/aws-iot-device-sdk-embedded-C/releases/tag/v1.0.0) (October 8, 2015)
 
 Features:
   - Release to github
index a2d9e43f7e55485a380fa7602d47fd8fe59a2152..f7bbb860480c10775579ad1b8090d4baf72b3d9f 100755 (executable)
@@ -4,7 +4,12 @@
 The scope of this document is to provide instructions to modify the provided source files and functions in of this SDK to run in a variety of embedded C–based environments (e.g. real-time OS, embedded Linux) and to be adjusted to use a specific TLS implementation as available with specific hardware platforms.
 
 ##Contents of the SDK
-The SDK ported for linux could be downloaded from this link The C-code files of this SDK are delivered via the following directory structure (see comment behind folder name for an explanation of its content). 
+
+The SDK ported for linux can be downloaded from the below links.
+ * [OpenSSL](https://s3.amazonaws.com/aws-iot-device-sdk-embedded-c/linux_mqtt_openssl-1.0.1.tar)
+ * [mbedTLS from ARM](https://s3.amazonaws.com/aws-iot-device-sdk-embedded-c/linux_mqtt_mbedtls-1.0.1.tar)
+
+The C-code files of this SDK are delivered via the following directory structure (see comment behind folder name for an explanation of its content).  
 
 Directory structure Current SDK Directory Layout (OpenSSL)
 
@@ -30,7 +35,7 @@ All makefiles in this SDK were configured using the documented folder structure
 
 `aws_mqtt_embedded_client_lib` : The source code for the Embedded C MQTT client. This client is a modified version of the [Eclipse Paho](http://www.eclipse.org/paho/clients/c/embedded/) Embedded C client. The modifications include improved keep alive handling (callback on disconnect), a fix for unsubscribe functionality, buffer protection against too large MQTT messages and additional callback context to allow for a better layered architecture of the AWS IoT SDK.
 
-`certs` : This directory is initially empty and will need to contain the private key, the client certificate and the root CA. The client certificate and private key can be downloaded from the AWS IoT console or be created using the AWS CLI commands. The root CA can be downloaded from here.
+`certs` : This directory is initially empty and will need to contain the private key, the client certificate and the root CA. The client certificate and private key can be downloaded from the AWS IoT console or be created using the AWS CLI commands. The root CA can be downloaded from [Symantec](https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem).
 
 `docs` : SDK API and file documentation.
 
@@ -66,9 +71,9 @@ left_ms - query time in milliseconds left on the timer.
 
 ###Network Functions
 
-In order to for the MQTT client stack to be able to communicate via the TCP/IP network protocol stack using a mutually authenticated TLS connection, the following API calls need to be implemented for your platform. 
+In order for the MQTT client stack to be able to communicate via the TCP/IP network protocol stack using a mutually authenticated TLS connection, the following API calls need to be implemented for your platform. 
 
-For additional details about API parameters refer to the API documentation.
+For additional details about API parameters refer to the [API documentation](http://aws-iot-device-sdk-embedded-c-docs.s3-website-us-east-1.amazonaws.com/index.html).
 
 ```
 int iot_tls_init(Network *pNetwork);
index 48e8b803112de664f00ecd2f7fb339de737fdc55..6b2c90a208a2c276219a8db73f2579753cad1155 100755 (executable)
--- a/README.md
+++ b/README.md
@@ -29,8 +29,8 @@ Ensure you understand the AWS IoT platform and create the necessary certificates
 
 In order to quickly get started with the AWS IoT platform, we have ported the SDK for POSIX type Operating Systems like Ubuntu, OS X and RHEL. The porting of the SDK happens at the TLS layer, and for the MQTT protocol. The SDK is configured for two TLS libraries and can be built out of the box with *GCC* using *make utility*. The tarballs can be downloaded from the below links.
 
-* [OpenSSL](https://s3.amazonaws.com/aws-iot-device-sdk-embedded-c/linux_mqtt_openssl-1.0.0.tar)
-* [mbedTLS from ARM](https://s3.amazonaws.com/aws-iot-device-sdk-embedded-c/linux_mqtt_mbedtls-1.0.0.tar)
+* [OpenSSL](https://s3.amazonaws.com/aws-iot-device-sdk-embedded-c/linux_mqtt_openssl-1.0.1.tar)
+* [mbedTLS from ARM](https://s3.amazonaws.com/aws-iot-device-sdk-embedded-c/linux_mqtt_mbedtls-1.0.1.tar)
 
 ##Installation
 This section explains the individual steps to retrieve the necessary files and be able to build your first application using the AWS IoT device SDK for embedded C.
@@ -53,7 +53,7 @@ Steps:
        * Explore the example.  It connects to AWS IoT platform using MQTT and demonstrates few actions that can be performed by the SDK
        * Build the example using make.  (''make'')
        * Place device identity cert and private key in locations referenced in the example (certs/).  Alternatively, you can run the sample application with the ''-c'' flag to point to a specific certificate directory.
-       * Download certificate authority CA file from this [link](https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem) and place in location referenced in the example (certs/). Ensure the names of the cert files are the same as in the `aws_iot_config.h` file
+       * Download certificate authority CA file from [Symantec](https://www.symantec.com/content/en/us/enterprise/verisign/roots/VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem) and place in location referenced in the example (certs/). Ensure the names of the cert files are the same as in the `aws_iot_config.h` file
        * Run sample application (./subscribe_publish_sample or ./shadow_sample).  The sample will print status messages to stdout.
        * More information on the examples could be found in the sample source file
        
@@ -95,4 +95,4 @@ ShadowUpdateStatusCallback,
 pCallbackContext, 
 TIMEOUT_4SEC, 
 persistenSubscription);
-```
+```
\ No newline at end of file
index e3b86c2ac44796bd54e2eeb826067b48959a2d7d..f95dc120052ccb4daa105d8d0a1bf53926d57078 100755 (executable)
 #include <openssl/x509_vfy.h>
 #include <sys/socket.h>
 #include <fcntl.h>
+#include <errno.h>
+#include <string.h>
 #include <sys/select.h>
 #include <arpa/inet.h>
 #include <netinet/in.h>
 #include <netdb.h>
 
 #include "aws_iot_error.h"
+#include "aws_iot_log.h"
 #include "network_interface.h"
 #include "openssl_hostname_validation.h"
 
@@ -57,6 +60,7 @@ int iot_tls_init(Network *pNetwork) {
        method = TLSv1_2_method();
 
        if ((pSSLContext = SSL_CTX_new(method)) == NULL) {
+               ERROR(" SSL INIT Failed - Unable to create SSL Context");
                ret_val = SSL_INIT_ERROR;
        }
 
@@ -103,14 +107,17 @@ int iot_tls_connect(Network *pNetwork, TLSConnectParams params) {
        }
 
        if (!SSL_CTX_load_verify_locations(pSSLContext, params.pRootCALocation, NULL)) {
+               ERROR(" Root CA Loading error");
                ret_val = SSL_CERT_ERROR;
        }
 
        if (!SSL_CTX_use_certificate_file(pSSLContext, params.pDeviceCertLocation, SSL_FILETYPE_PEM)) {
+               ERROR(" Device Certificate Loading error");
                ret_val = SSL_CERT_ERROR;
        }
 
        if(1 != SSL_CTX_use_PrivateKey_file(pSSLContext, params.pDevicePrivateKeyLocation, SSL_FILETYPE_PEM)){
+               ERROR(" Device Private Key Loading error");
                ret_val = SSL_CERT_ERROR;
        }
        if(params.ServerVerificationFlag){
@@ -125,23 +132,29 @@ int iot_tls_connect(Network *pNetwork, TLSConnectParams params) {
        pDestinationURL = params.pDestinationURL;
        ret_val = Connect_TCPSocket(server_TCPSocket, params.pDestinationURL, params.DestinationPort);
        if(NONE_ERROR != ret_val){
+               ERROR(" TCP Connection error");
                return ret_val;
        }
 
        SSL_set_fd(pSSLHandle, server_TCPSocket);
 
-       if(NONE_ERROR == ret_val){
+       if(ret_val == NONE_ERROR){
                ret_val = setSocketToNonBlocking(server_TCPSocket);
+               if(ret_val != NONE_ERROR){
+                       ERROR(" Unable to set the socket to Non-Blocking");
+               }
        }
 
        if(NONE_ERROR == ret_val){
                ret_val = ConnectOrTimeoutOrExitOnError(pSSLHandle, params.timeout_ms);
                if(X509_V_OK != SSL_get_verify_result(pSSLHandle)){
+                       ERROR(" Server Certificate Verification failed");
                        ret_val = SSL_CONNECT_ERROR;
                }
                else{
                        // ensure you have a valid certificate returned, otherwise no certificate exchange happened
                        if(NULL == SSL_get_peer_certificate(pSSLHandle)){
+                               ERROR(" No certificate exchange happened");
                                ret_val = SSL_CONNECT_ERROR;
                        }
                }
@@ -210,6 +223,7 @@ IoT_Error_t setSocketToNonBlocking( server_fd) {
 
        status = fcntl(server_TCPSocket, F_SETFL, flags | O_NONBLOCK);
        if (status < 0) {
+               ERROR("fcntl - %s", strerror(errno));
                ret_val = TCP_CONNECT_ERROR;
        }
 
@@ -247,8 +261,10 @@ IoT_Error_t ConnectOrTimeoutOrExitOnError(SSL *pSSL, int timeout_ms){
                        FD_SET(server_TCPSocket, &readFds);
                        select_retCode = select(server_TCPSocket + 1, (void *) &readFds, NULL, NULL, &timeout);
                        if (SELECT_TIMEOUT == select_retCode) {
+                               ERROR(" SSL Connect time out while waiting for read");
                                ret_val = SSL_CONNECT_TIMEOUT_ERROR;
                        } else if (SELECT_ERROR == select_retCode) {
+                               ERROR(" SSL Connect Select error for read %d", select_retCode);
                                ret_val = SSL_CONNECT_ERROR;
                        }
                }
@@ -258,8 +274,10 @@ IoT_Error_t ConnectOrTimeoutOrExitOnError(SSL *pSSL, int timeout_ms){
                        FD_SET(server_TCPSocket, &writeFds);
                        select_retCode = select(server_TCPSocket + 1, NULL, (void *) &writeFds, NULL, &timeout);
                        if (SELECT_TIMEOUT == select_retCode) {
+                               ERROR(" SSL Connect time out while waiting for write");
                                ret_val = SSL_CONNECT_TIMEOUT_ERROR;
                        } else if (SELECT_ERROR == select_retCode) {
+                               ERROR(" SSL Connect Select error for write %d", select_retCode);
                                ret_val = SSL_CONNECT_ERROR;
                        }
                }
index 08d4fcdf6a596e7e3eaab80ff7401b7b99c2c413..23b2c97a0ac4b7f29725d2f87f40be3ecb3c0565 100755 (executable)
@@ -143,7 +143,7 @@ IoT_Error_t aws_iot_shadow_delete(MQTTClient_t *pClient, const char *pThingName,
 
        char deleteRequestJsonBuf[MAX_SIZE_CLIENT_TOKEN_CLIENT_SEQUENCE];
        iot_shadow_delete_request_json(deleteRequestJsonBuf);
-       ret_val = iot_shadow_action(pClient, pThingName, SHADOW_GET, deleteRequestJsonBuf, callback, pContextData,
+       ret_val = iot_shadow_action(pClient, pThingName, SHADOW_DELETE, deleteRequestJsonBuf, callback, pContextData,
                        timeout_seconds, isPersistentSubscribe);
 
        return ret_val;
index 56d15431ec870d5a8b1ee4a5d40ae4e31ff11f39..78f3a1ba4bef7035aed788fa388b1e907f133e5b 100755 (executable)
@@ -39,7 +39,7 @@
 /**
  * @brief PATCH version when backwards-compatible bug fixes are made.
  */
-#define VERSION_PATCH 0
+#define VERSION_PATCH 1
 /**
  * @brief TAG is an (optional) tag appended to the version if a more descriptive verion is needed.
  */
diff --git a/sample_apps/shadow_sample/ShadowLinuxMQTTMbedtlsMakefile.mk b/sample_apps/shadow_sample/ShadowLinuxMQTTMbedtlsMakefile.mk
new file mode 100755 (executable)
index 0000000..6ba573d
--- /dev/null
@@ -0,0 +1,85 @@
+CC = gcc
+
+#remove @ for no make command prints
+DEBUG=@
+
+APP_DIR = .
+APP_INCLUDE_DIRS += -I $(APP_DIR)
+APP_NAME=shadow_sample
+APP_SRC_FILES=$(APP_NAME).c
+
+#IoT client directory
+IOT_CLIENT_DIR=../../aws_iot_src
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux
+IOT_INCLUDE_DIRS += -I $(PLATFORM_COMMON_DIR)
+IOT_INCLUDE_DIRS += -I $(PLATFORM_DIR)
+IOT_INCLUDE_DIRS += -I $(SHADOW_SRC_DIR)
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/utils
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/shadow
+
+PLATFORM_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/mbedtls
+PLATFORM_COMMON_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common
+SHADOW_SRC_DIR= $(IOT_CLIENT_DIR)/shadow
+
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/aws_iot_mqtt_embedded_client_wrapper.c
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/utils/jsmn.c
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/utils/aws_iot_json_utils.c
+IOT_SRC_FILES += $(shell find $(PLATFORM_DIR)/ -name '*.c')
+IOT_SRC_FILES += $(shell find $(SHADOW_SRC_DIR)/ -name '*.c')
+IOT_SRC_FILES += $(shell find $(PLATFORM_COMMON_DIR)/ -name '*.c')
+
+#MQTT Paho Embedded C client directory
+MQTT_DIR = ../../aws_mqtt_embedded_client_lib
+MQTT_C_DIR = $(MQTT_DIR)/MQTTClient-C/src
+MQTT_EMB_DIR = $(MQTT_DIR)/MQTTPacket/src
+
+MQTT_INCLUDE_DIR += -I $(MQTT_EMB_DIR)
+MQTT_INCLUDE_DIR += -I $(MQTT_C_DIR)
+
+MQTT_SRC_FILES += $(shell find $(MQTT_EMB_DIR)/ -name '*.c')
+MQTT_SRC_FILES += $(MQTT_C_DIR)/MQTTClient.c
+
+
+#TLS - mbedtls
+MBEDTLS_DIR=../../mbedtls_lib
+TLS_LIB_DIR = $(MBEDTLS_DIR)/library
+TLS_INCLUDE_DIR = -I $(MBEDTLS_DIR)/include
+EXTERNAL_LIBS += -L$(TLS_LIB_DIR)
+LD_FLAG += -Wl,-rpath,$(TLS_LIB_DIR)
+LD_FLAG += -ldl $(TLS_LIB_DIR)/libmbedtls.a $(TLS_LIB_DIR)/libmbedcrypto.a $(TLS_LIB_DIR)/libmbedx509.a
+
+
+#Aggregate all include and src directories
+INCLUDE_ALL_DIRS += $(IOT_INCLUDE_DIRS) 
+INCLUDE_ALL_DIRS += $(MQTT_INCLUDE_DIR) 
+INCLUDE_ALL_DIRS += $(TLS_INCLUDE_DIR)
+INCLUDE_ALL_DIRS += $(APP_INCLUDE_DIRS)
+SRC_FILES += $(MQTT_SRC_FILES)
+SRC_FILES += $(APP_SRC_FILES)
+SRC_FILES += $(IOT_SRC_FILES)
+
+# Logging level control
+LOG_FLAGS += -DIOT_DEBUG
+LOG_FLAGS += -DIOT_INFO
+LOG_FLAGS += -DIOT_WARN
+LOG_FLAGS += -DIOT_ERROR
+
+COMPILER_FLAGS += -g 
+COMPILER_FLAGS += $(LOG_FLAGS)
+
+MBED_TLS_MAKE_CMD = cd $(MBEDTLS_DIR) && make
+
+PRE_MAKE_CMD = $(MBED_TLS_MAKE_CMD)
+MAKE_CMD = $(CC) $(SRC_FILES) $(COMPILER_FLAGS) -o $(APP_NAME) $(LD_FLAG) $(EXTERNAL_LIBS) $(INCLUDE_ALL_DIRS)
+
+all:
+       $(PRE_MAKE_CMD)
+       $(DEBUG)$(MAKE_CMD)
+       $(POST_MAKE_CMD)
+
+clean:
+       rm -rf $(APP_DIR)/$(APP_NAME)
+       $(MBED_TLS_MAKE_CMD) clean
diff --git a/sample_apps/shadow_sample/ShadowLinuxMQTTOpensslMakefile.mk b/sample_apps/shadow_sample/ShadowLinuxMQTTOpensslMakefile.mk
new file mode 100755 (executable)
index 0000000..76c2a43
--- /dev/null
@@ -0,0 +1,80 @@
+CC = gcc
+
+#remove @ for no make command prints
+DEBUG=@
+
+APP_DIR = .
+APP_NAME=shadow_sample
+APP_INCLUDE_DIRS += -I $(APP_DIR)
+APP_SRC_FILES=$(APP_NAME).c
+
+#IoT client directory
+
+
+IOT_CLIENT_DIR=../../aws_iot_src
+
+PLATFORM_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl
+PLATFORM_COMMON_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common
+SHADOW_SRC_DIR= $(IOT_CLIENT_DIR)/shadow
+
+
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux
+IOT_INCLUDE_DIRS += -I $(PLATFORM_COMMON_DIR)
+IOT_INCLUDE_DIRS += -I $(PLATFORM_DIR)
+IOT_INCLUDE_DIRS += -I $(SHADOW_SRC_DIR)
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/utils
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/shadow
+
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/aws_iot_mqtt_embedded_client_wrapper.c
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/utils/jsmn.c
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/utils/aws_iot_json_utils.c
+IOT_SRC_FILES += $(shell find $(SHADOW_SRC_DIR)/ -name '*.c')
+IOT_SRC_FILES += $(shell find $(PLATFORM_DIR)/ -name '*.c')
+IOT_SRC_FILES += $(shell find $(PLATFORM_COMMON_DIR)/ -name '*.c')
+
+#MQTT Paho Embedded C client directory
+MQTT_DIR = ../../aws_mqtt_embedded_client_lib
+MQTT_C_DIR = $(MQTT_DIR)/MQTTClient-C/src
+MQTT_EMB_DIR = $(MQTT_DIR)/MQTTPacket/src
+
+MQTT_INCLUDE_DIR += -I $(MQTT_EMB_DIR)
+MQTT_INCLUDE_DIR += -I $(MQTT_C_DIR)
+
+MQTT_SRC_FILES += $(shell find $(MQTT_EMB_DIR)/ -name '*.c')
+MQTT_SRC_FILES += $(MQTT_C_DIR)/MQTTClient.c
+
+#TLS - openSSL
+TLS_LIB_DIR = /usr/lib/
+TLS_INCLUDE_DIR = -I /usr/include/openssl
+EXTERNAL_LIBS += -L$(TLS_LIB_DIR)
+LD_FLAG := -ldl -lssl -lcrypto
+LD_FLAG += -Wl,-rpath,$(TLS_LIB_DIR)
+
+#Aggregate all include and src directories
+INCLUDE_ALL_DIRS += $(IOT_INCLUDE_DIRS) 
+INCLUDE_ALL_DIRS += $(MQTT_INCLUDE_DIR) 
+INCLUDE_ALL_DIRS += $(TLS_INCLUDE_DIR)
+INCLUDE_ALL_DIRS += $(APP_INCLUDE_DIRS)
+SRC_FILES += $(MQTT_SRC_FILES)
+SRC_FILES += $(APP_SRC_FILES)
+SRC_FILES += $(IOT_SRC_FILES)
+
+# Logging level control
+LOG_FLAGS += -DIOT_DEBUG
+LOG_FLAGS += -DIOT_INFO
+LOG_FLAGS += -DIOT_WARN
+LOG_FLAGS += -DIOT_ERROR
+
+COMPILER_FLAGS += -g 
+COMPILER_FLAGS += $(LOG_FLAGS)
+
+MAKE_CMD = $(CC) $(SRC_FILES) $(COMPILER_FLAGS) -o $(APP_NAME) $(EXTERNAL_LIBS) $(LD_FLAG) $(INCLUDE_ALL_DIRS)
+
+all:
+       $(DEBUG)$(MAKE_CMD)
+       
+clean:
+       rm -rf $(APP_DIR)/$(APP_NAME)   
diff --git a/sample_apps/shadow_sample_console_echo/EchoLinuxMQTTMbedtlsMakefile.mk b/sample_apps/shadow_sample_console_echo/EchoLinuxMQTTMbedtlsMakefile.mk
new file mode 100755 (executable)
index 0000000..76b8f89
--- /dev/null
@@ -0,0 +1,85 @@
+CC = gcc
+
+#remove @ for no make command prints
+DEBUG=@
+
+APP_DIR = .
+APP_INCLUDE_DIRS += -I $(APP_DIR)
+APP_NAME=shadow_console_echo
+APP_SRC_FILES=$(APP_NAME).c
+
+#IoT client directory
+IOT_CLIENT_DIR=../../aws_iot_src
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux
+IOT_INCLUDE_DIRS += -I $(PLATFORM_COMMON_DIR)
+IOT_INCLUDE_DIRS += -I $(PLATFORM_DIR)
+IOT_INCLUDE_DIRS += -I $(SHADOW_SRC_DIR)
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/utils
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/shadow
+
+PLATFORM_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/mbedtls
+PLATFORM_COMMON_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common
+SHADOW_SRC_DIR= $(IOT_CLIENT_DIR)/shadow
+
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/aws_iot_mqtt_embedded_client_wrapper.c
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/utils/jsmn.c
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/utils/aws_iot_json_utils.c
+IOT_SRC_FILES += $(shell find $(PLATFORM_DIR)/ -name '*.c')
+IOT_SRC_FILES += $(shell find $(SHADOW_SRC_DIR)/ -name '*.c')
+IOT_SRC_FILES += $(shell find $(PLATFORM_COMMON_DIR)/ -name '*.c')
+
+#MQTT Paho Embedded C client directory
+MQTT_DIR = ../../aws_mqtt_embedded_client_lib
+MQTT_C_DIR = $(MQTT_DIR)/MQTTClient-C/src
+MQTT_EMB_DIR = $(MQTT_DIR)/MQTTPacket/src
+
+MQTT_INCLUDE_DIR += -I $(MQTT_EMB_DIR)
+MQTT_INCLUDE_DIR += -I $(MQTT_C_DIR)
+
+MQTT_SRC_FILES += $(shell find $(MQTT_EMB_DIR)/ -name '*.c')
+MQTT_SRC_FILES += $(MQTT_C_DIR)/MQTTClient.c
+
+
+#TLS - mbedtls
+MBEDTLS_DIR=../../mbedtls_lib
+TLS_LIB_DIR = $(MBEDTLS_DIR)/library
+TLS_INCLUDE_DIR = -I $(MBEDTLS_DIR)/include
+EXTERNAL_LIBS += -L$(TLS_LIB_DIR)
+LD_FLAG += -Wl,-rpath,$(TLS_LIB_DIR)
+LD_FLAG += -ldl $(TLS_LIB_DIR)/libmbedtls.a $(TLS_LIB_DIR)/libmbedcrypto.a $(TLS_LIB_DIR)/libmbedx509.a
+
+
+#Aggregate all include and src directories
+INCLUDE_ALL_DIRS += $(IOT_INCLUDE_DIRS) 
+INCLUDE_ALL_DIRS += $(MQTT_INCLUDE_DIR) 
+INCLUDE_ALL_DIRS += $(TLS_INCLUDE_DIR)
+INCLUDE_ALL_DIRS += $(APP_INCLUDE_DIRS)
+SRC_FILES += $(MQTT_SRC_FILES)
+SRC_FILES += $(APP_SRC_FILES)
+SRC_FILES += $(IOT_SRC_FILES)
+
+# Logging level control
+LOG_FLAGS += -DIOT_DEBUG
+LOG_FLAGS += -DIOT_INFO
+LOG_FLAGS += -DIOT_WARN
+LOG_FLAGS += -DIOT_ERROR
+
+COMPILER_FLAGS += -g 
+COMPILER_FLAGS += $(LOG_FLAGS)
+
+MBED_TLS_MAKE_CMD = cd $(MBEDTLS_DIR) && make
+
+PRE_MAKE_CMD = $(MBED_TLS_MAKE_CMD)
+MAKE_CMD = $(CC) $(SRC_FILES) $(COMPILER_FLAGS) -o $(APP_NAME) $(LD_FLAG) $(EXTERNAL_LIBS) $(INCLUDE_ALL_DIRS)
+
+all:
+       $(PRE_MAKE_CMD)
+       $(DEBUG)$(MAKE_CMD)
+       $(POST_MAKE_CMD)
+
+clean:
+       rm -rf $(APP_DIR)/$(APP_NAME)
+       $(MBED_TLS_MAKE_CMD) clean
diff --git a/sample_apps/shadow_sample_console_echo/EchoLinuxMQTTOpensslMakefile.mk b/sample_apps/shadow_sample_console_echo/EchoLinuxMQTTOpensslMakefile.mk
new file mode 100755 (executable)
index 0000000..574b0d2
--- /dev/null
@@ -0,0 +1,80 @@
+CC = gcc
+
+#remove @ for no make command prints
+DEBUG=@
+
+APP_DIR = .
+APP_NAME=shadow_console_echo
+APP_INCLUDE_DIRS += -I $(APP_DIR)
+APP_SRC_FILES=$(APP_NAME).c
+
+#IoT client directory
+
+
+IOT_CLIENT_DIR=../../aws_iot_src
+
+PLATFORM_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl
+PLATFORM_COMMON_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common
+SHADOW_SRC_DIR= $(IOT_CLIENT_DIR)/shadow
+
+
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux
+IOT_INCLUDE_DIRS += -I $(PLATFORM_COMMON_DIR)
+IOT_INCLUDE_DIRS += -I $(PLATFORM_DIR)
+IOT_INCLUDE_DIRS += -I $(SHADOW_SRC_DIR)
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/utils
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/shadow
+
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/aws_iot_mqtt_embedded_client_wrapper.c
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/utils/jsmn.c
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/utils/aws_iot_json_utils.c
+IOT_SRC_FILES += $(shell find $(SHADOW_SRC_DIR)/ -name '*.c')
+IOT_SRC_FILES += $(shell find $(PLATFORM_DIR)/ -name '*.c')
+IOT_SRC_FILES += $(shell find $(PLATFORM_COMMON_DIR)/ -name '*.c')
+
+#MQTT Paho Embedded C client directory
+MQTT_DIR = ../../aws_mqtt_embedded_client_lib
+MQTT_C_DIR = $(MQTT_DIR)/MQTTClient-C/src
+MQTT_EMB_DIR = $(MQTT_DIR)/MQTTPacket/src
+
+MQTT_INCLUDE_DIR += -I $(MQTT_EMB_DIR)
+MQTT_INCLUDE_DIR += -I $(MQTT_C_DIR)
+
+MQTT_SRC_FILES += $(shell find $(MQTT_EMB_DIR)/ -name '*.c')
+MQTT_SRC_FILES += $(MQTT_C_DIR)/MQTTClient.c
+
+#TLS - openSSL
+TLS_LIB_DIR = /usr/lib/
+TLS_INCLUDE_DIR = -I /usr/include/openssl
+EXTERNAL_LIBS += -L$(TLS_LIB_DIR)
+LD_FLAG := -ldl -lssl -lcrypto
+LD_FLAG += -Wl,-rpath,$(TLS_LIB_DIR)
+
+#Aggregate all include and src directories
+INCLUDE_ALL_DIRS += $(IOT_INCLUDE_DIRS) 
+INCLUDE_ALL_DIRS += $(MQTT_INCLUDE_DIR) 
+INCLUDE_ALL_DIRS += $(TLS_INCLUDE_DIR)
+INCLUDE_ALL_DIRS += $(APP_INCLUDE_DIRS)
+SRC_FILES += $(MQTT_SRC_FILES)
+SRC_FILES += $(APP_SRC_FILES)
+SRC_FILES += $(IOT_SRC_FILES)
+
+# Logging level control
+LOG_FLAGS += -DIOT_DEBUG
+LOG_FLAGS += -DIOT_INFO
+LOG_FLAGS += -DIOT_WARN
+LOG_FLAGS += -DIOT_ERROR
+
+COMPILER_FLAGS += -g 
+COMPILER_FLAGS += $(LOG_FLAGS)
+
+MAKE_CMD = $(CC) $(SRC_FILES) $(COMPILER_FLAGS) -o $(APP_NAME) $(EXTERNAL_LIBS) $(LD_FLAG) $(INCLUDE_ALL_DIRS)
+
+all:
+       $(DEBUG)$(MAKE_CMD)
+       
+clean:
+       rm -rf $(APP_DIR)/$(APP_NAME)   
diff --git a/sample_apps/subscribe_publish_sample/LinuxMQTTMbedtlsMakefile.mk b/sample_apps/subscribe_publish_sample/LinuxMQTTMbedtlsMakefile.mk
new file mode 100755 (executable)
index 0000000..c1cbbe8
--- /dev/null
@@ -0,0 +1,78 @@
+CC = gcc
+
+#remove @ for no make command prints
+DEBUG=@
+
+APP_DIR = .
+APP_INCLUDE_DIRS += -I $(APP_DIR)
+APP_NAME=subscribe_publish_sample
+APP_SRC_FILES=$(APP_NAME).c
+
+#IoT client directory
+IOT_CLIENT_DIR=../../aws_iot_src
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/mbedtls
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/utils
+
+PLATFORM_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/mbedtls
+PLATFORM_COMMON_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/aws_iot_mqtt_embedded_client_wrapper.c
+IOT_SRC_FILES += $(shell find $(PLATFORM_DIR)/ -name '*.c')
+IOT_SRC_FILES += $(shell find $(PLATFORM_COMMON_DIR)/ -name '*.c')
+
+#MQTT Paho Embedded C client directory
+MQTT_DIR = ../../aws_mqtt_embedded_client_lib
+MQTT_C_DIR = $(MQTT_DIR)/MQTTClient-C/src
+MQTT_EMB_DIR = $(MQTT_DIR)/MQTTPacket/src
+
+MQTT_INCLUDE_DIR += -I $(MQTT_EMB_DIR)
+MQTT_INCLUDE_DIR += -I $(MQTT_C_DIR)
+
+MQTT_SRC_FILES += $(shell find $(MQTT_EMB_DIR)/ -name '*.c')
+MQTT_SRC_FILES += $(MQTT_C_DIR)/MQTTClient.c
+
+
+#TLS - mbedtls
+MBEDTLS_DIR=../../mbedtls_lib
+TLS_LIB_DIR = $(MBEDTLS_DIR)/library
+TLS_INCLUDE_DIR = -I $(MBEDTLS_DIR)/include
+EXTERNAL_LIBS += -L$(TLS_LIB_DIR)
+LD_FLAG += -Wl,-rpath,$(TLS_LIB_DIR)
+LD_FLAG += -ldl $(TLS_LIB_DIR)/libmbedtls.a $(TLS_LIB_DIR)/libmbedcrypto.a $(TLS_LIB_DIR)/libmbedx509.a
+
+
+#Aggregate all include and src directories
+INCLUDE_ALL_DIRS += $(IOT_INCLUDE_DIRS) 
+INCLUDE_ALL_DIRS += $(MQTT_INCLUDE_DIR) 
+INCLUDE_ALL_DIRS += $(TLS_INCLUDE_DIR)
+INCLUDE_ALL_DIRS += $(APP_INCLUDE_DIRS)
+SRC_FILES += $(MQTT_SRC_FILES)
+SRC_FILES += $(APP_SRC_FILES)
+SRC_FILES += $(IOT_SRC_FILES)
+
+# Logging level control
+LOG_FLAGS += -DIOT_DEBUG
+LOG_FLAGS += -DIOT_INFO
+LOG_FLAGS += -DIOT_WARN
+LOG_FLAGS += -DIOT_ERROR
+
+COMPILER_FLAGS += -g
+COMPILER_FLAGS += $(LOG_FLAGS)
+
+MBED_TLS_MAKE_CMD = cd $(MBEDTLS_DIR) && make
+
+PRE_MAKE_CMD = $(MBED_TLS_MAKE_CMD)
+MAKE_CMD = $(CC) $(SRC_FILES) $(COMPILER_FLAGS) -o $(APP_NAME) $(LD_FLAG) $(EXTERNAL_LIBS) $(INCLUDE_ALL_DIRS)
+
+all:
+       $(PRE_MAKE_CMD)
+       $(DEBUG)$(MAKE_CMD)
+       $(POST_MAKE_CMD)
+
+clean:
+       rm -rf $(APP_DIR)/$(APP_NAME)
+       $(MBED_TLS_MAKE_CMD) clean
diff --git a/sample_apps/subscribe_publish_sample/LinuxMQTTOpensslMakefile.mk b/sample_apps/subscribe_publish_sample/LinuxMQTTOpensslMakefile.mk
new file mode 100755 (executable)
index 0000000..8f913d4
--- /dev/null
@@ -0,0 +1,73 @@
+CC = gcc
+
+#remove @ for no make command prints
+DEBUG=@
+
+APP_DIR = .
+APP_INCLUDE_DIRS += -I $(APP_DIR)
+APP_NAME=subscribe_publish_sample
+APP_SRC_FILES=$(APP_NAME).c
+
+#IoT client directory
+IOT_CLIENT_DIR=../../aws_iot_src
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl
+IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/utils
+
+PLATFORM_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl
+PLATFORM_COMMON_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common
+IOT_SRC_FILES += $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/aws_iot_mqtt_embedded_client_wrapper.c
+IOT_SRC_FILES += $(shell find $(PLATFORM_DIR)/ -name '*.c')
+IOT_SRC_FILES += $(shell find $(PLATFORM_COMMON_DIR)/ -name '*.c')
+
+#MQTT Paho Embedded C client directory
+MQTT_DIR = ../../aws_mqtt_embedded_client_lib
+MQTT_C_DIR = $(MQTT_DIR)/MQTTClient-C/src
+MQTT_EMB_DIR = $(MQTT_DIR)/MQTTPacket/src
+
+MQTT_INCLUDE_DIR += -I $(MQTT_EMB_DIR)
+MQTT_INCLUDE_DIR += -I $(MQTT_C_DIR)
+
+MQTT_SRC_FILES += $(shell find $(MQTT_EMB_DIR)/ -name '*.c')
+MQTT_SRC_FILES += $(MQTT_C_DIR)/MQTTClient.c
+
+
+#TLS - openSSL
+TLS_LIB_DIR = /usr/lib/
+TLS_INCLUDE_DIR = -I /usr/include/openssl
+EXTERNAL_LIBS += -L$(TLS_LIB_DIR)
+LD_FLAG := -ldl -lssl -lcrypto
+LD_FLAG += -Wl,-rpath,$(TLS_LIB_DIR)
+
+#Aggregate all include and src directories
+INCLUDE_ALL_DIRS += $(IOT_INCLUDE_DIRS) 
+INCLUDE_ALL_DIRS += $(MQTT_INCLUDE_DIR) 
+INCLUDE_ALL_DIRS += $(TLS_INCLUDE_DIR)
+INCLUDE_ALL_DIRS += $(APP_INCLUDE_DIRS)
+SRC_FILES += $(MQTT_SRC_FILES)
+SRC_FILES += $(APP_SRC_FILES)
+SRC_FILES += $(IOT_SRC_FILES)
+
+# Logging level control
+LOG_FLAGS += -DIOT_DEBUG
+LOG_FLAGS += -DIOT_INFO
+LOG_FLAGS += -DIOT_WARN
+LOG_FLAGS += -DIOT_ERROR
+
+
+COMPILER_FLAGS += -g
+COMPILER_FLAGS += $(LOG_FLAGS)
+
+MAKE_CMD = $(CC) $(SRC_FILES) $(COMPILER_FLAGS) -o $(APP_NAME) $(LD_FLAG) $(EXTERNAL_LIBS) $(INCLUDE_ALL_DIRS)
+
+all:
+       $(PRE_MAKE_CMD)
+       $(DEBUG)$(MAKE_CMD)
+       $(POST_MAKE_CMD)
+       
+clean:
+       rm -rf $(APP_DIR)/$(APP_NAME)   
index 1a5b3a091a50fb2cdd2ce2e243de276cadce3bfa..05beb1ec6c9b6b97f5a5a6046b30d30f8c9da713 100755 (executable)
@@ -183,11 +183,11 @@ int main(int argc, char** argv) {
        char cPayload[100];
        sprintf(cPayload, "%s : %d ", "hello from SDK", i);
        Msg.pPayload = (void *) cPayload;
-       Msg.PayloadLen = strlen(cPayload) + 1;
+
 
        MQTTPublishParams Params = MQTTPublishParamsDefault;
        Params.pTopic = "sdkTest/sub";
-       Params.MessageParams = Msg;
+
 
        if(publishCount != 0){
                infinitePublishFlag = false;
@@ -200,6 +200,8 @@ int main(int argc, char** argv) {
                INFO("-->sleep");
                sleep(1);
                sprintf(cPayload, "%s : %d ", "hello from SDK", i++);
+               Msg.PayloadLen = strlen(cPayload) + 1;
+               Params.MessageParams = Msg;
                rc = aws_iot_mqtt_publish(&Params);
                if(publishCount > 0){
                        publishCount--;