From df928764e269434a805d396b2a8515c6a5695ee6 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Sat, 5 Dec 2009 23:03:48 +0000 Subject: [PATCH] reorganized error codes --- docs/manual.rst | 56 ++++++++++++++++++++----------- include/libtorrent/error_code.hpp | 53 ++++++++++++++++++++++------- src/error_code.cpp | 30 ++++++++++++++++- src/http_connection.cpp | 6 ++-- test/test_primitives.cpp | 11 ++++++ 5 files changed, 120 insertions(+), 36 deletions(-) diff --git a/docs/manual.rst b/docs/manual.rst index fa10754d9..10c4beb5c 100644 --- a/docs/manual.rst +++ b/docs/manual.rst @@ -5945,7 +5945,7 @@ code symbol description ------ ----------------------------------------- ----------------------------------------------------------------- 81 packet_too_large The packet size exceeded the upper sanity check-limit ------ ----------------------------------------- ----------------------------------------------------------------- -82 http_parse_error Failed to parse HTTP response +82 reserved ------ ----------------------------------------- ----------------------------------------------------------------- 83 http_error The web server responded with an error ------ ----------------------------------------- ----------------------------------------------------------------- @@ -6006,15 +6006,15 @@ NAT-PMP errors: ====== ========================================= ================================================================= code symbol description ====== ========================================= ================================================================= -108 unsupported_protocol_version The NAT-PMP router responded with an unsupported protocol version +120 unsupported_protocol_version The NAT-PMP router responded with an unsupported protocol version ------ ----------------------------------------- ----------------------------------------------------------------- -109 natpmp_not_authorized You are not authorized to map ports on this NAT-PMP router +121 natpmp_not_authorized You are not authorized to map ports on this NAT-PMP router ------ ----------------------------------------- ----------------------------------------------------------------- -110 network_failure The NAT-PMP router failed because of a network failure +122 network_failure The NAT-PMP router failed because of a network failure ------ ----------------------------------------- ----------------------------------------------------------------- -111 no_resources The NAT-PMP router failed because of lack of resources +123 no_resources The NAT-PMP router failed because of lack of resources ------ ----------------------------------------- ----------------------------------------------------------------- -112 unsupported_opcode The NAT-PMP router failed because an unsupported opcode was sent +124 unsupported_opcode The NAT-PMP router failed because an unsupported opcode was sent ====== ========================================= ================================================================= fastresume data errors: @@ -6022,40 +6022,58 @@ fastresume data errors: ====== ========================================= ================================================================= code symbol description ====== ========================================= ================================================================= -113 missing_file_sizes The resume data file is missing the 'file sizes' entry +130 missing_file_sizes The resume data file is missing the 'file sizes' entry ------ ----------------------------------------- ----------------------------------------------------------------- -114 no_files_in_resume_data The resume data file 'file sizes' entry is empty +131 no_files_in_resume_data The resume data file 'file sizes' entry is empty ------ ----------------------------------------- ----------------------------------------------------------------- -115 missing_pieces The resume data file is missing the 'pieces' and 'slots' entry +132 missing_pieces The resume data file is missing the 'pieces' and 'slots' entry ------ ----------------------------------------- ----------------------------------------------------------------- -116 mismatching_number_of_files The number of files in the resume data does not match the number +133 mismatching_number_of_files The number of files in the resume data does not match the number of files in the torrent ------ ----------------------------------------- ----------------------------------------------------------------- -117 mismatching_files_size One of the files on disk has a different size than in the fast +134 mismatching_files_size One of the files on disk has a different size than in the fast resume file ------ ----------------------------------------- ----------------------------------------------------------------- -118 mismatching_file_timestamp One of the files on disk has a different timestamp than in the +135 mismatching_file_timestamp One of the files on disk has a different timestamp than in the fast resume file ------ ----------------------------------------- ----------------------------------------------------------------- -119 not_a_dictionary The resume data file is not a dictionary +136 not_a_dictionary The resume data file is not a dictionary ------ ----------------------------------------- ----------------------------------------------------------------- -120 invalid_blocks_per_piece The 'blocks per piece' entry is invalid in the resume data file +137 invalid_blocks_per_piece The 'blocks per piece' entry is invalid in the resume data file ------ ----------------------------------------- ----------------------------------------------------------------- -121 missing_slots The resume file is missing the 'slots' entry, which is required +138 missing_slots The resume file is missing the 'slots' entry, which is required for torrents with compact allocation ------ ----------------------------------------- ----------------------------------------------------------------- -122 too_many_slots The resume file contains more slots than the torrent +139 too_many_slots The resume file contains more slots than the torrent ------ ----------------------------------------- ----------------------------------------------------------------- -123 invalid_slot_list The 'slot' entry is invalid in the resume data +140 invalid_slot_list The 'slot' entry is invalid in the resume data ------ ----------------------------------------- ----------------------------------------------------------------- -124 invalid_piece_index One index in the 'slot' list is invalid +141 invalid_piece_index One index in the 'slot' list is invalid ------ ----------------------------------------- ----------------------------------------------------------------- -125 pieces_need_reorder The pieces on disk needs to be re-ordered for the specified +142 pieces_need_reorder The pieces on disk needs to be re-ordered for the specified allocation mode. This happens if you specify sparse allocation and the files on disk are using compact storage. The pieces needs to be moved to their right position ====== ========================================= ================================================================= +HTTP errors: + +====== ========================================= ================================================================= +150 http_parse_error The HTTP header was not correctly formatted +------ ----------------------------------------- ----------------------------------------------------------------- +151 http_missing_location The HTTP response was in the 300-399 range but lacked a location + header +------ ----------------------------------------- ----------------------------------------------------------------- +152 http_failed_decompress The HTTP response was encoded with gzip or deflate but + decompressing it failed +====== ========================================= ================================================================= + +I2P errors: + +====== ========================================= ================================================================= +160 no_i2p_router The URL specified an i2p address, but no i2p router is configured +====== ========================================= ================================================================= + The names of these error codes are declared in then ``libtorrent::errors`` namespace. There is also another error category, ``libtorrent::upnp_category``, defining errors diff --git a/include/libtorrent/error_code.hpp b/include/libtorrent/error_code.hpp index 4d3610b71..ae384939b 100644 --- a/include/libtorrent/error_code.hpp +++ b/include/libtorrent/error_code.hpp @@ -138,7 +138,7 @@ namespace libtorrent duplicate_peer_id, torrent_removed, packet_too_large, - http_parse_error, + reserved82, http_error, missing_location, invalid_redirection, @@ -164,16 +164,33 @@ namespace libtorrent pex_message_too_large, invalid_pex_message, invalid_lt_tracker_message, + reserved108, + reserved109, + reserved110, + reserved111, + reserved112, + reserved113, + reserved114, + reserved115, + reserved116, + reserved117, + reserved118, + reserved119, // natpmp errors - unsupported_protocol_version, + unsupported_protocol_version, // 120 natpmp_not_authorized, network_failure, no_resources, unsupported_opcode, + reserved125, + reserved126, + reserved127, + reserved128, + reserved129, // fastresume errors - missing_file_sizes, + missing_file_sizes, // 130 no_files_in_resume_data, missing_pieces, mismatching_number_of_files, @@ -186,16 +203,26 @@ namespace libtorrent invalid_slot_list, invalid_piece_index, pieces_need_reorder, - reserved1, - reserved2, - reserved3, - reserved4, - reserved5, - reserved6, - reserved7, - reserved8, - - no_i2p_router, + reserved143, + reserved144, + reserved145, + reserved146, + reserved147, + reserved148, + reserved149, +// HTTP errors + http_parse_error, // 150 + http_missing_location, + http_failed_decompress, + reserved153, + reserved154, + reserved155, + reserved156, + reserved157, + reserved158, + reserved159, +// i2p errors + no_i2p_router, // 160 error_code_max }; diff --git a/src/error_code.cpp b/src/error_code.cpp index 9d5b936a0..00584ffe4 100644 --- a/src/error_code.cpp +++ b/src/error_code.cpp @@ -130,7 +130,7 @@ namespace libtorrent "duplicate peer-id", "torrent removed", "packet too large", - "failed to parse HTTP response", + "", "HTTP error", "missing location header", "invalid redirection", @@ -156,12 +156,29 @@ namespace libtorrent "pex message too large", "invalid pex message", "invalid lt_tracker message", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", // natpmp errors "unsupported protocol version", "not authorized to create port map (enable NAT-PMP on your router)", "network failure", "out of resources", "unsupported opcode", + "", + "", + "", + "", + "", // fastresume errors "missing or invalid 'file sizes' entry", "no files in resume data", @@ -183,7 +200,18 @@ namespace libtorrent "", "", "", +// HTTP errors + "Invalid HTTP header", + "missing Location header in HTTP redirect", + "failed to decompress HTTP response", "", + "", + "", + "", + "", + "", + "", +// i2p errors "no i2p router is set up", }; if (ev < 0 || ev >= sizeof(msgs)/sizeof(msgs[0])) diff --git a/src/http_connection.cpp b/src/http_connection.cpp index 5d10c37bc..2f35ed00c 100644 --- a/src/http_connection.cpp +++ b/src/http_connection.cpp @@ -489,7 +489,7 @@ void http_connection::callback(error_code const& e, char const* data, int size) std::string error; if (inflate_gzip(data, size, buf, max_bottled_buffer, error)) { - if (m_handler) m_handler(asio::error::fault, m_parser, data, size, *this); + if (m_handler) m_handler(errors::http_failed_decompress, m_parser, data, size, *this); close(); return; } @@ -584,7 +584,7 @@ void http_connection::on_read(error_code const& e if (error) { // HTTP parse error - error_code ec = asio::error::fault; + error_code ec = errors::http_parse_error; callback(ec, 0, 0); return; } @@ -601,7 +601,7 @@ void http_connection::on_read(error_code const& e if (location.empty()) { // missing location header - callback(asio::error::fault); + callback(error_code(errors::http_missing_location)); close(); return; } diff --git a/test/test_primitives.cpp b/test/test_primitives.cpp index 779d4e59b..b54633877 100644 --- a/test/test_primitives.cpp +++ b/test/test_primitives.cpp @@ -371,6 +371,17 @@ int test_main() error_code ec; int ret = 0; + TEST_CHECK(error_code(errors::http_error).message() == "HTTP error"); + TEST_CHECK(error_code(errors::missing_file_sizes).message() == "missing or invalid 'file sizes' entry"); + TEST_CHECK(error_code(errors::unsupported_protocol_version).message() == "unsupported protocol version"); + TEST_CHECK(error_code(errors::no_i2p_router).message() == "no i2p router is set up"); + TEST_CHECK(error_code(errors::http_parse_error).message() == "Invalid HTTP header"); + TEST_CHECK(error_code(errors::error_code_max).message() == "Unknown error"); + + TEST_CHECK(errors::reserved129 == 129); + TEST_CHECK(errors::reserved159 == 159); + TEST_CHECK(errors::reserved108 == 108); + { // test session state load/restore session* s = new session(fingerprint("LT",0,0,0,0), 0);