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