Commit 96faf843 authored by rxiang's avatar rxiang

43204 review

Signed-off-by: 's avatarrxiang <xiangr@cn.ibm.com>
parent 62db601e
......@@ -110,9 +110,9 @@ CCFLAGS_SO = -g -fPIC -Os -Wall -fvisibility=hidden
FLAGS_EXE = -I ${srcdir} -lpthread -L ${blddir}
LDFLAGS_C = -shared -Wl,-soname,lib$(MQTTLIB_C).so.${MAJOR_VERSION} -Wl,-init,MQTTClient_init -lpthread
LDFLAGS_CS = -shared -Wl,-soname,lib$(MQTTLIB_CS).so.${MAJOR_VERSION} -lpthread -ldl -lcrypto -lssl -Wl,-no-whole-archive -Wl,-init,MQTTClient_init
LDFLAGS_CS = -shared -Wl,-soname,lib$(MQTTLIB_CS).so.${MAJOR_VERSION} -lpthread -ldl -lssl -lcrypto -Wl,-no-whole-archive -Wl,-init,MQTTClient_init
LDFLAGS_A = -shared -Wl,-soname,lib${MQTTLIB_A}.so.${MAJOR_VERSION} -Wl,-init,MQTTAsync_init -lpthread
LDFLAGS_AS = -shared -Wl,-soname,lib${MQTTLIB_AS}.so.${MAJOR_VERSION} -lpthread -ldl -lcrypto -lssl -Wl,-no-whole-archive -Wl,-init,MQTTAsync_init
LDFLAGS_AS = -shared -Wl,-soname,lib${MQTTLIB_AS}.so.${MAJOR_VERSION} -lpthread -ldl -lssl -lcrypto -Wl,-no-whole-archive -Wl,-init,MQTTAsync_init
all: build
......@@ -236,9 +236,9 @@ CCFLAGS_SO = -g -fPIC -Os -Wall -fvisibility=hidden -Wno-deprecated-declarations
FLAGS_EXE = -I ${srcdir} -lpthread -L ${blddir}
LDFLAGS_C = -shared -Wl,-install_name,lib$(MQTTLIB_C).so.${MAJOR_VERSION} -Wl,-init,_MQTTClient_init -lpthread
LDFLAGS_CS = -shared -Wl,-install_name,lib$(MQTTLIB_CS).so.${MAJOR_VERSION} -lpthread -ldl -lcrypto -lssl -Wl,-init,_MQTTClient_init
LDFLAGS_CS = -shared -Wl,-install_name,lib$(MQTTLIB_CS).so.${MAJOR_VERSION} -lpthread -ldl -lssl -lcrypto -Wl,-init,_MQTTClient_init
LDFLAGS_A = -shared -Wl,-install_name,lib${MQTTLIB_A}.so.${MAJOR_VERSION} -Wl,-init,_MQTTAsync_init -lpthread
LDFLAGS_AS = -shared -Wl,-install_name,lib${MQTTLIB_AS}.so.${MAJOR_VERSION} -lpthread -ldl -lcrypto -lssl -Wl,-init,_MQTTAsync_init
LDFLAGS_AS = -shared -Wl,-install_name,lib${MQTTLIB_AS}.so.${MAJOR_VERSION} -lpthread -ldl -lssl -lcrypto -Wl,-init,_MQTTAsync_init
all: build
......
......@@ -162,8 +162,8 @@ typedef struct
typedef struct
{
char* clientID; /**< the string id of the client */
char* username; /**< MQTT v3.1 user name */
char* password; /**< MQTT v3.1 password */
const char* username; /**< MQTT v3.1 user name */
const char* password; /**< MQTT v3.1 password */
unsigned int cleansession : 1; /**< MQTT clean session flag */
unsigned int connected : 1; /**< whether it is currently connected */
unsigned int good : 1; /**< if we have an error on the socket we turn this off */
......@@ -197,7 +197,7 @@ int clientSocketCompare(void* a, void* b);
*/
typedef struct
{
char* version;
const char* version;
List* clients;
} ClientStates;
......
......@@ -289,7 +289,7 @@ typedef struct
void MQTTAsync_freeCommand(MQTTAsync_queuedCommand *command);
void MQTTAsync_freeCommand1(MQTTAsync_queuedCommand *command);
int MQTTAsync_deliverMessage(MQTTAsyncs* m, char* topicName, int topicLen, MQTTAsync_message* mm);
int MQTTAsync_deliverMessage(MQTTAsyncs* m, char* topicName, size_t topicLen, MQTTAsync_message* mm);
#if !defined(NO_PERSISTENCE)
int MQTTAsync_restoreCommands(MQTTAsyncs* client);
#endif
......@@ -347,7 +347,7 @@ int MQTTAsync_checkConn(MQTTAsync_command* command, MQTTAsyncs* client)
}
int MQTTAsync_create(MQTTAsync* handle, char* serverURI, char* clientId,
int MQTTAsync_create(MQTTAsync* handle, const char* serverURI, const char* clientId,
int persistence_type, void* persistence_context)
{
int rc = 0;
......@@ -397,7 +397,7 @@ int MQTTAsync_create(MQTTAsync* handle, char* serverURI, char* clientId,
}
#endif
m->serverURI = malloc(strlen(serverURI)+1);
strcpy(m->serverURI, serverURI);
MQTTStrncpy(m->serverURI, serverURI,strlen(serverURI)+1);
m->responses = ListInitialize();
ListAppend(handles, m, sizeof(MQTTAsyncs));
......@@ -408,7 +408,7 @@ int MQTTAsync_create(MQTTAsync* handle, char* serverURI, char* clientId,
m->c->inboundMsgs = ListInitialize();
m->c->messageQueue = ListInitialize();
m->c->clientID = malloc(strlen(clientId)+1);
strcpy(m->c->clientID, clientId);
MQTTStrncpy(m->c->clientID, clientId,strlen(clientId)+1);
#if !defined(NO_PERSISTENCE)
rc = MQTTPersistence_create(&(m->c->persistence), persistence_type, persistence_context);
......@@ -1349,7 +1349,7 @@ void MQTTAsync_destroy(MQTTAsync* handle)
{
int saved_socket = m->c->net.socket;
char* saved_clientid = malloc(strlen(m->c->clientID)+1);
strcpy(saved_clientid, m->c->clientID);
MQTTStrncpy(saved_clientid, m->c->clientID,strlen(m->c->clientID)+1);
#if !defined(NO_PERSISTENCE)
MQTTPersistence_close(m->c);
#endif
......@@ -1802,7 +1802,7 @@ int MQTTAsync_cleanSession(Clients* client)
int MQTTAsync_deliverMessage(MQTTAsyncs* m, char* topicName, int topicLen, MQTTAsync_message* mm)
int MQTTAsync_deliverMessage(MQTTAsyncs* m, char* topicName, size_t topicLen, MQTTAsync_message* mm)
{
int rc;
......@@ -1877,7 +1877,7 @@ void Protocol_processPublication(Publish* publish, Clients* client)
}
int MQTTAsync_connect(MQTTAsync handle, MQTTAsync_connectOptions* options)
int MQTTAsync_connect(MQTTAsync handle, const MQTTAsync_connectOptions* options)
{
MQTTAsyncs* m = handle;
int rc = MQTTASYNC_SUCCESS;
......@@ -1965,11 +1965,11 @@ int MQTTAsync_connect(MQTTAsync handle, MQTTAsync_connectOptions* options)
{
m->c->will = malloc(sizeof(willMessages));
m->c->will->msg = malloc(strlen(options->will->message) + 1);
strcpy(m->c->will->msg, options->will->message);
MQTTStrncpy(m->c->will->msg, options->will->message,strlen(options->will->message) + 1);
m->c->will->qos = options->will->qos;
m->c->will->retained = options->will->retained;
m->c->will->topic = malloc(strlen(options->will->topicName) + 1);
strcpy(m->c->will->topic, options->will->topicName);
MQTTStrncpy(m->c->will->topic, options->will->topicName,strlen(options->will->topicName) + 1);
}
#if defined(OPENSSL)
......@@ -2046,7 +2046,7 @@ int MQTTAsync_connect(MQTTAsync handle, MQTTAsync_connectOptions* options)
for (i = 0; i < options->serverURIcount; ++i)
{
conn->command.details.conn.serverURIs[i] = malloc(strlen(options->serverURIs[i]) + 1);
strcpy(conn->command.details.conn.serverURIs[i], options->serverURIs[i]);
MQTTStrncpy(conn->command.details.conn.serverURIs[i], options->serverURIs[i],strlen(options->serverURIs[i]) + 1);
}
conn->command.details.conn.currentURI = 0;
}
......@@ -2060,7 +2060,7 @@ exit:
}
int MQTTAsync_disconnect1(MQTTAsync handle, MQTTAsync_disconnectOptions* options, int internal)
int MQTTAsync_disconnect1(MQTTAsync handle, const MQTTAsync_disconnectOptions* options, int internal)
{
MQTTAsyncs* m = handle;
int rc = MQTTASYNC_SUCCESS;
......@@ -2114,7 +2114,7 @@ void MQTTProtocol_closeSession(Clients* c, int sendwill)
}
int MQTTAsync_disconnect(MQTTAsync handle, MQTTAsync_disconnectOptions* options)
int MQTTAsync_disconnect(MQTTAsync handle, const MQTTAsync_disconnectOptions* options)
{
return MQTTAsync_disconnect1(handle, options, 0);
}
......@@ -2135,10 +2135,10 @@ int MQTTAsync_isConnected(MQTTAsync handle)
}
int MQTTAsync_subscribeMany(MQTTAsync handle, int count, char** topic, int* qos, MQTTAsync_responseOptions* response)
int MQTTAsync_subscribeMany(MQTTAsync handle, size_t count, char* const* topic, int* qos, MQTTAsync_responseOptions* response)
{
MQTTAsyncs* m = handle;
int i = 0;
size_t i = 0;
int rc = MQTTASYNC_FAILURE;
MQTTAsync_queuedCommand* sub;
......@@ -2189,7 +2189,7 @@ int MQTTAsync_subscribeMany(MQTTAsync handle, int count, char** topic, int* qos,
for (i = 0; i < count; ++i)
{
sub->command.details.sub.topics[i] = malloc(strlen(topic[i]) + 1);
strcpy(sub->command.details.sub.topics[i], topic[i]);
MQTTStrncpy(sub->command.details.sub.topics[i], topic[i],strlen(topic[i]) + 1);
sub->command.details.sub.qoss[i] = qos[i];
}
rc = MQTTAsync_addCommand(sub, sizeof(sub));
......@@ -2200,21 +2200,21 @@ exit:
}
int MQTTAsync_subscribe(MQTTAsync handle, char* topic, int qos, MQTTAsync_responseOptions* response)
int MQTTAsync_subscribe(MQTTAsync handle, const char* topic, int qos, MQTTAsync_responseOptions* response)
{
int rc = 0;
char *const topics[] = {(char*)topic};
FUNC_ENTRY;
rc = MQTTAsync_subscribeMany(handle, 1, &topic, &qos, response);
rc = MQTTAsync_subscribeMany(handle, 1, topics, &qos, response);
FUNC_EXIT_RC(rc);
return rc;
}
int MQTTAsync_unsubscribeMany(MQTTAsync handle, int count, char** topic, MQTTAsync_responseOptions* response)
int MQTTAsync_unsubscribeMany(MQTTAsync handle, size_t count, char* const* topic, MQTTAsync_responseOptions* response)
{
MQTTAsyncs* m = handle;
int i = 0;
size_t i = 0;
int rc = SOCKET_ERROR;
MQTTAsync_queuedCommand* unsub;
......@@ -2259,7 +2259,7 @@ int MQTTAsync_unsubscribeMany(MQTTAsync handle, int count, char** topic, MQTTAsy
for (i = 0; i < count; ++i)
{
unsub->command.details.unsub.topics[i] = malloc(strlen(topic[i]) + 1);
strcpy(unsub->command.details.unsub.topics[i], topic[i]);
MQTTStrncpy(unsub->command.details.unsub.topics[i], topic[i],strlen(topic[i]) + 1);
}
rc = MQTTAsync_addCommand(unsub, sizeof(unsub));
......@@ -2269,18 +2269,18 @@ exit:
}
int MQTTAsync_unsubscribe(MQTTAsync handle, char* topic, MQTTAsync_responseOptions* response)
int MQTTAsync_unsubscribe(MQTTAsync handle, const char* topic, MQTTAsync_responseOptions* response)
{
int rc = 0;
char *const topics[] = {(char*)topic};
FUNC_ENTRY;
rc = MQTTAsync_unsubscribeMany(handle, 1, &topic, response);
rc = MQTTAsync_unsubscribeMany(handle, 1, topics, response);
FUNC_EXIT_RC(rc);
return rc;
}
int MQTTAsync_send(MQTTAsync handle, char* destinationName, int payloadlen, void* payload,
int MQTTAsync_send(MQTTAsync handle, const char* destinationName, size_t payloadlen, void* payload,
int qos, int retained, MQTTAsync_responseOptions* response)
{
int rc = MQTTASYNC_SUCCESS;
......@@ -2314,7 +2314,7 @@ int MQTTAsync_send(MQTTAsync handle, char* destinationName, int payloadlen, void
pub->command.context = response->context;
}
pub->command.details.pub.destinationName = malloc(strlen(destinationName) + 1);
strcpy(pub->command.details.pub.destinationName, destinationName);
MQTTStrncpy(pub->command.details.pub.destinationName, destinationName,strlen(destinationName) + 1);
pub->command.details.pub.payloadlen = payloadlen;
pub->command.details.pub.payload = malloc(payloadlen);
memcpy(pub->command.details.pub.payload, payload, payloadlen);
......@@ -2329,7 +2329,7 @@ exit:
int MQTTAsync_sendMessage(MQTTAsync handle, char* destinationName, MQTTAsync_message* message,
int MQTTAsync_sendMessage(MQTTAsync handle, const char* destinationName, const MQTTAsync_message* message,
MQTTAsync_responseOptions* response)
{
int rc = MQTTASYNC_SUCCESS;
......
......@@ -76,6 +76,10 @@
/// @cond EXCLUDE
#if defined(__cplusplus)
extern "C" {
#endif
#if !defined(MQTTASYNC_H)
#define MQTTASYNC_H
......@@ -476,7 +480,7 @@ DLLExport int MQTTAsync_setCallbacks(MQTTAsync handle, void* context, MQTTAsync_
* @return ::MQTTASYNC_SUCCESS if the client is successfully created, otherwise
* an error code is returned.
*/
DLLExport int MQTTAsync_create(MQTTAsync* handle, char* serverURI, char* clientId,
DLLExport int MQTTAsync_create(MQTTAsync* handle, const char* serverURI, const char* clientId,
int persistence_type, void* persistence_context);
/**
......@@ -494,13 +498,13 @@ DLLExport int MQTTAsync_create(MQTTAsync* handle, char* serverURI, char* clientI
typedef struct
{
/** The eyecatcher for this structure. must be MQTW. */
char struct_id[4];
const char struct_id[4];
/** The version number of this structure. Must be 0 */
int struct_version;
/** The LWT topic to which the LWT message will be published. */
char* topicName;
const char* topicName;
/** The LWT payload. */
char* message;
const char* message;
/**
* The retained flag for the LWT message (see MQTTAsync_message.retained).
*/
......@@ -529,24 +533,24 @@ typedef struct
typedef struct
{
/** The eyecatcher for this structure. Must be MQTS */
char struct_id[4];
const char struct_id[4];
/** The version number of this structure. Must be 0 */
int struct_version;
/** The file in PEM format containing the public digital certificates trusted by the client. */
char* trustStore;
const char* trustStore;
/** The file in PEM format containing the public certificate chain of the client. It may also include
* the client's private key.
*/
char* keyStore;
const char* keyStore;
/** If not included in the sslKeyStore, this setting points to the file in PEM format containing
* the client's private key.
*/
char* privateKey;
const char* privateKey;
/** The password to load the client's privateKey if encrypted. */
char* privateKeyPassword;
const char* privateKeyPassword;
/**
* The list of cipher suites that the client will present to the server during the SSL handshake. For a
......@@ -556,7 +560,7 @@ typedef struct
* those offering no encryption- will be considered.
* This setting can be used to set an SSL anonymous connection ("aNULL" string value, for instance).
*/
char* enabledCipherSuites;
const char* enabledCipherSuites;
/** True/False option to enable verification of the server certificate **/
int enableServerCertAuth;
......@@ -573,8 +577,8 @@ typedef struct
typedef struct
{
/** The eyecatcher for this structure. must be MQTC. */
char struct_id[4];
/** The version number of this structure. Must be 0, 1, 2 or 3.
const char struct_id[4];
/** The version number of this structure. Must be 0, 1 or 2.
* 0 signifies no SSL options and no serverURIs
* 1 signifies no serverURIs
* 2 signifies no MQTTVersion
......@@ -628,13 +632,13 @@ typedef struct
* and authorisation by user name and password. This is the user name
* parameter.
*/
char* username;
const char* username;
/**
* MQTT servers that support the MQTT v3.1 protocol provide authentication
* and authorisation by user name and password. This is the password
* parameter.
*/
char* password;
const char* password;
/**
* The time interval in seconds to allow a connect to complete.
*/
......@@ -678,7 +682,7 @@ typedef struct
* a server running on the local machines with the default MQTT port, specify
* <i>tcp://localhost:1883</i>.
*/
char** serverURIs;
char* const* serverURIs;
/**
* Sets the version of MQTT to be used on the connect.
* MQTTVERSION_DEFAULT (0) = default: start with 3.1.1, and if that fails, fall back to 3.1
......@@ -711,13 +715,13 @@ typedef struct
* <b>5</b>: Connection refused: Not authorized<br>
* <b>6-255</b>: Reserved for future use<br>
*/
DLLExport int MQTTAsync_connect(MQTTAsync handle, MQTTAsync_connectOptions* options);
DLLExport int MQTTAsync_connect(MQTTAsync handle, const MQTTAsync_connectOptions* options);
typedef struct
{
/** The eyecatcher for this structure. Must be MQTD. */
char struct_id[4];
const char struct_id[4];
/** The version number of this structure. Must be 0 or 1. 0 signifies no SSL options */
int struct_version;
/**
......@@ -766,7 +770,7 @@ typedef struct
* the server. An error code is returned if the client was unable to disconnect
* from the server
*/
DLLExport int MQTTAsync_disconnect(MQTTAsync handle, MQTTAsync_disconnectOptions* options);
DLLExport int MQTTAsync_disconnect(MQTTAsync handle, const MQTTAsync_disconnectOptions* options);
/**
......@@ -793,7 +797,7 @@ DLLExport int MQTTAsync_isConnected(MQTTAsync handle);
* An error code is returned if there was a problem registering the
* subscription.
*/
DLLExport int MQTTAsync_subscribe(MQTTAsync handle, char* topic, int qos, MQTTAsync_responseOptions* response);
DLLExport int MQTTAsync_subscribe(MQTTAsync handle, const char* topic, int qos, MQTTAsync_responseOptions* response);
/**
......@@ -813,7 +817,7 @@ DLLExport int MQTTAsync_subscribe(MQTTAsync handle, char* topic, int qos, MQTTAs
* An error code is returned if there was a problem registering the
* subscriptions.
*/
DLLExport int MQTTAsync_subscribeMany(MQTTAsync handle, int count, char** topic, int* qos, MQTTAsync_responseOptions* response);
DLLExport int MQTTAsync_subscribeMany(MQTTAsync handle, size_t count, char* const* topic, int* qos, MQTTAsync_responseOptions* response);
/**
* This function attempts to remove an existing subscription made by the
......@@ -827,7 +831,7 @@ DLLExport int MQTTAsync_subscribeMany(MQTTAsync handle, int count, char** topic,
* An error code is returned if there was a problem removing the
* subscription.
*/
DLLExport int MQTTAsync_unsubscribe(MQTTAsync handle, char* topic, MQTTAsync_responseOptions* response);
DLLExport int MQTTAsync_unsubscribe(MQTTAsync handle, const char* topic, MQTTAsync_responseOptions* response);
/**
* This function attempts to remove existing subscriptions to a list of topics
......@@ -841,7 +845,7 @@ DLLExport int MQTTAsync_unsubscribe(MQTTAsync handle, char* topic, MQTTAsync_res
* @return ::MQTTASYNC_SUCCESS if the subscriptions are removed.
* An error code is returned if there was a problem removing the subscriptions.
*/
DLLExport int MQTTAsync_unsubscribeMany(MQTTAsync handle, int count, char** topic, MQTTAsync_responseOptions* response);
DLLExport int MQTTAsync_unsubscribeMany(MQTTAsync handle, size_t count, char* const* topic, MQTTAsync_responseOptions* response);
/**
......@@ -862,7 +866,7 @@ DLLExport int MQTTAsync_unsubscribeMany(MQTTAsync handle, int count, char** topi
* @return ::MQTTASYNC_SUCCESS if the message is accepted for publication.
* An error code is returned if there was a problem accepting the message.
*/
DLLExport int MQTTAsync_send(MQTTAsync handle, char* destinationName, int payloadlen, void* payload, int qos, int retained,
DLLExport int MQTTAsync_send(MQTTAsync handle, const char* destinationName, size_t payloadlen, void* payload, int qos, int retained,
MQTTAsync_responseOptions* response);
......@@ -881,7 +885,7 @@ DLLExport int MQTTAsync_send(MQTTAsync handle, char* destinationName, int payloa
* @return ::MQTTASYNC_SUCCESS if the message is accepted for publication.
* An error code is returned if there was a problem accepting the message.
*/
DLLExport int MQTTAsync_sendMessage(MQTTAsync handle, char* destinationName, MQTTAsync_message* msg, MQTTAsync_responseOptions* response);
DLLExport int MQTTAsync_sendMessage(MQTTAsync handle, const char* destinationName, const MQTTAsync_message* msg, MQTTAsync_responseOptions* response);
/**
......@@ -1506,3 +1510,7 @@ exit:
#endif
#ifdef __cplusplus
}
#endif
......@@ -228,7 +228,7 @@ long MQTTClient_elapsed(struct timeval start)
#endif
int MQTTClient_create(MQTTClient* handle, char* serverURI, char* clientId,
int MQTTClient_create(MQTTClient* handle, const char* serverURI, const char* clientId,
int persistence_type, void* persistence_context)
{
int rc = 0;
......@@ -277,7 +277,7 @@ int MQTTClient_create(MQTTClient* handle, char* serverURI, char* clientId,
}
#endif
m->serverURI = malloc(strlen(serverURI)+1);
strcpy(m->serverURI, serverURI);
MQTTStrncpy(m->serverURI, serverURI,strlen(serverURI)+1);
ListAppend(handles, m, sizeof(MQTTClients));
m->c = malloc(sizeof(Clients));
......@@ -287,7 +287,7 @@ int MQTTClient_create(MQTTClient* handle, char* serverURI, char* clientId,
m->c->inboundMsgs = ListInitialize();
m->c->messageQueue = ListInitialize();
m->c->clientID = malloc(strlen(clientId)+1);
strcpy(m->c->clientID, clientId);
MQTTStrncpy(m->c->clientID, clientId,strlen(clientId)+1);
m->connect_sem = Thread_create_sem();
m->connack_sem = Thread_create_sem();
m->suback_sem = Thread_create_sem();
......@@ -368,7 +368,7 @@ void MQTTClient_destroy(MQTTClient* handle)
{
int saved_socket = m->c->net.socket;
char* saved_clientid = malloc(strlen(m->c->clientID)+1);
strcpy(saved_clientid, m->c->clientID);
MQTTStrncpy(saved_clientid, m->c->clientID,strlen(m->c->clientID)+1);
#if !defined(NO_PERSISTENCE)
MQTTPersistence_close(m->c);
#endif
......@@ -758,7 +758,7 @@ void Protocol_processPublication(Publish* publish, Clients* client)
}
int MQTTClient_connectURIVersion(MQTTClient handle, MQTTClient_connectOptions* options, char* serverURI, int MQTTVersion,
int MQTTClient_connectURIVersion(MQTTClient handle, MQTTClient_connectOptions* options, const char* serverURI, int MQTTVersion,
START_TIME_TYPE start, long millisecsTimeout)
{
MQTTClients* m = handle;
......@@ -935,7 +935,7 @@ exit:
}
int MQTTClient_connectURI(MQTTClient handle, MQTTClient_connectOptions* options, char* serverURI)
int MQTTClient_connectURI(MQTTClient handle, MQTTClient_connectOptions* options, const char* serverURI)
{
MQTTClients* m = handle;
START_TIME_TYPE start;
......@@ -963,11 +963,11 @@ int MQTTClient_connectURI(MQTTClient handle, MQTTClient_connectOptions* options,
{
m->c->will = malloc(sizeof(willMessages));
m->c->will->msg = malloc(strlen(options->will->message) + 1);
strcpy(m->c->will->msg, options->will->message);
MQTTStrncpy(m->c->will->msg , options->will->message,strlen(options->will->message) + 1);
m->c->will->qos = options->will->qos;
m->c->will->retained = options->will->retained;
m->c->will->topic = malloc(strlen(options->will->topicName) + 1);
strcpy(m->c->will->topic, options->will->topicName);
MQTTStrncpy(m->c->will->topic , options->will->topicName,strlen(options->will->topicName) + 1);
}
#if defined(OPENSSL)
......@@ -994,27 +994,27 @@ int MQTTClient_connectURI(MQTTClient handle, MQTTClient_connectOptions* options,
if (options->ssl->trustStore)
{
m->c->sslopts->trustStore = malloc(strlen(options->ssl->trustStore) + 1);
strcpy(m->c->sslopts->trustStore, options->ssl->trustStore);
MQTTStrncpy(m->c->sslopts->trustStore , options->ssl->trustStore,strlen(options->ssl->trustStore)+1);
}
if (options->ssl->keyStore)
{
m->c->sslopts->keyStore = malloc(strlen(options->ssl->keyStore) + 1);
strcpy(m->c->sslopts->keyStore, options->ssl->keyStore);
MQTTStrncpy(m->c->sslopts->keyStore , options->ssl->keyStore,strlen(options->ssl->keyStore)+1);
}
if (options->ssl->privateKey)
{
m->c->sslopts->privateKey = malloc(strlen(options->ssl->privateKey) + 1);
strcpy(m->c->sslopts->privateKey, options->ssl->privateKey);
MQTTStrncpy(m->c->sslopts->privateKey , options->ssl->privateKey,strlen(options->ssl->privateKey)+1);
}
if (options->ssl->privateKeyPassword)
{
m->c->sslopts->privateKeyPassword = malloc(strlen(options->ssl->privateKeyPassword) + 1);
strcpy(m->c->sslopts->privateKeyPassword, options->ssl->privateKeyPassword);
MQTTStrncpy(m->c->sslopts->privateKeyPassword , options->ssl->privateKeyPassword,strlen(options->ssl->privateKeyPassword)+1);
}
if (options->ssl->enabledCipherSuites)
{
m->c->sslopts->enabledCipherSuites = malloc(strlen(options->ssl->enabledCipherSuites) + 1);
strcpy(m->c->sslopts->enabledCipherSuites, options->ssl->enabledCipherSuites);
MQTTStrncpy(m->c->sslopts->enabledCipherSuites , options->ssl->enabledCipherSuites,strlen(options->ssl->enabledCipherSuites)+1);
}
m->c->sslopts->enableServerCertAuth = options->ssl->enableServerCertAuth;
}
......@@ -1219,7 +1219,7 @@ int MQTTClient_isConnected(MQTTClient handle)
}
int MQTTClient_subscribeMany(MQTTClient handle, int count, char** topic, int* qos)
int MQTTClient_subscribeMany(MQTTClient handle, int count, char* const* topic, int* qos)
{
MQTTClients* m = handle;
List* topics = ListInitialize();
......@@ -1304,12 +1304,13 @@ exit:
}
int MQTTClient_subscribe(MQTTClient handle, char* topic, int qos)
int MQTTClient_subscribe(MQTTClient handle, const char* topic, int qos)
{
int rc = 0;
char *const topics[] = {(char*)topic};
FUNC_ENTRY;
rc = MQTTClient_subscribeMany(handle, 1, &topic, &qos);
rc = MQTTClient_subscribeMany(handle, 1, topics, &qos);
if (qos == MQTT_BAD_SUBSCRIBE) /* addition for MQTT 3.1.1 - error code from subscribe */
rc = MQTT_BAD_SUBSCRIBE;
FUNC_EXIT_RC(rc);
......@@ -1317,7 +1318,7 @@ int MQTTClient_subscribe(MQTTClient handle, char* topic, int qos)
}
int MQTTClient_unsubscribeMany(MQTTClient handle, int count, char** topic)
int MQTTClient_unsubscribeMany(MQTTClient handle, int count, char* const* topic)
{
MQTTClients* m = handle;
List* topics = ListInitialize();
......@@ -1382,18 +1383,18 @@ exit:
}
int MQTTClient_unsubscribe(MQTTClient handle, char* topic)
int MQTTClient_unsubscribe(MQTTClient handle, const char* topic)
{
int rc = 0;
char *const topics[] = {(char*)topic};
FUNC_ENTRY;
rc = MQTTClient_unsubscribeMany(handle, 1, &topic);
rc = MQTTClient_unsubscribeMany(handle, 1, topics);
FUNC_EXIT_RC(rc);
return rc;
}
int MQTTClient_publish(MQTTClient handle, char* topicName, int payloadlen, void* payload,
int MQTTClient_publish(MQTTClient handle, const char* topicName, int payloadlen, void* payload,
int qos, int retained, MQTTClient_deliveryToken* deliveryToken)
{
int rc = MQTTCLIENT_SUCCESS;
......@@ -1439,7 +1440,7 @@ int MQTTClient_publish(MQTTClient handle, char* topicName, int payloadlen, void*
p->payload = payload;
p->payloadlen = payloadlen;
p->topic = topicName;
p->topic = (char*)topicName;
p->msgId = -1;
rc = MQTTProtocol_startPublish(m->c, p, qos, retained, &msg);
......@@ -1482,7 +1483,7 @@ exit:
int MQTTClient_publishMessage(MQTTClient handle, char* topicName, MQTTClient_message* message,
int MQTTClient_publishMessage(MQTTClient handle, const char* topicName, MQTTClient_message* message,
MQTTClient_deliveryToken* deliveryToken)
{
int rc = MQTTCLIENT_SUCCESS;
......
......@@ -97,6 +97,9 @@
*/
/// @cond EXCLUDE
#if defined(__cplusplus)
extern "C" {
#endif
#if !defined(MQTTCLIENT_H)
#define MQTTCLIENT_H
......@@ -401,7 +404,7 @@ DLLExport int MQTTClient_setCallbacks(MQTTClient handle, void* context, MQTTClie
* @return ::MQTTCLIENT_SUCCESS if the client is successfully created, otherwise
* an error code is returned.
*/
DLLExport int MQTTClient_create(MQTTClient* handle, char* serverURI, char* clientId,
DLLExport int MQTTClient_create(MQTTClient* handle, const char* serverURI, const char* clientId,
int persistence_type, void* persistence_context);
/**
......@@ -419,13 +422,13 @@ DLLExport int MQTTClient_create(MQTTClient* handle, char* serverURI, char* clien
typedef struct
{
/** The eyecatcher for this structure. must be MQTW. */
char struct_id[4];
const char struct_id[4];
/** The version number of this structure. Must be 0 */
int struct_version;
/** The LWT topic to which the LWT message will be published. */
char* topicName;
const char* topicName;
/** The LWT payload. */
char* message;
const char* message;
/**
* The retained flag for the LWT message (see MQTTClient_message.retained).
*/
......@@ -454,7 +457,7 @@ typedef struct
typedef struct
{
/** The eyecatcher for this structure. Must be MQTS */
char struct_id[4];
const char struct_id[4];
/** The version number of this structure. Must be 0 */
int struct_version;
......@@ -507,7 +510,7 @@ typedef struct
typedef struct
{
/** The eyecatcher for this structure. must be MQTC. */
char struct_id[4];
const char struct_id[4];
/** The version number of this structure. Must be 0, 1, 2, 3 or 4.
* 0 signifies no SSL options and no serverURIs
* 1 signifies no serverURIs
......@@ -568,13 +571,13 @@ typedef struct
* and authorisation by user name and password. This is the user name
* parameter.
*/
char* username;
const char* username;
/**
* MQTT servers that support the MQTT v3.1 protocol provide authentication
* and authorisation by user name and password. This is the password
* parameter.
*/
char* password;
const char* password;
/**
* The time interval in seconds to allow a connect to complete.
*/
......@@ -602,7 +605,7 @@ typedef struct
* If this list is empty (the default), the server URI specified on MQTTClient_create()
* is used.
*/
char** serverURIs;
char* const* serverURIs;
/**
* Sets the version of MQTT to be used on the connect.
* MQTTVERSION_DEFAULT (0) = default: start with 3.1.1, and if that fails, fall back to 3.1
......@@ -615,7 +618,7 @@ typedef struct
*/
struct
{
char* serverURI; /**< the serverURI connected to */
const char* serverURI; /**< the serverURI connected to */
int MQTTVersion; /**< the MQTT version used to connect with */
int sessionPresent; /**< if the MQTT version is 3.1.1, the value of sessionPresent returned in the connack */
} returned;
......@@ -711,7 +714,7 @@ DLLExport int MQTTClient_isConnected(MQTTClient handle);
* An error code is returned if there was a problem registering the
* subscription.
*/
DLLExport int MQTTClient_subscribe(MQTTClient handle, char* topic, int qos);
DLLExport int MQTTClient_subscribe(MQTTClient handle, const char* topic, int qos);
/**
* This function attempts to subscribe a client to a list of topics, which may
......@@ -729,7 +732,7 @@ DLLExport int MQTTClient_subscribe(MQTTClient handle, char* topic, int qos);
* An error code is returned if there was a problem registering the
* subscriptions.
*/
DLLExport int MQTTClient_subscribeMany(MQTTClient handle, int count, char** topic, int* qos);
DLLExport int MQTTClient_subscribeMany(MQTTClient handle, int count, char* const* topic, int* qos);
/**
* This function attempts to remove an existing subscription made by the
......@@ -742,7 +745,7 @@ DLLExport int MQTTClient_subscribeMany(MQTTClient handle, int count, char** topi
* An error code is returned if there was a problem removing the
* subscription.
*/
DLLExport int MQTTClient_unsubscribe(MQTTClient handle, char* topic);
DLLExport int MQTTClient_unsubscribe(MQTTClient handle, const char* topic);
/**
* This function attempts to remove existing subscriptions to a list of topics
......@@ -755,7 +758,7 @@ DLLExport int MQTTClient_unsubscribe(MQTTClient handle, char* topic);
* @return ::MQTTCLIENT_SUCCESS if the subscriptions are removed.
* An error code is returned if there was a problem removing the subscriptions.
*/
DLLExport int MQTTClient_unsubscribeMany(MQTTClient handle, int count, char** topic);
DLLExport int MQTTClient_unsubscribeMany(MQTTClient handle, int count, char* const* topic);
/**
* This function attempts to publish a message to a given topic (see also
......@@ -778,7 +781,7 @@ DLLExport int MQTTClient_unsubscribeMany(MQTTClient handle, int count, char** to
* @return ::MQTTCLIENT_SUCCESS if the message is accepted for publication.
* An error code is returned if there was a problem accepting the message.
*/
DLLExport int MQTTClient_publish(MQTTClient handle, char* topicName, int payloadlen, void* payload, int qos, int retained,
DLLExport int MQTTClient_publish(MQTTClient handle, const char* topicName, int payloadlen, void* payload, int qos, int retained,
MQTTClient_deliveryToken* dt);
/**
* This function attempts to publish a message to a given topic (see also
......@@ -799,7 +802,7 @@ DLLExport int MQTTClient_publish(MQTTClient handle, char* topicName, int payload
* @return ::MQTTCLIENT_SUCCESS if the message is accepted for publication.
* An error code is returned if there was a problem accepting the message.
*/
DLLExport int MQTTClient_publishMessage(MQTTClient handle, char* topicName, MQTTClient_message* msg, MQTTClient_deliveryToken* dt);
DLLExport int MQTTClient_publishMessage(MQTTClient handle, const char* topicName, MQTTClient_message* msg, MQTTClient_deliveryToken* dt);
/**
......@@ -914,6 +917,9 @@ DLLExport void MQTTClient_free(void* ptr);
DLLExport void MQTTClient_destroy(MQTTClient* handle);
#endif
#ifdef __cplusplus
}
#endif
/**
* @cond MQTTClient_main
......
......@@ -106,7 +106,7 @@
* @return Return 0 if the function completes successfully, otherwise return
* ::MQTTCLIENT_PERSISTENCE_ERROR.
*/
typedef int (*Persistence_open)(void** handle, char* clientID, char* serverURI, void* context);
typedef int (*Persistence_open)(void** handle, const char* clientID, const char* serverURI, void* context);
/**
* @brief Close the persistent store referred to by the handle.
......
......@@ -97,6 +97,7 @@ void* MQTTPacket_Factory(networkHandles* net, int* error)
char* data = NULL;
static Header header;
int remaining_length, ptype;
size_t remaining_length_new;
void* pack = NULL;
int actual_len = 0;
......@@ -147,8 +148,9 @@ void* MQTTPacket_Factory(networkHandles* net, int* error)
char *buf = malloc(10);
buf[0] = header.byte;
buf0len = 1 + MQTTPacket_encode(&buf[1], remaining_length);
remaining_length_new = remaining_length;
*error = MQTTPersistence_put(net->socket, buf, buf0len, 1,
&data, &remaining_length, header.bits.type, ((Publish *)pack)->msgId, 1);
&data, &remaining_length_new, header.bits.type, ((Publish *)pack)->msgId, 1);
free(buf);
}
#endif
......@@ -168,7 +170,7 @@ exit:
* @param buflen the length of the data in buffer to be written
* @return the completion code (TCPSOCKET_COMPLETE etc)
*/
int MQTTPacket_send(networkHandles* net, Header header, char* buffer, int buflen, int free)
int MQTTPacket_send(networkHandles* net, Header header, char* buffer, size_t buflen, int free)
{
int rc, buf0len;
char *buf;
......@@ -214,7 +216,7 @@ int MQTTPacket_send(networkHandles* net, Header header, char* buffer, int buflen
* @param buflens the lengths of the data in the array of buffers to be written
* @return the completion code (TCPSOCKET_COMPLETE etc)
*/
int MQTTPacket_sends(networkHandles* net, Header header, int count, char** buffers, int* buflens, int* frees)
int MQTTPacket_sends(networkHandles* net, Header header, int count, char** buffers, size_t* buflens, int* frees)
{
int i, rc, buf0len, total = 0;
char *buf;
......@@ -423,7 +425,7 @@ void writeInt(char** pptr, int anInt)
* @param pptr pointer to the output buffer - incremented by the number of bytes used & returned
* @param string the C string to write
*/
void writeUTF(char** pptr, char* string)
void writeUTF(char** pptr, const char* string)
{
int len = strlen(string);
writeInt(pptr, len);
......@@ -439,7 +441,7 @@ void writeUTF(char** pptr, char* string)
* @param datalen the length of the rest of the packet
* @return pointer to the packet structure
*/
void* MQTTPacket_header_only(unsigned char aHeader, char* data, int datalen)
void* MQTTPacket_header_only(unsigned char aHeader, char* data, size_t datalen)
{
static unsigned char header = 0;
header = aHeader;
......@@ -452,7 +454,7 @@ void* MQTTPacket_header_only(unsigned char aHeader, char* data, int datalen)
* @param socket the open socket to send the data to
* @return the completion code (e.g. TCPSOCKET_COMPLETE)
*/
int MQTTPacket_send_disconnect(networkHandles *net, char* clientID)
int MQTTPacket_send_disconnect(networkHandles *net, const char* clientID)
{
Header header;
int rc = 0;
......@@ -474,7 +476,7 @@ int MQTTPacket_send_disconnect(networkHandles *net, char* clientID)
* @param datalen the length of the rest of the packet
* @return pointer to the packet structure
*/
void* MQTTPacket_publish(unsigned char aHeader, char* data, int datalen)
void* MQTTPacket_publish(unsigned char aHeader, char* data, size_t datalen)
{
Publish* pack = malloc(sizeof(Publish));
char* curdata = data;
......@@ -550,7 +552,7 @@ int MQTTPacket_send_ack(int type, int msgid, int dup, networkHandles *net)
* @param clientID the string client identifier, only used for tracing
* @return the completion code (e.g. TCPSOCKET_COMPLETE)
*/
int MQTTPacket_send_puback(int msgid, networkHandles* net, char* clientID)
int MQTTPacket_send_puback(int msgid, networkHandles* net, const char* clientID)
{
int rc = 0;
......@@ -583,7 +585,7 @@ void MQTTPacket_freeSuback(Suback* pack)
* @param clientID the string client identifier, only used for tracing
* @return the completion code (e.g. TCPSOCKET_COMPLETE)
*/
int MQTTPacket_send_pubrec(int msgid, networkHandles* net, char* clientID)
int MQTTPacket_send_pubrec(int msgid, networkHandles* net, const char* clientID)
{
int rc = 0;
......@@ -603,7 +605,7 @@ int MQTTPacket_send_pubrec(int msgid, networkHandles* net, char* clientID)
* @param clientID the string client identifier, only used for tracing
* @return the completion code (e.g. TCPSOCKET_COMPLETE)
*/
int MQTTPacket_send_pubrel(int msgid, int dup, networkHandles* net, char* clientID)
int MQTTPacket_send_pubrel(int msgid, int dup, networkHandles* net, const char* clientID)
{
int rc = 0;
......@@ -622,7 +624,7 @@ int MQTTPacket_send_pubrel(int msgid, int dup, networkHandles* net, char* client
* @param clientID the string client identifier, only used for tracing
* @return the completion code (e.g. TCPSOCKET_COMPLETE)
*/
int MQTTPacket_send_pubcomp(int msgid, networkHandles* net, char* clientID)
int MQTTPacket_send_pubcomp(int msgid, networkHandles* net, const char* clientID)
{
int rc = 0;
......@@ -641,7 +643,7 @@ int MQTTPacket_send_pubcomp(int msgid, networkHandles* net, char* clientID)
* @param datalen the length of the rest of the packet
* @return pointer to the packet structure
*/
void* MQTTPacket_ack(unsigned char aHeader, char* data, int datalen)
void* MQTTPacket_ack(unsigned char aHeader, char* data, size_t datalen)
{
Ack* pack = malloc(sizeof(Ack));
char* curdata = data;
......@@ -664,7 +666,7 @@ void* MQTTPacket_ack(unsigned char aHeader, char* data, int datalen)
* @param clientID the string client identifier, only used for tracing
* @return the completion code (e.g. TCPSOCKET_COMPLETE)
*/
int MQTTPacket_send_publish(Publish* pack, int dup, int qos, int retained, networkHandles* net, char* clientID)
int MQTTPacket_send_publish(Publish* pack, int dup, int qos, int retained, networkHandles* net, const char* clientID)
{
Header header;
char *topiclen;
......@@ -682,7 +684,7 @@ int MQTTPacket_send_publish(Publish* pack, int dup, int qos, int retained, netwo
char *buf = malloc(2);
char *ptr = buf;
char* bufs[4] = {topiclen, pack->topic, buf, pack->payload};
int lens[4] = {2, strlen(pack->topic), 2, pack->payloadlen};
size_t lens[4] = {2, strlen(pack->topic), 2, pack->payloadlen};
int frees[4] = {1, 0, 1, 0};
writeInt(&ptr, pack->msgId);
......@@ -696,7 +698,7 @@ int MQTTPacket_send_publish(Publish* pack, int dup, int qos, int retained, netwo
{
char* ptr = topiclen;
char* bufs[3] = {topiclen, pack->topic, pack->payload};
int lens[3] = {2, strlen(pack->topic), pack->payloadlen};
size_t lens[3] = {2, strlen(pack->topic), pack->payloadlen};
int frees[3] = {1, 0, 0};
writeInt(&ptr, lens[1]);
......
......@@ -33,7 +33,7 @@ include "Clients"
BE*/
typedef unsigned int bool;
typedef void* (*pf)(unsigned char, char*, int);
typedef void* (*pf)(unsigned char, char*, size_t);
#define BAD_MQTT_PACKET -4
......@@ -223,27 +223,27 @@ char* readUTF(char** pptr, char* enddata);
unsigned char readChar(char** pptr);
void writeChar(char** pptr, char c);
void writeInt(char** pptr, int anInt);
void writeUTF(char** pptr, char* string);
void writeUTF(char** pptr, const char* string);
char* MQTTPacket_name(int ptype);
void* MQTTPacket_Factory(networkHandles* net, int* error);
int MQTTPacket_send(networkHandles* net, Header header, char* buffer, int buflen, int free);
int MQTTPacket_sends(networkHandles* net, Header header, int count, char** buffers, int* buflens, int* frees);
int MQTTPacket_send(networkHandles* net, Header header, char* buffer, size_t buflen, int free);
int MQTTPacket_sends(networkHandles* net, Header header, int count, char** buffers, size_t* buflens, int* frees);
void* MQTTPacket_header_only(unsigned char aHeader, char* data, int datalen);
int MQTTPacket_send_disconnect(networkHandles* net, char* clientID);
void* MQTTPacket_header_only(unsigned char aHeader, char* data, size_t datalen);
int MQTTPacket_send_disconnect(networkHandles* net, const char* clientID);
void* MQTTPacket_publish(unsigned char aHeader, char* data, int datalen);
void* MQTTPacket_publish(unsigned char aHeader, char* data, size_t datalen);
void MQTTPacket_freePublish(Publish* pack);
int MQTTPacket_send_publish(Publish* pack, int dup, int qos, int retained, networkHandles* net, char* clientID);
int MQTTPacket_send_puback(int msgid, networkHandles* net, char* clientID);
void* MQTTPacket_ack(unsigned char aHeader, char* data, int datalen);
int MQTTPacket_send_publish(Publish* pack, int dup, int qos, int retained, networkHandles* net, const char* clientID);
int MQTTPacket_send_puback(int msgid, networkHandles* net, const char* clientID);
void* MQTTPacket_ack(unsigned char aHeader, char* data, size_t datalen);
void MQTTPacket_freeSuback(Suback* pack);
int MQTTPacket_send_pubrec(int msgid, networkHandles* net, char* clientID);
int MQTTPacket_send_pubrel(int msgid, int dup, networkHandles* net, char* clientID);
int MQTTPacket_send_pubcomp(int msgid, networkHandles* net, char* clientID);
int MQTTPacket_send_pubrec(int msgid, networkHandles* net, const char* clientID);
int MQTTPacket_send_pubrel(int msgid, int dup, networkHandles* net, const char* clientID);
int MQTTPacket_send_pubcomp(int msgid, networkHandles* net, const char* clientID);
void MQTTPacket_free_packet(MQTTPacket* pack);
......
......@@ -116,7 +116,7 @@ exit:
* @param datalen the length of the rest of the packet
* @return pointer to the packet structure
*/
void* MQTTPacket_connack(unsigned char aHeader, char* data, int datalen)
void* MQTTPacket_connack(unsigned char aHeader, char* data, size_t datalen)
{
Connack* pack = malloc(sizeof(Connack));
char* curdata = data;
......@@ -136,15 +136,16 @@ void* MQTTPacket_connack(unsigned char aHeader, char* data, int datalen)
* @param clientID the string client identifier, only used for tracing
* @return the completion code (e.g. TCPSOCKET_COMPLETE)
*/
int MQTTPacket_send_pingreq(networkHandles* net, char* clientID)
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, 0, 0);
rc = MQTTPacket_send(net, header, NULL, buflen,0);
Log(LOG_PROTOCOL, 20, NULL, net->socket, clientID, rc);
FUNC_EXIT_RC(rc);
return rc;
......@@ -161,7 +162,7 @@ int MQTTPacket_send_pingreq(networkHandles* net, char* clientID)
* @param clientID the string client identifier, only used for tracing
* @return the completion code (e.g. TCPSOCKET_COMPLETE)
*/
int MQTTPacket_send_subscribe(List* topics, List* qoss, int msgid, int dup, networkHandles* net, char* clientID)
int MQTTPacket_send_subscribe(List* topics, List* qoss, int msgid, int dup, networkHandles* net, const char* clientID)
{
Header header;
char *data, *ptr;
......@@ -204,7 +205,7 @@ int MQTTPacket_send_subscribe(List* topics, List* qoss, int msgid, int dup, netw
* @param datalen the length of the rest of the packet
* @return pointer to the packet structure
*/
void* MQTTPacket_suback(unsigned char aHeader, char* data, int datalen)
void* MQTTPacket_suback(unsigned char aHeader, char* data, size_t datalen)
{
Suback* pack = malloc(sizeof(Suback));
char* curdata = data;
......@@ -234,7 +235,7 @@ void* MQTTPacket_suback(unsigned char aHeader, char* data, int datalen)
* @param clientID the string client identifier, only used for tracing
* @return the completion code (e.g. TCPSOCKET_COMPLETE)
*/
int MQTTPacket_send_unsubscribe(List* topics, int msgid, int dup, networkHandles* net, char* clientID)
int MQTTPacket_send_unsubscribe(List* topics, int msgid, int dup, networkHandles* net, const char* clientID)
{
Header header;
char *data, *ptr;
......
......@@ -22,13 +22,13 @@
#include "MQTTPacket.h"
int MQTTPacket_send_connect(Clients* client, int MQTTVersion);
void* MQTTPacket_connack(unsigned char aHeader, char* data, int datalen);
void* MQTTPacket_connack(unsigned char aHeader, char* data, size_t datalen);
int MQTTPacket_send_pingreq(networkHandles* net, char* clientID);
int MQTTPacket_send_pingreq(networkHandles* net, const char* clientID);
int MQTTPacket_send_subscribe(List* topics, List* qoss, int msgid, int dup, networkHandles* net, char* clientID);
void* MQTTPacket_suback(unsigned char aHeader, char* data, int datalen);
int MQTTPacket_send_subscribe(List* topics, List* qoss, int msgid, int dup, networkHandles* net, const char* clientID);
void* MQTTPacket_suback(unsigned char aHeader, char* data, size_t datalen);
int MQTTPacket_send_unsubscribe(List* topics, int msgid, int dup, networkHandles* net, char* clientID);
int MQTTPacket_send_unsubscribe(List* topics, int msgid, int dup, networkHandles* net, const char* clientID);
#endif
......@@ -102,7 +102,7 @@ int MQTTPersistence_create(MQTTClient_persistence** persistence, int type, void*
* @param serverURI the URI of the remote end.
* @return 0 if success, #MQTTCLIENT_PERSISTENCE_ERROR otherwise.
*/
int MQTTPersistence_initialize(Clients *c, char *serverURI)
int MQTTPersistence_initialize(Clients *c, const char *serverURI)
{
int rc = 0;
......@@ -264,7 +264,7 @@ int MQTTPersistence_restore(Clients *c)
* @param buffer the persisted data.
* @param buflen the number of bytes of the data buffer.
*/
void* MQTTPersistence_restorePacket(char* buffer, int buflen)
void* MQTTPersistence_restorePacket(char* buffer, size_t buflen)
{
void* pack = NULL;
Header header;
......@@ -302,7 +302,7 @@ void* MQTTPersistence_restorePacket(char* buffer, int buflen)
* @param content the message to add.
* @param size size of the message.
*/
void MQTTPersistence_insertInOrder(List* list, void* content, int size)
void MQTTPersistence_insertInOrder(List* list, void* content, size_t size)
{
ListElement* index = NULL;
ListElement* current = NULL;
......@@ -333,8 +333,8 @@ void MQTTPersistence_insertInOrder(List* list, void* content, int size)
* receiving direction.
* @return 0 if success, #MQTTCLIENT_PERSISTENCE_ERROR otherwise.
*/
int MQTTPersistence_put(int socket, char* buf0, int buf0len, int count,
char** buffers, int* buflens, int htype, int msgId, int scr )
int MQTTPersistence_put(int socket, char* buf0, size_t buf0len, int count,
char** buffers, size_t* buflens, int htype, int msgId, int scr )
{
int rc = 0;
extern ClientStates* bstate;
......@@ -531,7 +531,7 @@ int MQTTPersistence_persistQueueEntry(Clients* aclient, MQTTPersistence_qEntry*
}
MQTTPersistence_qEntry* MQTTPersistence_restoreQueueEntry(char* buffer, int buflen)
MQTTPersistence_qEntry* MQTTPersistence_restoreQueueEntry(char* buffer, size_t buflen)
{
MQTTPersistence_qEntry* qe = NULL;
char* ptr = buffer;
......@@ -577,7 +577,7 @@ MQTTPersistence_qEntry* MQTTPersistence_restoreQueueEntry(char* buffer, int bufl
}
void MQTTPersistence_insertInSeqOrder(List* list, MQTTPersistence_qEntry* qEntry, int size)
void MQTTPersistence_insertInSeqOrder(List* list, MQTTPersistence_qEntry* qEntry, size_t size)
{
ListElement* index = NULL;
ListElement* current = NULL;
......
......@@ -16,6 +16,10 @@
* Ian Craggs - fix for bug 432903 - queue persistence
*******************************************************************************/
#if defined(__cplusplus)
extern "C" {
#endif
#include "Clients.h"
/** Stem of the key for a sent PUBLISH QoS1 or QoS2 */
......@@ -31,14 +35,14 @@
#define PERSISTENCE_MAX_KEY_LENGTH 8
int MQTTPersistence_create(MQTTClient_persistence** per, int type, void* pcontext);
int MQTTPersistence_initialize(Clients* c, char* serverURI);
int MQTTPersistence_initialize(Clients* c, const char* serverURI);
int MQTTPersistence_close(Clients* c);
int MQTTPersistence_clear(Clients* c);
int MQTTPersistence_restore(Clients* c);
void* MQTTPersistence_restorePacket(char* buffer, int buflen);
void MQTTPersistence_insertInOrder(List* list, void* content, int size);
int MQTTPersistence_put(int socket, char* buf0, int buf0len, int count,
char** buffers, int* buflens, int htype, int msgId, int scr);
void* MQTTPersistence_restorePacket(char* buffer, size_t buflen);
void MQTTPersistence_insertInOrder(List* list, void* content, size_t size);
int MQTTPersistence_put(int socket, char* buf0, size_t buf0len, int count,
char** buffers, size_t* buflens, int htype, int msgId, int scr);
int MQTTPersistence_remove(Clients* c, char* type, int qos, int msgId);
void MQTTPersistence_wrapMsgID(Clients *c);
......@@ -65,3 +69,6 @@ typedef struct
int MQTTPersistence_unpersistQueueEntry(Clients* client, MQTTPersistence_qEntry* qe);
int MQTTPersistence_persistQueueEntry(Clients* aclient, MQTTPersistence_qEntry* qe);
int MQTTPersistence_restoreMessageQueue(Clients* c);
#ifdef __cplusplus
}
#endif
......@@ -58,7 +58,7 @@
* See ::Persistence_open
*/
int pstopen(void **handle, char* clientID, char* serverURI, void* context)
int pstopen(void **handle, const char* clientID, const char* serverURI, void* context)
{
int rc = 0;
char *dataDir = context;
......
......@@ -20,7 +20,7 @@
#define MESSAGE_FILENAME_EXTENSION ".msg"
/* prototypes of the functions for the default file system persistence */
int pstopen(void** handle, char* clientID, char* serverURI, void* context);
int pstopen(void** handle, const char* clientID, const char* serverURI, void* context);
int pstclose(void* handle);
int pstput(void* handle, char* key, int bufcount, char* buffers[], int buflens[]);
int pstget(void* handle, char* key, char** buffer, int* buflen);
......
......@@ -714,3 +714,30 @@ void MQTTProtocol_freeMessageList(List* msgList)
FUNC_EXIT;
}
/**
* Copy not more than dest_size characters from the string pointed to by src to the array pointed to by dest.
* @param dest the array which characters copy to
* @param src the source string which characters copy from
* @param dest_size the length of characters need copy
* @return the destination string pointer
*/
char *MQTTStrncpy(char *dest, const char *src, size_t dest_size)
{
size_t count = dest_size;
char *temp = dest;
FUNC_ENTRY;
if (dest_size < strlen(src))
Log(TRACE_MIN, -1, "the src string is truncated");
/* We must copy only the first (dest_size - 1) bytes */
while (count > 1 && (*temp++ = *src++))
count--;
*temp = '\0';
FUNC_EXIT;
return dest;
}
......@@ -28,7 +28,6 @@
#define MAX_MSG_ID 65535
#define MAX_CLIENTID_LEN 65535
int MQTTProtocol_assignMsgId(Clients* client);
int MQTTProtocol_startPublish(Clients* pubclient, Publish* publish, int qos, int retained, Messages** m);
Messages* MQTTProtocol_createMessage(Publish* publish, Messages** mm, int qos, int retained);
Publications* MQTTProtocol_storePublication(Publish* publish, int* len);
......@@ -48,4 +47,5 @@ void MQTTProtocol_freeClient(Clients* client);
void MQTTProtocol_emptyMessageList(List* msgList);
void MQTTProtocol_freeMessageList(List* msgList);
char *MQTTStrncpy(char *dest, const char *src, size_t num);
#endif
......@@ -40,10 +40,10 @@ extern ClientStates* bstate;
* @param port the returned port integer
* @return the address string
*/
char* MQTTProtocol_addressPort(char* uri, int* port)
char* MQTTProtocol_addressPort(const char* uri, int* port)
{
char* colon_pos = strrchr(uri, ':'); /* reverse find to allow for ':' in IPv6 addresses */
char* buf = uri;
char* buf;
int len;
FUNC_ENTRY;
......@@ -58,11 +58,17 @@ char* MQTTProtocol_addressPort(char* uri, int* port)
int addr_len = colon_pos - uri;
buf = malloc(addr_len + 1);
*port = atoi(colon_pos + 1);
strncpy(buf, uri, addr_len);
MQTTStrncpy(buf, uri, addr_len+1);
buf[addr_len] = '\0';
}
else
{
int addr_len = strlen(uri)+1;
*port = DEFAULT_PORT;
buf = malloc(addr_len);
MQTTStrncpy(buf, uri, addr_len+1);
buf[addr_len] = '\0';
}
len = strlen(buf);
if (buf[len - 1] == ']')
......@@ -82,9 +88,9 @@ char* MQTTProtocol_addressPort(char* uri, int* port)
* @return return code
*/
#if defined(OPENSSL)
int MQTTProtocol_connect(char* ip_address, Clients* aClient, int ssl, int MQTTVersion)
int MQTTProtocol_connect(const char* ip_address, Clients* aClient, int ssl, int MQTTVersion)
#else
int MQTTProtocol_connect(char* ip_address, Clients* aClient, int MQTTVersion)
int MQTTProtocol_connect(const char* ip_address, Clients* aClient, int MQTTVersion)
#endif
{
int rc, port;
......
......@@ -29,11 +29,11 @@
#define DEFAULT_PORT 1883
void MQTTProtocol_reconnect(char* ip_address, Clients* client);
void MQTTProtocol_reconnect(const char* ip_address, Clients* client);
#if defined(OPENSSL)
int MQTTProtocol_connect(char* ip_address, Clients* acClients, int ssl, int MQTTVersion);
int MQTTProtocol_connect(const char* ip_address, Clients* acClients, int ssl, int MQTTVersion);
#else
int MQTTProtocol_connect(char* ip_address, Clients* acClients, int MQTTVersion);
int MQTTProtocol_connect(const char* ip_address, Clients* acClients, int MQTTVersion);
#endif
int MQTTProtocol_handlePingresps(void* pack, int sock);
int MQTTProtocol_subscribe(Clients* client, List* topics, List* qoss);
......
......@@ -703,7 +703,7 @@ int SSLSocket_close(networkHandles* net)
/* No SSL_writev() provided by OpenSSL. Boo. */
int SSLSocket_putdatas(SSL* ssl, int socket, char* buf0, int buf0len, int count, char** buffers, int* buflens, int* frees)
int SSLSocket_putdatas(SSL* ssl, int socket, char* buf0, size_t buf0len, int count, char** buffers, size_t* buflens, int* frees)
{
int rc = 0;
int i;
......
......@@ -37,7 +37,7 @@ int SSLSocket_getch(SSL* ssl, int socket, char* c);
char *SSLSocket_getdata(SSL* ssl, int socket, int bytes, int* actual_len);
int SSLSocket_close(networkHandles* net);
int SSLSocket_putdatas(SSL* ssl, int socket, char* buf0, int buf0len, int count, char** buffers, int* buflens, int* frees);
int SSLSocket_putdatas(SSL* ssl, int socket, char* buf0, size_t buf0len, int count, char** buffers, size_t* buflens, int* frees);
int SSLSocket_connect(SSL* ssl, int socket);
int SSLSocket_getPendingRead();
......
......@@ -433,7 +433,7 @@ int Socket_writev(int socket, iobuf* iovecs, int count, unsigned long* bytes)
* @param buflens an array of corresponding buffer lengths
* @return completion code, especially TCPSOCKET_INTERRUPTED
*/
int Socket_putdatas(int socket, char* buf0, int buf0len, int count, char** buffers, int* buflens, int* frees)
int Socket_putdatas(int socket, char* buf0, size_t buf0len, int count, char** buffers, size_t* buflens, int* frees)
{
unsigned long bytes = 0L;
iobuf iovecs[5];
......
......@@ -114,7 +114,7 @@ void Socket_outTerminate(void);
int Socket_getReadySocket(int more_work, struct timeval *tp);
int Socket_getch(int socket, char* c);
char *Socket_getdata(int socket, int bytes, int* actual_len);
int Socket_putdatas(int socket, char* buf0, int buf0len, int count, char** buffers, int* buflens, int* frees);
int Socket_putdatas(int socket, char* buf0, size_t buf0len, int count, char** buffers, size_t* buflens, int* frees);
void Socket_close(int socket);
int Socket_new(char* addr, int port, int* socket);
......
......@@ -69,12 +69,12 @@ valid_ranges[] =
* @param data the bytes to check for a valid UTF-8 char
* @return pointer to the start of the next UTF-8 character in "data"
*/
char* UTF8_char_validate(int len, char* data)
const char* UTF8_char_validate(int len, const char* data)
{
int good = 0;
int charlen = 2;
int i, j;
char *rc = NULL;
const char *rc = NULL;
FUNC_ENTRY;
/* first work out how many bytes this char is encoded in */
......@@ -121,9 +121,9 @@ char* UTF8_char_validate(int len, char* data)
* @param data the bytes to check for valid UTF-8 characters
* @return 1 (true) if the string has only UTF-8 characters, 0 (false) otherwise
*/
int UTF8_validate(int len, char* data)
int UTF8_validate(int len, const char* data)
{
char* curdata = NULL;
const char* curdata = NULL;
int rc = 0;
FUNC_ENTRY;
......@@ -148,7 +148,7 @@ exit:
* @param string the string to check for valid UTF-8 characters
* @return 1 (true) if the string has only UTF-8 characters, 0 (false) otherwise
*/
int UTF8_validateString(char* string)
int UTF8_validateString(const char* string)
{
int rc = 0;
......
......@@ -18,6 +18,6 @@
#define UTF8_H
int UTF8_validate(int len, char* data);
int UTF8_validateString(char* string);
int UTF8_validateString(const char* string);
#endif
......@@ -64,6 +64,8 @@ openssl ca -config openssl.cnf -name CA_signing -revoke client-revoked.crt
openssl ca -config openssl.cnf -name CA_signing -gencrl -out crl.pem
cat test-signing-ca.crt test-root-ca.crt > all-ca.crt
cat client.crt client.key all-ca.crt > client.pem
#mkdir certs
#cp test-signing-ca.crt certs/test-signing-ca.pem
#cp test-root-ca.crt certs/test-root.ca.pem
......
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