void *events_clientize(void *param) { logprintf(LOG_STACK, "%s(...)", __FUNCTION__); unsigned int failures = 0; while(loop && failures <= 5) { struct ssdp_list_t *ssdp_list = NULL; int standalone = 0; settings_find_number("standalone", &standalone); if(ssdp_seek(&ssdp_list) == -1 || standalone == 1) { logprintf(LOG_DEBUG, "no pilight ssdp connections found"); char server[16] = "127.0.0.1"; if((sockfd = socket_connect(server, (unsigned short)socket_get_port())) == -1) { logprintf(LOG_DEBUG, "could not connect to pilight-daemon"); failures++; continue; } } else { if((sockfd = socket_connect(ssdp_list->ip, ssdp_list->port)) == -1) { logprintf(LOG_DEBUG, "could not connect to pilight-daemon"); failures++; continue; } } if(ssdp_list) { ssdp_free(ssdp_list); } struct JsonNode *jclient = json_mkobject(); struct JsonNode *joptions = json_mkobject(); json_append_member(jclient, "action", json_mkstring("identify")); json_append_member(joptions, "config", json_mknumber(1, 0)); json_append_member(jclient, "options", joptions); json_append_member(jclient, "media", json_mkstring("all")); char *out = json_stringify(jclient, NULL); socket_write(sockfd, out); json_free(out); json_delete(jclient); if(socket_read(sockfd, &recvBuff, 0) != 0 || strcmp(recvBuff, "{\"status\":\"success\"}") != 0) { failures++; continue; } failures = 0; while(loop) { if(socket_read(sockfd, &recvBuff, 0) != 0) { break; } else { events_queue(recvBuff); } } } if(recvBuff) { FREE(recvBuff); recvBuff = NULL; } socket_close(sockfd); return 0; }
char *update_package_version(char *mirror) { int x = 0; size_t l = 0; char stable[] = "stable"; char development[] = "development"; char *nurl = NULL, *output = NULL, *pch = NULL, line[255], *version = malloc(4); int devel = 0; memset(line, '\0', 255); if(!version) { logprintf(LOG_ERR, "out of memory"); exit(EXIT_FAILURE); } settings_find_number("update-development", &devel); if(devel) { nurl = malloc(strlen(mirror)+strlen(development)+41); if(!nurl) { logprintf(LOG_ERR, "out of memory"); exit(EXIT_FAILURE); } sprintf(nurl, "%sdists/%s/main/binary-armhf/Packages.gz", mirror, development); } else { nurl = malloc(strlen(mirror)+strlen(stable)+41); if(!nurl) { logprintf(LOG_ERR, "out of memory"); exit(EXIT_FAILURE); } sprintf(nurl, "%sdists/%s/main/binary-armhf/Packages.gz", mirror, stable); } http_parse_url(nurl, &update_filename); update_ret = http_get(update_filename, &update_data, &update_lg, update_typebuf); strcpy(version, "0.0"); if(update_ret == 200 && strcmp(update_typebuf, "application/x-gzip") == 0) { z_stream strm = {0}; unsigned char out[0x4000]; memset(out, '\0', 0x4000); strm.zalloc = Z_NULL; strm.zfree = Z_NULL; strm.opaque = Z_NULL; strm.next_in = (unsigned char *)update_data; strm.avail_in = (uInt)update_lg; strm.next_out = out; inflateInit2(&strm, 15 | 32); do { strm.avail_out = 0x4000; inflate(&strm, Z_NO_FLUSH); l += strlen((char *)out); output = realloc(output, l+1); if(!output) { logprintf(LOG_ERR, "out of memory"); exit(EXIT_FAILURE); } strcpy(&output[l-strlen((char *)out)], (char *)out); } while(strm.avail_out == 0); inflateEnd(&strm); if(output) { char *tmp = output; x = 0; while(*tmp != '\0') { if(*tmp == '\n' || *tmp == '\0') { if((pch = strstr(line, "Version: ")) > 0) { rmsubstr(line, "Version: "); rmsubstr(line, "\n"); if(update_vercmp(line, version) >= 0) { version = realloc(version, strlen(line)+1); if(!version) { logprintf(LOG_ERR, "out of memory"); exit(EXIT_FAILURE); } strcpy(version, line); } } memset(line, '\0', 255); x=0; } line[x] = *tmp; tmp++; x++; } sfree((void *)&output); } } sfree((void *)&nurl); if(update_filename) sfree((void *)&update_filename); if(update_data) sfree((void *)&update_data); return version; }