Example #1
0
static bool ser_peerman(struct peer_manager *peers, int fd)
{
	/* write "magic number" (constant first file record) */
	GString *rec = message_str(chain->netmagic, "magic.peers", NULL, 0);
	unsigned int rec_len = rec->len;
	ssize_t wrc = write(fd, rec->str, rec_len);

	g_string_free(rec, TRUE);

	if (wrc != rec_len)
		return false;

	if (debugging)
		fprintf(stderr, "peerman: %u peers to write\n",
			g_list_length(peers->addrlist));

	/* write peer list */
	GList *tmp = peers->addrlist;
	while (tmp) {
		struct peer *peer;

		peer = tmp->data;
		tmp = tmp->next;

		GString *msg_data = g_string_sized_new(sizeof(struct peer));
		ser_peer(msg_data, CADDR_TIME_VERSION, peer);

		rec = message_str(chain->netmagic, "peer",
				  msg_data->str, msg_data->len);

		rec_len = rec->len;
		wrc = write(fd, rec->str, rec_len);

		g_string_free(rec, TRUE);
		g_string_free(msg_data, TRUE);

		if (wrc != rec_len)
			return false;
	}

	return true;
}
Example #2
0
static bool ser_peerman(struct peer_manager *peers, int fd,  const struct chain_info *chain)
{
	/* write "magic number" (constant first file record) */
	cstring *rec = message_str(chain->netmagic, "magic.peers", NULL, 0);
	unsigned int rec_len = rec->len;
	ssize_t wrc = write(fd, rec->str, rec_len);

	cstr_free(rec, true);

	if (wrc != rec_len)
		return false;

	log_debug("peerman: %zu peers to write",
		clist_length(peers->addrlist));

	/* write peer list */
	clist *tmp = peers->addrlist;
	while (tmp) {
		struct peer *peer;

		peer = tmp->data;
		tmp = tmp->next;

		cstring *msg_data = cstr_new_sz(sizeof(struct peer));
		ser_peer(msg_data, CADDR_TIME_VERSION, peer);

		rec = message_str(chain->netmagic, "peer",
				  msg_data->str, msg_data->len);

		rec_len = rec->len;
		wrc = write(fd, rec->str, rec_len);

		cstr_free(rec, true);
		cstr_free(msg_data, true);

		if (wrc != rec_len)
			return false;
	}

	return true;
}