1 /*
2  *  exttrack.h
3  *
4  *  Defines and classes for working with external trackers
5  *
6  *  Created by Arno Bakker
7  *  Copyright 2013-2016 Vrije Universiteit Amsterdam. All rights reserved.
8  */
9 #ifndef SWIFT_EXTTRACK_H_
10 #define SWIFT_EXTTRACK_H_
11 
12 namespace swift
13 {
14 
15 #define EXTTRACK_EVENT_STARTED      "started"
16 #define EXTTRACK_EVENT_COMPLETED    "completed"
17 #define EXTTRACK_EVENT_STOPPED      "stopped"
18 #define EXTTRACK_EVENT_WORKING      ""
19 
20     struct Address;
21     typedef std::vector<Address>    peeraddrs_t;
22 
23     /** External tracker */
24     typedef void (*exttrack_peerlist_callback_t)(int td, std::string result, uint32_t interval, peeraddrs_t peerlist);
25 
26 
27     class ContentTransfer;
28 
29     struct ExtTrackCallbackRecord {
ExtTrackCallbackRecordExtTrackCallbackRecord30         ExtTrackCallbackRecord(int td, exttrack_peerlist_callback_t callback) : td_(td), callback_(callback) {}
31         int td_;
32         exttrack_peerlist_callback_t    callback_;
33     };
34 
35     class ExternalTrackerClient
36     {
37     public:
38         ExternalTrackerClient(std::string url);
39         ~ExternalTrackerClient();
40         /** (Re)Registers at tracker and adds returned peer addresses to peerlist */
41         int Contact(ContentTransfer *transfer, std::string event, exttrack_peerlist_callback_t callback);
GetReportedComplete()42         bool GetReportedComplete() {
43             return reported_complete_;
44         }
GetReportLastTime()45         tint GetReportLastTime() {
46             return report_last_time_;
47         }
SetReportInterval(uint32_t interval)48         void SetReportInterval(uint32_t interval) {
49             report_interval_ = interval;
50         }
GetReportInterval()51         uint32_t GetReportInterval() {
52             return report_interval_;
53         }
54     protected:
55         std::string     url_;
56         uint8_t         *peerid_;
57         tint        report_last_time_; // tint
58         uint32_t        report_interval_; // seconds
59         bool        reported_complete_;
60 
61         /** IP in myaddr currently unused */
62         std::string CreateQuery(ContentTransfer *transfer, Address myaddr, std::string event);
63         int HTTPConnect(std::string query,ExtTrackCallbackRecord *callbackrec);
64     };
65 
66 }
67 
68 #endif /* SWIFT_EXTTRACK_H_ */
69