Yalgaar mBed SDK for real-time messaging

Dependents:   YalgaarSDK

Fork of MQTT by Joerg Wende

Committer:
nileshvora
Date:
Tue Mar 14 11:21:33 2017 +0000
Revision:
5:7dde43328c25
Parent:
4:013cbaaeda50
Yalgaar SDK V1.0.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nileshvora 1:c233cee7c15b 1 /** @fileName <yalgaar_api>
nileshvora 1:c233cee7c15b 2 * @brief - <Yalgaar SDK APIS>
nileshvora 1:c233cee7c15b 3 *
nileshvora 1:c233cee7c15b 4 * @Version:V:01:00:000
nileshvora 1:c233cee7c15b 5 *
nileshvora 1:c233cee7c15b 6 *
nileshvora 1:c233cee7c15b 7 * @Copyright:
nileshvora 1:c233cee7c15b 8 * Copyright (c) 2010 System Level Solution (India) pvt.ltd. Corporation. All rights reserved.
nileshvora 1:c233cee7c15b 9 *
nileshvora 1:c233cee7c15b 10 * License: Free License for Yalgaar Users
nileshvora 1:c233cee7c15b 11 * Disclaimer:
nileshvora 1:c233cee7c15b 12 * SLS MAKES NO REPRESENTATION, WARRANTY, OR CONDITION OF ANY KIND, EXPRESS,
nileshvora 1:c233cee7c15b 13 * IMPLIED, STATUTORY, OR OTHERWISE OR IN ANY COMMUNICATION WITH YOU, INCLUDING,
nileshvora 1:c233cee7c15b 14 * BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, SATISFACTORY
nileshvora 1:c233cee7c15b 15 * QUALITY, FITNESS FOR ANY PARTICULAR PURPOSE, NONINFRINGEMENT, AND THEIR
nileshvora 1:c233cee7c15b 16 * EQUIVALENTS.
nileshvora 1:c233cee7c15b 17 */
nileshvora 1:c233cee7c15b 18 #include "yalgaar_api.h"
nileshvora 1:c233cee7c15b 19
nileshvora 1:c233cee7c15b 20 Serial pc2(USBTX, USBRX, 115200);
nileshvora 1:c233cee7c15b 21
nileshvora 1:c233cee7c15b 22 void (* connection_main_Callback)(char *);
nileshvora 1:c233cee7c15b 23 void (* yalgaar_presence_message_recv)(char *);
nileshvora 1:c233cee7c15b 24 void (* yalgaar_error_message)(char *error);
nileshvora 1:c233cee7c15b 25 void (* yalgaar_new_message)(char * message);
nileshvora 1:c233cee7c15b 26 void parse_subscribe_message(char*,char*, unsigned int);
nileshvora 1:c233cee7c15b 27 void subscribe_callback_handler(char*,char*, unsigned int);
nileshvora 1:c233cee7c15b 28
nileshvora 1:c233cee7c15b 29 char uuid_general[YALGAAR_MAX_UUID_STR_COUNT];
nileshvora 1:c233cee7c15b 30 char gclient_key[YALGAAR_CLIENT_KEY_MAX_LENGTH];
nileshvora 1:c233cee7c15b 31
nileshvora 1:c233cee7c15b 32 const char *YALGAAR_ERROR_LIST[]= {
nileshvora 1:c233cee7c15b 33 "ClientId should not be null.",
nileshvora 1:c233cee7c15b 34 "Invalid ClientId.",
nileshvora 1:c233cee7c15b 35 "Invalid ClientKey.ClientKey is not registered. ",
nileshvora 1:c233cee7c15b 36 "Invalid Uuid.Only alpha numeric,hyphens,@,underscore allowed and maximum length must be 50.",
nileshvora 1:c233cee7c15b 37 "ClientKey is not active.",
nileshvora 1:c233cee7c15b 38 "SSL is not enable.",
nileshvora 1:c233cee7c15b 39 "The maximum connection limit has been reached.",
nileshvora 1:c233cee7c15b 40 "Invalid subscribe channel.",
nileshvora 1:c233cee7c15b 41 "Invalid subscribe channel.ClientKey does not match.",
nileshvora 1:c233cee7c15b 42 "Multiple subscribe channels are not allowed. Multiplexing is not enable.",
nileshvora 1:c233cee7c15b 43 "Invalid subscribe channel.Only alpha numeric,hyphens,@,underscore allowed and maximum length must be 50.",
nileshvora 1:c233cee7c15b 44 "Storage is not enable.",
nileshvora 1:c233cee7c15b 45 "Presence is not enable.",
nileshvora 1:c233cee7c15b 46 "Entered history channel has not been subscribed.",
nileshvora 1:c233cee7c15b 47 "Message can not be null.",
nileshvora 1:c233cee7c15b 48 "Invalid publish channel.",
nileshvora 1:c233cee7c15b 49 "Invalid publish channel.ClientKey does not match.",
nileshvora 1:c233cee7c15b 50 "Message count exceeds maximum limit.",
nileshvora 1:c233cee7c15b 51 "Message size exceeds maximum limit.",
nileshvora 1:c233cee7c15b 52 "Invalid publish channel.Only alpha numeric,hyphens,@,underscore allowed and maximum length must be 50.",
nileshvora 1:c233cee7c15b 53 "Invalid UnSubscribe channel.",
nileshvora 1:c233cee7c15b 54 "Invalid UnSubscribe channel.ClientKey does not match.",
nileshvora 1:c233cee7c15b 55 "Invalid UnSubscribe channel.Only alpha numeric,hyphens,@,underscore allowed and maximum length must be 50."
nileshvora 1:c233cee7c15b 56 };
nileshvora 1:c233cee7c15b 57
nileshvora 1:c233cee7c15b 58 /**********************************************************************************
nileshvora 1:c233cee7c15b 59 * @name : yalgaar_error_t yalgaar_wrapper_validate_string(const char * str)
nileshvora 1:c233cee7c15b 60 * @param const char * str : char pointer str parameter contains string which have to validate.
nileshvora 1:c233cee7c15b 61 * @return yalgaar_error_t : function returns error id.
nileshvora 1:c233cee7c15b 62 * @brief : validate the uuid for proper alpha numeric value(as per defined).
nileshvora 1:c233cee7c15b 63 **********************************************************************************/
nileshvora 1:c233cee7c15b 64 Yalgaar_Error_t yalgaar_wrapper_validate_string(const char * str)
nileshvora 1:c233cee7c15b 65 {
nileshvora 1:c233cee7c15b 66 char a = strlen(str);
nileshvora 1:c233cee7c15b 67 int i = 0;
nileshvora 1:c233cee7c15b 68
nileshvora 1:c233cee7c15b 69 if(a > YALGAAR_MAX_CHANNEL_NAME_LENGTH) {
nileshvora 1:c233cee7c15b 70 return INVL_STRING;
nileshvora 1:c233cee7c15b 71 }
nileshvora 1:c233cee7c15b 72 for(i=0; i<a; i++) {
nileshvora 1:c233cee7c15b 73 if (0x3f < str[i]) {
nileshvora 1:c233cee7c15b 74 if(str[i] < 0x5b) {
nileshvora 1:c233cee7c15b 75 continue;
nileshvora 1:c233cee7c15b 76 }
nileshvora 1:c233cee7c15b 77 }
nileshvora 1:c233cee7c15b 78 if(0x30 <=str[i]) {
nileshvora 1:c233cee7c15b 79 if(str[i] <= 0x39) {
nileshvora 1:c233cee7c15b 80 continue;
nileshvora 1:c233cee7c15b 81 }
nileshvora 1:c233cee7c15b 82 }
nileshvora 1:c233cee7c15b 83 if(0x61 <=str[i]) {
nileshvora 1:c233cee7c15b 84 if(str[i] <= 0x7a) {
nileshvora 1:c233cee7c15b 85 continue;
nileshvora 1:c233cee7c15b 86 }
nileshvora 1:c233cee7c15b 87 }
nileshvora 1:c233cee7c15b 88 if(str[i] == 0x5f) {
nileshvora 1:c233cee7c15b 89 continue;
nileshvora 1:c233cee7c15b 90 }
nileshvora 1:c233cee7c15b 91 if(str[i] == 0x2d) {
nileshvora 1:c233cee7c15b 92 continue;
nileshvora 1:c233cee7c15b 93 }
nileshvora 1:c233cee7c15b 94 return INVL_STRING;
nileshvora 1:c233cee7c15b 95 }
nileshvora 1:c233cee7c15b 96
nileshvora 1:c233cee7c15b 97 return SUCCESS;
nileshvora 1:c233cee7c15b 98 }
nileshvora 1:c233cee7c15b 99 /**********************************************************************************
nileshvora 1:c233cee7c15b 100 * @name : static char *rand_string(char *str, size_t size)
nileshvora 1:c233cee7c15b 101 * @param char *str : str is used to store generated random string for UUID.
nileshvora 1:c233cee7c15b 102 * @param size_t size : size is used into string generation for random string length.
nileshvora 1:c233cee7c15b 103 * @return void :
nileshvora 1:c233cee7c15b 104 * @brief : generate random string for dynamic UUID for topic string creation.
nileshvora 1:c233cee7c15b 105 **********************************************************************************/
nileshvora 1:c233cee7c15b 106 void rand_string(char *str, size_t size)
nileshvora 1:c233cee7c15b 107 {
nileshvora 1:c233cee7c15b 108 const char charset[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJK";
nileshvora 1:c233cee7c15b 109 if (size) {
nileshvora 1:c233cee7c15b 110 size_t n;
nileshvora 1:c233cee7c15b 111 --size;
nileshvora 1:c233cee7c15b 112 for (n = 0; n < size; n++) {
nileshvora 1:c233cee7c15b 113 int key = rand() % (int) (sizeof charset - 1);
nileshvora 1:c233cee7c15b 114 str[n] = charset[key];
nileshvora 1:c233cee7c15b 115 }
nileshvora 1:c233cee7c15b 116 str[size] = '\0';
nileshvora 1:c233cee7c15b 117 }
nileshvora 1:c233cee7c15b 118 }
nileshvora 1:c233cee7c15b 119 /**********************************************************************************
nileshvora 1:c233cee7c15b 120 * @name : char* rand_string_alloc(size_t size)
nileshvora 1:c233cee7c15b 121 * @param size_t size : size parameter is used to malloc size for random string.
nileshvora 1:c233cee7c15b 122 * @return char * : returns generaed random string pointer.
nileshvora 1:c233cee7c15b 123 * @brief : memory allocate for variable to store rand string.
nileshvora 1:c233cee7c15b 124 **********************************************************************************/
nileshvora 1:c233cee7c15b 125 char* rand_string_alloc(size_t size)
nileshvora 1:c233cee7c15b 126 {
nileshvora 1:c233cee7c15b 127 char *s = (char *)malloc(size + 1);
nileshvora 1:c233cee7c15b 128 if (s) {
nileshvora 1:c233cee7c15b 129 rand_string(s, size);
nileshvora 1:c233cee7c15b 130 }
nileshvora 1:c233cee7c15b 131 return s;
nileshvora 1:c233cee7c15b 132 }
nileshvora 1:c233cee7c15b 133
nileshvora 1:c233cee7c15b 134 /**********************************************************************************
nileshvora 1:c233cee7c15b 135 * @name : void enum_to_message(yalgaar_error_t *error_msg,unsigned char *errorString)
nileshvora 1:c233cee7c15b 136 * @param error_msg : error_msg is int parameter for error message enum.
nileshvora 1:c233cee7c15b 137 * @param errorString : errorString is char pointer, error string copy from YALGAAR_ERROR_LIST & stored into errorString
nileshvora 1:c233cee7c15b 138 * @return void :
nileshvora 1:c233cee7c15b 139 * @brief : convert error Id(enum) to error message and set into char pointer.
nileshvora 1:c233cee7c15b 140 **********************************************************************************/
nileshvora 1:c233cee7c15b 141 void yalgaar::enum_to_message(int error_msg,char *errorString)
nileshvora 1:c233cee7c15b 142 {
nileshvora 1:c233cee7c15b 143 if(error_msg==CLIENT_NULL) {
nileshvora 1:c233cee7c15b 144 strncpy(errorString,YALGAAR_ERROR_LIST[0],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 145 } else if(error_msg==CLIENT_NOT_VALID) {
nileshvora 1:c233cee7c15b 146 strncpy(errorString,YALGAAR_ERROR_LIST[1],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 147 } else if(error_msg==CLIENT_KEY_NOT_REG) {
nileshvora 1:c233cee7c15b 148 strncpy(errorString,YALGAAR_ERROR_LIST[2],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 149 } else if(error_msg==UUID_NOT_VALID) {
nileshvora 1:c233cee7c15b 150 strncpy(errorString,YALGAAR_ERROR_LIST[3],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 151 } else if(error_msg==CLIENT_KEY_NOT_ACTIVE) {
nileshvora 1:c233cee7c15b 152 strncpy(errorString,YALGAAR_ERROR_LIST[4],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 153 } else if(error_msg==SSL_NOT_ENABLE) {
nileshvora 1:c233cee7c15b 154 strncpy(errorString,YALGAAR_ERROR_LIST[5],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 155 } else if(error_msg==CONNECTION_LIMIT_EXCEED) {
nileshvora 1:c233cee7c15b 156 strncpy(errorString,YALGAAR_ERROR_LIST[6],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 157 } else if(error_msg==SUBCRIPTION_NOT_VALID) {
nileshvora 1:c233cee7c15b 158 strncpy(errorString,YALGAAR_ERROR_LIST[7],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 159 } else if(error_msg==SUBCRIPTION_CLIENT_KEY_NOT_MATCH) {
nileshvora 1:c233cee7c15b 160 strncpy(errorString,YALGAAR_ERROR_LIST[8],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 161 } else if(error_msg==MULTIPLE_SUBCRIBES_NOT_ALLOWED) {
nileshvora 1:c233cee7c15b 162 strncpy(errorString,YALGAAR_ERROR_LIST[9],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 163 } else if(error_msg==SUBCRIBE_CHANNEL_LENGTH_EXCEED) {
nileshvora 1:c233cee7c15b 164 strncpy(errorString,YALGAAR_ERROR_LIST[10],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 165 } else if(error_msg==STORAGE_NOT_ENABLE) {
nileshvora 1:c233cee7c15b 166 strncpy(errorString,YALGAAR_ERROR_LIST[11],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 167 } else if(error_msg==PRESENCE_NOT_ENABLE) {
nileshvora 1:c233cee7c15b 168 strncpy(errorString,YALGAAR_ERROR_LIST[12],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 169 } else if(error_msg==HISTORY_CHANNEL_NOT_SUBCRIBE) {
nileshvora 1:c233cee7c15b 170 strncpy(errorString,YALGAAR_ERROR_LIST[13],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 171 } else if(error_msg==MESSAGE_NOT_NULL) {
nileshvora 1:c233cee7c15b 172 strncpy(errorString,YALGAAR_ERROR_LIST[14],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 173 } else if(error_msg==PUBLISH_CHANNEL_NOT_VALID) {
nileshvora 1:c233cee7c15b 174 strncpy(errorString,YALGAAR_ERROR_LIST[15],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 175 } else if(error_msg==PUBLISH_CLIENT_KEY_NOT_MATCH) {
nileshvora 1:c233cee7c15b 176 strncpy(errorString,YALGAAR_ERROR_LIST[16],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 177 } else if(error_msg==MESSAGE_CNT_EXCEED) {
nileshvora 1:c233cee7c15b 178 strncpy(errorString,YALGAAR_ERROR_LIST[17],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 179 } else if(error_msg==MESSAGE_SIZE_EXCEED) {
nileshvora 1:c233cee7c15b 180 strncpy(errorString,YALGAAR_ERROR_LIST[18],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 181 } else if(error_msg==MESSAGE_LENGTH_EXCEED) {
nileshvora 1:c233cee7c15b 182 strncpy(errorString,YALGAAR_ERROR_LIST[19],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 183 } else if(error_msg==UNSUBSCRIBE_CHANNEL_NOT_VALID) {
nileshvora 1:c233cee7c15b 184 strncpy(errorString,YALGAAR_ERROR_LIST[20],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 185 } else if(error_msg==UNSUBSCRIBE_CLIENT_KEY_NOT_MATCH) {
nileshvora 1:c233cee7c15b 186 strncpy(errorString,YALGAAR_ERROR_LIST[21],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 187 } else if(error_msg==UNSUBSCRIBE_CHANNEL_LENGTH_EXCEED) {
nileshvora 1:c233cee7c15b 188 strncpy(errorString,YALGAAR_ERROR_LIST[22],YALGAAR_ERROR_MESSAGE_LENGTH);
nileshvora 1:c233cee7c15b 189 } else {
nileshvora 1:c233cee7c15b 190 strcpy(errorString,"Undefined Error");
nileshvora 1:c233cee7c15b 191 }
nileshvora 1:c233cee7c15b 192 return;
nileshvora 1:c233cee7c15b 193 }
nileshvora 1:c233cee7c15b 194 /**********************************************************************************
nileshvora 1:c233cee7c15b 195 * @name : void parse_subscribe_message(char* topic, char* payload, unsigned int length)
nileshvora 1:c233cee7c15b 196 * @param char * topic : topicName parameter have received message topic name.
nileshvora 1:c233cee7c15b 197 * @param unsigned int length : payload_len parameter have Received message payload length.
nileshvora 1:c233cee7c15b 198 * @param uint8_t* payload : payload * have row data of received message for parsing
nileshvora 1:c233cee7c15b 199 * @return void : .
nileshvora 1:c233cee7c15b 200 * @brief : filter message using subscribe message for specific message.
nileshvora 1:c233cee7c15b 201 **********************************************************************************/
nileshvora 1:c233cee7c15b 202 void parse_subscribe_message(char* topic, char* payload, unsigned int length)
nileshvora 1:c233cee7c15b 203 {
nileshvora 1:c233cee7c15b 204 char temppayload[length];
nileshvora 1:c233cee7c15b 205 char * start_string =NULL;
nileshvora 1:c233cee7c15b 206 memset(temppayload,0,length);
nileshvora 1:c233cee7c15b 207 for (int i=0; i<length; i++) {
nileshvora 1:c233cee7c15b 208 temppayload[i] = payload[i];
nileshvora 1:c233cee7c15b 209 }
nileshvora 1:c233cee7c15b 210 start_string = strstr(temppayload,"isPresence");
nileshvora 1:c233cee7c15b 211 if(start_string != NULL) {
nileshvora 1:c233cee7c15b 212 yalgaar_presence_message_recv(payload);
nileshvora 1:c233cee7c15b 213 } else {
nileshvora 1:c233cee7c15b 214 yalgaar_new_message(payload);
nileshvora 1:c233cee7c15b 215 }
nileshvora 1:c233cee7c15b 216
nileshvora 1:c233cee7c15b 217 }
nileshvora 1:c233cee7c15b 218 /**********************************************************************************
nileshvora 1:c233cee7c15b 219 * @name : void subscribe_callback_handler(char* topic, char* payload, unsigned int length)
nileshvora 1:c233cee7c15b 220 * @param char* topic : subscribe topic for yalgaar
nileshvora 1:c233cee7c15b 221 * @param uint8_t* payload : Payload of recieve message
nileshvora 1:c233cee7c15b 222 * @param unsigned int length : length of recieve mesaage
nileshvora 1:c233cee7c15b 223 * @return void :
nileshvora 1:c233cee7c15b 224 * @brief : this function will called when any message received on specific subscribed topic.
nileshvora 1:c233cee7c15b 225 **********************************************************************************/
nileshvora 1:c233cee7c15b 226 void subscribe_callback_handler(char* topic, char* payload, unsigned int length)
nileshvora 1:c233cee7c15b 227 {
nileshvora 1:c233cee7c15b 228 parse_subscribe_message(topic,payload,length);
nileshvora 1:c233cee7c15b 229 }
nileshvora 1:c233cee7c15b 230
nileshvora 1:c233cee7c15b 231 /**********************************************************************************
nileshvora 1:c233cee7c15b 232 * @name : Yalgaar_Error_t yalgaar::yalgaar_connect(const char* id,void(*connectionCallback)( int,char * ))
nileshvora 1:c233cee7c15b 233 * @param char *clientKey : clientkey contains the yalgaar server clientKey for all SDK.
nileshvora 1:c233cee7c15b 234 * @param void(*connectionCallback)( int,char* ) : connectionCallback is a function pointer of connect callback function.
nileshvora 1:c233cee7c15b 235 * @return Yalgaar_Error_t : contains the success or failure status of connection.
nileshvora 1:c233cee7c15b 236 * @brief : This function is called before any other function of this SDK for init the mosquitto library and it will get connected to the yalgaar server.
nileshvora 1:c233cee7c15b 237 **********************************************************************************/
nileshvora 1:c233cee7c15b 238 Yalgaar_Error_t yalgaar::yalgaar_connect(const char* clientKey,const char *uuid,void(*connectionCallback)(char * ))
nileshvora 1:c233cee7c15b 239 {
nileshvora 1:c233cee7c15b 240 char clientID[YALGAAR_CLIENT_DEFAULT_STRING_LEN];
nileshvora 1:c233cee7c15b 241 bool ret;
nileshvora 1:c233cee7c15b 242
nileshvora 1:c233cee7c15b 243 //UUID Validation
nileshvora 1:c233cee7c15b 244 if(clientKey == NULL || clientKey == "") {
nileshvora 1:c233cee7c15b 245 return CLIENT_NULL;
nileshvora 1:c233cee7c15b 246 }
nileshvora 1:c233cee7c15b 247 if(uuid == NULL || uuid == "") {
nileshvora 1:c233cee7c15b 248 uuid = rand_string_alloc(YALGAAR_MAX_UUID_STR_COUNT);
nileshvora 1:c233cee7c15b 249 strncpy(uuid_general,uuid,sizeof(uuid_general));
nileshvora 1:c233cee7c15b 250 } else {
nileshvora 1:c233cee7c15b 251 if(yalgaar_wrapper_validate_string(uuid) != SUCCESS) {
nileshvora 1:c233cee7c15b 252 return UUID_NOT_VALID;
nileshvora 1:c233cee7c15b 253 }
nileshvora 1:c233cee7c15b 254
nileshvora 1:c233cee7c15b 255 strncpy(uuid_general,uuid,sizeof(uuid_general));
nileshvora 1:c233cee7c15b 256 }
nileshvora 1:c233cee7c15b 257 sprintf(clientID,"%s/%s",clientKey,uuid_general);
nileshvora 1:c233cee7c15b 258 connection_main_Callback=connectionCallback;
nileshvora 1:c233cee7c15b 259 snprintf(gclient_key,sizeof(gclient_key),"%s",(char *)clientKey);
nileshvora 1:c233cee7c15b 260 ret=connect(clientID);
nileshvora 4:013cbaaeda50 261 wait(5.0f);
nileshvora 1:c233cee7c15b 262 connection_state(ret);
nileshvora 1:c233cee7c15b 263 if (ret == 1)
nileshvora 1:c233cee7c15b 264 return SUCCESS;
nileshvora 1:c233cee7c15b 265 else
nileshvora 1:c233cee7c15b 266 return FAILURE;
nileshvora 1:c233cee7c15b 267 }
nileshvora 1:c233cee7c15b 268
nileshvora 1:c233cee7c15b 269 /**********************************************************************************
nileshvora 1:c233cee7c15b 270 * @name : Yalgaar_Error_t yalgaar_publish(const char *topic,char *payload)
nileshvora 1:c233cee7c15b 271 * @param const char *topic : channel name to publish on specific topic
nileshvora 1:c233cee7c15b 272 * @param char *payload : message string to publish
nileshvora 1:c233cee7c15b 273 * @return Yalgaar_Error_t : it will return success or failure status of publish message.
nileshvora 1:c233cee7c15b 274 * @brief : this function is called to publish any message to specific topic.
nileshvora 1:c233cee7c15b 275 **********************************************************************************/
nileshvora 1:c233cee7c15b 276 Yalgaar_Error_t yalgaar::yalgaar_publish(const char* topic, char* payload)
nileshvora 1:c233cee7c15b 277 {
nileshvora 1:c233cee7c15b 278 char publish_channel[128]= {0};
nileshvora 1:c233cee7c15b 279 if(topic == NULL || topic == "") {
nileshvora 1:c233cee7c15b 280 return MESSAGE_LENGTH_EXCEED;
nileshvora 1:c233cee7c15b 281 }
nileshvora 1:c233cee7c15b 282 if(yalgaar_wrapper_validate_string(topic) != SUCCESS) {
nileshvora 1:c233cee7c15b 283 return SUBCRIBE_CHANNEL_LENGTH_EXCEED;
nileshvora 1:c233cee7c15b 284 } else {
nileshvora 1:c233cee7c15b 285 if(payload=="" || payload==NULL) {
nileshvora 1:c233cee7c15b 286 return MESSAGE_NOT_NULL;
nileshvora 1:c233cee7c15b 287 }
nileshvora 1:c233cee7c15b 288 }
nileshvora 1:c233cee7c15b 289 sprintf(publish_channel,"%s/%s",gclient_key,topic);
nileshvora 1:c233cee7c15b 290 if(publish(publish_channel,payload) == SUCCESS) {
nileshvora 1:c233cee7c15b 291 return SUCCESS;
nileshvora 1:c233cee7c15b 292 } else {
nileshvora 1:c233cee7c15b 293 return FAILURE;
nileshvora 1:c233cee7c15b 294 }
nileshvora 1:c233cee7c15b 295 }
nileshvora 1:c233cee7c15b 296 /**********************************************************************************
nileshvora 1:c233cee7c15b 297 * @name : Yalgaar_Error_t yalgaar::yalgaar_subscribe(char * subscribe_channel,void(* sub_mesg_callback)(void *),void(*presence_mesg_callback)(void *), void(*error_msg_callback)(void *))
nileshvora 1:c233cee7c15b 298 * @param char * subscribe_channel : topic name of subscription
nileshvora 1:c233cee7c15b 299 * @param void(* sub_mesg_callback)(void *) : function pointer of normal message receive callback function
nileshvora 1:c233cee7c15b 300 * @param void(*presence_mesg_callback)(struct presence_t *) : function pointer of presence message callback function
nileshvora 1:c233cee7c15b 301 * @param void(*error_msg_callback)(void *) : function pointer of error message callback function
nileshvora 1:c233cee7c15b 302 * @return Yalgaar_Error_t : it will return success or failure status of subscription.
nileshvora 1:c233cee7c15b 303 * @brief : this function will use to subscribe specific topic with clientID. set callback_function for each message type.
nileshvora 1:c233cee7c15b 304 **********************************************************************************/
nileshvora 1:c233cee7c15b 305 Yalgaar_Error_t yalgaar::yalgaar_subscribe(char * subscribe_channel,void(* sub_mesg_callback)(char *),void(*presence_mesg_callback)(char *), void(*error_msg_callback)(char *))
nileshvora 1:c233cee7c15b 306 {
nileshvora 1:c233cee7c15b 307 char sub_channel[YALGAAR_MAX_CHANNEL_NAME_LENGTH];
nileshvora 1:c233cee7c15b 308 if (subscribe_channel == NULL || subscribe_channel == "") {
nileshvora 1:c233cee7c15b 309 return SUBCRIPTION_NOT_VALID;
nileshvora 1:c233cee7c15b 310 }
nileshvora 1:c233cee7c15b 311 if(yalgaar_wrapper_validate_string(subscribe_channel) != SUCCESS) {
nileshvora 1:c233cee7c15b 312 return SUBCRIBE_CHANNEL_LENGTH_EXCEED;
nileshvora 1:c233cee7c15b 313 } else {
nileshvora 1:c233cee7c15b 314 if(presence_mesg_callback != NULL)
nileshvora 1:c233cee7c15b 315 yalgaar_presence_message_recv=presence_mesg_callback;
nileshvora 1:c233cee7c15b 316 yalgaar_new_message=sub_mesg_callback;
nileshvora 1:c233cee7c15b 317 yalgaar_error_message=error_msg_callback;
nileshvora 1:c233cee7c15b 318 setCallback(subscribe_callback_handler);
nileshvora 1:c233cee7c15b 319 sprintf(sub_channel,"%s/%s",gclient_key,subscribe_channel);
nileshvora 1:c233cee7c15b 320 if(subscribe(sub_channel) == SUCCESS)
nileshvora 1:c233cee7c15b 321 return SUCCESS;
nileshvora 1:c233cee7c15b 322 else
nileshvora 1:c233cee7c15b 323 return FAILURE;
nileshvora 1:c233cee7c15b 324 }
nileshvora 1:c233cee7c15b 325 }
nileshvora 1:c233cee7c15b 326
nileshvora 1:c233cee7c15b 327 /**********************************************************************************
nileshvora 1:c233cee7c15b 328 * @name : Yalgaar_Error_t yalgaar::yalgaar_subscribes(uint8_t **subscribe_channel,void(* sub_mesg_callback)(void *),void(*presence_mesg_callback)(void *), void(*error_msg_callback)(void *))
nileshvora 1:c233cee7c15b 329 * @param uint8_t * subscribe_channel : topic name of subscription
nileshvora 1:c233cee7c15b 330 * @param void(* sub_mesg_callback)(void *) : function pointer of normal message receive callback function
nileshvora 1:c233cee7c15b 331 * @param void(*presence_mesg_callback)(struct presence_t *) : function pointer of presense message callback funcation
nileshvora 1:c233cee7c15b 332 * @param void(*error_msg_callback)(void *) : function pointer of error message callback function
nileshvora 1:c233cee7c15b 333 * @return Yalgaar_Error_t : it will return success or failure status of subscription.
nileshvora 1:c233cee7c15b 334 * @brief : this function will use to subscribe specific topic with clientID. set callback_function for each message type.
nileshvora 1:c233cee7c15b 335 **********************************************************************************/
nileshvora 1:c233cee7c15b 336 Yalgaar_Error_t yalgaar::yalgaar_subscribes(char **subscribe_channel,void(* sub_mesg_callback)(char *),void(*presence_mesg_callback)(char *), void(*error_msg_callback)(char *))
nileshvora 1:c233cee7c15b 337 {
nileshvora 1:c233cee7c15b 338 unsigned int iterator=0;
nileshvora 1:c233cee7c15b 339 Yalgaar_Error_t ret;
nileshvora 1:c233cee7c15b 340 bool sub_ret;
nileshvora 1:c233cee7c15b 341 char sub_channel[YALGAAR_MAX_CHANNEL_NAME_LENGTH];
nileshvora 1:c233cee7c15b 342 if(presence_mesg_callback != NULL)
nileshvora 1:c233cee7c15b 343 yalgaar_presence_message_recv=presence_mesg_callback;
nileshvora 1:c233cee7c15b 344 yalgaar_new_message=sub_mesg_callback;
nileshvora 1:c233cee7c15b 345 yalgaar_error_message=error_msg_callback;
nileshvora 1:c233cee7c15b 346 setCallback(subscribe_callback_handler);
nileshvora 1:c233cee7c15b 347 for(iterator=0; subscribe_channel[iterator]!= '\0' ; iterator++) {
nileshvora 1:c233cee7c15b 348 if (subscribe_channel[iterator] == NULL || subscribe_channel[iterator] == "") {
nileshvora 1:c233cee7c15b 349 return SUBCRIBE_CHANNEL_LENGTH_EXCEED;
nileshvora 1:c233cee7c15b 350 }
nileshvora 1:c233cee7c15b 351 if(yalgaar_wrapper_validate_string(subscribe_channel[iterator]) != SUCCESS) {
nileshvora 1:c233cee7c15b 352 ret = SUBCRIBE_CHANNEL_LENGTH_EXCEED;
nileshvora 1:c233cee7c15b 353 return ret;
nileshvora 1:c233cee7c15b 354 } else {
nileshvora 1:c233cee7c15b 355 memset(sub_channel,0,sizeof(sub_channel));
nileshvora 1:c233cee7c15b 356 sprintf(sub_channel,"%s/%s",gclient_key,subscribe_channel[iterator]);
nileshvora 1:c233cee7c15b 357 sub_ret = subscribe(sub_channel);
nileshvora 1:c233cee7c15b 358 }
nileshvora 1:c233cee7c15b 359 }
nileshvora 1:c233cee7c15b 360 if(sub_ret)
nileshvora 1:c233cee7c15b 361 return SUCCESS;
nileshvora 1:c233cee7c15b 362 else
nileshvora 1:c233cee7c15b 363 return FAILURE;
nileshvora 1:c233cee7c15b 364 }
nileshvora 1:c233cee7c15b 365
nileshvora 1:c233cee7c15b 366 /**********************************************************************************
nileshvora 1:c233cee7c15b 367 * @name : Yalgaar_Error_t yalgaar::yalgaar_unsubscribe(const char* topic)
nileshvora 1:c233cee7c15b 368 * @param const char* topic : channel name for unsubscribe specific topic/channel.
nileshvora 1:c233cee7c15b 369 * @return Yalgaar_Error_t : it will return success or failure status of unsubscribe method.
nileshvora 1:c233cee7c15b 370 * @brief : this function is used to unsubscribe already subscribe topic.
nileshvora 1:c233cee7c15b 371 **********************************************************************************/
nileshvora 1:c233cee7c15b 372 Yalgaar_Error_t yalgaar::yalgaar_unsubscribe(const char* channel)
nileshvora 1:c233cee7c15b 373 {
nileshvora 1:c233cee7c15b 374
nileshvora 1:c233cee7c15b 375 char sub_channel[YALGAAR_MAX_CHANNEL_NAME_LENGTH];
nileshvora 1:c233cee7c15b 376 if(channel == NULL || channel == "") {
nileshvora 1:c233cee7c15b 377 return UNSUBSCRIBE_CHANNEL_LENGTH_EXCEED;
nileshvora 1:c233cee7c15b 378 }
nileshvora 1:c233cee7c15b 379 if(yalgaar_wrapper_validate_string(channel) != SUCCESS) {
nileshvora 1:c233cee7c15b 380 return SUBCRIBE_CHANNEL_LENGTH_EXCEED;
nileshvora 1:c233cee7c15b 381 } else {
nileshvora 1:c233cee7c15b 382 sprintf(sub_channel,"%s/%s",gclient_key,channel);
nileshvora 1:c233cee7c15b 383 if(unsubscribe(sub_channel) == SUCCESS)
nileshvora 1:c233cee7c15b 384 return SUCCESS;
nileshvora 1:c233cee7c15b 385 else
nileshvora 1:c233cee7c15b 386 return FAILURE;
nileshvora 1:c233cee7c15b 387 }
nileshvora 1:c233cee7c15b 388
nileshvora 1:c233cee7c15b 389 }
nileshvora 1:c233cee7c15b 390 /**********************************************************************************
nileshvora 1:c233cee7c15b 391 * @name : int yalgaar::connection_state()
nileshvora 1:c233cee7c15b 392 * @return int : it will return retrun of connect reurn code
nileshvora 1:c233cee7c15b 393 * @brief : this function is used to check state of connection state
nileshvora 1:c233cee7c15b 394 **********************************************************************************/
nileshvora 1:c233cee7c15b 395 void yalgaar::connection_state(bool ret)
nileshvora 1:c233cee7c15b 396 {
nileshvora 1:c233cee7c15b 397 int error_code;
nileshvora 1:c233cee7c15b 398 char err_message[YALGAAR_ERROR_MESSAGE_LENGTH]= {0};
nileshvora 1:c233cee7c15b 399 if (ret == SUCCESS) {
nileshvora 4:013cbaaeda50 400 connection_main_Callback("Connected successfully");
nileshvora 1:c233cee7c15b 401 } else {
nileshvora 1:c233cee7c15b 402 error_code = mqtt_state();
nileshvora 1:c233cee7c15b 403 enum_to_message(error_code,err_message);
nileshvora 1:c233cee7c15b 404 connection_main_Callback(err_message);
nileshvora 1:c233cee7c15b 405 }
nileshvora 1:c233cee7c15b 406
nileshvora 1:c233cee7c15b 407 }
nileshvora 1:c233cee7c15b 408 /**********************************************************************************
nileshvora 1:c233cee7c15b 409 * @name : boolean yalgaar::yalgaar_loop()
nileshvora 1:c233cee7c15b 410 * @return boolean : it will return success or failure status
nileshvora 1:c233cee7c15b 411 * @brief : this function is used to continue to connection
nileshvora 1:c233cee7c15b 412 **********************************************************************************/
nileshvora 1:c233cee7c15b 413 void yalgaar::yalgaar_loop()
nileshvora 1:c233cee7c15b 414 {
nileshvora 1:c233cee7c15b 415 char err_message[YALGAAR_ERROR_MESSAGE_LENGTH]= {0};
nileshvora 1:c233cee7c15b 416 loop();
nileshvora 1:c233cee7c15b 417 if (pubsub_error_code >=108 && pubsub_error_code <= 111 ) {
nileshvora 1:c233cee7c15b 418 enum_to_message(pubsub_error_code,err_message);
nileshvora 1:c233cee7c15b 419 yalgaar_error_message(err_message);
nileshvora 1:c233cee7c15b 420 pubsub_error_code = 0;
nileshvora 1:c233cee7c15b 421 }
nileshvora 1:c233cee7c15b 422 if (pubsub_error_code >=121 && pubsub_error_code <= 123 ) {
nileshvora 1:c233cee7c15b 423 enum_to_message(pubsub_error_code,err_message);
nileshvora 1:c233cee7c15b 424 yalgaar_error_message(err_message);
nileshvora 1:c233cee7c15b 425 pubsub_error_code = 0;
nileshvora 1:c233cee7c15b 426 }
nileshvora 1:c233cee7c15b 427 if(pubsub_error_code >=115 && pubsub_error_code <= 120 ) {
nileshvora 1:c233cee7c15b 428 enum_to_message(pubsub_error_code,err_message);
nileshvora 1:c233cee7c15b 429 connection_main_Callback(err_message);
nileshvora 1:c233cee7c15b 430 pubsub_error_code = 0;
nileshvora 1:c233cee7c15b 431 }
nileshvora 1:c233cee7c15b 432 }
nileshvora 1:c233cee7c15b 433 /**********************************************************************************
nileshvora 1:c233cee7c15b 434 * @name : boolean yalgaar::is_connected()
nileshvora 1:c233cee7c15b 435 * @return boolean : it will return success or failure status
nileshvora 1:c233cee7c15b 436 * @brief : this function is used to cjheck yalgaar is connect or not
nileshvora 1:c233cee7c15b 437 **********************************************************************************/
nileshvora 1:c233cee7c15b 438 bool yalgaar::yalgaar_connected()
nileshvora 1:c233cee7c15b 439 {
nileshvora 1:c233cee7c15b 440 return connected();
nileshvora 1:c233cee7c15b 441 }
nileshvora 1:c233cee7c15b 442 /**********************************************************************************
nileshvora 1:c233cee7c15b 443 * @name : void yalgaar::yalgaar_disconnect()
nileshvora 1:c233cee7c15b 444 * @return Void :
nileshvora 1:c233cee7c15b 445 * @brief : this function is used to disconnect from yalgaar
nileshvora 1:c233cee7c15b 446 **********************************************************************************/
nileshvora 1:c233cee7c15b 447 void yalgaar::yalgaar_disconnect()
nileshvora 1:c233cee7c15b 448 {
nileshvora 4:013cbaaeda50 449
nileshvora 4:013cbaaeda50 450 disconnect();
nileshvora 4:013cbaaeda50 451 connection_main_Callback("Successfully disconneted");
nileshvora 4:013cbaaeda50 452 return;
nileshvora 1:c233cee7c15b 453 }