コード例 #1
0
ファイル: events.c プロジェクト: Johan-M/pilight
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;
}
コード例 #2
0
ファイル: update.c プロジェクト: knudje/pilight
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;
}