Commit 1b61a3bf authored by Ian Craggs's avatar Ian Craggs

Merge branch 'develop' into mqttv5 - get latest fixes

parents 43dfcb2f a66faf8c
......@@ -17,10 +17,8 @@ matrix:
os: linux
before_install:
- openssl aes-256-cbc -K $encrypted_dcd2b299f7c9_key -iv $encrypted_dcd2b299f7c9_iv -in deploy_rsa.enc -out /tmp/deploy_rsa -d
- eval "$(ssh-agent -s)"
- chmod 600 /tmp/deploy_rsa
- ssh-add /tmp/deploy_rsa
- if [ "$TRAVIS_PULL_REQUEST" = "false" -a "$TRAVIS_REPO_SLUG" = "eclipse/paho.mqtt.c" ]; then export DEPLOY=true; fi
- if [ "$DEPLOY" = "true" ]; then ./travis-setup-deploy.sh; fi
- ./travis-install.sh
env:
......@@ -53,4 +51,4 @@ addons:
after_success:
- ls -l build.paho/*.tar.gz
- scp -o StrictHostKeyChecking=no build.paho/*.tar.gz icraggs@build.eclipse.org:../../../../shared/technology/paho/C/
- if [ "$DEPLOY" = "true" ]; then ./travis-deploy.sh; fi
......@@ -49,6 +49,8 @@ SET(PAHO_BUILD_DOCUMENTATION FALSE CACHE BOOL "Create and install the HTML based
SET(PAHO_BUILD_SAMPLES FALSE CACHE BOOL "Build sample programs")
SET(PAHO_BUILD_DEB_PACKAGE FALSE CACHE BOOL "Build debian package")
SET(PAHO_ENABLE_TESTING TRUE CACHE BOOL "Build tests and run")
SET(PAHO_ENABLE_CPACK TRUE CACHE BOOL "Enable CPack")
ADD_SUBDIRECTORY(src)
IF(PAHO_BUILD_SAMPLES)
......@@ -59,22 +61,32 @@ IF(PAHO_BUILD_DOCUMENTATION)
ADD_SUBDIRECTORY(doc)
ENDIF()
### packaging settings
SET(CPACK_PACKAGE_VENDOR "Eclipse Paho")
SET(CPACK_PACKAGE_NAME "Eclipse-Paho-MQTT-C")
INSTALL(FILES CONTRIBUTING.md epl-v10 edl-v10 README.md notice.html DESTINATION .)
FILE(GLOB samples "src/samples/*.c")
INSTALL(FILES ${samples} DESTINATION samples)
IF (WIN32)
SET(CPACK_GENERATOR "ZIP")
ELSEIF(PAHO_BUILD_DEB_PACKAGE)
SET(CPACK_GENERATOR "DEB")
CONFIGURE_FILE(${CMAKE_SCRIPTS}/CPackDebConfig.cmake.in
${CMAKE_BINARY_DIR}/CPackDebConfig.cmake @ONLY)
SET(CPACK_PROJECT_CONFIG_FILE ${CMAKE_BINARY_DIR}/CPackDebConfig.cmake)
ADD_SUBDIRECTORY(debian)
IF (PAHO_ENABLE_CPACK)
### packaging settings
FILE(GLOB samples "src/samples/*.c")
INSTALL(FILES ${samples} DESTINATION samples)
SET(CPACK_PACKAGE_VENDOR "Eclipse Paho")
SET(CPACK_PACKAGE_NAME "Eclipse-Paho-MQTT-C")
INSTALL(FILES CONTRIBUTING.md epl-v10 edl-v10 README.md notice.html DESTINATION .)
IF (WIN32)
SET(CPACK_GENERATOR "ZIP")
ELSEIF(PAHO_BUILD_DEB_PACKAGE)
INSTALL(FILES CONTRIBUTING.md epl-v10 edl-v10 README.md notice.html DESTINATION .)
SET(CPACK_GENERATOR "DEB")
CONFIGURE_FILE(${CMAKE_SCRIPTS}/CPackDebConfig.cmake.in
${CMAKE_BINARY_DIR}/CPackDebConfig.cmake @ONLY)
SET(CPACK_PROJECT_CONFIG_FILE ${CMAKE_BINARY_DIR}/CPackDebConfig.cmake)
ADD_SUBDIRECTORY(debian)
ELSE()
SET(CPACK_GENERATOR "TGZ")
ENDIF()
ELSE()
SET(CPACK_GENERATOR "TGZ")
FILE(GLOB samples "src/samples/*.c")
INSTALL(FILES ${samples} DESTINATION ${CMAKE_INSTALL_DOCDIR})
ENDIF()
SET(CPACK_PACKAGE_VERSION_MAJOR ${PAHO_VERSION_MAJOR})
......
......@@ -36,5 +36,10 @@ FOREACH(DOXYFILE_SRC DoxyfileV3ClientAPI;DoxyfileV3AsyncAPI;DoxyfileV3ClientInte
)
SET(DOXYTARGETS ${DOXYTARGETS} ${DOXYFILE_SRC}.target)
ENDFOREACH(DOXYFILE_SRC)
ADD_CUSTOM_TARGET(doc ALL DEPENDS ${DOXYTARGETS})
INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc DESTINATION share)
IF (PAHO_ENABLE_CPACK)
INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc DESTINATION share)
ELSE()
INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/doc DESTINATION ${CMAKE_INSTALL_DOCDIR})
ENDIF()
\ No newline at end of file
/*******************************************************************************
* Copyright (c) 2009, 2014 IBM Corp.
* Copyright (c) 2009, 2018 IBM Corp.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
......@@ -376,7 +376,7 @@ static void HeapScan(enum LOG_LEVELS log_level)
{
storageElement* s = (storageElement*)(current->content);
Log(log_level, -1, "Heap element size %d, line %d, file %s, ptr %p", s->size, s->line, s->file, s->ptr);
Log(log_level, -1, " Content %*.s", (10 > current->size) ? s->size : 10, (char*)(((int*)s->ptr) + 1));
Log(log_level, -1, " Content %.*s", (10 > current->size) ? s->size : 10, (char*)(((int*)s->ptr) + 1));
#if defined(HEAP_STACK)
Log(log_level, -1, " Stack:\n%s", s->stack);
#endif
......
......@@ -3665,3 +3665,42 @@ MQTTAsync_nameValue* MQTTAsync_getVersionInfo(void)
libinfo[i].value = NULL;
return libinfo;
}
const char* MQTTAsync_strerror(int code)
{
switch (code) {
case MQTTASYNC_SUCCESS:
return "Success";
case MQTTASYNC_FAILURE:
return "Failure";
case MQTTASYNC_PERSISTENCE_ERROR:
return "Persistence error";
case MQTTASYNC_DISCONNECTED:
return "Disconnected";
case MQTTASYNC_MAX_MESSAGES_INFLIGHT:
return "Maximum in-flight messages amount reached";
case MQTTASYNC_BAD_UTF8_STRING:
return "Invalid UTF8 string";
case MQTTASYNC_NULL_PARAMETER:
return "Invalid (NULL) parameter";
case MQTTASYNC_TOPICNAME_TRUNCATED:
return "Topic containing NULL characters has been truncated";
case MQTTASYNC_BAD_STRUCTURE:
return "Bad structure";
case MQTTASYNC_BAD_QOS:
return "Invalid QoS value";
case MQTTASYNC_NO_MORE_MSGIDS:
return "Too many pending commands";
case MQTTASYNC_OPERATION_INCOMPLETE:
return "Operation discarded before completion";
case MQTTASYNC_MAX_BUFFERED_MESSAGES:
return "No more messages can be buffered";
case MQTTASYNC_SSL_NOT_SUPPORTED:
return "SSL is not supported";
case MQTTASYNC_BAD_PROTOCOL:
return "Invalid protocole scheme";
}
return NULL;
}
......@@ -1343,6 +1343,13 @@ typedef struct
*/
DLLExport MQTTAsync_nameValue* MQTTAsync_getVersionInfo(void);
/**
* Returns a pointer to the string representation of the error or NULL.
*
* Do not free after use. Returns NULL if the error code is unknown.
*/
DLLExport const char* MQTTAsync_strerror(int code);
/**
* @cond MQTTAsync_main
......
......@@ -2237,6 +2237,37 @@ MQTTClient_nameValue* MQTTClient_getVersionInfo(void)
}
const char* MQTTClient_strerror(int code)
{
switch (code) {
case MQTTCLIENT_SUCCESS:
return "Success";
case MQTTCLIENT_FAILURE:
return "Failure";
case MQTTCLIENT_DISCONNECTED:
return "Disconnected";
case MQTTCLIENT_MAX_MESSAGES_INFLIGHT:
return "Maximum in-flight messages amount reached";
case MQTTCLIENT_BAD_UTF8_STRING:
return "Invalid UTF8 string";
case MQTTCLIENT_NULL_PARAMETER:
return "Invalid (NULL) parameter";
case MQTTCLIENT_TOPICNAME_TRUNCATED:
return "Topic containing NULL characters has been truncated";
case MQTTCLIENT_BAD_STRUCTURE:
return "Bad structure";
case MQTTCLIENT_BAD_QOS:
return "Invalid QoS value";
case MQTTCLIENT_SSL_NOT_SUPPORTED:
return "SSL is not supported";
case MQTTCLIENT_BAD_PROTOCOL:
return "Invalid protocole scheme";
}
return NULL;
}
/**
* See if any pending writes have been completed, and cleanup if so.
* Cleaning up means removing any publication data that was stored because the write did
......
......@@ -1053,6 +1053,13 @@ DLLExport void MQTTClient_free(void* ptr);
*/
DLLExport void MQTTClient_destroy(MQTTClient* handle);
/**
* Returns a pointer to the string representation of the error or NULL.
*
* Do not free after use. Returns NULL if the error code is unknown.
*/
DLLExport const char* MQTTClient_strerror(int code);
#endif
#ifdef __cplusplus
}
......
......@@ -14,6 +14,7 @@
* Ian Craggs - initial API and implementation and/or initial documentation
* Ian Craggs, Allan Stockdill-Mander - SSL updates
* Ian Craggs - MQTT 3.1.1 support
* Ian Craggs - fix for issue 453
* Ian Craggs - MQTT 5.0 support
*******************************************************************************/
......@@ -183,27 +184,32 @@ int MQTTPacket_send(networkHandles* net, Header header, char* buffer, size_t buf
int rc;
size_t buf0len;
char *buf;
int count = 0;
FUNC_ENTRY;
buf = malloc(10);
buf[0] = header.byte;
buf0len = 1 + MQTTPacket_encode(&buf[1], buflen);
if (buffer != NULL)
count = 1;
#if !defined(NO_PERSISTENCE)
if (header.bits.type == PUBREL)
{
char* ptraux = buffer;
int msgId = readInt(&ptraux);
rc = MQTTPersistence_put(net->socket, buf, buf0len, 1, &buffer, &buflen,
rc = MQTTPersistence_put(net->socket, buf, buf0len, count, &buffer, &buflen,
header.bits.type, msgId, 0);
}
#endif
#if defined(OPENSSL)
if (net->ssl)
rc = SSLSocket_putdatas(net->ssl, net->socket, buf, buf0len, 1, &buffer, &buflen, &freeData);
rc = SSLSocket_putdatas(net->ssl, net->socket, buf, buf0len, count, &buffer, &buflen, &freeData);
else
#endif
rc = Socket_putdatas(net->socket, buf, buf0len, 1, &buffer, &buflen, &freeData);
rc = Socket_putdatas(net->socket, buf, buf0len, count, &buffer, &buflen, &freeData);
if (rc == TCPSOCKET_COMPLETE)
time(&(net->lastSent));
......
......@@ -193,12 +193,11 @@ int MQTTPacket_send_pingreq(networkHandles* net, const char* clientID)
{
Header header;
int rc = 0;
size_t buflen = 0;
FUNC_ENTRY;
header.byte = 0;
header.bits.type = PINGREQ;
rc = MQTTPacket_send(net, header, NULL, buflen,0);
rc = MQTTPacket_send(net, header, NULL, 0, 0);
Log(LOG_PROTOCOL, 20, NULL, net->socket, clientID, rc);
FUNC_EXIT_RC(rc);
return rc;
......
......@@ -138,7 +138,7 @@ int UTF8_validate(int len, const char* data)
}
curdata = UTF8_char_validate(len, data);
while (curdata && (curdata < data + len))
curdata = UTF8_char_validate(len, curdata);
curdata = UTF8_char_validate(data + len - curdata, curdata);
rc = curdata != NULL;
exit:
......
scp -o StrictHostKeyChecking=no build.paho/*.tar.gz icraggs@build.eclipse.org:../../../../shared/technology/paho/C/
openssl aes-256-cbc -K $encrypted_dcd2b299f7c9_key -iv $encrypted_dcd2b299f7c9_iv -in deploy_rsa.enc -out /tmp/deploy_rsa -d
eval "$(ssh-agent -s)"
chmod 600 /tmp/deploy_rsa
ssh-add /tmp/deploy_rsa
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment