source: trunk/src/halConfig.hpp @ 518

Revision 518, 5.1 KB checked in by Eoin, 11 years ago (diff)
Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2008.
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#pragma once
8
9#include <boost/archive/xml_oarchive.hpp>
10#include <boost/archive/xml_iarchive.hpp>
11#include <boost/serialization/version.hpp>
12
13#include "global/string_conv.hpp"
14#include "global/wtl_app.hpp"
15
16#include "halIni.hpp"
17
18class BitTorrentOptions;
19class SecurityOptions;
20class ProxyOptions;
21class TorrentsOptions;
22       
23namespace hal
24{
25
26class Config :
27        public hal::IniBase<Config>,
28        private boost::noncopyable
29{
30public:
31        Config() :
32                hal::IniBase<Config>("globals/bittorrent", "Config"),
33                maxConnections(200),
34                maxUploads(20),
35                downRate(-1),
36                upRate(-1),
37                torrentMaxConnections(50),
38                torrentMaxUploads(10),
39                torrentDownRate(-1),
40                torrentUpRate(-1),
41                portFrom(6881),
42                portTo(6881),
43                portRange(false),
44                enableDHT(false),
45                dhtMaxPeersReply(50),
46                dhtSearchBranching(5),         
47                dhtServicePort(6881),
48                dhtMaxFailCount(20),
49                enableIPFilter(false),
50                enableProxy(false),
51                proxyPort(0),
52                defaultSaveFolder((hal::app().exe_path().branch_path()/L"incoming").string()),
53                defaultMoveToFolder((hal::app().exe_path().branch_path()/L"completed").string()),
54                useMoveTo(false),
55                savePrompt(true),
56                enablePe(false),
57                peEncLevel(0),
58                pePerferRc4(false),
59                peConInPolicy(1),
60                peConOutPolicy(1),
61                halfConn(true),
62                halfConnLimit(10),
63                mappingType(0),
64                peerTimeout(30),
65                trackerTimeout(60)
66        {
67                queue_settings_ = hal::bittorrent().get_queue_settings();
68                timeouts_ = hal::bittorrent().get_timeouts();
69        }
70       
71        friend class boost::serialization::access;
72        template<class Archive>
73        void serialize(Archive& ar, const unsigned int version)
74        {       
75                using boost::serialization::make_nvp;
76
77                ar & BOOST_SERIALIZATION_NVP(maxConnections);
78                ar & BOOST_SERIALIZATION_NVP(maxUploads);
79                ar & BOOST_SERIALIZATION_NVP(downRate);
80                ar & BOOST_SERIALIZATION_NVP(upRate);
81                ar & BOOST_SERIALIZATION_NVP(portFrom);
82                ar & BOOST_SERIALIZATION_NVP(portTo);
83               
84                ar & BOOST_SERIALIZATION_NVP(enableDHT);
85                ar & BOOST_SERIALIZATION_NVP(dhtMaxPeersReply);
86                ar & BOOST_SERIALIZATION_NVP(dhtSearchBranching);
87                ar & BOOST_SERIALIZATION_NVP(dhtServicePort);
88                ar & BOOST_SERIALIZATION_NVP(dhtMaxFailCount);
89                ar & BOOST_SERIALIZATION_NVP(enableIPFilter);
90                ar & BOOST_SERIALIZATION_NVP(portRange);
91               
92                ar & BOOST_SERIALIZATION_NVP(torrentMaxConnections);
93                ar & BOOST_SERIALIZATION_NVP(torrentMaxUploads);
94                ar & BOOST_SERIALIZATION_NVP(torrentDownRate);
95                ar & BOOST_SERIALIZATION_NVP(torrentUpRate);
96               
97                if (version <= 1) {
98                        ar & BOOST_SERIALIZATION_NVP(enableProxy);
99                        ar & BOOST_SERIALIZATION_NVP(proxyHost);
100                        ar & BOOST_SERIALIZATION_NVP(proxyPort);
101                        ar & BOOST_SERIALIZATION_NVP(proxyUsername);
102                        ar & BOOST_SERIALIZATION_NVP(proxyPassword);
103                }
104               
105                ar & BOOST_SERIALIZATION_NVP(defaultSaveFolder);
106                if (version > 3) {
107                        ar & BOOST_SERIALIZATION_NVP(defaultMoveToFolder);
108                        ar & BOOST_SERIALIZATION_NVP(useMoveTo);
109                }
110                ar & BOOST_SERIALIZATION_NVP(savePrompt);
111               
112                if (version > 0) {
113                        ar & BOOST_SERIALIZATION_NVP(enablePe);
114                        ar & BOOST_SERIALIZATION_NVP(peEncLevel);
115                        ar & BOOST_SERIALIZATION_NVP(pePerferRc4);
116                        ar & BOOST_SERIALIZATION_NVP(peConInPolicy);
117                        ar & BOOST_SERIALIZATION_NVP(peConOutPolicy);
118                }
119                if (version > 1) {
120                        ar & BOOST_SERIALIZATION_NVP(halfConn);
121                        ar & BOOST_SERIALIZATION_NVP(halfConnLimit);
122                }
123                if (version > 2) {
124                        ar & BOOST_SERIALIZATION_NVP(mappingType);
125                }
126
127                if (version > 2 && version < 6) {
128                        ar & make_nvp("peerTimeout", timeouts_.peer_connect_timeout);
129                        ar & make_nvp("trackerTimeout", timeouts_.tracker_receive_timeout);
130                } else if (version > 5) {
131                        ar & make_nvp("queue_settings", queue_settings_);
132                        ar & make_nvp("timeouts", timeouts_);
133                }
134        }
135       
136        bool settingsChanged();
137       
138        friend class HaliteWindow;
139        friend class BitTorrentOptions;
140        friend class SecurityOptions;
141        friend class ProxyOptions;
142        friend class TorrentsOptions;
143        friend class GlobalOptions;
144        friend class PortOptions;
145
146private:
147        bool settingsThread();
148       
149        int maxConnections;
150        int maxUploads;
151       
152        float downRate;
153        float upRate;
154
155        int torrentMaxConnections;
156        int torrentMaxUploads;
157       
158        float torrentDownRate;
159        float torrentUpRate;
160       
161        int portFrom;
162        int portTo;
163        bool portRange;
164       
165        bool enableDHT;
166        int dhtMaxPeersReply;
167        int dhtSearchBranching;
168        int dhtServicePort;
169        int dhtMaxFailCount;
170       
171        bool enableIPFilter;
172       
173        bool enableProxy;
174        std::wstring proxyHost;
175        int proxyPort;
176        std::wstring proxyUsername;
177        std::wstring proxyPassword;
178       
179        std::wstring defaultSaveFolder;
180        std::wstring defaultMoveToFolder;
181        bool useMoveTo;
182        bool savePrompt;
183
184    bool enablePe;
185    int peEncLevel;
186    bool pePerferRc4;
187    int peConInPolicy;
188    int peConOutPolicy;
189       
190        bool halfConn;
191        int halfConnLimit;
192
193        int mappingType;
194
195        hal::queue_settings queue_settings_;
196        hal::timeouts timeouts_;
197};
198
199Config& config();
200
201} // namespace hal
202
203BOOST_CLASS_VERSION(hal::Config, 6)
Note: See TracBrowser for help on using the repository browser.