+
+void delete_global_references(JNIEnv *env, jobject obj)
+{
+ LOGI("delete_global_references");
+ if (!env || !obj )
+ {
+ LOGI("Invalid input parameter");
+ return;
+ }
+
+ CADeleteGlobalReferences(env);
+ (*env)->DeleteGlobalRef(env, g_responseListenerObject);
+}
+
+
+bool read_file(const char* name, char** bytes, size_t* length)
+{
+ if (NULL == name)
+ {
+ LOGE("parameter is null");
+ return false;
+ }
+
+ FILE* file;
+ char* buffer;
+ long fileLen;
+
+ // Open file
+ file = fopen(name, "rt");
+ if (!file)
+ {
+ fprintf(stderr, "Unable to open file %s", name);
+ return false;
+ }
+
+ // Get file length
+ fseek(file, 0, SEEK_END);
+ fileLen = ftell(file);
+ if (-1 == fileLen)
+ {
+ fprintf(stderr, "Failed to read file length");
+ fclose(file);
+ return false;
+ }
+ fseek(file, 0, SEEK_SET);
+
+ LOGI("file size: %ld", fileLen);
+
+ // Allocate memory
+ buffer = calloc(1, sizeof(char) * fileLen + 1);
+ if (!buffer)
+ {
+ fprintf(stderr, "Memory error!");
+ fclose(file);
+ return false;
+ }
+
+ // Read file contents into buffer
+ size_t ret = fread(buffer, fileLen, 1, file);
+ if (ret != 1)
+ {
+ printf("Failed to read data from file, %s\n", name);
+ fclose(file);
+ free(buffer);
+ return false;
+ }
+
+ fclose(file);
+
+ LOGI("file bytes: %s", buffer);
+
+ *bytes = buffer;
+ *length = fileLen;
+
+ return true;
+}
+
+void saveFile(const char *payload, size_t payloadSize)
+{
+ // 1. get day
+ uint32_t day = gettodaydate();
+
+ // 2. get time
+ time_t current_time;
+ struct tm * time_info;
+ char timeString[RECEIVED_FILE_NAME_PREFIX_LENGTH];
+
+ time(¤t_time);
+ time_info = localtime(¤t_time);
+
+ strftime(timeString, sizeof(timeString), "%H%M%S", time_info);
+
+ uint32_t path_length = strlen(RECEIVED_FILE_PATH) + RECEIVED_FILE_NAME_LENGTH + 1;
+ char* path = calloc(1, sizeof(char) * path_length);
+ if (path != NULL)
+ {
+ snprintf(path, path_length, RECEIVED_FILE_PATH, day, timeString);
+ LOGI("received file path: %s", path);
+
+ FILE *fp = fopen(path, "wt");
+ fwrite(payload, 1, payloadSize, fp);
+ fclose(fp);
+
+ callback("File Path: ", path);
+ }
+ else
+ {
+ LOGE("path Out of memory");
+ }
+}
+
+uint32_t gettodaydate()
+{
+ uint32_t ldate;
+ time_t clock;
+ struct tm *date;
+
+ clock = time(0);
+ date = localtime(&clock);
+ ldate = date->tm_year * 100000;
+ ldate += (date->tm_mon + 1) * 1000;
+ ldate += date->tm_mday * 10;
+ ldate += date->tm_wday;
+ ldate += 190000000;
+ ldate /= 10;
+
+ return(ldate);
+}