Exemplo n.º 1
0
static void test_addr_str(void)
{
	static const unsigned char v6addr[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1};
	static const unsigned char v4addr[16] = "\0\0\0\0\0\0\0\0\0\0\xff\xff\x01\x02\x03\x04";

	char host[64];
	bn_address_str(host, sizeof(host), v6addr);
	assert(strcmp(host, "::1") == 0);

	bn_address_str(host, sizeof(host), v4addr);
	assert(strcmp(host, "1.2.3.4") == 0);
}
Exemplo n.º 2
0
static bool nc_msg_version(struct nc_conn *conn)
{
	if (conn->seen_version){
		LOG("version command already seen from:%s", conn->addr_str);
		return false;
	}
	conn->seen_version = true;

	struct const_buffer buf = { conn->msg.data, conn->msg.hdr.data_len };
	struct msg_version mv;
	bool rc = false;

	msg_version_init(&mv);

	if (!deser_msg_version(&mv, &buf))
		goto out;

	if (debugging) {
		char fromstr[64], tostr[64];
		bn_address_str(fromstr, sizeof(fromstr), mv.addrFrom.ip);
		bn_address_str(tostr, sizeof(tostr), mv.addrTo.ip);
		fprintf(plog, "net: %s version(%u, 0x%llx, %lld, To:%s, From:%s, %s, %u)\n",
			conn->addr_str,
			mv.nVersion,
			(unsigned long long) mv.nServices,
			(long long) mv.nTime,
			tostr,
			fromstr,
			mv.strSubVer,
			mv.nStartingHeight);
	}

	if (!(mv.nServices & NODE_NETWORK))	/* require NODE_NETWORK */
		goto out;
	if (mv.nonce == instance_nonce)		/* connected to ourselves? */
		goto out;

	conn->protover = MIN(mv.nVersion, PROTO_VERSION);

	/* acknowledge version receipt */
	if (!nc_conn_send(conn, "verack", NULL, 0))
		goto out;

	rc = true;

out:
	msg_version_free(&mv);
	return rc;
}
Exemplo n.º 3
0
Arquivo: net.c Projeto: aido/picocoin
static struct nc_conn *nc_conn_new(const struct peer *peer)
{
	struct nc_conn *conn;

	conn = calloc(1, sizeof(*conn));
	if (!conn)
		return NULL;

	conn->fd = -1;

	peer_copy(&conn->peer, peer);
	bn_address_str(conn->addr_str, sizeof(conn->addr_str), conn->peer.addr.ip);

	return conn;
}