| 1367 | } |
| 1368 | |
| 1369 | void node_impl::on_message( peer_connection* originating_peer, const message& received_message ) |
| 1370 | { |
| 1371 | VERIFY_CORRECT_THREAD(); |
| 1372 | message_hash_type message_hash = received_message.id(); |
| 1373 | dlog("handling message ${type} ${hash} size ${size} from peer ${endpoint}", |
| 1374 | ("type", graphene::net::core_message_type_enum(received_message.msg_type.value()))("hash", message_hash) |
| 1375 | ("size", received_message.size) |
| 1376 | ("endpoint", originating_peer->get_remote_endpoint())); |
| 1377 | // Gatekeeping code |
| 1378 | if( originating_peer->we_have_requested_close |
| 1379 | // allow hello_message so we can learn more about the peer |
| 1380 | && received_message.msg_type.value() != core_message_type_enum::hello_message_type |
| 1381 | // allow closing_connection_message so we can finish disconnecting |
| 1382 | && received_message.msg_type.value() != core_message_type_enum::closing_connection_message_type ) |
| 1383 | { |
| 1384 | dlog( "Unexpected message from peer ${peer} while we have requested to close connection", |
| 1385 | ("peer", originating_peer->get_remote_endpoint()) ); |
| 1386 | return; |
| 1387 | } |
| 1388 | switch ( received_message.msg_type.value() ) |
| 1389 | { |
| 1390 | case core_message_type_enum::hello_message_type: |
| 1391 | on_hello_message(originating_peer, received_message.as<hello_message>()); |
| 1392 | break; |
| 1393 | case core_message_type_enum::connection_accepted_message_type: |
| 1394 | on_connection_accepted_message(originating_peer, received_message.as<connection_accepted_message>()); |
| 1395 | break; |
| 1396 | case core_message_type_enum::connection_rejected_message_type: |
| 1397 | on_connection_rejected_message(originating_peer, received_message.as<connection_rejected_message>()); |
| 1398 | break; |
| 1399 | case core_message_type_enum::address_request_message_type: |
| 1400 | on_address_request_message(originating_peer, received_message.as<address_request_message>()); |
| 1401 | break; |
| 1402 | case core_message_type_enum::address_message_type: |
| 1403 | on_address_message(originating_peer, received_message.as<address_message>()); |
| 1404 | break; |
| 1405 | case core_message_type_enum::fetch_blockchain_item_ids_message_type: |
| 1406 | on_fetch_blockchain_item_ids_message( |
| 1407 | originating_peer, received_message.as<fetch_blockchain_item_ids_message>()); |
| 1408 | break; |
| 1409 | case core_message_type_enum::blockchain_item_ids_inventory_message_type: |
| 1410 | on_blockchain_item_ids_inventory_message( |
| 1411 | originating_peer, received_message.as<blockchain_item_ids_inventory_message>()); |
| 1412 | break; |
| 1413 | case core_message_type_enum::fetch_items_message_type: |
| 1414 | on_fetch_items_message(originating_peer, received_message.as<fetch_items_message>()); |
| 1415 | break; |
| 1416 | case core_message_type_enum::item_not_available_message_type: |
| 1417 | on_item_not_available_message(originating_peer, received_message.as<item_not_available_message>()); |
| 1418 | break; |
| 1419 | case core_message_type_enum::item_ids_inventory_message_type: |
| 1420 | on_item_ids_inventory_message(originating_peer, received_message.as<item_ids_inventory_message>()); |
| 1421 | break; |
| 1422 | case core_message_type_enum::closing_connection_message_type: |
| 1423 | on_closing_connection_message(originating_peer, received_message.as<closing_connection_message>()); |
| 1424 | break; |
| 1425 | case core_message_type_enum::block_message_type: |
| 1426 | process_block_message(originating_peer, received_message, message_hash); |
no test coverage detected