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
|
/*
* lftp - file transfer program
*
* Copyright (c) 1999-2005 by Alexander V. Lukyanov (lav@yars.free.net)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id: NetAccess.h,v 1.51 2009/07/17 13:03:01 lav Exp $ */
#ifndef NETACCESS_H
#define NETACCESS_H
#include "FileAccess.h"
#include "Resolver.h"
#include "LsCache.h"
#include "RateLimit.h"
class NetAccess : public FileAccess, public Networker
{
protected:
SMTaskRef<Resolver> resolver;
xarray<sockaddr_u> peer;
int peer_curr;
void ClearPeer();
void NextPeer();
int max_retries;
int max_persist_retries;
int persist_retries;
Timer idle_timer;
Timer timeout_timer;
bool CheckTimeout();
int reconnect_interval;
float reconnect_interval_current;
float reconnect_interval_multiplier;
int reconnect_interval_max;
int connection_limit;
bool connection_takeover;
Ref<RateLimit> rate_limit;
int socket_buffer;
int socket_maxseg;
void SetSocketBuffer(int sock) { Networker::SetSocketBuffer(sock,socket_buffer); }
void SetSocketMaxseg(int sock) { Networker::SetSocketMaxseg(sock,socket_maxseg); }
int SocketCreate(int af,int type,int proto) { return Networker::SocketCreate(af,type,proto,hostname); }
int SocketCreateTCP(int af) { return Networker::SocketCreateTCP(af,hostname); }
int Poll(int fd,int ev);
int CheckHangup(const struct pollfd *pfd,int num);
xstring_c proxy;
xstring_c proxy_port;
xstring_c proxy_user;
xstring_c proxy_pass;
xstring_c proxy_proto;
xstring_c home_auto;
void PropagateHomeAuto();
const char *FindHomeAuto();
void SayConnectingTo();
void SetProxy(const char *);
static bool NoProxy(const char *);
int Resolve(const char *defp,const char *ser,const char *pr);
const char *DelayingMessage();
bool ReconnectAllowed();
bool CheckRetries(); // returns false if max-retries exceeded.
bool NextTry(); // increments retries; does CheckRetries().
void TrySuccess(); // reset retry counters.
virtual void HandleTimeout();
public:
void Init();
NetAccess();
NetAccess(const NetAccess *);
~NetAccess();
void Reconfig(const char *name=0);
void Open(const char *fn,int mode,off_t offs);
void ResetLocationData();
void Close();
int CountConnections();
static void ClassInit();
};
class GenericParseListInfo : public ListInfo
{
protected:
xarray<FA::fileinfo> get_info;
int mode;
SMTaskRef<IOBuffer> ubuf;
bool get_time_for_dirs;
bool can_get_prec_time;
virtual FileSet *Parse(const char *buf,int len)
{ return session->ParseLongList(buf,len); }
public:
GenericParseListInfo(FileAccess *session,const char *path);
int Do();
const char *Status();
};
#endif//NETACCESS_H
|