Пример #1
0
/* Extract a resolved url and port from a serverurl string. newurl must be
 * a string of at least INET6_ADDRSTRLEN and newport at least 6 bytes. */
bool url_from_serverurl(char *serverurl, char *newurl, char *newport)
{
	char *url = NULL, *port = NULL;
	struct addrinfo addrinfo;
	bool ret = false;

	if (!extract_sockaddr(serverurl, &url, &port)) {
		LOGWARNING("Failed to extract server address from %s", serverurl);
		goto out;
	}
	if (!addrinfo_from_url(url, port, &addrinfo)) {
		LOGWARNING("Failed to extract addrinfo from url %s:%s", url, port);
		goto out;
	}
	if (!url_from_sockaddr((const struct sockaddr *)&addrinfo, newurl, newport)) {
		LOGWARNING("Failed to extract url from sockaddr for original url: %s:%s",
			   url, port);
		goto out;
	}
	ret = true;
out:
	dealloc(url);
	dealloc(port);
	return ret;
}
Пример #2
0
static char *_btc_io(__maybe_unused const char *cmd, char *json, WHERE_FFL_ARGS)
{
	char *ip, *port;
	char *data, *ans, *res, *ptr;
	int fd, ret, red;
	size_t len;

	data = btc_data(json, &len);
	if (!extract_sockaddr(btc_server, &ip, &port)) {
		LOGERR("%s() invalid btc server '%s'",
		        __func__, btc_server);
		return NULL;
	}
	fd = connect_socket(ip, port);
	if (fd < 0) {
		LOGERR("%s() failed to connect to btc server %s",
		        __func__, btc_server);
		return NULL;
	}
	ret = write_socket(fd, data, len);
	if (ret != (int)len) {
		LOGERR("%s() failed to write to btc server %s",
		        __func__, btc_server);
		return NULL;
	}
	red = read_socket(fd, &ans, btc_timeout);
	ans[red] = '\0';
	if (strncasecmp(ans, "HTTP/1.1 200 OK", 15)) {
		char *text = safe_text(ans);
		LOGERR("%s() btc server response not ok: %s",
		       __func__, text);
		free(text);
		free(ans);
		res = strdup(EMPTY);
	} else {
		ptr = strstr(ans, "\n{");
		if (ptr)
			res = strdup(ptr+1);
		else
			res = strdup(EMPTY);
		free(ans);
	}
	return res;
}