source: trunk/src/halPeers.cpp @ 741

Revision 741, 3.9 KB checked in by Eoin, 11 years ago (diff)

Torrent manager given it's own header with cleanup refactoring.

Line 
1
2//         Copyright Eóin O'Callaghan 2008 - 2009.
3// Distributed under the Boost Software License, Version 1.0.
4//    (See accompanying file LICENSE_1_0.txt or copy at
5//          http://www.boost.org/LICENSE_1_0.txt)
6
7#include "stdAfx.hpp"
8#include <functional>
9
10#include "global/wtl_app.hpp"
11#include "global/string_conv.hpp"
12#include "global/ini_adapter.hpp"
13
14#include "halTorrent.hpp"
15#include "halTypes.hpp"
16#include "halEvent.hpp"
17#include "halSignaler.hpp"
18
19#include "halTorrentInternal.hpp"
20#include "halTorrentManager.hpp"
21#include "halSession.hpp"
22
23namespace hal
24{
25
26peer_detail::peer_detail(libt::peer_info& peerInfo) :
27        ip_address(hal::from_utf8_safe(peerInfo.ip.address().to_string())),
28        country(L""),
29        speed(std::make_pair(peerInfo.payload_down_speed, peerInfo.payload_up_speed)),
30        client(hal::from_utf8_safe(peerInfo.client))
31{
32        std::vector<wstring> status_vec;
33       
34#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES
35        if (peerInfo.country[0] != 0 && peerInfo.country[1] != 0)
36                country = (hal::wform(L"(%1%)") % hal::from_utf8_safe(string(peerInfo.country, 2))).str().c_str();
37#endif 
38
39        if (peerInfo.flags & libt::peer_info::handshake)
40        {
41                status_vec.push_back(app().res_wstr(HAL_PEER_HANDSHAKE));
42        }               
43        else if (peerInfo.flags & libt::peer_info::connecting)
44        {
45                status_vec.push_back(app().res_wstr(HAL_PEER_CONNECTING));
46        }
47        else
48        {
49        #ifndef TORRENT_DISABLE_ENCRYPTION             
50                if (peerInfo.flags & libt::peer_info::rc4_encrypted)
51                        status_vec.push_back(app().res_wstr(HAL_PEER_RC4_ENCRYPTED));           
52                if (peerInfo.flags & libt::peer_info::plaintext_encrypted)
53                        status_vec.push_back(app().res_wstr(HAL_PEER_PLAINTEXT_ENCRYPTED));
54        #endif
55               
56                if (peerInfo.flags & libt::peer_info::interesting)
57                        status_vec.push_back(app().res_wstr(HAL_PEER_INTERESTING));     
58                if (peerInfo.flags & libt::peer_info::choked)
59                        status_vec.push_back(app().res_wstr(HAL_PEER_CHOKED)); 
60                if (peerInfo.flags & libt::peer_info::remote_interested)
61                        status_vec.push_back(app().res_wstr(HAL_PEER_REMOTE_INTERESTING));     
62                if (peerInfo.flags & libt::peer_info::remote_choked)
63                        status_vec.push_back(app().res_wstr(HAL_PEER_REMOTE_CHOKED));   
64                if (peerInfo.flags & libt::peer_info::supports_extensions)
65                        status_vec.push_back(app().res_wstr(HAL_PEER_SUPPORT_EXTENSIONS));     
66        //      if (peerInfo.flags & libt::peer_info::local_connection)                                         // Not sure whats up here?
67        //              status_vec.push_back(app().res_wstr(HAL_PEER_LOCAL_CONNECTION));                       
68                if (peerInfo.flags & libt::peer_info::queued)
69                        status_vec.push_back(app().res_wstr(HAL_PEER_QUEUED));
70        }
71       
72        seed = (peerInfo.flags & libt::peer_info::seed) ? true : false;
73       
74        if (!status_vec.empty()) status = status_vec[0];
75       
76        if (status_vec.size() > 1)
77        {
78                for (size_t i=1; i<status_vec.size(); ++i)
79                {
80                        status += L"; ";
81                        status += status_vec[i];
82                }
83        }       
84}
85
86bool peer_detail::less(const peer_detail& r, size_t index) const
87{       
88        switch (index)
89        {
90        case ip_address_e: return ip_address < r.ip_address;
91        case country_e: return country < r.country;
92
93        case speed_down_e: return speed.first < r.speed.first;
94        case speed_up_e: return speed.second < r.speed.second;
95
96        case seed_e: return seed < r.seed;
97        case client_e: return client < r.client;
98        case status_e: return status < r.status;
99
100        default: return false; // ???
101        };
102}
103
104std::wstring peer_detail::to_wstring(size_t index) const
105{
106        switch (index)
107        {
108        case ip_address_e: return ip_address;
109        case country_e: return country;
110
111        case speed_down_e: return (wform(L"%1$.2fkb/s") % (speed.first/1024)).str(); 
112        case speed_up_e: return (wform(L"%1$.2fkb/s") % (speed.second/1024)).str();
113
114        case seed_e: return seed ? L"Seed" : L"";
115        case client_e: return client; 
116        case status_e: return status; 
117
118        default: return L"(Undefined)"; // ???
119        };
120}
121
122/*
123void peer_details_sort(peer_details_vec& p, size_t index, bool cmp_less)
124{
125        std::stable_sort(p.begin(), p.end(),
126                bind(&hal_details_compare<const peer_detail&>, _1, _2, index, cmp_less));
127}
128*/
129};
Note: See TracBrowser for help on using the repository browser.