source: trunk/src/halPeers.cpp @ 723

Revision 723, 3.9 KB checked in by Eoin, 12 years ago (diff)
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 "halSession.hpp"
21
22namespace hal
23{
24
25peer_detail::peer_detail(libt::peer_info& peerInfo) :
26        ip_address(hal::from_utf8_safe(peerInfo.ip.address().to_string())),
27        country(L""),
28        speed(std::make_pair(peerInfo.payload_down_speed, peerInfo.payload_up_speed)),
29        client(hal::from_utf8_safe(peerInfo.client))
30{
31        std::vector<wstring> status_vec;
32       
33#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES
34        if (peerInfo.country[0] != 0 && peerInfo.country[1] != 0)
35                country = (hal::wform(L"(%1%)") % hal::from_utf8_safe(string(peerInfo.country, 2))).str().c_str();
36#endif 
37
38        if (peerInfo.flags & libt::peer_info::handshake)
39        {
40                status_vec.push_back(app().res_wstr(HAL_PEER_HANDSHAKE));
41        }               
42        else if (peerInfo.flags & libt::peer_info::connecting)
43        {
44                status_vec.push_back(app().res_wstr(HAL_PEER_CONNECTING));
45        }
46        else
47        {
48        #ifndef TORRENT_DISABLE_ENCRYPTION             
49                if (peerInfo.flags & libt::peer_info::rc4_encrypted)
50                        status_vec.push_back(app().res_wstr(HAL_PEER_RC4_ENCRYPTED));           
51                if (peerInfo.flags & libt::peer_info::plaintext_encrypted)
52                        status_vec.push_back(app().res_wstr(HAL_PEER_PLAINTEXT_ENCRYPTED));
53        #endif
54               
55                if (peerInfo.flags & libt::peer_info::interesting)
56                        status_vec.push_back(app().res_wstr(HAL_PEER_INTERESTING));     
57                if (peerInfo.flags & libt::peer_info::choked)
58                        status_vec.push_back(app().res_wstr(HAL_PEER_CHOKED)); 
59                if (peerInfo.flags & libt::peer_info::remote_interested)
60                        status_vec.push_back(app().res_wstr(HAL_PEER_REMOTE_INTERESTING));     
61                if (peerInfo.flags & libt::peer_info::remote_choked)
62                        status_vec.push_back(app().res_wstr(HAL_PEER_REMOTE_CHOKED));   
63                if (peerInfo.flags & libt::peer_info::supports_extensions)
64                        status_vec.push_back(app().res_wstr(HAL_PEER_SUPPORT_EXTENSIONS));     
65        //      if (peerInfo.flags & libt::peer_info::local_connection)                                         // Not sure whats up here?
66        //              status_vec.push_back(app().res_wstr(HAL_PEER_LOCAL_CONNECTION));                       
67                if (peerInfo.flags & libt::peer_info::queued)
68                        status_vec.push_back(app().res_wstr(HAL_PEER_QUEUED));
69        }
70       
71        seed = (peerInfo.flags & libt::peer_info::seed) ? true : false;
72       
73        if (!status_vec.empty()) status = status_vec[0];
74       
75        if (status_vec.size() > 1)
76        {
77                for (size_t i=1; i<status_vec.size(); ++i)
78                {
79                        status += L"; ";
80                        status += status_vec[i];
81                }
82        }       
83}
84
85bool peer_detail::less(const peer_detail& r, size_t index) const
86{       
87        switch (index)
88        {
89        case ip_address_e: return ip_address < r.ip_address;
90        case country_e: return country < r.country;
91
92        case speed_down_e: return speed.first < r.speed.first;
93        case speed_up_e: return speed.second < r.speed.second;
94
95        case seed_e: return seed < r.seed;
96        case client_e: return client < r.client;
97        case status_e: return status < r.status;
98
99        default: return false; // ???
100        };
101}
102
103std::wstring peer_detail::to_wstring(size_t index) const
104{
105        switch (index)
106        {
107        case ip_address_e: return ip_address;
108        case country_e: return country;
109
110        case speed_down_e: return (wform(L"%1$.2fkb/s") % (speed.first/1024)).str(); 
111        case speed_up_e: return (wform(L"%1$.2fkb/s") % (speed.second/1024)).str();
112
113        case seed_e: return seed ? L"Seed" : L"";
114        case client_e: return client; 
115        case status_e: return status; 
116
117        default: return L"(Undefined)"; // ???
118        };
119}
120
121/*
122void peer_details_sort(peer_details_vec& p, size_t index, bool cmp_less)
123{
124        std::stable_sort(p.begin(), p.end(),
125                bind(&hal_details_compare<const peer_detail&>, _1, _2, index, cmp_less));
126}
127*/
128};
Note: See TracBrowser for help on using the repository browser.