本文整理汇总了C++中channel::ptr::authority方法的典型用法代码示例。如果您正苦于以下问题:C++ ptr::authority方法的具体用法?C++ ptr::authority怎么用?C++ ptr::authority使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类channel::ptr
的用法示例。
在下文中一共展示了ptr::authority方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: handle_accept
void session_inbound::handle_accept(const code& ec, channel::ptr channel,
acceptor::ptr accept)
{
if (stopped())
{
log::debug(LOG_NETWORK)
<< "Suspended inbound connection.";
return;
}
start_accept(error::success, accept);
if (ec)
{
log::debug(LOG_NETWORK)
<< "Failure accepting connection: " << ec.message();
return;
}
if (blacklisted(channel->authority()))
{
log::debug(LOG_NETWORK)
<< "Rejected inbound connection from ["
<< channel->authority() << "] due to blacklisted address.";
return;
}
connection_count(BIND2(handle_connection_count, _1, channel));
}
示例2: handle_accept
void session_inbound::handle_accept(const code& ec, channel::ptr channel,
acceptor::ptr accept)
{
if (stopped())
return;
start_accept(error::success, accept);
if (ec)
{
log::debug(LOG_NETWORK)
<< "Failure accepting connection: " << ec.message();
return;
}
if (blacklisted(channel->authority()))
{
log::debug(LOG_NETWORK)
<< "Rejected inbound connection from ["
<< channel->authority() << "] due to blacklisted address.";
return;
}
connection_count(
dispatch_.ordered_delegate(&session_inbound::handle_connection_count,
shared_from_base<session_inbound>(), _1, channel));
}
示例3: send_pool_tx
void responder::send_pool_tx(const code& ec, const transaction& tx,
const hash_digest& tx_hash, channel::ptr node)
{
if (ec == error::service_stopped)
return;
if (ec == error::not_found)
{
log::debug(LOG_RESPONDER)
<< "Transaction for [" << node->authority()
<< "] not in mempool [" << encode_hash(tx_hash) << "]";
// It wasn't in the mempool, so relay the request to the blockchain.
blockchain_.fetch_transaction(tx_hash,
std::bind(&responder::send_chain_tx,
this, _1, _2, tx_hash, node));
return;
}
if (ec)
{
log::error(LOG_RESPONDER)
<< "Failure fetching mempool tx data for ["
<< node->authority() << "] " << ec.message();
node->stop(ec);
return;
}
send_tx(tx, tx_hash, node);
}
示例4: handle_is_pending
void session::handle_is_pending(bool pending, channel::ptr channel,
result_handler handle_started)
{
if (pending)
{
log::debug(LOG_NETWORK)
<< "Rejected connection from [" << channel->authority()
<< "] as loopback.";
handle_started(error::accept_failed);
return;
}
const auto version = channel->version();
if (version.value < bc::peer_minimum_version)
{
log::debug(LOG_NETWORK)
<< "Peer version (" << version.value << ") below minimum ("
<< bc::peer_minimum_version << ") ["
<< channel->authority() << "]";
handle_started(error::accept_failed);
return;
}
network_.store(channel, handle_started);
}
示例5: send_chain_tx
// en.bitcoin.it/wiki/Protocol_documentation#getdata
// getdata can be used to retrieve transactions, but only if they are
// in the memory pool or relay set - arbitrary access to transactions
// in the chain is not allowed to avoid having clients start to depend
// on nodes having full transaction indexes (which modern nodes do not).
void responder::send_chain_tx(const code& ec, const transaction& tx,
const hash_digest& tx_hash, channel::ptr node)
{
if (ec == error::service_stopped)
return;
if (ec == error::not_found)
{
log::debug(LOG_RESPONDER)
<< "Transaction for [" << node->authority()
<< "] not in blockchain [" << encode_hash(tx_hash) << "]";
// It wasn't in the blockchain, so send notfound.
send_tx_not_found(tx_hash, node);
return;
}
if (ec)
{
log::error(LOG_RESPONDER)
<< "Failure fetching blockchain tx data for ["
<< node->authority() << "] " << ec.message();
node->stop(ec);
return;
}
send_tx(tx, tx_hash, node);
}
示例6: handle_connect
void session_manual::handle_connect(const code& ec, channel::ptr channel,
const std::string& hostname, uint16_t port, uint32_t remaining,
connector::ptr connector, channel_handler handler)
{
unpend(connector);
if (ec)
{
LOG_WARNING(LOG_NETWORK)
<< "Failure connecting [" << config::endpoint(hostname, port)
<< "] manually: " << ec.message();
// Retry logic.
// The handler invoke is the failure end of the connect sequence.
if (settings_.manual_attempt_limit == 0)
start_connect(hostname, port, 0, handler);
else if (remaining > 0)
start_connect(hostname, port, remaining - 1, handler);
else
handler(ec, nullptr);
return;
}
LOG_INFO(LOG_NETWORK)
<< "Connected manual channel [" << config::endpoint(hostname, port)
<< "] as [" << channel->authority() << "]";
register_channel(channel,
BIND5(handle_channel_start, _1, hostname, port, channel, handler),
BIND3(handle_channel_stop, _1, hostname, port));
}
示例7: receive_get_data
// We don't seem to be getting getdata requests.
void responder::receive_get_data(const code& ec, const get_data& packet,
channel::ptr node)
{
if (ec == error::channel_stopped)
return;
const auto peer = node->authority();
if (ec)
{
log::debug(LOG_RESPONDER)
<< "Failure in receive get data [" << peer << "] " << ec.message();
node->stop(ec);
return;
}
// Resubscribe to serve tx and blocks.
node->subscribe<message::get_data>(
std::bind(&responder::receive_get_data,
this, _1, _2, node));
log::debug(LOG_RESPONDER)
<< "Getdata BEGIN [" << peer << "] "
<< "txs (" << packet.count(inventory_type_id::transaction) << ") "
<< "blocks (" << packet.count(inventory_type_id::block) << ") "
<< "bloom (" << packet.count(inventory_type_id::filtered_block) << ")";
for (const auto& inventory: packet.inventories)
{
switch (inventory.type)
{
case inventory_type_id::transaction:
log::debug(LOG_RESPONDER)
<< "Transaction getdata for [" << peer << "] "
<< encode_hash(inventory.hash);
tx_pool_.fetch(inventory.hash,
std::bind(&responder::send_pool_tx,
this, _1, _2, inventory.hash, node));
break;
case inventory_type_id::block:
log::debug(LOG_RESPONDER)
<< "Block getdata for [" << peer << "] "
<< encode_hash(inventory.hash);
block_fetcher::fetch(blockchain_, inventory.hash,
std::bind(&responder::send_block,
this, _1, _2, inventory.hash, node));
break;
case inventory_type_id::error:
case inventory_type_id::none:
default:
log::debug(LOG_RESPONDER)
<< "Ignoring invalid getdata type for [" << peer << "]";
}
}
log::debug(LOG_RESPONDER)
<< "Getdata END [" << peer << "]";
}
示例8: handle_connect
void session_manual::handle_connect(const code& ec, channel::ptr channel,
const std::string& hostname, uint16_t port, channel_handler handler,
uint16_t retries)
{
if (ec)
{
log::warning(LOG_NETWORK)
<< "Failure connecting [" << config::endpoint(hostname, port)
<< "] manually: " << ec.message();
// Retry logic.
if (settings_.connect_attempts == 0)
start_connect(hostname, port, handler, 0);
else if (retries > 0)
start_connect(hostname, port, handler, retries - 1);
else
handler(ec, nullptr);
return;
}
log::info(LOG_NETWORK)
<< "Connected manual channel [" << config::endpoint(hostname, port)
<< "] as [" << channel->authority() << "]";
register_channel(channel,
std::bind(&session_manual::handle_channel_start,
shared_from_base<session_manual>(), _1, hostname, port, channel, handler),
std::bind(&session_manual::handle_channel_stop,
shared_from_base<session_manual>(), _1, hostname, port));
}
示例9: handle_remove
void session::handle_remove(const code& ec, channel::ptr channel)
{
if (ec)
LOG_DEBUG(LOG_NETWORK)
<< "Failed to remove channel [" << channel->authority() << "] "
<< ec.message();
}
示例10: send_tx
void responder::send_tx(const transaction& tx, const hash_digest& hash,
channel::ptr node)
{
const auto send_handler = [hash, node](const code& ec)
{
if (ec)
log::debug(LOG_RESPONDER)
<< "Failure sending tx for ["
<< node->authority() << "]";
else
log::debug(LOG_RESPONDER)
<< "Sent tx for [" << node->authority()
<< "] " << encode_hash(hash);
};
node->send(tx, send_handler);
}
示例11: send_tx_not_found
void responder::send_tx_not_found(const hash_digest& hash, channel::ptr node)
{
const auto send_handler = [hash, node](const code& ec)
{
if (ec)
log::debug(LOG_RESPONDER)
<< "Failure sending tx notfound for ["
<< node->authority() << "]";
else
log::debug(LOG_RESPONDER)
<< "Sent tx notfound for [" << node->authority()
<< "] " << encode_hash(hash);
};
send_inventory_not_found(inventory_type_id::transaction, hash, node,
send_handler);
}
示例12: send_block_not_found
void responder::send_block_not_found(const hash_digest& block_hash,
channel::ptr node)
{
const auto send_handler = [block_hash, node](const code& ec)
{
if (ec)
log::debug(LOG_RESPONDER)
<< "Failure sending block notfound for ["
<< node->authority() << "]";
else
log::debug(LOG_RESPONDER)
<< "Sent block notfound for [" << node->authority()
<< "] " << encode_hash(block_hash);
};
send_inventory_not_found(inventory_type_id::block, block_hash,
node, send_handler);
}
示例13: handle_channel_stop
void session_outbound::handle_channel_stop(const code& ec,
connector::ptr connect, channel::ptr channel)
{
log::debug(LOG_NETWORK)
<< "Outbound channel stopped [" << channel->authority() << "] "
<< ec.message();
new_connection(connect);
}
示例14: handle_connection_count
void session_inbound::handle_connection_count(size_t connections,
channel::ptr channel)
{
if (connections >= settings_.inbound_connection_limit)
{
log::debug(LOG_NETWORK)
<< "Rejected inbound connection from ["
<< channel->authority() << "] due to connection limit.";
return;
}
log::info(LOG_NETWORK)
<< "Connected inbound channel [" << channel->authority() << "]";
register_channel(channel,
std::bind(&session_inbound::handle_channel_start,
shared_from_base<session_inbound>(), _1, channel),
std::bind(&session_inbound::handle_channel_stop,
shared_from_base<session_inbound>(), _1));
}
示例15: handle_connection_count
void session_inbound::handle_connection_count(size_t connections,
channel::ptr channel)
{
const auto connection_limit = settings_.inbound_connections +
settings_.outbound_connections;
if (connections >= connection_limit)
{
log::debug(LOG_NETWORK)
<< "Rejected inbound connection from ["
<< channel->authority() << "] due to connection limit.";
return;
}
log::info(LOG_NETWORK)
<< "Connected inbound channel [" << channel->authority() << "]";
register_channel(channel,
BIND2(handle_channel_start, _1, channel),
BIND1(handle_channel_stop, _1));
}