summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 8c43511)
raw | patch | inline | side by side (parent: 8c43511)
author | Pani <bhadrinp@amazon.com> | |
Thu, 22 Oct 2015 00:01:46 +0000 (17:01 -0700) | ||
committer | Pani <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
Device Shadow - Delete functionality macro fixed
subscribe_publish_sample.c file updated
This commit closes #1, closes #3
13 files changed:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c4992d6a3055e3bad167884ebebf1594b526d015..dc124528ecf5b2b30d9bbee0f29f9900d6afaf24 100755 (executable)
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
-## 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
diff --git a/PortingGuide.md b/PortingGuide.md
index a2d9e43f7e55485a380fa7602d47fd8fe59a2152..f7bbb860480c10775579ad1b8090d4baf72b3d9f 100755 (executable)
--- a/PortingGuide.md
+++ b/PortingGuide.md
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)
`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.
###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);
diff --git a/README.md b/README.md
index 48e8b803112de664f00ecd2f7fb339de737fdc55..6b2c90a208a2c276219a8db73f2579753cad1155 100755 (executable)
--- a/README.md
+++ b/README.md
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.
* 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
pCallbackContext,
TIMEOUT_4SEC,
persistenSubscription);
-```
+```
\ No newline at end of file
diff --git a/aws_iot_src/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl/network_openssl_wrapper.c b/aws_iot_src/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl/network_openssl_wrapper.c
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"
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;
}
}
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){
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;
}
}
status = fcntl(server_TCPSocket, F_SETFL, flags | O_NONBLOCK);
if (status < 0) {
+ ERROR("fcntl - %s", strerror(errno));
ret_val = TCP_CONNECT_ERROR;
}
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;
}
}
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)
/**
* @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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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)
diff --git a/sample_apps/subscribe_publish_sample/subscribe_publish_sample.c b/sample_apps/subscribe_publish_sample/subscribe_publish_sample.c
index 1a5b3a091a50fb2cdd2ce2e243de276cadce3bfa..05beb1ec6c9b6b97f5a5a6046b30d30f8c9da713 100755 (executable)
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;
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--;