Exemplo n.º 1
0
Arquivo: net.c Projeto: aido/picocoin
static bool nc_conn_message(struct nc_conn *conn)
{
	char *command = conn->msg.hdr.command;

	/* verify correct network */
	if (memcmp(conn->msg.hdr.netmagic, conn->nci->chain->netmagic, 4)) {
		log_info("net: %s invalid network",
			conn->addr_str);
		return false;
	}

	/* incoming message: version */
	if (!strncmp(command, "version", 12))
		return nc_msg_version(conn);

	/* "version" must be first message */
	if (!conn->seen_version) {
		log_info("net: %s 'version' not first",
			conn->addr_str);
		return false;
	}

	/* incoming message: verack */
	if (!strncmp(command, "verack", 12))
		return nc_msg_verack(conn);

	/* "verack" must be second message */
	if (!conn->seen_verack) {
		log_info("net: %s 'verack' not second",
			conn->addr_str);
		return false;
	}

	/* incoming message: addr */
	if (!strncmp(command, "addr", 12))
		return nc_msg_addr(conn);

	/* incoming message: inv */
	else if (!strncmp(command, "inv", 12))
		return nc_msg_inv(conn);

	/* incoming message: block */
	else if (!strncmp(command, "block", 12))
		return nc_msg_block(conn);

	log_debug("net: %s unknown message %s",
		conn->addr_str,
		command);

	/* ignore unknown messages */
	return true;
}
Exemplo n.º 2
0
static bool nc_conn_message(struct nc_conn *conn)
{
	char *command = conn->msg.hdr.command;

	/* verify correct network */
	if (memcmp(conn->msg.hdr.netmagic, chain->netmagic, 4)) {
		fprintf(plog, "net: %s invalid network\n",
			conn->addr_str);
		return false;
	}

	/* incoming message: version */
	if (!strncmp(command, "version", 12)){
		LOG("version command received from %s.", conn->addr_str);	
		return nc_msg_version(conn);
	}

	/* "version" must be first message */
	if (!conn->seen_version) {
		fprintf(plog, "net: %s 'version' not first\n",
			conn->addr_str);
		return false;
	}

	/* incoming message: verack */
	if (!strncmp(command, "verack", 12)){
		LOG("verack command received from %s.", conn->addr_str);	
		return nc_msg_verack(conn);
	}

	/* "verack" must be second message */
	if (!conn->seen_verack) {
		fprintf(plog, "net: %s 'verack' not second\n",
			conn->addr_str);
		return false;
	}

	/* incoming message: addr */
	if (!strncmp(command, "addr", 12)){
		LOG("addr command received from %s.", conn->addr_str);
		return nc_msg_addr(conn);
	}

	/* incoming message: inv */
	else if (!strncmp(command, "inv", 12)){
		LOG("inv command received from %s.", conn->addr_str);
		return nc_msg_inv(conn);
	}

	/* incoming message: block */
	else if (!strncmp(command, "block", 12)){
		LOG("block command received from %s.", conn->addr_str);
		return nc_msg_block(conn);
	}

	if (debugging)
		fprintf(plog, "net: %s unknown message %s\n",
			conn->addr_str,
			command);

	/* ignore unknown messages */
	return true;
}