in src/mqtt_client.c [1029:1081]
MQTT_CLIENT_HANDLE mqtt_client_init(ON_MQTT_MESSAGE_RECV_CALLBACK msgRecv, ON_MQTT_OPERATION_CALLBACK operation_cb, void* opCallbackCtx, ON_MQTT_ERROR_CALLBACK onErrorCallBack, void* errorCBCtx)
{
MQTT_CLIENT* result;
/*Codes_SRS_MQTT_CLIENT_07_001: [If the parameters ON_MQTT_MESSAGE_RECV_CALLBACK is NULL then mqttclient_init shall return NULL.]*/
if (msgRecv == NULL || operation_cb == NULL)
{
LogError("Invalid parameter specified msgRecv: %p, operation_cb: %p", msgRecv, operation_cb);
result = NULL;
}
else
{
result = malloc(sizeof(MQTT_CLIENT));
if (result == NULL)
{
/*Codes_SRS_MQTT_CLIENT_07_002: [If any failure is encountered then mqttclient_init shall return NULL.]*/
LogError("mqtt_client_init failure: Allocation Failure");
}
else
{
memset(result, 0, sizeof(MQTT_CLIENT));
/*Codes_SRS_MQTT_CLIENT_07_003: [mqttclient_init shall allocate MQTTCLIENT_DATA_INSTANCE and return the MQTTCLIENT_HANDLE on success.]*/
result->packetState = UNKNOWN_TYPE;
result->fnOperationCallback = operation_cb;
result->ctx = opCallbackCtx;
result->fnMessageRecv = msgRecv;
result->fnOnErrorCallBack = onErrorCallBack;
result->errorCBCtx = errorCBCtx;
result->qosValue = DELIVER_AT_MOST_ONCE;
result->packetTickCntr = tickcounter_create();
result->maxPingRespTime = DEFAULT_MAX_PING_RESPONSE_TIME;
if (result->packetTickCntr == NULL)
{
/*Codes_SRS_MQTT_CLIENT_07_002: [If any failure is encountered then mqttclient_init shall return NULL.]*/
LogError("mqtt_client_init failure: tickcounter_create failure");
free(result);
result = NULL;
}
else
{
result->codec_handle = mqtt_codec_create(recvCompleteCallback, result);
if (result->codec_handle == NULL)
{
/*Codes_SRS_MQTT_CLIENT_07_002: [If any failure is encountered then mqttclient_init shall return NULL.]*/
LogError("mqtt_client_init failure: mqtt_codec_create failure");
tickcounter_destroy(result->packetTickCntr);
free(result);
result = NULL;
}
}
}
}
return result;
}