Yalgaar mBed SDK for real-time messaging
Fork of MQTT by
yalgaar_api.cpp@1:c233cee7c15b, 2017-03-10 (annotated)
- Committer:
- nileshvora
- Date:
- Fri Mar 10 13:11:49 2017 +0000
- Revision:
- 1:c233cee7c15b
- Child:
- 4:013cbaaeda50
Yalgaar SDK V:1.0
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:c233cee7c15b | 261 | wait(2.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 | 1:c233cee7c15b | 400 | connection_main_Callback("Connection success full"); |
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 | 1:c233cee7c15b | 449 | connection_main_Callback("Client Successfully disconneted"); |
nileshvora | 1:c233cee7c15b | 450 | return disconnect(); |
nileshvora | 1:c233cee7c15b | 451 | } |