From cf5a8b1d6c3df615641e81328bb3d8cf80cd70e3 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Tue, 9 Sep 2014 11:32:00 +0200 Subject: [PATCH 01/20] moved non-critical warnings and errors to log level 1 --- contrib/epee/include/misc_log_ex.h | 1 + .../epee/include/net/abstract_tcp_server2.inl | 2 +- .../include/net/abstract_tcp_server_cp.inl | 2 +- contrib/epee/include/net/levin_client.inl | 6 +- contrib/epee/include/net/net_parse_helpers.h | 6 +- contrib/epee/include/net/net_utils_base.h | 2 +- src/cryptonote_core/blockchain_storage.cpp | 98 +++++++++---------- src/cryptonote_core/cryptonote_core.cpp | 34 +++---- src/cryptonote_core/tx_pool.cpp | 12 +-- .../cryptonote_protocol_handler.inl | 10 +- src/daemon/daemon.cpp | 34 +++---- src/p2p/net_node.inl | 8 +- 12 files changed, 108 insertions(+), 107 deletions(-) diff --git a/contrib/epee/include/misc_log_ex.h b/contrib/epee/include/misc_log_ex.h index 44f50afa..42adc7c4 100644 --- a/contrib/epee/include/misc_log_ex.h +++ b/contrib/epee/include/misc_log_ex.h @@ -1385,6 +1385,7 @@ POP_WARNINGS #define LOG_PRINT_MAGENTA(mess, level) LOG_PRINT_COLOR2(LOG_DEFAULT_TARGET, mess, level, epee::log_space::console_color_magenta) #define LOG_PRINT_RED_L0(mess) LOG_PRINT_COLOR2(LOG_DEFAULT_TARGET, mess, LOG_LEVEL_0, epee::log_space::console_color_red) +#define LOG_PRINT_RED_L1(mess) LOG_PRINT_COLOR2(LOG_DEFAULT_TARGET, mess, LOG_LEVEL_1, epee::log_space::console_color_red) #define LOG_PRINT_L0(mess) LOG_PRINT(mess, LOG_LEVEL_0) #define LOG_PRINT_L1(mess) LOG_PRINT(mess, LOG_LEVEL_1) diff --git a/contrib/epee/include/net/abstract_tcp_server2.inl b/contrib/epee/include/net/abstract_tcp_server2.inl index 403f5a3b..4b4189eb 100644 --- a/contrib/epee/include/net/abstract_tcp_server2.inl +++ b/contrib/epee/include/net/abstract_tcp_server2.inl @@ -376,7 +376,7 @@ PRAGMA_WARNING_DISABLE_VS(4355) if (e) { - LOG_PRINT_L0("[sock " << socket_.native_handle() << "] Some problems at write: " << e.message() << ':' << e.value()); + LOG_PRINT_L1("[sock " << socket_.native_handle() << "] Some problems at write: " << e.message() << ':' << e.value()); shutdown(); return; } diff --git a/contrib/epee/include/net/abstract_tcp_server_cp.inl b/contrib/epee/include/net/abstract_tcp_server_cp.inl index 5673c50b..a582c660 100644 --- a/contrib/epee/include/net/abstract_tcp_server_cp.inl +++ b/contrib/epee/include/net/abstract_tcp_server_cp.inl @@ -602,4 +602,4 @@ bool cp_server_impl::is_stop_signal() } //------------------------------------------------------------- } -} \ No newline at end of file +} diff --git a/contrib/epee/include/net/levin_client.inl b/contrib/epee/include/net/levin_client.inl index ae159da6..a802d55f 100644 --- a/contrib/epee/include/net/levin_client.inl +++ b/contrib/epee/include/net/levin_client.inl @@ -95,7 +95,7 @@ int levin_client_impl::invoke(int command, const std::string& in_buff, std::stri if(head.m_signature!=LEVIN_SIGNATURE) { - LOG_PRINT_L0("Signature missmatch in response"); + LOG_PRINT_L1("Signature missmatch in response"); return -1; } @@ -156,7 +156,7 @@ inline if(head.m_signature!=LEVIN_SIGNATURE) { - LOG_PRINT_L0("Signature missmatch in response"); + LOG_PRINT_L1("Signature missmatch in response"); return -1; } @@ -191,4 +191,4 @@ inline } } -//------------------------------------------------------------------------------ \ No newline at end of file +//------------------------------------------------------------------------------ diff --git a/contrib/epee/include/net/net_parse_helpers.h b/contrib/epee/include/net/net_parse_helpers.h index 586dac98..ce6ca60d 100644 --- a/contrib/epee/include/net/net_parse_helpers.h +++ b/contrib/epee/include/net/net_parse_helpers.h @@ -103,7 +103,7 @@ namespace net_utils boost::smatch result; if(!boost::regex_search(uri, result, rexp_match_uri, boost::match_default) && result[0].matched) { - LOG_PRINT_L0("[PARSE URI] regex not matched for uri: " << uri); + LOG_PRINT_L1("[PARSE URI] regex not matched for uri: " << uri); content.m_path = uri; return true; } @@ -139,7 +139,7 @@ namespace net_utils boost::smatch result; if(!boost::regex_search(url_str, result, rexp_match_uri, boost::match_default) && result[0].matched) { - LOG_PRINT_L0("[PARSE URI] regex not matched for uri: " << rexp_match_uri); + LOG_PRINT_L1("[PARSE URI] regex not matched for uri: " << rexp_match_uri); //content.m_path = uri; return true; } @@ -165,4 +165,4 @@ namespace net_utils } } -} \ No newline at end of file +} diff --git a/contrib/epee/include/net/net_utils_base.h b/contrib/epee/include/net/net_utils_base.h index b5619bab..f61a2a08 100644 --- a/contrib/epee/include/net/net_utils_base.h +++ b/contrib/epee/include/net/net_utils_base.h @@ -143,7 +143,7 @@ namespace net_utils #define LOG_PRINT_CC_YELLOW(ct, message, log_level) LOG_PRINT_YELLOW("[" << epee::net_utils::print_connection_context_short(ct) << "]" << message, log_level) #define LOG_PRINT_CC_CYAN(ct, message, log_level) LOG_PRINT_CYAN("[" << epee::net_utils::print_connection_context_short(ct) << "]" << message, log_level) #define LOG_PRINT_CC_MAGENTA(ct, message, log_level) LOG_PRINT_MAGENTA("[" << epee::net_utils::print_connection_context_short(ct) << "]" << message, log_level) -#define LOG_ERROR_CC(ct, message) LOG_ERROR("[" << epee::net_utils::print_connection_context_short(ct) << "]" << message) +#define LOG_ERROR_CC(ct, message) LOG_PRINT_RED("[" << epee::net_utils::print_connection_context_short(ct) << "]" << message, LOG_LEVEL_1) #define LOG_PRINT_CC_L0(ct, message) LOG_PRINT_L0("[" << epee::net_utils::print_connection_context_short(ct) << "]" << message) #define LOG_PRINT_CC_L1(ct, message) LOG_PRINT_L1("[" << epee::net_utils::print_connection_context_short(ct) << "]" << message) diff --git a/src/cryptonote_core/blockchain_storage.cpp b/src/cryptonote_core/blockchain_storage.cpp index c41b5020..4c4425e0 100644 --- a/src/cryptonote_core/blockchain_storage.cpp +++ b/src/cryptonote_core/blockchain_storage.cpp @@ -403,17 +403,17 @@ bool blockchain_storage::rollback_blockchain_switching(std::list& origina for(size_t i = m_blocks.size()-1; i >=rollback_height; i--) { bool r = pop_block_from_blockchain(); - CHECK_AND_ASSERT_MES(r, false, "PANIC!!! failed to remove block while chain switching during the rollback!"); + CHECK_AND_ASSERT_MES(r, false, "PANIC! failed to remove block while chain switching during the rollback!"); } //return back original chain BOOST_FOREACH(auto& bl, original_chain) { block_verification_context bvc = boost::value_initialized(); bool r = handle_block_to_main_chain(bl, bvc); - CHECK_AND_ASSERT_MES(r && bvc.m_added_to_main_chain, false, "PANIC!!! failed to add (again) block while chain switching during the rollback!"); + CHECK_AND_ASSERT_MES(r && bvc.m_added_to_main_chain, false, "PANIC! failed to add (again) block while chain switching during the rollback!"); } - LOG_PRINT_L0("Rollback success."); + LOG_PRINT_L1("Rollback success."); return true; } //------------------------------------------------------------------ @@ -443,10 +443,10 @@ bool blockchain_storage::switch_to_alternative_blockchain(std::listsecond.bl, bvc); if(!r || !bvc.m_added_to_main_chain) { - LOG_PRINT_L0("Failed to switch to alternative blockchain"); + LOG_PRINT_L1("Failed to switch to alternative blockchain"); rollback_blockchain_switching(disconnected_chain, split_height); add_block_as_invalid(ch_ent->second, get_block_hash(ch_ent->second.bl)); - LOG_PRINT_L0("The block was inserted as invalid while connecting new alternative chain, block_id: " << get_block_hash(ch_ent->second.bl)); + LOG_PRINT_L1("The block was inserted as invalid while connecting new alternative chain, block_id: " << get_block_hash(ch_ent->second.bl)); m_alternative_chains.erase(ch_ent); for(auto alt_ch_to_orph_iter = ++alt_ch_iter; alt_ch_to_orph_iter != alt_chain.end(); alt_ch_to_orph_iter++) @@ -536,17 +536,17 @@ bool blockchain_storage::prevalidate_miner_transaction(const block& b, uint64_t CHECK_AND_ASSERT_MES(b.miner_tx.vin[0].type() == typeid(txin_gen), false, "coinbase transaction in the block has the wrong type"); if(boost::get(b.miner_tx.vin[0]).height != height) { - LOG_PRINT_RED_L0("The miner transaction in block has invalid height: " << boost::get(b.miner_tx.vin[0]).height << ", expected: " << height); + LOG_PRINT_RED_L1("The miner transaction in block has invalid height: " << boost::get(b.miner_tx.vin[0]).height << ", expected: " << height); return false; } CHECK_AND_ASSERT_MES(b.miner_tx.unlock_time == height + CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW, false, - "coinbase transaction transaction have wrong unlock time=" << b.miner_tx.unlock_time << ", expected " << height + CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW); + "coinbase transaction transaction has the wrong unlock time=" << b.miner_tx.unlock_time << ", expected " << height + CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW); //check outs overflow if(!check_outs_overflow(b.miner_tx)) { - LOG_PRINT_RED_L0("miner transaction have money overflow in block " << get_block_hash(b)); + LOG_PRINT_RED_L1("miner transaction has money overflow in block " << get_block_hash(b)); return false; } @@ -563,7 +563,7 @@ bool blockchain_storage::validate_miner_transaction(const block& b, size_t cumul std::vector last_blocks_sizes; get_last_n_blocks_sizes(last_blocks_sizes, CRYPTONOTE_REWARD_BLOCKS_WINDOW); if (!get_block_reward(epee::misc_utils::median(last_blocks_sizes), cumulative_block_size, already_generated_coins, base_reward)) { - LOG_PRINT_L0("block size " << cumulative_block_size << " is bigger than allowed for this blockchain"); + LOG_PRINT_L1("block size " << cumulative_block_size << " is bigger than allowed for this blockchain"); return false; } if(base_reward + fee < money_in_use) @@ -706,7 +706,7 @@ bool blockchain_storage::create_block_template(block& b, const account_public_ad b.miner_tx.extra.resize(b.miner_tx.extra.size() - 1); if (cumulative_size != txs_size + get_object_blobsize(b.miner_tx)) { //fuck, not lucky, -1 makes varint-counter size smaller, in that case we continue to grow with cumulative_size - LOG_PRINT_RED("Miner tx creation have no luck with delta_extra size = " << delta << " and " << delta - 1 , LOG_LEVEL_2); + LOG_PRINT_RED("Miner tx creation has no luck with delta_extra size = " << delta << " and " << delta - 1 , LOG_LEVEL_2); cumulative_size += delta - 1; continue; } @@ -751,13 +751,13 @@ bool blockchain_storage::handle_alternative_block(const block& b, const crypto:: uint64_t block_height = get_block_height(b); if(0 == block_height) { - LOG_ERROR("Block with id: " << epee::string_tools::pod_to_hex(id) << " (as alternative) have wrong miner transaction"); + LOG_ERROR("Block with id: " << epee::string_tools::pod_to_hex(id) << " (as alternative) has wrong miner transaction"); bvc.m_verifivation_failed = true; return false; } if (!m_checkpoints.is_alternative_block_allowed(get_current_blockchain_height(), block_height)) { - LOG_PRINT_RED_L0("Block with id: " << id + LOG_PRINT_RED_L1("Block with id: " << id << ENDL << " can't be accepted for alternative chain, block height: " << block_height << ENDL << " blockchain height: " << get_current_blockchain_height()); bvc.m_verifivation_failed = true; @@ -789,7 +789,7 @@ bool blockchain_storage::handle_alternative_block(const block& b, const crypto:: CHECK_AND_ASSERT_MES(m_blocks.size() > alt_chain.front()->second.height, false, "main blockchain wrong height"); crypto::hash h = null_hash; get_block_hash(m_blocks[alt_chain.front()->second.height - 1].bl, h); - CHECK_AND_ASSERT_MES(h == alt_chain.front()->second.bl.prev_id, false, "alternative chain have wrong connection to main chain"); + CHECK_AND_ASSERT_MES(h == alt_chain.front()->second.bl.prev_id, false, "alternative chain has wrong connection to main chain"); complete_timestamps_vector(alt_chain.front()->second.height - 1, timestamps); }else { @@ -799,8 +799,8 @@ bool blockchain_storage::handle_alternative_block(const block& b, const crypto:: //check timestamp correct if(!check_block_timestamp(timestamps, b)) { - LOG_PRINT_RED_L0("Block with id: " << id - << ENDL << " for alternative chain, have invalid timestamp: " << b.timestamp); + LOG_PRINT_RED_L1("Block with id: " << id + << ENDL << " for alternative chain, has invalid timestamp: " << b.timestamp); //add_block_as_invalid(b, id);//do not add blocks to invalid storage before proof of work check was passed bvc.m_verifivation_failed = true; return false; @@ -826,8 +826,8 @@ bool blockchain_storage::handle_alternative_block(const block& b, const crypto:: get_block_longhash(bei.bl, proof_of_work, bei.height); if(!check_hash(proof_of_work, current_diff)) { - LOG_PRINT_RED_L0("Block with id: " << id - << ENDL << " for alternative chain, have not enough proof of work: " << proof_of_work + LOG_PRINT_RED_L1("Block with id: " << id + << ENDL << " for alternative chain, does not have enough proof of work: " << proof_of_work << ENDL << " expected difficulty: " << current_diff); bvc.m_verifivation_failed = true; return false; @@ -835,8 +835,8 @@ bool blockchain_storage::handle_alternative_block(const block& b, const crypto:: if(!prevalidate_miner_transaction(b, bei.height)) { - LOG_PRINT_RED_L0("Block with id: " << epee::string_tools::pod_to_hex(id) - << " (as alternative) have wrong miner transaction."); + LOG_PRINT_RED_L1("Block with id: " << epee::string_tools::pod_to_hex(id) + << " (as alternative) has incorrect miner transaction."); bvc.m_verifivation_failed = true; return false; @@ -883,7 +883,7 @@ bool blockchain_storage::handle_alternative_block(const block& b, const crypto:: { //block orphaned bvc.m_marked_as_orphaned = true; - LOG_PRINT_RED_L0("Block recognized as orphaned and rejected, id = " << id); + LOG_PRINT_RED_L1("Block recognized as orphaned and rejected, id = " << id); } return true; @@ -899,7 +899,7 @@ bool blockchain_storage::get_blocks(uint64_t start_offset, size_t count, std::li blocks.push_back(m_blocks[i].bl); std::list missed_ids; get_transactions(m_blocks[i].bl.tx_hashes, txs, missed_ids); - CHECK_AND_ASSERT_MES(!missed_ids.size(), false, "have missed transactions in own block in main blockchain"); + CHECK_AND_ASSERT_MES(!missed_ids.size(), false, "has missed transactions in own block in main blockchain"); } return true; @@ -928,7 +928,7 @@ bool blockchain_storage::handle_get_objects(NOTIFY_REQUEST_GET_OBJECTS::request& std::list missed_tx_id; std::list txs; get_transactions(bl.tx_hashes, txs, rsp.missed_ids); - CHECK_AND_ASSERT_MES(!missed_tx_id.size(), false, "Internal error: have missed missed_tx_id.size()=" << missed_tx_id.size() + CHECK_AND_ASSERT_MES(!missed_tx_id.size(), false, "Internal error: has missed missed_tx_id.size()=" << missed_tx_id.size() << ENDL << "for block id = " << get_block_hash(bl)); rsp.blocks.push_back(block_complete_entry()); block_complete_entry& e = rsp.blocks.back(); @@ -1110,7 +1110,7 @@ void blockchain_storage::print_blockchain(uint64_t start_index, uint64_t end_ind CRITICAL_REGION_LOCAL(m_blockchain_lock); if(start_index >=m_blocks.size()) { - LOG_PRINT_L0("Wrong starter index set: " << start_index << ", expected max index " << m_blocks.size()-1); + LOG_PRINT_L1("Wrong starter index set: " << start_index << ", expected max index " << m_blocks.size()-1); return; } @@ -1205,7 +1205,7 @@ bool blockchain_storage::add_block_as_invalid(const block_extended_info& bei, co CRITICAL_REGION_LOCAL(m_blockchain_lock); auto i_res = m_invalid_blocks.insert(std::map::value_type(h, bei)); CHECK_AND_ASSERT_MES(i_res.second, false, "at insertion invalid by tx returned status existed"); - LOG_PRINT_L0("BLOCK ADDED AS INVALID: " << h << ENDL << ", prev_id=" << bei.bl.prev_id << ", m_invalid_blocks count=" << m_invalid_blocks.size()); + LOG_PRINT_L1("BLOCK ADDED AS INVALID: " << h << ENDL << ", prev_id=" << bei.bl.prev_id << ", m_invalid_blocks count=" << m_invalid_blocks.size()); return true; } //------------------------------------------------------------------ @@ -1306,7 +1306,7 @@ bool blockchain_storage::add_transaction_from_block(const transaction& tx, const if(!r.second) { //double spend detected - LOG_PRINT_L0("tx with id: " << m_tx_id << " in block id: " << m_bl_id << " have input marked as spent with key image: " << ki << ", block declined"); + LOG_PRINT_L1("tx with id: " << m_tx_id << " in block id: " << m_bl_id << " has input marked as spent with key image: " << ki << ", block declined"); return false; } return true; @@ -1332,7 +1332,7 @@ bool blockchain_storage::add_transaction_from_block(const transaction& tx, const auto i_r = m_transactions.insert(std::pair(tx_id, ch_e)); if(!i_r.second) { - LOG_PRINT_L0("tx with id: " << tx_id << " in block id: " << bl_id << " already in blockchain"); + LOG_PRINT_L1("tx with id: " << tx_id << " in block id: " << bl_id << " already in blockchain"); return false; } bool r = push_transaction_to_global_outs_index(tx, tx_id, i_r.first->second.m_global_output_indexes); @@ -1349,7 +1349,7 @@ bool blockchain_storage::get_tx_outputs_gindexs(const crypto::hash& tx_id, std:: auto it = m_transactions.find(tx_id); if(it == m_transactions.end()) { - LOG_PRINT_RED_L0("warning: get_tx_outputs_gindexs failed to find transaction with id = " << tx_id); + LOG_PRINT_RED_L1("warning: get_tx_outputs_gindexs failed to find transaction with id = " << tx_id); return false; } @@ -1407,7 +1407,7 @@ bool blockchain_storage::check_tx_inputs(const transaction& tx, const crypto::ha CHECK_AND_ASSERT_MES(sig_index < tx.signatures.size(), false, "wrong transaction: not signature entry for input with index= " << sig_index); if(!check_tx_input(in_to_key, tx_prefix_hash, tx.signatures[sig_index], pmax_used_block_height)) { - LOG_PRINT_L0("Failed to check ring signature for tx " << get_transaction_hash(tx)); + LOG_PRINT_L1("Failed to check ring signature for tx " << get_transaction_hash(tx)); return false; } @@ -1453,13 +1453,13 @@ bool blockchain_storage::check_tx_input(const txin_to_key& txin, const crypto::h //check tx unlock time if(!m_bch.is_tx_spendtime_unlocked(tx.unlock_time)) { - LOG_PRINT_L0("One of outputs for one of inputs have wrong tx.unlock_time = " << tx.unlock_time); + LOG_PRINT_L1("One of outputs for one of inputs has wrong tx.unlock_time = " << tx.unlock_time); return false; } if(out.target.type() != typeid(txout_to_key)) { - LOG_PRINT_L0("Output have wrong type id, which=" << out.target.which()); + LOG_PRINT_L1("Output has wrong type id, which=" << out.target.which()); return false; } @@ -1473,13 +1473,13 @@ bool blockchain_storage::check_tx_input(const txin_to_key& txin, const crypto::h outputs_visitor vi(output_keys, *this); if(!scan_outputkeys_for_indexes(txin, vi, pmax_related_block_height)) { - LOG_PRINT_L0("Failed to get output keys for tx with amount = " << print_money(txin.amount) << " and count indexes " << txin.key_offsets.size()); + LOG_PRINT_L1("Failed to get output keys for tx with amount = " << print_money(txin.amount) << " and count indexes " << txin.key_offsets.size()); return false; } if(txin.key_offsets.size() != output_keys.size()) { - LOG_PRINT_L0("Output keys for tx with amount = " << txin.amount << " and count indexes " << txin.key_offsets.size() << " returned wrong keys count " << output_keys.size()); + LOG_PRINT_L1("Output keys for tx with amount = " << txin.amount << " and count indexes " << txin.key_offsets.size() << " returned wrong keys count " << output_keys.size()); return false; } CHECK_AND_ASSERT_MES(sig.size() == output_keys.size(), false, "internal error: tx signatures count=" << sig.size() << " mismatch with outputs keys count for inputs=" << output_keys.size()); @@ -1498,7 +1498,7 @@ bool blockchain_storage::check_block_timestamp_main(const block& b) { if(b.timestamp > get_adjusted_time() + CRYPTONOTE_BLOCK_FUTURE_TIME_LIMIT) { - LOG_PRINT_L0("Timestamp of block with id: " << get_block_hash(b) << ", " << b.timestamp << ", bigger than adjusted time + 2 hours"); + LOG_PRINT_L1("Timestamp of block with id: " << get_block_hash(b) << ", " << b.timestamp << ", bigger than adjusted time + 2 hours"); return false; } @@ -1519,7 +1519,7 @@ bool blockchain_storage::check_block_timestamp(std::vector timestamps, if(b.timestamp < median_ts) { - LOG_PRINT_L0("Timestamp of block with id: " << get_block_hash(b) << ", " << b.timestamp << ", less than median of last " << BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW << " blocks, " << median_ts); + LOG_PRINT_L1("Timestamp of block with id: " << get_block_hash(b) << ", " << b.timestamp << ", less than median of last " << BLOCKCHAIN_TIMESTAMP_CHECK_WINDOW << " blocks, " << median_ts); return false; } @@ -1532,16 +1532,16 @@ bool blockchain_storage::handle_block_to_main_chain(const block& bl, const crypt CRITICAL_REGION_LOCAL(m_blockchain_lock); if(bl.prev_id != get_tail_id()) { - LOG_PRINT_L0("Block with id: " << id << ENDL - << "have wrong prev_id: " << bl.prev_id << ENDL + LOG_PRINT_L1("Block with id: " << id << ENDL + << "has wrong prev_id: " << bl.prev_id << ENDL << "expected: " << get_tail_id()); return false; } if(!check_block_timestamp_main(bl)) { - LOG_PRINT_L0("Block with id: " << id << ENDL - << "have invalid timestamp: " << bl.timestamp); + LOG_PRINT_L1("Block with id: " << id << ENDL + << "has invalid timestamp: " << bl.timestamp); //add_block_as_invalid(bl, id);//do not add blocks to invalid storage befor proof of work check was passed bvc.m_verifivation_failed = true; return false; @@ -1565,9 +1565,9 @@ bool blockchain_storage::handle_block_to_main_chain(const block& bl, const crypt if(!check_hash(proof_of_work, current_diffic)) { - LOG_PRINT_L0("Block with id: " << id << ENDL - << "have not enough proof of work: " << proof_of_work << ENDL - << "nexpected difficulty: " << current_diffic ); + LOG_PRINT_L1("Block with id: " << id << ENDL + << "does not have enough proof of work: " << proof_of_work << ENDL + << "unexpected difficulty: " << current_diffic ); bvc.m_verifivation_failed = true; return false; } @@ -1588,7 +1588,7 @@ bool blockchain_storage::handle_block_to_main_chain(const block& bl, const crypt if(!prevalidate_miner_transaction(bl, m_blocks.size())) { - LOG_PRINT_L0("Block with id: " << id + LOG_PRINT_L1("Block with id: " << id << " failed to pass prevalidation"); bvc.m_verifivation_failed = true; return false; @@ -1598,7 +1598,7 @@ bool blockchain_storage::handle_block_to_main_chain(const block& bl, const crypt //process transactions if(!add_transaction_from_block(bl.miner_tx, get_transaction_hash(bl.miner_tx), id, get_current_blockchain_height())) { - LOG_PRINT_L0("Block with id: " << id << " failed to add transaction to blockchain storage"); + LOG_PRINT_L1("Block with id: " << id << " failed to add transaction to blockchain storage"); bvc.m_verifivation_failed = true; return false; } @@ -1611,7 +1611,7 @@ bool blockchain_storage::handle_block_to_main_chain(const block& bl, const crypt uint64_t fee = 0; if(!m_tx_pool.take_tx(tx_id, tx, blob_size, fee)) { - LOG_PRINT_L0("Block with id: " << id << "have at least one unknown transaction with id: " << tx_id); + LOG_PRINT_L1("Block with id: " << id << "has at least one unknown transaction with id: " << tx_id); purge_block_data_from_blockchain(bl, tx_processed_count); //add_block_as_invalid(bl, id); bvc.m_verifivation_failed = true; @@ -1619,20 +1619,20 @@ bool blockchain_storage::handle_block_to_main_chain(const block& bl, const crypt } if(!check_tx_inputs(tx)) { - LOG_PRINT_L0("Block with id: " << id << "have at least one transaction (id: " << tx_id << ") with wrong inputs."); + LOG_PRINT_L1("Block with id: " << id << "has at least one transaction (id: " << tx_id << ") with wrong inputs."); cryptonote::tx_verification_context tvc = AUTO_VAL_INIT(tvc); bool add_res = m_tx_pool.add_tx(tx, tvc, true); CHECK_AND_ASSERT_MES2(add_res, "handle_block_to_main_chain: failed to add transaction back to transaction pool"); purge_block_data_from_blockchain(bl, tx_processed_count); add_block_as_invalid(bl, id); - LOG_PRINT_L0("Block with id " << id << " added as invalid becouse of wrong inputs in transactions"); + LOG_PRINT_L1("Block with id " << id << " added as invalid becouse of wrong inputs in transactions"); bvc.m_verifivation_failed = true; return false; } if(!add_transaction_from_block(tx, tx_id, id, get_current_blockchain_height())) { - LOG_PRINT_L0("Block with id: " << id << " failed to add transaction to blockchain storage"); + LOG_PRINT_L1("Block with id: " << id << " failed to add transaction to blockchain storage"); cryptonote::tx_verification_context tvc = AUTO_VAL_INIT(tvc); bool add_res = m_tx_pool.add_tx(tx, tvc, true); CHECK_AND_ASSERT_MES2(add_res, "handle_block_to_main_chain: failed to add transaction back to transaction pool"); @@ -1648,8 +1648,8 @@ bool blockchain_storage::handle_block_to_main_chain(const block& bl, const crypt uint64_t already_generated_coins = m_blocks.size() ? m_blocks.back().already_generated_coins:0; if(!validate_miner_transaction(bl, cumulative_block_size, fee_summary, base_reward, already_generated_coins)) { - LOG_PRINT_L0("Block with id: " << id - << " have wrong miner transaction"); + LOG_PRINT_L1("Block with id: " << id + << " has incorrect miner transaction"); purge_block_data_from_blockchain(bl, tx_processed_count); bvc.m_verifivation_failed = true; return false; diff --git a/src/cryptonote_core/cryptonote_core.cpp b/src/cryptonote_core/cryptonote_core.cpp index 24c05497..9643824b 100644 --- a/src/cryptonote_core/cryptonote_core.cpp +++ b/src/cryptonote_core/cryptonote_core.cpp @@ -159,7 +159,7 @@ namespace cryptonote if(tx_blob.size() > get_max_tx_size()) { - LOG_PRINT_L0("WRONG TRANSACTION BLOB, too big size " << tx_blob.size() << ", rejected"); + LOG_PRINT_L1("WRONG TRANSACTION BLOB, too big size " << tx_blob.size() << ", rejected"); tvc.m_verifivation_failed = true; return false; } @@ -170,7 +170,7 @@ namespace cryptonote if(!parse_tx_from_blob(tx, tx_hash, tx_prefixt_hash, tx_blob)) { - LOG_PRINT_L0("WRONG TRANSACTION BLOB, Failed to parse, rejected"); + LOG_PRINT_L1("WRONG TRANSACTION BLOB, Failed to parse, rejected"); tvc.m_verifivation_failed = true; return false; } @@ -178,23 +178,23 @@ namespace cryptonote if(!check_tx_syntax(tx)) { - LOG_PRINT_L0("WRONG TRANSACTION BLOB, Failed to check tx " << tx_hash << " syntax, rejected"); + LOG_PRINT_L1("WRONG TRANSACTION BLOB, Failed to check tx " << tx_hash << " syntax, rejected"); tvc.m_verifivation_failed = true; return false; } if(!check_tx_semantic(tx, keeped_by_block)) { - LOG_PRINT_L0("WRONG TRANSACTION BLOB, Failed to check tx " << tx_hash << " semantic, rejected"); + LOG_PRINT_L1("WRONG TRANSACTION BLOB, Failed to check tx " << tx_hash << " semantic, rejected"); tvc.m_verifivation_failed = true; return false; } bool r = add_new_tx(tx, tx_hash, tx_prefixt_hash, tx_blob.size(), tvc, keeped_by_block); if(tvc.m_verifivation_failed) - {LOG_PRINT_RED_L0("Transaction verification failed: " << tx_hash);} + {LOG_PRINT_RED_L1("Transaction verification failed: " << tx_hash);} else if(tvc.m_verifivation_impossible) - {LOG_PRINT_RED_L0("Transaction verification impossible: " << tx_hash);} + {LOG_PRINT_RED_L1("Transaction verification impossible: " << tx_hash);} if(tvc.m_added_to_pool) LOG_PRINT_L1("tx added: " << tx_hash); @@ -216,25 +216,25 @@ namespace cryptonote { if(!tx.vin.size()) { - LOG_PRINT_RED_L0("tx with empty inputs, rejected for tx id= " << get_transaction_hash(tx)); + LOG_PRINT_RED_L1("tx with empty inputs, rejected for tx id= " << get_transaction_hash(tx)); return false; } if(!check_inputs_types_supported(tx)) { - LOG_PRINT_RED_L0("unsupported input types for tx id= " << get_transaction_hash(tx)); + LOG_PRINT_RED_L1("unsupported input types for tx id= " << get_transaction_hash(tx)); return false; } if(!check_outs_valid(tx)) { - LOG_PRINT_RED_L0("tx with invalid outputs, rejected for tx id= " << get_transaction_hash(tx)); + LOG_PRINT_RED_L1("tx with invalid outputs, rejected for tx id= " << get_transaction_hash(tx)); return false; } if(!check_money_overflow(tx)) { - LOG_PRINT_RED_L0("tx have money overflow, rejected for tx id= " << get_transaction_hash(tx)); + LOG_PRINT_RED_L1("tx has money overflow, rejected for tx id= " << get_transaction_hash(tx)); return false; } @@ -244,20 +244,20 @@ namespace cryptonote if(amount_in <= amount_out) { - LOG_PRINT_RED_L0("tx with wrong amounts: ins " << amount_in << ", outs " << amount_out << ", rejected for tx id= " << get_transaction_hash(tx)); + LOG_PRINT_RED_L1("tx with wrong amounts: ins " << amount_in << ", outs " << amount_out << ", rejected for tx id= " << get_transaction_hash(tx)); return false; } if(!keeped_by_block && get_object_blobsize(tx) >= m_blockchain_storage.get_current_comulative_blocksize_limit() - CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE) { - LOG_PRINT_RED_L0("tx have to big size " << get_object_blobsize(tx) << ", expected not bigger than " << m_blockchain_storage.get_current_comulative_blocksize_limit() - CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE); + LOG_PRINT_RED_L1("tx is too large " << get_object_blobsize(tx) << ", expected not bigger than " << m_blockchain_storage.get_current_comulative_blocksize_limit() - CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE); return false; } //check if tx use different key images if(!check_tx_inputs_keyimages_diff(tx)) { - LOG_PRINT_RED_L0("tx have to big size " << get_object_blobsize(tx) << ", expected not bigger than " << m_blockchain_storage.get_current_comulative_blocksize_limit() - CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE); + LOG_PRINT_RED_L1("tx is too large " << get_object_blobsize(tx) << ", expected not bigger than " << m_blockchain_storage.get_current_comulative_blocksize_limit() - CRYPTONOTE_COINBASE_BLOB_RESERVED_SIZE); return false; } @@ -385,7 +385,7 @@ namespace cryptonote m_blockchain_storage.get_transactions(b.tx_hashes, txs, missed_txs); if(missed_txs.size() && m_blockchain_storage.get_block_id_by_height(get_block_height(b)) != get_block_hash(b)) { - LOG_PRINT_L0("Block found but, seems that reorganize just happened after that, do not relay this block"); + LOG_PRINT_L1("Block found but, seems that reorganize just happened after that, do not relay this block"); return true; } CHECK_AND_ASSERT_MES(txs.size() == b.tx_hashes.size() && !missed_txs.size(), false, "cant find some transactions in found block:" << get_block_hash(b) << " txs.size()=" << txs.size() @@ -420,7 +420,7 @@ namespace cryptonote bvc = boost::value_initialized(); if(block_blob.size() > get_max_block_size()) { - LOG_PRINT_L0("WRONG BLOCK BLOB, too big size " << block_blob.size() << ", rejected"); + LOG_PRINT_L1("WRONG BLOCK BLOB, too big size " << block_blob.size() << ", rejected"); bvc.m_verifivation_failed = true; return false; } @@ -428,7 +428,7 @@ namespace cryptonote block b = AUTO_VAL_INIT(b); if(!parse_and_validate_block_from_blob(block_blob, b)) { - LOG_PRINT_L0("Failed to parse and validate new block"); + LOG_PRINT_L1("Failed to parse and validate new block"); bvc.m_verifivation_failed = true; return false; } @@ -444,7 +444,7 @@ namespace cryptonote { if(block_blob.size() > get_max_block_size()) { - LOG_PRINT_L0("WRONG BLOCK BLOB, too big size " << block_blob.size() << ", rejected"); + LOG_PRINT_L1("WRONG BLOCK BLOB, too big size " << block_blob.size() << ", rejected"); return false; } return true; diff --git a/src/cryptonote_core/tx_pool.cpp b/src/cryptonote_core/tx_pool.cpp index 8b61278f..82e57ade 100644 --- a/src/cryptonote_core/tx_pool.cpp +++ b/src/cryptonote_core/tx_pool.cpp @@ -80,7 +80,7 @@ namespace cryptonote if(outputs_amount >= inputs_amount) { - LOG_PRINT_L0("transaction use more money then it has: use " << print_money(outputs_amount) << ", have " << print_money(inputs_amount)); + LOG_PRINT_L1("transaction use more money then it has: use " << print_money(outputs_amount) << ", have " << print_money(inputs_amount)); tvc.m_verifivation_failed = true; return false; } @@ -134,7 +134,7 @@ namespace cryptonote tvc.m_added_to_pool = true; }else { - LOG_PRINT_L0("tx used wrong inputs, rejected"); + LOG_PRINT_L1("tx used wrong inputs, rejected"); tvc.m_verifivation_failed = true; return false; } @@ -242,7 +242,7 @@ namespace cryptonote if((tx_age > CRYPTONOTE_MEMPOOL_TX_LIVETIME && !it->second.kept_by_block) || (tx_age > CRYPTONOTE_MEMPOOL_TX_FROM_ALT_BLOCK_LIVETIME && it->second.kept_by_block) ) { - LOG_PRINT_L0("Tx " << it->first << " removed from tx pool due to outdated, age: " << tx_age ); + LOG_PRINT_L1("Tx " << it->first << " removed from tx pool due to outdated, age: " << tx_age ); m_transactions.erase(it++); }else ++it; @@ -476,7 +476,7 @@ namespace cryptonote for (auto it = m_transactions.begin(); it != m_transactions.end(); ) { auto it2 = it++; if (it2->second.blob_size >= TRANSACTION_SIZE_LIMIT) { - LOG_PRINT_L0("Transaction " << get_transaction_hash(it2->second.tx) << " is too big (" << it2->second.blob_size << " bytes), removing it from pool"); + LOG_PRINT_L1("Transaction " << get_transaction_hash(it2->second.tx) << " is too big (" << it2->second.blob_size << " bytes), removing it from pool"); remove_transaction_keyimages(it2->second.tx); m_transactions.erase(it2); } @@ -491,7 +491,7 @@ namespace cryptonote { if (!tools::create_directories_if_necessary(m_config_folder)) { - LOG_PRINT_L0("Failed to create data directory: " << m_config_folder); + LOG_PRINT_L1("Failed to create data directory: " << m_config_folder); return false; } @@ -499,7 +499,7 @@ namespace cryptonote bool res = tools::serialize_obj_to_file(*this, state_file_path); if(!res) { - LOG_PRINT_L0("Failed to serialize memory pool to file " << state_file_path); + LOG_PRINT_L1("Failed to serialize memory pool to file " << state_file_path); } return true; } diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.inl b/src/cryptonote_protocol/cryptonote_protocol_handler.inl index 1ee0b9e8..19ad7436 100644 --- a/src/cryptonote_protocol/cryptonote_protocol_handler.inl +++ b/src/cryptonote_protocol/cryptonote_protocol_handler.inl @@ -225,7 +225,7 @@ namespace cryptonote m_core.handle_incoming_tx(*tx_blob_it, tvc, true); if(tvc.m_verifivation_failed) { - LOG_PRINT_CCONTEXT_L0("Block verification failed: transaction verification failed, dropping connection"); + LOG_PRINT_CCONTEXT_L1("Block verification failed: transaction verification failed, dropping connection"); m_p2p->drop_connection(context); return 1; } @@ -238,7 +238,7 @@ namespace cryptonote m_core.resume_mine(); if(bvc.m_verifivation_failed) { - LOG_PRINT_CCONTEXT_L0("Block verification failed, dropping connection"); + LOG_PRINT_CCONTEXT_L1("Block verification failed, dropping connection"); m_p2p->drop_connection(context); return 1; } @@ -272,7 +272,7 @@ namespace cryptonote m_core.handle_incoming_tx(*tx_blob_it, tvc, false); if(tvc.m_verifivation_failed) { - LOG_PRINT_CCONTEXT_L0("Tx verification failed, dropping connection"); + LOG_PRINT_CCONTEXT_L1("Tx verification failed, dropping connection"); m_p2p->drop_connection(context); return 1; } @@ -404,13 +404,13 @@ namespace cryptonote if(bvc.m_verifivation_failed) { - LOG_PRINT_CCONTEXT_L0("Block verification failed, dropping connection"); + LOG_PRINT_CCONTEXT_L1("Block verification failed, dropping connection"); m_p2p->drop_connection(context); return 1; } if(bvc.m_marked_as_orphaned) { - LOG_PRINT_CCONTEXT_L0("Block received at sync phase was marked as orphaned, dropping connection"); + LOG_PRINT_CCONTEXT_L1("Block received at sync phase was marked as orphaned, dropping connection"); m_p2p->drop_connection(context); return 1; } diff --git a/src/daemon/daemon.cpp b/src/daemon/daemon.cpp index 3462227d..46106883 100644 --- a/src/daemon/daemon.cpp +++ b/src/daemon/daemon.cpp @@ -169,20 +169,20 @@ int main(int argc, char* argv[]) daemon_cmmands_handler dch(p2psrv); //initialize objects - LOG_PRINT_L0("Initializing p2p server..."); + LOG_PRINT_L0("Initializing P2P server..."); res = p2psrv.init(vm); - CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize p2p server."); - LOG_PRINT_L0("P2p server initialized OK"); + CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize P2P server."); + LOG_PRINT_L0("P2P server initialized OK"); - LOG_PRINT_L0("Initializing cryptonote protocol..."); + LOG_PRINT_L0("Initializing protocol..."); res = cprotocol.init(vm); - CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize cryptonote protocol."); - LOG_PRINT_L0("Cryptonote protocol initialized OK"); + CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize protocol."); + LOG_PRINT_L0("Protocol initialized OK"); - LOG_PRINT_L0("Initializing core rpc server..."); + LOG_PRINT_L0("Initializing core RPC server..."); res = rpc_server.init(vm); - CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize core rpc server."); - LOG_PRINT_GREEN("Core rpc server initialized OK on port: " << rpc_server.get_binded_port(), LOG_LEVEL_0); + CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize core RPC server."); + LOG_PRINT_GREEN("Core RPC server initialized OK on port: " << rpc_server.get_binded_port(), LOG_LEVEL_0); //initialize core here LOG_PRINT_L0("Initializing core..."); @@ -196,19 +196,19 @@ int main(int argc, char* argv[]) dch.start_handling(); } - LOG_PRINT_L0("Starting core rpc server..."); + LOG_PRINT_L0("Starting core RPC server..."); res = rpc_server.run(2, false); - CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize core rpc server."); - LOG_PRINT_L0("Core rpc server started ok"); + CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize core RPC server."); + LOG_PRINT_L0("Core RPC server started ok"); tools::signal_handler::install([&dch, &p2psrv] { dch.stop_handling(); p2psrv.send_stop_signal(); }); - LOG_PRINT_L0("Starting p2p net loop..."); + LOG_PRINT_L0("Starting P2P net loop..."); p2psrv.run(); - LOG_PRINT_L0("p2p net loop stopped"); + LOG_PRINT_L0("P2P net loop stopped"); //stop components LOG_PRINT_L0("Stopping core rpc server..."); @@ -218,11 +218,11 @@ int main(int argc, char* argv[]) //deinitialize components LOG_PRINT_L0("Deinitializing core..."); ccore.deinit(); - LOG_PRINT_L0("Deinitializing rpc server ..."); + LOG_PRINT_L0("Deinitializing RPC server ..."); rpc_server.deinit(); - LOG_PRINT_L0("Deinitializing cryptonote_protocol..."); + LOG_PRINT_L0("Deinitializing protocol..."); cprotocol.deinit(); - LOG_PRINT_L0("Deinitializing p2p..."); + LOG_PRINT_L0("Deinitializing P2P..."); p2psrv.deinit(); diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index e7da546f..7540eb38 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -261,7 +261,7 @@ namespace nodetool CHECK_AND_ASSERT_MES(res, false, "Failed to bind server"); m_listenning_port = m_net_server.get_binded_port(); - LOG_PRINT_GREEN("Net service binded on " << m_bind_ip << ":" << m_listenning_port, LOG_LEVEL_0); + LOG_PRINT_GREEN("Net service bound to " << m_bind_ip << ":" << m_listenning_port, LOG_LEVEL_0); if(m_external_port) LOG_PRINT_L0("External port defined as " << m_external_port); @@ -541,7 +541,7 @@ namespace nodetool #define LOG_PRINT_CC_PRIORITY_NODE(priority, con, msg) \ do { \ if (priority) {\ - LOG_PRINT_CC_L0(con, msg); \ + LOG_PRINT_CC_L1(con, msg); \ } else {\ LOG_PRINT_CC_L1(con, msg); \ } \ @@ -780,7 +780,7 @@ namespace nodetool { if(be.last_seen > local_time) { - LOG_PRINT_RED_L0("FOUND FUTURE peerlist for entry " << epee::string_tools::get_ip_string_from_int32(be.adr.ip) << ":" << be.adr.port << " last_seen: " << be.last_seen << ", local_time(on remote node):" << local_time); + LOG_PRINT_RED_L1("FOUND FUTURE peerlist for entry " << epee::string_tools::get_ip_string_from_int32(be.adr.ip) << ":" << be.adr.port << " last_seen: " << be.last_seen << ", local_time(on remote node):" << local_time); return false; } be.last_seen += delta; @@ -1034,7 +1034,7 @@ namespace nodetool if(arg.node_data.network_id != MONERO_NETWORK) { - LOG_PRINT_CCONTEXT_L0("WRONG NETWORK AGENT CONNECTED! id=" << epee::string_tools::get_str_from_guid_a(arg.node_data.network_id)); + LOG_PRINT_CCONTEXT_L1("WRONG NETWORK AGENT CONNECTED! id=" << epee::string_tools::get_str_from_guid_a(arg.node_data.network_id)); drop_connection(context); return 1; } From 4ba680f2946966df2030e5765e40ee0a36b112c4 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Tue, 9 Sep 2014 12:28:16 +0200 Subject: [PATCH 02/20] a few more error messages moved to log level 1 --- src/cryptonote_core/blockchain_storage.cpp | 22 +++++++++++----------- src/cryptonote_core/tx_pool.cpp | 8 ++++---- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/cryptonote_core/blockchain_storage.cpp b/src/cryptonote_core/blockchain_storage.cpp index 4c4425e0..c5f12d76 100644 --- a/src/cryptonote_core/blockchain_storage.cpp +++ b/src/cryptonote_core/blockchain_storage.cpp @@ -468,7 +468,7 @@ bool blockchain_storage::switch_to_alternative_blockchain(std::list >& amount_outs = it->second; @@ -1053,13 +1053,13 @@ bool blockchain_storage::find_blockchain_supplement(const std::list(id, bei.height)); if(!ind_res.second) { - LOG_ERROR("block with id: " << id << " already in block indexes"); + LOG_PRINT_L1("block with id: " << id << " already in block indexes"); purge_block_data_from_blockchain(bl, tx_processed_count); bvc.m_verifivation_failed = true; return false; diff --git a/src/cryptonote_core/tx_pool.cpp b/src/cryptonote_core/tx_pool.cpp index 82e57ade..81f93201 100644 --- a/src/cryptonote_core/tx_pool.cpp +++ b/src/cryptonote_core/tx_pool.cpp @@ -88,14 +88,14 @@ namespace cryptonote uint64_t fee = inputs_amount - outputs_amount; if (!kept_by_block && fee < DEFAULT_FEE) { - LOG_ERROR("transaction fee is not enough: " << print_money(fee) << ", minumim fee: " << print_money(DEFAULT_FEE)); + LOG_PRINT_L1("transaction fee is not enough: " << print_money(fee) << ", minumim fee: " << print_money(DEFAULT_FEE)); tvc.m_verifivation_failed = true; return false; } if (!kept_by_block && blob_size >= TRANSACTION_SIZE_LIMIT) { - LOG_ERROR("transaction is too big: " << blob_size << " bytes, maximum size: " << TRANSACTION_SIZE_LIMIT); + LOG_PRINT_L1("transaction is too big: " << blob_size << " bytes, maximum size: " << TRANSACTION_SIZE_LIMIT); tvc.m_verifivation_failed = true; return false; } @@ -105,7 +105,7 @@ namespace cryptonote { if(have_tx_keyimges_as_spent(tx)) { - LOG_ERROR("Transaction with id= "<< id << " used already spent key images"); + LOG_PRINT_L1("Transaction with id= "<< id << " used already spent key images"); tvc.m_verifivation_failed = true; return false; } @@ -467,7 +467,7 @@ namespace cryptonote bool res = tools::unserialize_obj_from_file(*this, state_file_path); if(!res) { - LOG_ERROR("Failed to load memory pool from file " << state_file_path); + LOG_PRINT_L1("Failed to load memory pool from file " << state_file_path); m_transactions.clear(); m_spent_key_images.clear(); From 6afbdd975496535567e2c24777721660ba1b4280 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Tue, 9 Sep 2014 12:37:19 +0200 Subject: [PATCH 03/20] FreeBSD alloca.h reference fixed --- src/crypto/crypto.cpp | 7 ++++++- src/crypto/tree-hash.c | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/crypto/crypto.cpp b/src/crypto/crypto.cpp index bce3b113..fa0199f2 100644 --- a/src/crypto/crypto.cpp +++ b/src/crypto/crypto.cpp @@ -28,7 +28,6 @@ // // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers -#include #include #include #include @@ -42,6 +41,12 @@ #include "crypto.h" #include "hash.h" +#ifndef __FreeBSD__ + #include +#else + #include +#endif + namespace crypto { using std::abort; diff --git a/src/crypto/tree-hash.c b/src/crypto/tree-hash.c index 573f4464..5a84c868 100644 --- a/src/crypto/tree-hash.c +++ b/src/crypto/tree-hash.c @@ -28,13 +28,18 @@ // // Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers -#include #include #include #include #include "hash-ops.h" +#ifndef __FreeBSD__ + #include +#else + #include +#endif + /// Quick check if this is power of two (use on unsigned types; in this case for size_t only) bool ispowerof2_size_t(size_t x) { return x && !(x & (x - 1)); From 5a6599148018aa6b3557834acd47465064ad3bfc Mon Sep 17 00:00:00 2001 From: fluffypony Date: Tue, 9 Sep 2014 14:03:42 +0200 Subject: [PATCH 04/20] exclude local miniupnpc for FreeBSD, install from ports instead --- CMakeLists.txt | 17 +++++++++++++++++ external/CMakeLists.txt | 22 ++++++++++++---------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c5a7220e..9614d702 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,23 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) set(CMAKE_CONFIGURATION_TYPES "Debug;Release") enable_testing() +# Check if we're on FreeBSD so we can exclude the local miniupnpc (it should be installed from ports instead) +# CMAKE_SYSTEM_NAME checks are commonly known, but specifically taken from libsdl's CMakeLists +if(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD.*") + set(FREEBSD TRUE) +elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly.*|FreeBSD") + set(FREEBSD TRUE) +endif() + +# TODO: check bsdi, NetBSD, OpenBSD, to see if they need the same FreeBSD changes +# +# elseif(CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*") +# set(NETBSD TRUE) +# elseif(CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*") +# set(OPENBSD TRUE) +# elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*") +# set(BSDI TRUE) + function(set_static_flags) if (NOT APPLE) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++") diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 0a7a5d1a..547fb7e9 100755 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -1,11 +1,13 @@ -set(UPNPC_BUILD_STATIC ON CACHE BOOL "Build static library") -set(UPNPC_BUILD_SHARED OFF CACHE BOOL "Build shared library") -set(UPNPC_BUILD_TESTS OFF CACHE BOOL "Build test executables") -add_subdirectory(miniupnpc) +if(NOT FREEBSD) + set(UPNPC_BUILD_STATIC ON CACHE BOOL "Build static library") + set(UPNPC_BUILD_SHARED OFF CACHE BOOL "Build shared library") + set(UPNPC_BUILD_TESTS OFF CACHE BOOL "Build test executables") + add_subdirectory(miniupnpc) -set_property(TARGET upnpc-static PROPERTY FOLDER "external") -if(MSVC) - set_property(TARGET upnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267") -elseif(NOT MSVC) - set_property(TARGET upnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value") -endif() + set_property(TARGET upnpc-static PROPERTY FOLDER "external") + if(MSVC) + set_property(TARGET upnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -wd4244 -wd4267") + elseif(NOT MSVC) + set_property(TARGET upnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value") + endif() +endif() \ No newline at end of file From e1d31e0a8b59fd74829f790e97c75e7a530b86df Mon Sep 17 00:00:00 2001 From: fluffypony Date: Tue, 9 Sep 2014 14:07:57 +0200 Subject: [PATCH 05/20] malloc.h reference fixed for FreeBSD --- src/crypto/oaes_lib.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/crypto/oaes_lib.c b/src/crypto/oaes_lib.c index 81c8aeff..1dce99ed 100644 --- a/src/crypto/oaes_lib.c +++ b/src/crypto/oaes_lib.c @@ -38,8 +38,8 @@ static const char _NR[] = { #include #include -#ifndef __APPLE__ -#include +#ifndef __APPLE__ || __FREEBSD__ + #include #endif #ifdef WIN32 From 266c639f4fbadee324007d5fabf6089b7a6d9753 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Tue, 9 Sep 2014 14:49:13 +0200 Subject: [PATCH 06/20] more FreeBSD fixes --- src/crypto/oaes_lib.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/crypto/oaes_lib.c b/src/crypto/oaes_lib.c index 1dce99ed..8e45309b 100644 --- a/src/crypto/oaes_lib.c +++ b/src/crypto/oaes_lib.c @@ -33,15 +33,20 @@ static const char _NR[] = { #include #include -#include #include #include #include -#ifndef __APPLE__ || __FREEBSD__ +// Both OS X and FreeBSD don't need malloc.h +#if !defined(__APPLE__) && !defined(__FreeBSD__) #include #endif +// FreeBSD also doesn't need timeb.h +#ifndef __FreeBSD__ + #include +#endif + #ifdef WIN32 #include #else From 0e343ecfdf862452933f2f5c10d4a93603a7de14 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Wed, 10 Sep 2014 13:25:34 +0200 Subject: [PATCH 07/20] make FreeBSD use -lcompat till we can fix ftime() --- CMakeLists.txt | 4 ++++ src/CMakeLists.txt | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9614d702..ea5a094f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -130,6 +130,10 @@ elseif(NOT MSVC) set(Boost_LIBRARIES "${Boost_LIBRARIES};rt;pthread") endif() +if(FREEBSD) + set(BSD_COMPAT "compat") +endif() + set(COMMIT_ID_IN_VERSION ON CACHE BOOL "Include commit ID in version") file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/version") if (NOT COMMIT_ID_IN_VERSION) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e4e682b9..0bb3b87e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,13 +30,13 @@ add_library(cryptonote_core ${CRYPTONOTE_CORE}) add_executable(daemon ${DAEMON} ${P2P} ${CRYPTONOTE_PROTOCOL}) add_executable(connectivity_tool ${CONN_TOOL}) add_executable(simpleminer ${MINER}) -target_link_libraries(daemon rpc cryptonote_core crypto common upnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) -target_link_libraries(connectivity_tool cryptonote_core crypto common ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) -target_link_libraries(simpleminer cryptonote_core crypto common ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) +target_link_libraries(daemon rpc cryptonote_core crypto common upnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} ${BSD_COMPAT}) +target_link_libraries(connectivity_tool cryptonote_core crypto common ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} ${BSD_COMPAT}) +target_link_libraries(simpleminer cryptonote_core crypto common ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} ${BSD_COMPAT}) add_library(rpc ${RPC}) add_library(wallet ${WALLET}) add_executable(simplewallet ${SIMPLEWALLET} ) -target_link_libraries(simplewallet wallet rpc cryptonote_core crypto common upnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) +target_link_libraries(simplewallet wallet rpc cryptonote_core crypto common upnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} ${BSD_COMPAT}) add_dependencies(daemon version) add_dependencies(rpc version) add_dependencies(simplewallet version) From a8d043b6dd58a15bb21448db8e141a76e5c8276e Mon Sep 17 00:00:00 2001 From: fluffypony Date: Wed, 10 Sep 2014 13:55:39 +0200 Subject: [PATCH 08/20] replace ftime with gettimeofday on FreeBSD because lcompat is stupid --- CMakeLists.txt | 4 ---- src/CMakeLists.txt | 8 ++++---- src/crypto/oaes_lib.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ea5a094f..9614d702 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -130,10 +130,6 @@ elseif(NOT MSVC) set(Boost_LIBRARIES "${Boost_LIBRARIES};rt;pthread") endif() -if(FREEBSD) - set(BSD_COMPAT "compat") -endif() - set(COMMIT_ID_IN_VERSION ON CACHE BOOL "Include commit ID in version") file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/version") if (NOT COMMIT_ID_IN_VERSION) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0bb3b87e..e4e682b9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,13 +30,13 @@ add_library(cryptonote_core ${CRYPTONOTE_CORE}) add_executable(daemon ${DAEMON} ${P2P} ${CRYPTONOTE_PROTOCOL}) add_executable(connectivity_tool ${CONN_TOOL}) add_executable(simpleminer ${MINER}) -target_link_libraries(daemon rpc cryptonote_core crypto common upnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} ${BSD_COMPAT}) -target_link_libraries(connectivity_tool cryptonote_core crypto common ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} ${BSD_COMPAT}) -target_link_libraries(simpleminer cryptonote_core crypto common ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} ${BSD_COMPAT}) +target_link_libraries(daemon rpc cryptonote_core crypto common upnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) +target_link_libraries(connectivity_tool cryptonote_core crypto common ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) +target_link_libraries(simpleminer cryptonote_core crypto common ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) add_library(rpc ${RPC}) add_library(wallet ${WALLET}) add_executable(simplewallet ${SIMPLEWALLET} ) -target_link_libraries(simplewallet wallet rpc cryptonote_core crypto common upnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} ${BSD_COMPAT}) +target_link_libraries(simplewallet wallet rpc cryptonote_core crypto common upnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) add_dependencies(daemon version) add_dependencies(rpc version) add_dependencies(simplewallet version) diff --git a/src/crypto/oaes_lib.c b/src/crypto/oaes_lib.c index 8e45309b..ff266538 100644 --- a/src/crypto/oaes_lib.c +++ b/src/crypto/oaes_lib.c @@ -468,6 +468,7 @@ OAES_RET oaes_sprintf( #ifdef OAES_HAVE_ISAAC static void oaes_get_seed( char buf[RANDSIZ + 1] ) { + #ifndef __FreeBSD__ struct timeb timer; struct tm *gmTimer; char * _test = NULL; @@ -479,13 +480,27 @@ static void oaes_get_seed( char buf[RANDSIZ + 1] ) gmTimer->tm_year + 1900, gmTimer->tm_mon + 1, gmTimer->tm_mday, gmTimer->tm_hour, gmTimer->tm_min, gmTimer->tm_sec, timer.millitm, _test + timer.millitm, getpid() ); + #else + struct timeval timer; + struct tm *gmTimer; + char * _test = NULL; + gettimeofday(&timer, NULL); + gmTimer = gmtime( &timer.tv_sec ); + _test = (char *) calloc( sizeof( char ), timer.tv_usec/1000 ); + sprintf( buf, "%04d%02d%02d%02d%02d%02d%03d%p%d", + gmTimer->tm_year + 1900, gmTimer->tm_mon + 1, gmTimer->tm_mday, + gmTimer->tm_hour, gmTimer->tm_min, gmTimer->tm_sec, timer.tv_usec/1000, + _test + timer.tv_usec/1000, getpid() ); + #endif + if( _test ) free( _test ); } #else static uint32_t oaes_get_seed(void) { + #ifndef __FreeBSD__ struct timeb timer; struct tm *gmTimer; char * _test = NULL; @@ -497,6 +512,19 @@ static uint32_t oaes_get_seed(void) _ret = gmTimer->tm_year + 1900 + gmTimer->tm_mon + 1 + gmTimer->tm_mday + gmTimer->tm_hour + gmTimer->tm_min + gmTimer->tm_sec + timer.millitm + (uintptr_t) ( _test + timer.millitm ) + getpid(); + #else + struct timeval timer; + struct tm *gmTimer; + char * _test = NULL; + uint32_t _ret = 0; + + gettimeofday(&timer, NULL); + gmTimer = gmtime( &timer.tv_sec ); + _test = (char *) calloc( sizeof( char ), timer.tv_usec/1000 ); + _ret = gmTimer->tm_year + 1900 + gmTimer->tm_mon + 1 + gmTimer->tm_mday + + gmTimer->tm_hour + gmTimer->tm_min + gmTimer->tm_sec + timer.tv_usec/1000 + + (uintptr_t) ( _test + timer.tv_usec/1000 ) + getpid(); + #endif if( _test ) free( _test ); From 110f110181aa614d7ff2a3a4485a42d74af0f738 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Wed, 10 Sep 2014 13:58:43 +0200 Subject: [PATCH 09/20] Include sys/time.h on BSD --- src/crypto/oaes_lib.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/crypto/oaes_lib.c b/src/crypto/oaes_lib.c index ff266538..c86b8caa 100644 --- a/src/crypto/oaes_lib.c +++ b/src/crypto/oaes_lib.c @@ -45,6 +45,8 @@ static const char _NR[] = { // FreeBSD also doesn't need timeb.h #ifndef __FreeBSD__ #include +#else + #include #endif #ifdef WIN32 From ccb2ab2b7b982afa3f495779f852f25c7dd8b274 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Wed, 10 Sep 2014 14:01:39 +0200 Subject: [PATCH 10/20] mmap on FreeBSD doesn't have MAP_HUGETLB --- src/crypto/slow-hash.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crypto/slow-hash.c b/src/crypto/slow-hash.c index 4d159472..3aff7bd5 100644 --- a/src/crypto/slow-hash.c +++ b/src/crypto/slow-hash.c @@ -330,7 +330,7 @@ void slow_hash_allocate_state(void) hp_state = (uint8_t *) VirtualAlloc(hp_state, MEMORY, MEM_LARGE_PAGES | MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); #else -#if defined(__APPLE__) +#if defined(__APPLE__) || defined(__FreeBSD__) hp_state = mmap(0, MEMORY, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, 0, 0); #else From 81490d2aeae80ef3c3ab8ca209675ae2a950ac37 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Wed, 10 Sep 2014 14:19:42 +0200 Subject: [PATCH 11/20] miniupnpc changes for freebsd --- CMakeLists.txt | 4 ++++ src/CMakeLists.txt | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9614d702..11273adc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,6 +113,10 @@ else() endif() endif() +if(NOT FREEBSD) + set(UPNP_LIBRARIES "upnpc-static") +endif() + if(STATIC) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_RUNTIME ON) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e4e682b9..85bce342 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,13 +30,13 @@ add_library(cryptonote_core ${CRYPTONOTE_CORE}) add_executable(daemon ${DAEMON} ${P2P} ${CRYPTONOTE_PROTOCOL}) add_executable(connectivity_tool ${CONN_TOOL}) add_executable(simpleminer ${MINER}) -target_link_libraries(daemon rpc cryptonote_core crypto common upnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) +target_link_libraries(daemon rpc cryptonote_core crypto common ${UPNP_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) target_link_libraries(connectivity_tool cryptonote_core crypto common ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) target_link_libraries(simpleminer cryptonote_core crypto common ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) add_library(rpc ${RPC}) add_library(wallet ${WALLET}) add_executable(simplewallet ${SIMPLEWALLET} ) -target_link_libraries(simplewallet wallet rpc cryptonote_core crypto common upnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) +target_link_libraries(simplewallet wallet rpc cryptonote_core crypto common ${UPNP_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) add_dependencies(daemon version) add_dependencies(rpc version) add_dependencies(simplewallet version) From 7d01dad8f4fdef18936977defab18c13dc32d19b Mon Sep 17 00:00:00 2001 From: fluffypony Date: Wed, 10 Sep 2014 18:14:57 +0200 Subject: [PATCH 12/20] use external miniupnpc if available --- CMakeLists.txt | 4 - external/CMakeLists.txt | 18 +++- external/FindMiniupnpc.cmake | 178 +++++++++++++++++++++++++++++++++++ 3 files changed, 193 insertions(+), 7 deletions(-) create mode 100644 external/FindMiniupnpc.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 11273adc..9614d702 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,10 +113,6 @@ else() endif() endif() -if(NOT FREEBSD) - set(UPNP_LIBRARIES "upnpc-static") -endif() - if(STATIC) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_RUNTIME ON) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 547fb7e9..481fbe9d 100755 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -1,8 +1,18 @@ -if(NOT FREEBSD) +if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + include(FindMiniupnpc) +endif() + +if(MINIUPNP_FOUND AND MINIUPNPC_VERSION_1_7_OR_HIGHER) + message(STATUS "Using shared miniupnpc") + include_directories(${MINIUPNP_INCLUDE_DIR}) + set(UPNP_LIBRARIES "miniupnpc") +else() + message(STATUS "Using static miniupnpc from external") + add_subdirectory(miniupnpc) + set(UPNPC_BUILD_STATIC ON CACHE BOOL "Build static library") set(UPNPC_BUILD_SHARED OFF CACHE BOOL "Build shared library") set(UPNPC_BUILD_TESTS OFF CACHE BOOL "Build test executables") - add_subdirectory(miniupnpc) set_property(TARGET upnpc-static PROPERTY FOLDER "external") if(MSVC) @@ -10,4 +20,6 @@ if(NOT FREEBSD) elseif(NOT MSVC) set_property(TARGET upnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value") endif() -endif() \ No newline at end of file + + set(UPNP_LIBRARIES "upnpc-static") +endif() diff --git a/external/FindMiniupnpc.cmake b/external/FindMiniupnpc.cmake new file mode 100644 index 00000000..cf393e45 --- /dev/null +++ b/external/FindMiniupnpc.cmake @@ -0,0 +1,178 @@ +# Locate miniupnp library +# This module defines +# MINIUPNP_FOUND, if false, do not try to link to miniupnp +# MINIUPNP_LIBRARY, the miniupnp variant +# MINIUPNP_INCLUDE_DIR, where to find miniupnpc.h and family) +# MINIUPNPC_VERSION_PRE1_6 --> set if we detect the version of miniupnpc is +# pre 1.6 +# MINIUPNPC_VERSION_PRE1_5 --> set if we detect the version of miniupnpc is +# pre 1.5 +# +# Note that the expected include convention is +# #include "miniupnpc.h" +# and not +# #include +# This is because, the miniupnpc location is not standardized and may exist +# in locations other than miniupnpc/ + +#============================================================================= +# Copyright 2011 Mark Vejvoda +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distributed this file outside of CMake, substitute the full +# License text for the above reference.) + +if (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY) + # Already in cache, be silent + set(MINIUPNP_FIND_QUIETLY TRUE) +endif (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY) + +find_path(MINIUPNP_INCLUDE_DIR miniupnpc.h + PATH_SUFFIXES miniupnpc) +find_library(MINIUPNP_LIBRARY miniupnpc) + +if (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY) + set (MINIUPNP_FOUND TRUE) +endif () + +if (MINIUPNP_FOUND) + if (NOT MINIUPNP_FIND_QUIETLY) + message (STATUS "Found the miniupnpc libraries at ${MINIUPNP_LIBRARY}") + message (STATUS "Found the miniupnpc headers at ${MINIUPNP_INCLUDE_DIR}") + endif (NOT MINIUPNP_FIND_QUIETLY) + + message(STATUS "Detecting version of miniupnpc in path: ${MINIUPNP_INCLUDE_DIR}") + + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + int main() + { + static struct UPNPUrls urls; + static struct IGDdatas data; + + GetUPNPUrls (&urls, &data, \"myurl\",0); + + return 0; + }" + MINIUPNPC_VERSION_1_7_OR_HIGHER) + +IF (NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + int main() + { + struct UPNPDev *devlist = NULL; + int upnp_delay = 5000; + const char *upnp_multicastif = NULL; + const char *upnp_minissdpdsock = NULL; + int upnp_sameport = 0; + int upnp_ipv6 = 0; + int upnp_error = 0; + devlist = upnpDiscover(upnp_delay, upnp_multicastif, upnp_minissdpdsock, upnp_sameport, upnp_ipv6, &upnp_error); + + return 0; + }" + MINIUPNPC_VERSION_PRE1_7) + ENDIF() + + IF (NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + int main() + { + struct UPNPDev *devlist = NULL; + int upnp_delay = 5000; + const char *upnp_multicastif = NULL; + const char *upnp_minissdpdsock = NULL; + int upnp_sameport = 0; + int upnp_ipv6 = 0; + int upnp_error = 0; + devlist = upnpDiscover(upnp_delay, upnp_multicastif, upnp_minissdpdsock, upnp_sameport); + + return 0; + }" + MINIUPNPC_VERSION_PRE1_6) + + ENDIF() + + IF (NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + static struct UPNPUrls urls; + static struct IGDdatas data; + int main() + { + char externalIP[16] = \"\"; + UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIP); + + return 0; + }" + MINIUPNPC_VERSION_1_5_OR_HIGHER) + ENDIF() + + IF (NOT MINIUPNPC_VERSION_1_5_OR_HIGHER AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + static struct UPNPUrls urls; + static struct IGDdatas data; + int main() + { + char externalIP[16] = \"\"; + UPNP_GetExternalIPAddress(urls.controlURL, data.servicetype, externalIP); + + return 0; + }" + MINIUPNPC_VERSION_PRE1_5) + +ENDIF() + +IF(MINIUPNPC_VERSION_PRE1_5) + message(STATUS "Found miniupnpc version is pre v1.5") +ENDIF() +IF(MINIUPNPC_VERSION_PRE1_6) + message(STATUS "Found miniupnpc version is pre v1.6") +ENDIF() +IF(MINIUPNPC_VERSION_PRE1_7) + message(STATUS "Found miniupnpc version is pre v1.7") +ENDIF() + +IF(NOT MINIUPNPC_VERSION_PRE1_5 AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7) + message(STATUS "Found miniupnpc version is v1.7 or higher") +ENDIF() + +else () + message (STATUS "Could not find miniupnp") +endif () + +MARK_AS_ADVANCED(MINIUPNP_INCLUDE_DIR MINIUPNP_LIBRARY) \ No newline at end of file From 59c0423eae544cf093161461d4653ba4983cfe1f Mon Sep 17 00:00:00 2001 From: fluffypony Date: Wed, 10 Sep 2014 18:22:20 +0200 Subject: [PATCH 13/20] miniupnpc includes fixed --- src/p2p/net_node.inl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index 7540eb38..c2b39741 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -42,8 +42,8 @@ #include "net/local_ip.h" #include "crypto/crypto.h" #include "storages/levin_abstract_invoke2.h" -#include -#include +#include "miniupnpc.h" +#include "upnpcommands.h" #define NET_MAKE_IP(b1,b2,b3,b4) ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4)))) From 8d8b47e69f6bd1cfbd8f94c8ffc30b0ad3f19fc0 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Wed, 10 Sep 2014 20:01:30 +0200 Subject: [PATCH 14/20] more dynamic miniupnp fixes --- CMakeLists.txt | 8 ++++++++ external/CMakeLists.txt | 7 ++----- src/p2p/net_node.inl | 11 +++++++++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9614d702..3b07a96e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,14 @@ if (UNIX AND NOT APPLE) find_package(Threads) endif() +if(MINIUPNP_FOUND AND MINIUPNPC_VERSION_1_7_OR_HIGHER) + add_definitions("-DUPNP_DYNAMIC") + set(UPNP_LIBRARIES "miniupnpc") +else() + add_definitions("-DUPNP_STATIC") + set(UPNP_LIBRARIES "upnpc-static") +endif() + if(MSVC) add_definitions("/bigobj /MP /W3 /GS- /D_CRT_SECURE_NO_WARNINGS /wd4996 /wd4345 /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN /DGTEST_HAS_TR1_TUPLE=0 /FIinline_c.h /D__SSE4_1__") # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Dinline=__inline") diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index 481fbe9d..bf3dd601 100755 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -3,16 +3,15 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") endif() if(MINIUPNP_FOUND AND MINIUPNPC_VERSION_1_7_OR_HIGHER) - message(STATUS "Using shared miniupnpc") + message(STATUS "Using shared miniupnpc found at ${MINIUPNP_INCLUDE_DIR}") include_directories(${MINIUPNP_INCLUDE_DIR}) - set(UPNP_LIBRARIES "miniupnpc") else() message(STATUS "Using static miniupnpc from external") - add_subdirectory(miniupnpc) set(UPNPC_BUILD_STATIC ON CACHE BOOL "Build static library") set(UPNPC_BUILD_SHARED OFF CACHE BOOL "Build shared library") set(UPNPC_BUILD_TESTS OFF CACHE BOOL "Build test executables") + add_subdirectory(miniupnpc) set_property(TARGET upnpc-static PROPERTY FOLDER "external") if(MSVC) @@ -20,6 +19,4 @@ else() elseif(NOT MSVC) set_property(TARGET upnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value") endif() - - set(UPNP_LIBRARIES "upnpc-static") endif() diff --git a/src/p2p/net_node.inl b/src/p2p/net_node.inl index c2b39741..626e227b 100644 --- a/src/p2p/net_node.inl +++ b/src/p2p/net_node.inl @@ -42,8 +42,15 @@ #include "net/local_ip.h" #include "crypto/crypto.h" #include "storages/levin_abstract_invoke2.h" -#include "miniupnpc.h" -#include "upnpcommands.h" + +// We have to look for miniupnpc headers in different places, dependent on if its compiled or external +#ifdef UPNP_STATIC + #include + #include +#else + #include "miniupnpc.h" + #include "upnpcommands.h" +#endif #define NET_MAKE_IP(b1,b2,b3,b4) ((LPARAM)(((DWORD)(b1)<<24)+((DWORD)(b2)<<16)+((DWORD)(b3)<<8)+((DWORD)(b4)))) From 36c7ea9f778f8cd6a5f2b58d5e3f9d49430eb0fa Mon Sep 17 00:00:00 2001 From: fluffypony Date: Thu, 11 Sep 2014 08:22:49 +0200 Subject: [PATCH 15/20] more CMake tweaks to allow detection on OS X --- CMakeLists.txt | 17 ++-- external/CMakeLists.txt | 192 ++++++++++++++++++++++++++++++++++- external/FindMiniupnpc.cmake | 178 -------------------------------- 3 files changed, 197 insertions(+), 190 deletions(-) delete mode 100644 external/FindMiniupnpc.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3b07a96e..2353a6c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,14 +43,6 @@ if (UNIX AND NOT APPLE) find_package(Threads) endif() -if(MINIUPNP_FOUND AND MINIUPNPC_VERSION_1_7_OR_HIGHER) - add_definitions("-DUPNP_DYNAMIC") - set(UPNP_LIBRARIES "miniupnpc") -else() - add_definitions("-DUPNP_STATIC") - set(UPNP_LIBRARIES "upnpc-static") -endif() - if(MSVC) add_definitions("/bigobj /MP /W3 /GS- /D_CRT_SECURE_NO_WARNINGS /wd4996 /wd4345 /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN /DGTEST_HAS_TR1_TUPLE=0 /FIinline_c.h /D__SSE4_1__") # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Dinline=__inline") @@ -165,5 +157,14 @@ else() endif() add_subdirectory(external) + +# Final setup for miniupnpc +if(UPNP_STATIC) + add_definitions("-DUPNP_STATIC") +else() + add_definitions("-DUPNP_DYNAMIC") + include_directories(${UPNP_INCLUDE}) +endif() + add_subdirectory(src) add_subdirectory(tests) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index bf3dd601..d220786e 100755 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -1,10 +1,191 @@ -if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - include(FindMiniupnpc) -endif() +# Locate miniupnp library +# This module defines +# MINIUPNP_FOUND, if false, do not try to link to miniupnp +# MINIUPNP_LIBRARY, the miniupnp variant +# MINIUPNP_INCLUDE_DIR, where to find miniupnpc.h and family) +# MINIUPNPC_VERSION_PRE1_6 --> set if we detect the version of miniupnpc is +# pre 1.6 +# MINIUPNPC_VERSION_PRE1_5 --> set if we detect the version of miniupnpc is +# pre 1.5 +# +# Note that the expected include convention is +# #include "miniupnpc.h" +# and not +# #include +# This is because, the miniupnpc location is not standardized and may exist +# in locations other than miniupnpc/ + +#============================================================================= +# Copyright 2011 Mark Vejvoda +# +# Distributed under the OSI-approved BSD License (the "License"); +# see accompanying file Copyright.txt for details. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= +# (To distributed this file outside of CMake, substitute the full +# License text for the above reference.) + +if (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY) + # Already in cache, be silent + set(MINIUPNP_FIND_QUIETLY TRUE) +endif (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY) + +find_path(MINIUPNP_INCLUDE_DIR miniupnpc.h + PATH_SUFFIXES miniupnpc) +find_library(MINIUPNP_LIBRARY miniupnpc) + +if (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY) + set (MINIUPNP_FOUND TRUE) +endif () + +if (MINIUPNP_FOUND) + include(CheckCXXSourceRuns) + if (NOT MINIUPNP_FIND_QUIETLY) + message (STATUS "Found the miniupnpc libraries at ${MINIUPNP_LIBRARY}") + message (STATUS "Found the miniupnpc headers at ${MINIUPNP_INCLUDE_DIR}") + endif (NOT MINIUPNP_FIND_QUIETLY) + + message(STATUS "Detecting version of miniupnpc in path: ${MINIUPNP_INCLUDE_DIR}") + + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + int main() + { + static struct UPNPUrls urls; + static struct IGDdatas data; + + GetUPNPUrls (&urls, &data, \"myurl\",0); + + return 0; + }" + MINIUPNPC_VERSION_1_7_OR_HIGHER) + +IF (NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + int main() + { + struct UPNPDev *devlist = NULL; + int upnp_delay = 5000; + const char *upnp_multicastif = NULL; + const char *upnp_minissdpdsock = NULL; + int upnp_sameport = 0; + int upnp_ipv6 = 0; + int upnp_error = 0; + devlist = upnpDiscover(upnp_delay, upnp_multicastif, upnp_minissdpdsock, upnp_sameport, upnp_ipv6, &upnp_error); + + return 0; + }" + MINIUPNPC_VERSION_PRE1_7) + ENDIF() + + IF (NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + int main() + { + struct UPNPDev *devlist = NULL; + int upnp_delay = 5000; + const char *upnp_multicastif = NULL; + const char *upnp_minissdpdsock = NULL; + int upnp_sameport = 0; + int upnp_ipv6 = 0; + int upnp_error = 0; + devlist = upnpDiscover(upnp_delay, upnp_multicastif, upnp_minissdpdsock, upnp_sameport); + + return 0; + }" + MINIUPNPC_VERSION_PRE1_6) + + ENDIF() + + IF (NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + static struct UPNPUrls urls; + static struct IGDdatas data; + int main() + { + char externalIP[16] = \"\"; + UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIP); + + return 0; + }" + MINIUPNPC_VERSION_1_5_OR_HIGHER) + ENDIF() + + IF (NOT MINIUPNPC_VERSION_1_5_OR_HIGHER AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) + set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) + set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) + check_cxx_source_runs(" + #include + #include + #include + #include + static struct UPNPUrls urls; + static struct IGDdatas data; + int main() + { + char externalIP[16] = \"\"; + UPNP_GetExternalIPAddress(urls.controlURL, data.servicetype, externalIP); + + return 0; + }" + MINIUPNPC_VERSION_PRE1_5) + +ENDIF() + +IF(MINIUPNPC_VERSION_PRE1_5) + message(STATUS "Found miniupnpc version is pre v1.5") +ENDIF() +IF(MINIUPNPC_VERSION_PRE1_6) + message(STATUS "Found miniupnpc version is pre v1.6") +ENDIF() +IF(MINIUPNPC_VERSION_PRE1_7) + message(STATUS "Found miniupnpc version is pre v1.7") +ENDIF() + +IF(NOT MINIUPNPC_VERSION_PRE1_5 AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7) + message(STATUS "Found miniupnpc version is v1.7 or higher") +ENDIF() + +else () + message (STATUS "Could not find miniupnp") +endif () + +MARK_AS_ADVANCED(MINIUPNP_INCLUDE_DIR MINIUPNP_LIBRARY) + +# And now on to the Monero part of things if(MINIUPNP_FOUND AND MINIUPNPC_VERSION_1_7_OR_HIGHER) message(STATUS "Using shared miniupnpc found at ${MINIUPNP_INCLUDE_DIR}") - include_directories(${MINIUPNP_INCLUDE_DIR}) + + set(UPNP_STATIC false PARENT_SCOPE) + set(UPNP_INCLUDE ${MINIUPNP_INCLUDE_DIR} PARENT_SCOPE) + set(UPNP_LIBRARIES ${MINIUPNP_LIBRARY} PARENT_SCOPE) else() message(STATUS "Using static miniupnpc from external") @@ -19,4 +200,7 @@ else() elseif(NOT MSVC) set_property(TARGET upnpc-static APPEND_STRING PROPERTY COMPILE_FLAGS " -Wno-undef -Wno-unused-result -Wno-unused-value") endif() + + set(UPNP_STATIC true PARENT_SCOPE) + set(UPNP_LIBRARIES "upnpc-static") endif() diff --git a/external/FindMiniupnpc.cmake b/external/FindMiniupnpc.cmake deleted file mode 100644 index cf393e45..00000000 --- a/external/FindMiniupnpc.cmake +++ /dev/null @@ -1,178 +0,0 @@ -# Locate miniupnp library -# This module defines -# MINIUPNP_FOUND, if false, do not try to link to miniupnp -# MINIUPNP_LIBRARY, the miniupnp variant -# MINIUPNP_INCLUDE_DIR, where to find miniupnpc.h and family) -# MINIUPNPC_VERSION_PRE1_6 --> set if we detect the version of miniupnpc is -# pre 1.6 -# MINIUPNPC_VERSION_PRE1_5 --> set if we detect the version of miniupnpc is -# pre 1.5 -# -# Note that the expected include convention is -# #include "miniupnpc.h" -# and not -# #include -# This is because, the miniupnpc location is not standardized and may exist -# in locations other than miniupnpc/ - -#============================================================================= -# Copyright 2011 Mark Vejvoda -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distributed this file outside of CMake, substitute the full -# License text for the above reference.) - -if (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY) - # Already in cache, be silent - set(MINIUPNP_FIND_QUIETLY TRUE) -endif (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY) - -find_path(MINIUPNP_INCLUDE_DIR miniupnpc.h - PATH_SUFFIXES miniupnpc) -find_library(MINIUPNP_LIBRARY miniupnpc) - -if (MINIUPNP_INCLUDE_DIR AND MINIUPNP_LIBRARY) - set (MINIUPNP_FOUND TRUE) -endif () - -if (MINIUPNP_FOUND) - if (NOT MINIUPNP_FIND_QUIETLY) - message (STATUS "Found the miniupnpc libraries at ${MINIUPNP_LIBRARY}") - message (STATUS "Found the miniupnpc headers at ${MINIUPNP_INCLUDE_DIR}") - endif (NOT MINIUPNP_FIND_QUIETLY) - - message(STATUS "Detecting version of miniupnpc in path: ${MINIUPNP_INCLUDE_DIR}") - - set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) - set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) - check_cxx_source_runs(" - #include - #include - #include - #include - int main() - { - static struct UPNPUrls urls; - static struct IGDdatas data; - - GetUPNPUrls (&urls, &data, \"myurl\",0); - - return 0; - }" - MINIUPNPC_VERSION_1_7_OR_HIGHER) - -IF (NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) - set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) - set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) - check_cxx_source_runs(" - #include - #include - #include - #include - int main() - { - struct UPNPDev *devlist = NULL; - int upnp_delay = 5000; - const char *upnp_multicastif = NULL; - const char *upnp_minissdpdsock = NULL; - int upnp_sameport = 0; - int upnp_ipv6 = 0; - int upnp_error = 0; - devlist = upnpDiscover(upnp_delay, upnp_multicastif, upnp_minissdpdsock, upnp_sameport, upnp_ipv6, &upnp_error); - - return 0; - }" - MINIUPNPC_VERSION_PRE1_7) - ENDIF() - - IF (NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) - set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) - set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) - check_cxx_source_runs(" - #include - #include - #include - #include - int main() - { - struct UPNPDev *devlist = NULL; - int upnp_delay = 5000; - const char *upnp_multicastif = NULL; - const char *upnp_minissdpdsock = NULL; - int upnp_sameport = 0; - int upnp_ipv6 = 0; - int upnp_error = 0; - devlist = upnpDiscover(upnp_delay, upnp_multicastif, upnp_minissdpdsock, upnp_sameport); - - return 0; - }" - MINIUPNPC_VERSION_PRE1_6) - - ENDIF() - - IF (NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) - set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) - set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) - check_cxx_source_runs(" - #include - #include - #include - #include - static struct UPNPUrls urls; - static struct IGDdatas data; - int main() - { - char externalIP[16] = \"\"; - UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIP); - - return 0; - }" - MINIUPNPC_VERSION_1_5_OR_HIGHER) - ENDIF() - - IF (NOT MINIUPNPC_VERSION_1_5_OR_HIGHER AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7 AND NOT MINIUPNPC_VERSION_1_7_OR_HIGHER) - set(CMAKE_REQUIRED_INCLUDES ${MINIUPNP_INCLUDE_DIR}) - set(CMAKE_REQUIRED_LIBRARIES ${MINIUPNP_LIBRARY}) - check_cxx_source_runs(" - #include - #include - #include - #include - static struct UPNPUrls urls; - static struct IGDdatas data; - int main() - { - char externalIP[16] = \"\"; - UPNP_GetExternalIPAddress(urls.controlURL, data.servicetype, externalIP); - - return 0; - }" - MINIUPNPC_VERSION_PRE1_5) - -ENDIF() - -IF(MINIUPNPC_VERSION_PRE1_5) - message(STATUS "Found miniupnpc version is pre v1.5") -ENDIF() -IF(MINIUPNPC_VERSION_PRE1_6) - message(STATUS "Found miniupnpc version is pre v1.6") -ENDIF() -IF(MINIUPNPC_VERSION_PRE1_7) - message(STATUS "Found miniupnpc version is pre v1.7") -ENDIF() - -IF(NOT MINIUPNPC_VERSION_PRE1_5 AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7) - message(STATUS "Found miniupnpc version is v1.7 or higher") -ENDIF() - -else () - message (STATUS "Could not find miniupnp") -endif () - -MARK_AS_ADVANCED(MINIUPNP_INCLUDE_DIR MINIUPNP_LIBRARY) \ No newline at end of file From d21cf293e14060a7a640237c943a1b083cbb66d2 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Thu, 11 Sep 2014 08:25:07 +0200 Subject: [PATCH 16/20] added license to CMake --- CMakeLists.txt | 30 ++++++++++++++++++++++++++++++ external/CMakeLists.txt | 32 ++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 30 ++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2353a6c0..e93c278d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,3 +1,33 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are +# permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other +# materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers + cmake_minimum_required(VERSION 2.8.6) set(VERSION "0.1") diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index d220786e..bc98d1a1 100755 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -1,3 +1,34 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are +# permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other +# materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers + +# --------------------------------- FindMiniupnpc Start --------------------------------- # Locate miniupnp library # This module defines # MINIUPNP_FOUND, if false, do not try to link to miniupnp @@ -177,6 +208,7 @@ else () endif () MARK_AS_ADVANCED(MINIUPNP_INCLUDE_DIR MINIUPNP_LIBRARY) +# --------------------------------- FindMiniupnpc End --------------------------------- # And now on to the Monero part of things diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 85bce342..9673e36e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,3 +1,33 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are +# permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other +# materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers + add_definitions(-DSTATICLIB) file(GLOB_RECURSE COMMON common/*) From 3217ed39ae6c29e79c6ab488e7f3c7082796394a Mon Sep 17 00:00:00 2001 From: fluffypony Date: Thu, 11 Sep 2014 08:28:28 +0200 Subject: [PATCH 17/20] fixed upnp libs in tests cmake --- tests/CMakeLists.txt | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1d0c91dc..8bc68d9b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,3 +1,33 @@ +# Copyright (c) 2014, The Monero Project +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, are +# permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, this list of +# conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, this list +# of conditions and the following disclaimer in the documentation and/or other +# materials provided with the distribution. +# +# 3. Neither the name of the copyright holder nor the names of its contributors may be +# used to endorse or promote products derived from this software without specific +# prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +# THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers + add_definitions(-DSTATICLIB) add_subdirectory(gtest) @@ -31,7 +61,7 @@ add_executable(unit_tests ${UNIT_TESTS}) add_executable(net_load_tests_clt net_load_tests/clt.cpp) add_executable(net_load_tests_srv net_load_tests/srv.cpp) -target_link_libraries(core_proxy cryptonote_core common crypto upnpc-static ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) +target_link_libraries(core_proxy cryptonote_core common crypto ${UPNP_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) target_link_libraries(coretests cryptonote_core common crypto ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) target_link_libraries(difficulty-tests cryptonote_core) target_link_libraries(functional_tests cryptonote_core wallet common crypto ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) From afc61dda45cc0673143f978d4977d100d9dd7c37 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Thu, 11 Sep 2014 10:02:24 +0200 Subject: [PATCH 18/20] gtest patches for FreeBSD --- tests/gtest/include/gtest/internal/gtest-internal.h | 4 ++++ tests/gtest/include/gtest/internal/gtest-port.h | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/tests/gtest/include/gtest/internal/gtest-internal.h b/tests/gtest/include/gtest/internal/gtest-internal.h index 7aa1197f..ad5369d6 100644 --- a/tests/gtest/include/gtest/internal/gtest-internal.h +++ b/tests/gtest/include/gtest/internal/gtest-internal.h @@ -44,7 +44,11 @@ # include # include # include +# include #endif // GTEST_OS_LINUX +#if GTEST_CAN_STREAM_RESULTS_ +# include +#endif // GTEST_CAN_STREAM_RESULTS_ #include #include diff --git a/tests/gtest/include/gtest/internal/gtest-port.h b/tests/gtest/include/gtest/internal/gtest-port.h index 157b47f8..ce70acdd 100644 --- a/tests/gtest/include/gtest/internal/gtest-port.h +++ b/tests/gtest/include/gtest/internal/gtest-port.h @@ -188,6 +188,7 @@ #include #include #include +#include #ifndef _WIN32_WCE # include # include @@ -232,6 +233,9 @@ # ifdef ANDROID # define GTEST_OS_LINUX_ANDROID 1 # endif // ANDROID +#elif defined __FreeBSD__ +# define GTEST_OS_LINUX 1 +# define GTEST_HAS_CLONE 0 #elif defined __MVS__ # define GTEST_OS_ZOS 1 #elif defined(__sun) && defined(__SVR4) @@ -449,7 +453,7 @@ // defining __GNUC__ and friends, but cannot compile GCC's tuple // implementation. MSVC 2008 (9.0) provides TR1 tuple in a 323 MB // Feature Pack download, which we cannot assume the user has. -# if (defined(__GNUC__) && !defined(__CUDACC__) && (GTEST_GCC_VER_ >= 40000)) \ +# if (defined(__GNUC__) && !defined(__CUDACC__) && !defined(_LIBCPP_VERSION) && (GTEST_GCC_VER_ >= 40000)) \ || _MSC_VER >= 1600 # define GTEST_USE_OWN_TR1_TUPLE 0 # else From a40d5c18478342501ca53cd1ce8884c14bf2e397 Mon Sep 17 00:00:00 2001 From: fluffypony Date: Thu, 11 Sep 2014 11:42:59 +0200 Subject: [PATCH 19/20] cpu affinity fixes in performance tests for FreeBSD --- tests/performance_tests/performance_utils.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/performance_tests/performance_utils.h b/tests/performance_tests/performance_utils.h index 43d57d81..d585a068 100644 --- a/tests/performance_tests/performance_utils.h +++ b/tests/performance_tests/performance_utils.h @@ -40,7 +40,7 @@ void set_process_affinity(int core) { -#if defined (__APPLE__) +#if defined (__APPLE__) || defined(__FreeBSD__) return; #elif defined(BOOST_WINDOWS) DWORD_PTR mask = 1; @@ -62,7 +62,7 @@ void set_process_affinity(int core) void set_thread_high_priority() { -#if defined(__APPLE__) +#if defined(__APPLE__) || defined(__FreeBSD__) return; #elif defined(BOOST_WINDOWS) ::SetPriorityClass(::GetCurrentProcess(), HIGH_PRIORITY_CLASS); From b35c1e2491cb8a6a6cbf538520ac8495c739ea4c Mon Sep 17 00:00:00 2001 From: fluffypony Date: Thu, 11 Sep 2014 13:28:49 +0200 Subject: [PATCH 20/20] fixed UPNP_LIBRARIES scope --- external/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index bc98d1a1..fd8cd4eb 100755 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -200,7 +200,11 @@ IF(MINIUPNPC_VERSION_PRE1_7) ENDIF() IF(NOT MINIUPNPC_VERSION_PRE1_5 AND NOT MINIUPNPC_VERSION_PRE1_6 AND NOT MINIUPNPC_VERSION_PRE1_7) - message(STATUS "Found miniupnpc version is v1.7 or higher") + IF(MINIUPNPC_VERSION_1_5_OR_HIGHER) + message(STATUS "Found miniupnpc version is v1.5 or higher") + ELSE() + message(STATUS "Found miniupnpc version is v1.7 or higher") + ENDIF() ENDIF() else () @@ -234,5 +238,5 @@ else() endif() set(UPNP_STATIC true PARENT_SCOPE) - set(UPNP_LIBRARIES "upnpc-static") + set(UPNP_LIBRARIES "upnpc-static" PARENT_SCOPE) endif()