1 /* <!-- copyright */ 2 /* 3 * aria2 - The high speed download utility 4 * 5 * Copyright (C) 2013 Tatsuhiro Tsujikawa 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 * 21 * In addition, as a special exception, the copyright holders give 22 * permission to link the code of portions of this program with the 23 * OpenSSL library under certain conditions as described in each 24 * individual source file, and distribute linked combinations 25 * including the two. 26 * You must obey the GNU General Public License in all respects 27 * for all of the code used other than OpenSSL. If you modify 28 * file(s) with this exception, you may extend this exception to your 29 * version of the file(s), but you are not obligated to do so. If you 30 * do not wish to do so, delete this exception statement from your 31 * version. If you delete this exception statement from all source 32 * files in the program, then also delete it here. 33 */ 34 /* copyright --> */ 35 #ifndef D_UDP_TRACKER_REQUEST_H 36 #define D_UDP_TRACKER_REQUEST_H 37 38 #include "common.h" 39 40 #include <string> 41 #include <vector> 42 #include <memory> 43 44 #include "TimerA2.h" 45 46 namespace aria2 { 47 48 enum UDPTrackerAction { 49 UDPT_ACT_CONNECT = 0, 50 UDPT_ACT_ANNOUNCE = 1, 51 UDPT_ACT_SCRAPE = 2, 52 UDPT_ACT_ERROR = 3 53 }; 54 55 enum UDPTrackerError { 56 UDPT_ERR_SUCCESS, 57 UDPT_ERR_TRACKER, 58 UDPT_ERR_TIMEOUT, 59 UDPT_ERR_NETWORK, 60 UDPT_ERR_SHUTDOWN 61 }; 62 63 enum UDPTrackerState { UDPT_STA_PENDING, UDPT_STA_COMPLETE }; 64 65 enum UDPTrackerEvent { 66 UDPT_EVT_NONE = 0, 67 UDPT_EVT_COMPLETED = 1, 68 UDPT_EVT_STARTED = 2, 69 UDPT_EVT_STOPPED = 3 70 }; 71 72 struct UDPTrackerReply { 73 int32_t action; 74 uint32_t transactionId; 75 int32_t interval; 76 int32_t leechers; 77 int32_t seeders; 78 std::vector<std::pair<std::string, uint16_t>> peers; 79 UDPTrackerReply(); 80 }; 81 82 struct UDPTrackerRequest { 83 std::string remoteAddr; 84 uint16_t remotePort; 85 uint64_t connectionId; 86 int32_t action; 87 uint32_t transactionId; 88 std::string infohash; 89 std::string peerId; 90 int64_t downloaded; 91 int64_t left; 92 int64_t uploaded; 93 int32_t event; 94 uint32_t ip; 95 uint32_t key; 96 int32_t numWant; 97 uint16_t port; 98 uint16_t extensions; 99 int state; 100 int error; 101 Timer dispatched; 102 int failCount; 103 std::shared_ptr<UDPTrackerReply> reply; 104 void* user_data; 105 UDPTrackerRequest(); 106 }; 107 108 } // namespace aria2 109 110 #endif // D_UDP_TRACKER_REQUEST_H 111