summaryrefslogtreecommitdiff
blob: 58c77b15355ab5b8ef89a707914e893db6f44b86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/*
* Copyright (C) 2010 Robin H.Johnson, Ovechko Kostyantyn <fastinetserver@gmail.com>.
*
* Project: IDFetch.
* Developer: Ovechko Kostyantyn Olexandrovich (Kharkiv State Technical University of Construction and Architecture, Ukraine).
* Mentor: Robin H. Johnson (Gentoo Linux: Developer, Trustee & Infrastructure Lead).
* Mentoring organization: Gentoo Linux.
* Sponsored by GSOC 2010.
*
* This file is part of Segget.
*
* Segget is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Segget is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Segget; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef __NETWORK_H__
#define __NETWORK_H__

//#include <string>
//#include <map>
#include <vector>
#include <curl/curl.h>
#include "str.h"
#include "mirror.h"
class Tmirror;
#include "config.h"
//#include "tui.h"
//#include "settings.cpp"
using namespace std;

#define MAX_NETWORKS 10

#define MODE_REMOTE 0
#define MODE_PROXY_FETCHER 1
#define MODE_LOCAL 2
#define MODE_CORAL_CDN 3

#define HTTP				0
#define HTTP_1_0			1
#define SOCKS4				2
#define SOCKS4a				3
#define SOCKS5				4
#define SOCKS5_HOSTNAME		5

class Tnetwork{
	static uint network_count;
	private:
		void load_mirror_list();
	public:
//		vector<int> benchmarked_mirror_list;
		vector<Tmirror> benchmarked_mirror_list;
		uint active_connections_num;
	//network
		uint network_num;
		uint priority;
	//mode
		ulong network_mode;
	//network_bind
		string bind_interface;
		ulong bind_local_port;
		ulong bind_local_port_range;
	//connections
		ulong max_connections;
		ulong connection_timeout;
		ulong ftp_response_timeout;
		ulong time_out;
		ulong low_connection_speed_limit;
		ulong low_connection_speed_time;
		ulong max_connection_speed;
		ulong current_speed_time_interval_msecs;
		bool follow_location;
		ulong max_redirs;
	//user-data
		string user_agent;
	//proxy
		string proxy_ip_or_name;
		ulong proxy_port;
		bool proxy_off;
		string proxy_user;
		string proxy_password;
		ulong proxy_type;
	//proxy_fetcher
		string proxy_fetcher_ip;
		ulong proxy_fetcher_port;
	//mirrors
//		bool use_own_mirror_list_only_on;
		bool only_local_when_possible;
		Tnetwork():
			benchmarked_mirror_list(),
			active_connections_num(0),
		//network
			network_num(0),
			priority(0),
		//mode
			network_mode(0),
		//network_bind
			bind_interface("none"),
			bind_local_port(0),
			bind_local_port_range(20),
		//connections
			max_connections(6),
			connection_timeout(15),
			ftp_response_timeout(180),
			time_out(500),
			low_connection_speed_limit(1000),
			low_connection_speed_time(10),
			max_connection_speed(0),
			current_speed_time_interval_msecs(1000),
			follow_location(1),
			max_redirs(5),
		//user-data
			user_agent("segget"),
		//proxy
			proxy_ip_or_name("none"),
			proxy_port(3128),
			proxy_off(1),
			proxy_user("none"),
			proxy_password("none"),
			proxy_type(CURLPROXY_HTTP),
		//proxy_fetcher
			proxy_fetcher_ip("none"),
			proxy_fetcher_port(3131),
		//mirrors
//			use_own_mirror_list_only_on(0),
			only_local_when_possible(1)
			{};
		void init(uint priority_value);
		bool has_free_connections();
		bool connect();
		void disconnect(){active_connections_num--;};
};

//extern uint Tnetwork::network_count=0;
extern Tnetwork network_array[MAX_NETWORKS];
#endif