source: trunk/src/halConfig.hpp @ 542

Revision 542, 5.2 KB checked in by Eoin, 12 years ago (diff)

Updating HaliteWindow? serialization.

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                globals_(),
34                torrent_defaults_(),
35                port_range_(6881,6881),
36                use_port_range_(false),
37                enable_dht_(true),
38                dht_settings_(),
39                enableIPFilter(false),
40                enableProxy(false),
41                proxyPort(0),
42                default_save_folder_((hal::app().exe_path().branch_path()/L"incoming").string()),
43                default_move_folder_((hal::app().exe_path().branch_path()/L"completed").string()),
44                use_move_to_(false),
45                save_prompt_(true),
46                enable_pe_(false),
47                pe_settings_(),
48                half_connections_(true),
49                half_connections_limit_(10),
50                mapping_upnp_(false),
51                mapping_nat_pmp_(false)
52        {
53                queue_settings_ = hal::bittorrent().get_queue_settings();
54                timeouts_ = hal::bittorrent().get_timeouts();
55        }
56       
57        friend class boost::serialization::access;
58        template<class Archive>
59        void serialize(Archive& ar, const unsigned int version)
60        {       
61                using boost::serialization::make_nvp;
62                switch (version)
63                {
64                case 6:
65                ar      & make_nvp("globals", globals_)
66                        & make_nvp("default_save_folder", default_save_folder_)
67                        & make_nvp("default_move_folder", default_move_folder_)
68                        & make_nvp("use_move_to", use_move_to_)
69                        & make_nvp("save_prompt", save_prompt_)
70                        & make_nvp("torrent_defaults", torrent_defaults_)
71                        & make_nvp("queue_settings", queue_settings_)
72                        & make_nvp("timeouts", timeouts_)
73                        & make_nvp("enable_dht", enable_dht_)
74                        & make_nvp("dht_settings", dht_settings_)
75                        & make_nvp("enable_pe", enable_pe_)
76                        & make_nvp("pe_settings", pe_settings_)
77                        & make_nvp("port_range", port_range_)
78                        & make_nvp("use_port_range", use_port_range_)
79                        & make_nvp("half_connections", half_connections_)
80                        & make_nvp("half_connections_limit", half_connections_limit_)
81                        & make_nvp("mapping_upnp", mapping_upnp_)
82                        & make_nvp("mapping_nat_pmp", mapping_nat_pmp_);
83                break;
84
85                case 4:
86                ar      & make_nvp("defaultMoveToFolder", default_move_folder_)
87                        & make_nvp("useMoveTo", use_move_to_);
88
89                case 3:
90                case 2:
91                ar      & make_nvp("halfConn", half_connections_)
92                        & make_nvp("halfConnLimit", half_connections_limit_);
93
94                case 1:
95                ar      & make_nvp("enablePe", enable_pe_)
96                        & make_nvp("peEncLevel", pe_settings_.encrypt_level)
97                        & make_nvp("pePerferRc4", pe_settings_.prefer_rc4)
98                        & make_nvp("peConInPolicy", pe_settings_.conn_in_policy)
99                        & make_nvp("peConOutPolicy", pe_settings_.conn_out_policy);
100
101                case 0:
102                ar      & make_nvp("maxConnections", globals_.total)
103                        & make_nvp("maxUploads", globals_.uploads)
104                        & make_nvp("downRate", globals_.download_rate)
105                        & make_nvp("upRate", globals_.upload_rate)
106                        & make_nvp("portFrom", port_range_.first)
107                        & make_nvp("portTo", port_range_.second);
108               
109                ar      & make_nvp("enableDHT", enable_dht_)
110                        & make_nvp("dhtMaxPeersReply", dht_settings_.max_peers_reply)
111                        & make_nvp("dhtSearchBranching", dht_settings_.search_branching)
112                        & make_nvp("dhtServicePort", dht_settings_.service_port)
113                        & make_nvp("dhtMaxFailCount", dht_settings_.max_fail_count);
114               
115                ar      & make_nvp("peerTimeout", timeouts_.peer_connect_timeout)
116                        & make_nvp("trackerTimeout", timeouts_.tracker_receive_timeout);
117
118                ar      & BOOST_SERIALIZATION_NVP(enableIPFilter)
119                        & make_nvp("portRange", use_port_range_)
120                        & make_nvp("torrentMaxConnections", torrent_defaults_.total)
121                        & make_nvp("torrentMaxUploads", torrent_defaults_.uploads)
122                        & make_nvp("torrentDownRate", torrent_defaults_.download_rate)
123                        & make_nvp("torrentUpRate", torrent_defaults_.upload_rate)
124                        & make_nvp("defaultSaveFolder", default_save_folder_)
125                        & make_nvp("savePrompt", save_prompt_);
126                }
127        }
128       
129        bool settingsChanged();
130       
131        friend class HaliteWindow;
132        friend class BitTorrentOptions;
133        friend class SecurityOptions;
134        friend class ProxyOptions;
135        friend class TorrentsOptions;
136        friend class GlobalOptions;
137        friend class PortOptions;
138
139private:
140        bool settingsThread();
141       
142        hal::connections globals_;
143
144        std::pair<int, int> port_range_;
145        bool use_port_range_;
146
147        hal::connections torrent_defaults_;
148
149        std::wstring default_save_folder_;
150        std::wstring default_move_folder_;
151        bool use_move_to_;
152        bool save_prompt_;
153       
154        bool enable_dht_;
155        hal::dht_settings dht_settings_;
156       
157        bool enableIPFilter;
158       
159        bool enableProxy;
160        std::wstring proxyHost;
161        int proxyPort;
162        std::wstring proxyUsername;
163        std::wstring proxyPassword;
164       
165
166    bool enable_pe_;
167        hal::pe_settings pe_settings_;
168       
169        bool half_connections_;
170        int half_connections_limit_;
171
172        bool mapping_upnp_;
173        bool mapping_nat_pmp_;
174
175        hal::queue_settings queue_settings_;
176        hal::timeouts timeouts_;
177};
178
179Config& config();
180
181} // namespace hal
182
183BOOST_CLASS_VERSION(hal::Config, 6)
Note: See TracBrowser for help on using the repository browser.