annotate lib/protocols.c @ 509:b6ce74de1cd9

2004-7-24 Brian Masney <masneyb@gftp.org> * lib/protocols.c (gftp_get_all_subdirs) - if there is an error in the protocol function, make sure the error code is returned as is. This is so that timeouts can be detected properly
author masneyb
date Sat, 24 Jul 2004 12:14:32 +0000
parents 93d7d3b9a477
children 2c8a42a63a31
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1 /*****************************************************************************/
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2 /* protocols.c - Skeleton functions for the protocols gftp supports */
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
3 /* Copyright (C) 1998-2003 Brian Masney <masneyb@gftp.org> */
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
4 /* */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
5 /* This program is free software; you can redistribute it and/or modify */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
6 /* it under the terms of the GNU General Public License as published by */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
7 /* the Free Software Foundation; either version 2 of the License, or */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
8 /* (at your option) any later version. */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
9 /* */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
10 /* This program is distributed in the hope that it will be useful, */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
11 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
12 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
13 /* GNU General Public License for more details. */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
14 /* */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
15 /* You should have received a copy of the GNU General Public License */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
16 /* along with this program; if not, write to the Free Software */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
17 /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
18 /*****************************************************************************/
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
19
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
20 #include "gftp.h"
33
c8ec7877432e 2002-10-06 Brian Masney <masneyb@gftp.org>
masneyb
parents: 16
diff changeset
21 static const char cvsid[] = "$Id$";
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
22
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
23 gftp_request *
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
24 gftp_request_new (void)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
25 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
26 gftp_request *request;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
27
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
28 request = g_malloc0 (sizeof (*request));
66
cd3e457cbc85 2002-11-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 65
diff changeset
29 request->datafd = -1;
cd3e457cbc85 2002-11-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 65
diff changeset
30 request->cachefd = -1;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
31 request->server_type = GFTP_DIRTYPE_OTHER;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
32 return (request);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
33 }
136
84b3e69807a2 2003-4-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 125
diff changeset
34
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
35
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
36 void
67
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
37 gftp_request_destroy (gftp_request * request, int free_request)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
38 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
39 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
40
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
41 gftp_disconnect (request);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
42
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
43 if (request->destroy != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
44 request->destroy (request);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
45
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
46 if (request->hostname)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
47 g_free (request->hostname);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
48 if (request->username)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
49 g_free (request->username);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
50 if (request->password)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
51 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
52 memset (request->password, 0, strlen (request->password));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
53 g_free (request->password);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
54 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
55 if (request->account)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
56 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
57 memset (request->account, 0, strlen (request->account));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
58 g_free (request->account);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
59 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
60 if (request->directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
61 g_free (request->directory);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
62 if (request->last_ftp_response)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
63 g_free (request->last_ftp_response);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
64 if (request->protocol_data)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
65 g_free (request->protocol_data);
67
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
66
198
8fea1b1a2ec6 2003-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 191
diff changeset
67 if (request->local_options_vars != NULL)
8fea1b1a2ec6 2003-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 191
diff changeset
68 {
201
0098dae654a5 2003-6-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 199
diff changeset
69 gftp_config_free_options (request->local_options_vars,
0098dae654a5 2003-6-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 199
diff changeset
70 request->local_options_hash,
0098dae654a5 2003-6-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 199
diff changeset
71 request->num_local_options_vars);
198
8fea1b1a2ec6 2003-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 191
diff changeset
72 }
8fea1b1a2ec6 2003-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 191
diff changeset
73
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
74 memset (request, 0, sizeof (*request));
67
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
75
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
76 if (free_request)
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
77 g_free (request);
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
78 else
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
79 {
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
80 request->datafd = -1;
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
81 request->cachefd = -1;
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
82 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
83 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
84
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
85
309
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
86 /* This function is called to copy protocol specific data from one request
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
87 structure to another. This is typically called when a file transfer is
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
88 completed, state information can be copied back to the main window */
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
89 void
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
90 gftp_copy_param_options (gftp_request * dest_request,
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
91 gftp_request * src_request)
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
92 {
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
93 g_return_if_fail (dest_request != NULL);
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
94 g_return_if_fail (src_request != NULL);
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
95 g_return_if_fail (dest_request->protonum == src_request->protonum);
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
96
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
97 if (dest_request->copy_param_options)
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
98 dest_request->copy_param_options (dest_request, src_request);
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
99 }
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
100
cc2eeb30b793 2003-11-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 303
diff changeset
101
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
102 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
103 gftp_file_destroy (gftp_file * file)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
104 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
105 g_return_if_fail (file != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
106
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
107 if (file->file)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
108 g_free (file->file);
349
3fccdc9eb16f 2003-1-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 325
diff changeset
109 if (file->utf8_file)
3fccdc9eb16f 2003-1-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 325
diff changeset
110 g_free (file->utf8_file);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
111 if (file->user)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
112 g_free (file->user);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
113 if (file->group)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
114 g_free (file->group);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
115 if (file->destfile)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
116 g_free (file->destfile);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
117 memset (file, 0, sizeof (*file));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
118 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
119
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
120
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
121 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
122 gftp_connect (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
123 {
177
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
124 int ret;
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
125
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
126 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
127
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
128 if (request->connect == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
129 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
130
177
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
131 if ((ret = gftp_set_config_options (request)) < 0)
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
132 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
133
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
134 return (request->connect (request));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
135 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
136
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
137
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
138 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
139 gftp_disconnect (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
140 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
141 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
142
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
143 #if defined (HAVE_GETADDRINFO) && defined (HAVE_GAI_STRERROR)
151
2f15b3000dbc 2003-4-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 146
diff changeset
144 if (request->free_hostp && request->hostp != NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
145 freeaddrinfo (request->hostp);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
146 #endif
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
147 request->hostp = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
148
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
149 #ifdef USE_SSL
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
150 if (request->ssl != NULL)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
151 {
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
152 SSL_free (request->ssl);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
153 request->ssl = NULL;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
154 }
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
155 #endif
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
156
187
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
157 #if GLIB_MAJOR_VERSION > 1
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
158 if (request->iconv_initialized)
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
159 {
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
160 g_iconv_close (request->iconv);
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
161 request->iconv_initialized = 0;
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
162 }
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
163 #endif
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
164
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
165 request->cached = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
166 if (request->disconnect == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
167 return;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
168 request->disconnect (request);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
169 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
170
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
171
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
172 off_t
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
173 gftp_get_file (gftp_request * request, const char *filename, int fd,
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
174 off_t startsize)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
175 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
176 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
177
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
178 request->cached = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
179 if (request->get_file == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
180 return (GFTP_EFATAL);
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
181
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
182 return (request->get_file (request, filename, fd, startsize));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
183 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
184
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
185
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
186 int
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
187 gftp_put_file (gftp_request * request, const char *filename, int fd,
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
188 off_t startsize, off_t totalsize)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
189 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
190 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
191
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
192 request->cached = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
193 if (request->put_file == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
194 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
195 return (request->put_file (request, filename, fd, startsize, totalsize));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
196 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
197
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
198
261
dbf13a10be13 2003-8-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 260
diff changeset
199 off_t
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
200 gftp_transfer_file (gftp_request * fromreq, const char *fromfile,
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
201 int fromfd, off_t fromsize,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
202 gftp_request * toreq, const char *tofile,
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
203 int tofd, off_t tosize)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
204 {
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
205 /* Needed for systems that size(float) < size(void *) */
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
206 union { intptr_t i; float f; } maxkbs;
261
dbf13a10be13 2003-8-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 260
diff changeset
207 off_t size;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
208 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
209
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
210 g_return_val_if_fail (fromreq != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
211 g_return_val_if_fail (fromfile != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
212 g_return_val_if_fail (toreq != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
213 g_return_val_if_fail (tofile != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
214
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
215 gftp_lookup_request_option (toreq, "maxkbs", &maxkbs.f);
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
216
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
217 if (maxkbs.f > 0)
294
4747f621b79b 2003-10-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 291
diff changeset
218 {
4747f621b79b 2003-10-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 291
diff changeset
219 toreq->logging_function (gftp_logging_misc, toreq,
4747f621b79b 2003-10-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 291
diff changeset
220 _("File transfer will be throttled to %.2f KB/s\n"),
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
221 maxkbs.f);
294
4747f621b79b 2003-10-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 291
diff changeset
222 }
4747f621b79b 2003-10-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 291
diff changeset
223
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
224 if (fromreq->protonum == toreq->protonum &&
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
225 fromreq->transfer_file != NULL)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
226 return (fromreq->transfer_file (fromreq, fromfile, fromsize, toreq,
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
227 tofile, tosize));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
228
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
229 fromreq->cached = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
230 toreq->cached = 0;
443
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
231
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
232 get_file:
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
233 size = gftp_get_file (fromreq, fromfile, fromfd, tosize);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
234 if (size < 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
235 {
443
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
236 if (size == GFTP_ETIMEDOUT)
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
237 {
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
238 ret = gftp_connect (fromreq);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
239 if (ret < 0)
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
240 return (ret);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
241
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
242 goto get_file;
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
243 }
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
244
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
245 return (size);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
246 }
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
247
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
248 put_file:
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
249 ret = gftp_put_file (toreq, tofile, tofd, tosize, size);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
250 if (ret != 0)
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
251 {
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
252 if (size == GFTP_ETIMEDOUT)
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
253 {
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
254 ret = gftp_connect (fromreq);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
255 if (ret < 0)
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
256 return (ret);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
257
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
258 goto put_file;
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
259 }
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
260
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
261 if (gftp_abort_transfer (fromreq) != 0)
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
262 gftp_end_transfer (fromreq);
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
263
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
264 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
265 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
266
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
267 return (size);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
268 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
269
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
270
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
271 ssize_t
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
272 gftp_get_next_file_chunk (gftp_request * request, char *buf, size_t size)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
273 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
274 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
275 g_return_val_if_fail (buf != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
276
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
277 if (request->get_next_file_chunk != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
278 return (request->get_next_file_chunk (request, buf, size));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
279
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
280 return (request->read_function (request, buf, size, request->datafd));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
281 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
282
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
283
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
284 ssize_t
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
285 gftp_put_next_file_chunk (gftp_request * request, char *buf, size_t size)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
286 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
287 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
288 g_return_val_if_fail (buf != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
289
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
290 if (request->put_next_file_chunk != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
291 return (request->put_next_file_chunk (request, buf, size));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
292
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
293 if (size == 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
294 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
295
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
296 return (request->write_function (request, buf, size, request->datafd));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
297 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
298
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
299
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
300 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
301 gftp_end_transfer (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
302 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
303 int ret;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
304
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
305 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
306
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
307 if (!request->cached &&
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
308 request->end_transfer != NULL)
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
309 ret = request->end_transfer (request);
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
310 else
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
311 ret = 0;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
312
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
313 if (request->cachefd > 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
314 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
315 close (request->cachefd);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
316 request->cachefd = -1;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
317 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
318
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
319 if (request->last_dir_entry)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
320 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
321 g_free (request->last_dir_entry);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
322 request->last_dir_entry = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
323 request->last_dir_entry_len = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
324 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
325
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
326 return (ret);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
327 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
328
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
329
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
330 int
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
331 gftp_abort_transfer (gftp_request * request)
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
332 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
333 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
334
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
335 if (request->abort_transfer == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
336 return (GFTP_EFATAL);
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
337
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
338 return (request->abort_transfer (request));
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
339 }
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
340
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
341
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
342 mode_t
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
343 gftp_stat_filename (gftp_request * request, const char *filename)
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
344 {
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
345 mode_t ret;
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
346
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
347 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
348
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
349 if (request->stat_filename != NULL)
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
350 ret = request->stat_filename (request, filename);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
351 else
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
352 ret = 0;
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
353
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
354 return (ret);
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
355 }
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
356
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
357
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
358 int
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
359 gftp_list_files (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
360 {
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
361 char *remote_lc_time, *locret;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
362 int fd;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
363
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
364 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
365
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
366 gftp_lookup_request_option (request, "remote_lc_time", &remote_lc_time);
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
367 if (remote_lc_time != NULL && *remote_lc_time != '\0')
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
368 locret = setlocale (LC_TIME, remote_lc_time);
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
369 else
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
370 locret = setlocale (LC_TIME, NULL);
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
371
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
372 if (locret == NULL)
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
373 {
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
374 locret = setlocale (LC_TIME, NULL);
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
375 request->logging_function (gftp_logging_misc, request,
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
376 _("Error setting LC_TIME to '%s'. Falling back to '%s'\n"),
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
377 remote_lc_time, locret);
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
378 }
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
379
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
380 request->cached = 0;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
381 if (request->use_cache && (fd = gftp_find_cache_entry (request)) > 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
382 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
383 request->logging_function (gftp_logging_misc, request,
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
384 _("Loading directory listing %s from cache (LC_TIME=%s)\n"),
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
385 request->directory, locret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
386
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
387 request->cachefd = fd;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
388 request->cached = 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
389 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
390 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
391 else if (request->use_cache)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
392 {
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
393 request->logging_function (gftp_logging_misc, request,
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
394 _("Loading directory listing %s from server (LC_TIME=%s)\n"),
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
395 request->directory, locret);
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
396
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
397 request->cachefd = gftp_new_cache_entry (request);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
398 request->cached = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
399 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
400
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
401 if (request->list_files == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
402 return (GFTP_EFATAL);
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
403
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
404 return (request->list_files (request));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
405 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
406
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
407
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
408 #if GLIB_MAJOR_VERSION > 1
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
409
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
410 static char *
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
411 _gftp_get_next_charset (char **curpos)
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
412 {
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
413 char *ret, *endpos;
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
414
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
415 if (**curpos == '\0')
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
416 return (NULL);
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
417
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
418 ret = *curpos;
185
cc94bd62d290 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 184
diff changeset
419 if ((endpos = strchr (*curpos, ',')) == NULL)
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
420 *curpos += strlen (*curpos);
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
421 else
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
422 {
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
423 *endpos = '\0';
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
424 *curpos = endpos + 1;
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
425 }
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
426
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
427 return (ret);
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
428 }
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
429
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
430
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
431 char *
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
432 gftp_string_to_utf8 (gftp_request * request, const char *str)
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
433 {
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
434 char *ret, *remote_charsets, *stpos, *cur_charset, *tempstr;
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
435 gsize bread, bwrite;
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
436 GError * error;
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
437
188
836822c2d4e7 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 187
diff changeset
438 if (request == NULL)
836822c2d4e7 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 187
diff changeset
439 return (NULL);
836822c2d4e7 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 187
diff changeset
440
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
441 if (request->iconv_initialized)
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
442 return (g_convert_with_iconv (str, -1, request->iconv, &bread, &bwrite,
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
443 &error));
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
444 else if (g_utf8_validate (str, -1, NULL))
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
445 return (NULL);
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
446
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
447 gftp_lookup_request_option (request, "remote_charsets", &tempstr);
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
448 if (*tempstr == '\0')
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
449 {
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
450 error = NULL;
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
451 if ((ret = g_locale_to_utf8 (str, -1, &bread, &bwrite, &error)) != NULL)
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
452 return (ret);
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
453
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
454 return (NULL);
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
455 }
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
456
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
457 remote_charsets = g_strdup (tempstr);
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
458 ret = NULL;
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
459 stpos = remote_charsets;
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
460 while ((cur_charset = _gftp_get_next_charset (&stpos)) != NULL)
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
461 {
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
462 if ((request->iconv = g_iconv_open ("UTF-8", cur_charset)) == (GIConv) -1)
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
463 continue;
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
464
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
465 error = NULL;
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
466 if ((ret = g_convert_with_iconv (str, -1, request->iconv, &bread, &bwrite,
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
467 &error)) == NULL)
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
468 {
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
469 g_iconv_close (request->iconv);
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
470 request->iconv = NULL;
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
471 continue;
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
472 }
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
473 else
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
474 {
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
475 request->iconv_initialized = 1;
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
476 break;
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
477 }
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
478 }
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
479
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
480 g_free (remote_charsets);
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
481
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
482 return (ret);
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
483 }
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
484
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
485
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
486 char *
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
487 gftp_string_from_utf8 (gftp_request * request, const char *str)
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
488 {
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
489 char *ret, *remote_charsets, *stpos, *cur_charset, *tempstr;
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
490 gsize bread, bwrite;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
491 GError * error;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
492
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
493 if (request == NULL)
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
494 return (NULL);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
495
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
496 if (request->iconv_initialized)
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
497 return (g_convert_with_iconv (str, -1, request->iconv, &bread, &bwrite,
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
498 &error));
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
499 else if (g_utf8_validate (str, -1, NULL))
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
500 return (NULL);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
501
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
502 gftp_lookup_request_option (request, "remote_charsets", &tempstr);
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
503 if (*tempstr == '\0')
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
504 {
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
505 error = NULL;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
506 if ((ret = g_locale_from_utf8 (str, -1, &bread, &bwrite, &error)) != NULL)
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
507 return (ret);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
508
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
509 return (NULL);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
510 }
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
511
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
512 remote_charsets = g_strdup (tempstr);
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
513 ret = NULL;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
514 stpos = remote_charsets;
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
515 while ((cur_charset = _gftp_get_next_charset (&stpos)) != NULL)
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
516 {
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
517 if ((request->iconv = g_iconv_open (cur_charset, "UTF-8")) == (GIConv) -1)
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
518 continue;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
519
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
520 error = NULL;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
521 if ((ret = g_convert_with_iconv (str, -1, request->iconv, &bread, &bwrite,
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
522 &error)) == NULL)
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
523 {
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
524 g_iconv_close (request->iconv);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
525 request->iconv = NULL;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
526 continue;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
527 }
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
528 else
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
529 {
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
530 request->iconv_initialized = 1;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
531 break;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
532 }
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
533 }
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
534
423
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
535 g_free (remote_charsets);
4cee2498761d 2004-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 422
diff changeset
536
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
537 return (ret);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
538 }
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
539
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
540 #else
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
541
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
542 char *
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
543 gftp_string_to_utf8 (gftp_request * request, const char *str)
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
544 {
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
545 return (NULL);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
546 }
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
547
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
548
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
549 char *
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
550 gftp_string_from_utf8 (gftp_request * request, const char *str)
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
551 {
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
552 return (NULL);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
553 }
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
554
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
555 #endif
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
556
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
557
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
558 int
377
14da115b149b 2003-1-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 372
diff changeset
559 gftp_get_next_file (gftp_request * request, const char *filespec,
14da115b149b 2003-1-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 372
diff changeset
560 gftp_file * fle)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
561 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
562 int fd, ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
563
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
564 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
565
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
566 if (request->get_next_file == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
567 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
568
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
569 if (request->cached && request->cachefd > 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
570 fd = request->cachefd;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
571 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
572 fd = request->datafd;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
573
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
574 memset (fle, 0, sizeof (*fle));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
575 do
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
576 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
577 gftp_file_destroy (fle);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
578 ret = request->get_next_file (request, fle, fd);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
579
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
580 if (ret >= 0 && fle->file != NULL)
184
65eb40fb4f03 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 182
diff changeset
581 fle->utf8_file = gftp_string_to_utf8 (request, fle->file);
45
311e29c40ed6 2002-10-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
582
60
8a9324fb63a4 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
583 if (ret >= 0 && !request->cached && request->cachefd > 0 &&
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
584 request->last_dir_entry != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
585 {
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
586 if (gftp_fd_write (request, request->last_dir_entry,
60
8a9324fb63a4 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
587 request->last_dir_entry_len, request->cachefd) < 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
588 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
589 request->logging_function (gftp_logging_error, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
590 _("Error: Cannot write to cache: %s\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
591 g_strerror (errno));
60
8a9324fb63a4 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
592 close (request->cachefd);
8a9324fb63a4 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
593 request->cachefd = -1;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
594 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
595 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
596 } while (ret > 0 && !gftp_match_filespec (fle->file, filespec));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
597
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
598 return (ret);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
599 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
600
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
601
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
602 int
243
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 227
diff changeset
603 gftp_parse_bookmark (gftp_request * request, gftp_request * local_request,
275
5810b0f97eee 2003-9-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 261
diff changeset
604 const char * bookmark, int *refresh_local)
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
605 {
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
606 gftp_logging_func logging_function;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
607 gftp_bookmarks_var * tempentry;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
608 char *default_protocol;
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
609 int i, init_ret;
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
610
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
611 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
612 g_return_val_if_fail (bookmark != NULL, GFTP_EFATAL);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
613
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
614 logging_function = request->logging_function;
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
615 gftp_request_destroy (request, 0);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
616 request->logging_function = logging_function;
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
617
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
618 if ((tempentry = g_hash_table_lookup (gftp_bookmarks_htable,
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
619 bookmark)) == NULL)
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
620 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
621 request->logging_function (gftp_logging_error, request,
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
622 _("Error: Could not find bookmark %s\n"),
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
623 bookmark);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
624 return (GFTP_EFATAL);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
625 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
626 else if (tempentry->hostname == NULL || *tempentry->hostname == '\0')
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
627 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
628 request->logging_function (gftp_logging_error, request,
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
629 _("Bookmarks Error: The bookmark entry %s does not have a hostname\n"), bookmark);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
630 return (GFTP_EFATAL);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
631 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
632
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
633 if (tempentry->user != NULL)
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
634 gftp_set_username (request, tempentry->user);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
635
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
636 if (tempentry->pass != NULL)
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
637 gftp_set_password (request, tempentry->pass);
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
638
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
639 if (tempentry->acct != NULL)
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
640 gftp_set_account (request, tempentry->acct);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
641
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
642 gftp_set_hostname (request, tempentry->hostname);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
643 gftp_set_directory (request, tempentry->remote_dir);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
644 gftp_set_port (request, tempentry->port);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
645
243
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 227
diff changeset
646 if (local_request != NULL &&
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 227
diff changeset
647 tempentry->local_dir != NULL &&
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 227
diff changeset
648 *tempentry->local_dir != '\0')
275
5810b0f97eee 2003-9-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 261
diff changeset
649 {
5810b0f97eee 2003-9-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 261
diff changeset
650 gftp_set_directory (local_request, tempentry->local_dir);
5810b0f97eee 2003-9-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 261
diff changeset
651 *refresh_local = 1;
5810b0f97eee 2003-9-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 261
diff changeset
652 }
5810b0f97eee 2003-9-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 261
diff changeset
653 else
5810b0f97eee 2003-9-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 261
diff changeset
654 *refresh_local = 0;
243
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 227
diff changeset
655
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
656 for (i = 0; gftp_protocols[i].name; i++)
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
657 {
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
658 if (strcmp (gftp_protocols[i].name, tempentry->protocol) == 0)
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
659 {
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
660 if ((init_ret = gftp_protocols[i].init (request)) < 0)
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
661 {
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
662 gftp_request_destroy (request, 0);
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
663 return (init_ret);
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
664 }
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
665 break;
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
666 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
667 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
668
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
669 if (gftp_protocols[i].name == NULL)
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
670 {
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
671 gftp_lookup_request_option (request, "default_protocol",
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
672 &default_protocol);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
673
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
674 if (default_protocol != NULL && *default_protocol != '\0')
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
675 {
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
676 for (i = 0; gftp_protocols[i].url_prefix; i++)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
677 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
678 if (strcmp (gftp_protocols[i].name, default_protocol) == 0)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
679 break;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
680 }
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
681 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
682
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
683 if (gftp_protocols[i].url_prefix == NULL)
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
684 i = GFTP_FTP_NUM;
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
685 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
686
199
75eebb3b0592 2003-6-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 198
diff changeset
687 gftp_copy_local_options (&request->local_options_vars,
75eebb3b0592 2003-6-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 198
diff changeset
688 &request->local_options_hash,
429
1d45758e5cf5 2004-3-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 423
diff changeset
689 &request->num_local_options_vars,
199
75eebb3b0592 2003-6-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 198
diff changeset
690 tempentry->local_options_vars,
75eebb3b0592 2003-6-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 198
diff changeset
691 tempentry->num_local_options_vars);
75eebb3b0592 2003-6-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 198
diff changeset
692
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
693 if ((init_ret = gftp_protocols[i].init (request)) < 0)
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
694 {
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
695 gftp_request_destroy (request, 0);
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
696 return (init_ret);
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
697 }
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
698
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
699 return (0);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
700 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
701
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
702
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
703 int
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
704 gftp_parse_url (gftp_request * request, const char *url)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
705 {
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
706 char *pos, *endpos, *endhostpos, tempchar, *default_protocol, *stpos;
67
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
707 gftp_logging_func logging_function;
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
708 int len, i, init_ret;
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
709 const char *cpos;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
710
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
711 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
712 g_return_val_if_fail (url != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
713
67
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
714 logging_function = request->logging_function;
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
715 gftp_request_destroy (request, 0);
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
716 request->logging_function = logging_function;
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
717
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
718 for (cpos = url; *cpos == ' '; cpos++);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
719 stpos = g_strdup (cpos);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
720 for (pos = stpos + strlen (stpos) - 1; *pos == ' '; pos--)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
721 *pos = '\0';
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
722
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
723 i = GFTP_FTP_NUM;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
724
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
725 if ((pos = strstr (stpos, "://")) != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
726 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
727 *pos = '\0';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
728
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
729 for (i = 0; gftp_protocols[i].url_prefix; i++)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
730 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
731 if (strcmp (gftp_protocols[i].url_prefix, stpos) == 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
732 break;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
733 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
734
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
735 if (gftp_protocols[i].url_prefix == NULL)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
736 {
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
737 request->logging_function (gftp_logging_misc, NULL,
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
738 _("The protocol '%s' is currently not supported.\n"),
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
739 stpos);
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
740 g_free (stpos);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
741 return (GFTP_EFATAL);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
742 }
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
743
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
744 *pos = ':';
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
745 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
746 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
747 {
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
748 gftp_lookup_request_option (request, "default_protocol",
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
749 &default_protocol);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
750
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
751 if (default_protocol != NULL && *default_protocol != '\0')
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
752 {
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
753 for (i = 0; gftp_protocols[i].url_prefix; i++)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
754 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
755 if (strcmp (gftp_protocols[i].name, default_protocol) == 0)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
756 break;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
757 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
758 }
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
759 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
760
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
761 if (gftp_protocols[i].url_prefix == NULL)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
762 i = GFTP_FTP_NUM;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
763
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
764 if ((init_ret = gftp_protocols[i].init (request)) < 0)
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
765 {
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
766 gftp_request_destroy (request, 0);
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
767 return (init_ret);
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
768 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
769
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
770 if (request->parse_url != NULL)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
771 {
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
772 g_free (stpos);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
773 return (request->parse_url (request, url));
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
774 }
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
775
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
776 pos = stpos;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
777 len = strlen (request->url_prefix);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
778 if (strncmp (pos, request->url_prefix, len) == 0 &&
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
779 strncmp (pos + len, "://", 3) == 0)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
780 pos += len + 3;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
781
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
782 if (i == GFTP_LOCAL_NUM)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
783 {
367
d5409bf03ff1 2003-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 359
diff changeset
784 for (; *pos == ' ' || *pos == '\t'; pos++);
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
785 request->directory = g_strdup (pos);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
786 g_free (stpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
787 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
788 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
789
182
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
790 if ((endhostpos = strrchr (pos, '@')) != NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
791 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
792 /* A user/password was entered */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
793 if ((endpos = strchr (pos, ':')) == NULL || endhostpos < endpos)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
794 {
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
795 /* No password was entered */
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
796 gftp_set_password (request, "");
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
797 endpos = endhostpos;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
798 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
799
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
800 *endpos = '\0';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
801 gftp_set_username (request, pos);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
802
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
803 pos = endpos + 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
804 if ((endpos = strchr (pos, '@')) != NULL)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
805 {
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
806 if (strchr (endpos + 1, '@') != NULL)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
807 endpos = strchr (endpos + 1, '@');
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
808 *endpos = '\0';
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
809 gftp_set_password (request, pos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
810
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
811 pos = endpos + 1;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
812 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
813 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
814
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
815 /* Now get the hostname and an optional port and optional directory */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
816 endhostpos = pos + strlen (pos);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
817 if ((endpos = strchr (pos, ':')) != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
818 endhostpos = endpos;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
819 else if ((endpos = strchr (pos, '/')) != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
820 endhostpos = endpos;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
821 tempchar = *endhostpos;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
822 *endhostpos = '\0';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
823 gftp_set_hostname (request, pos);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
824 *endhostpos = tempchar;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
825
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
826 if ((endpos = strchr (pos, ':')) != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
827 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
828 /* A port was entered */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
829 pos = endpos + 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
830 gftp_set_port (request, strtol (pos, NULL, 10));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
831 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
832 if ((endpos = strchr (pos, '/')) != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
833 gftp_set_directory (request, endpos);
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
834 g_free (stpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
835 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
836 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
837
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
838
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
839 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
840 gftp_set_hostname (gftp_request * request, const char *hostname)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
841 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
842 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
843 g_return_if_fail (hostname != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
844
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
845 if (request->hostname)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
846 g_free (request->hostname);
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
847 request->hostname = g_strdup (hostname);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
848 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
849
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
850
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
851 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
852 gftp_set_username (gftp_request * request, const char *username)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
853 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
854 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
855
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
856 if (request->username)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
857 g_free (request->username);
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
858
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
859 if (username != NULL)
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
860 request->username = g_strdup (username);
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
861 else
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
862 request->username = NULL;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
863 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
864
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
865
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
866 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
867 gftp_set_password (gftp_request * request, const char *password)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
868 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
869 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
870
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
871 if (request->password)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
872 g_free (request->password);
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
873
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
874 if (password != NULL)
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
875 request->password = g_strdup (password);
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
876 else
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
877 request->password = NULL;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
878 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
879
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
880
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
881 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
882 gftp_set_account (gftp_request * request, const char *account)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
883 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
884 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
885 g_return_if_fail (account != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
886
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
887 if (request->account)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
888 g_free (request->account);
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
889 request->account = g_strdup (account);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
890 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
891
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
892
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
893 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
894 gftp_set_directory (gftp_request * request, const char *directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
895 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
896 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
897 g_return_val_if_fail (directory != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
898
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
899
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
900 if (request->datafd <= 0 && !request->always_connected)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
901 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
902 if (directory != request->directory)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
903 {
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
904 if (request->directory)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
905 g_free (request->directory);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
906 request->directory = g_strdup (directory);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
907 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
908 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
909 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
910 else if (request->chdir == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
911 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
912 return (request->chdir (request, directory));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
913 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
914
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
915
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
916 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
917 gftp_set_port (gftp_request * request, unsigned int port)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
918 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
919 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
920
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
921 request->port = port;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
922 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
923
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
924
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
925 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
926 gftp_remove_directory (gftp_request * request, const char *directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
927 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
928 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
929
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
930 if (request->rmdir == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
931 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
932 return (request->rmdir (request, directory));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
933 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
934
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
935
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
936 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
937 gftp_remove_file (gftp_request * request, const char *file)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
938 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
939 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
940
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
941 if (request->rmfile == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
942 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
943 return (request->rmfile (request, file));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
944 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
945
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
946
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
947 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
948 gftp_make_directory (gftp_request * request, const char *directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
949 {
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
950 char *utf8;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
951 int ret;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
952
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
953 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
954
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
955 if (request->mkdir == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
956 return (GFTP_EFATAL);
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
957
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
958 utf8 = gftp_string_from_utf8 (request, directory);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
959 if (utf8 != NULL)
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
960 {
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
961 ret = request->mkdir (request, utf8);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
962 g_free (utf8);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
963 }
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
964 else
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
965 ret = request->mkdir (request, directory);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
966
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
967 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
968 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
969
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
970
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
971 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
972 gftp_rename_file (gftp_request * request, const char *oldname,
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
973 const char *newname)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
974 {
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
975 char *utf8;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
976 int ret;
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
977
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
978 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
979
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
980 if (request->rename == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
981 return (GFTP_EFATAL);
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
982
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
983 utf8 = gftp_string_from_utf8 (request, newname);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
984 if (utf8 != NULL)
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
985 {
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
986 ret = request->rename (request, oldname, utf8);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
987 g_free (utf8);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
988 }
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
989 else
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
990 ret = request->rename (request, oldname, newname);
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
991
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
992 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
993 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
994
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
995
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
996 int
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
997 gftp_chmod (gftp_request * request, const char *file, mode_t mode)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
998 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
999 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1000
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1001 if (request->chmod == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1002 return (GFTP_EFATAL);
504
93d7d3b9a477 2004-7-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1003
93d7d3b9a477 2004-7-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
1004 mode &= S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1005 return (request->chmod (request, file, mode));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1006 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1007
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1008
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1009 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1010 gftp_set_file_time (gftp_request * request, const char *file, time_t datetime)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1011 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1012 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1013
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1014 if (request->set_file_time == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1015 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1016 return (request->set_file_time (request, file, datetime));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1017 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1018
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1019
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1020 char
478
97fd5eb34be0 2004-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 473
diff changeset
1021 gftp_site_cmd (gftp_request * request, int specify_site, const char *command)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1022 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1023 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1024
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1025 if (request->site == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1026 return (GFTP_EFATAL);
478
97fd5eb34be0 2004-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 473
diff changeset
1027 return (request->site (request, specify_site, command));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1028 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1029
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1030
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1031 off_t
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1032 gftp_get_file_size (gftp_request * request, const char *filename)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1033 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1034 g_return_val_if_fail (request != NULL, 0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1035
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1036 if (request->get_file_size == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1037 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1038 return (request->get_file_size (request, filename));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1039 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1040
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1041
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1042 static int
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1043 gftp_need_proxy (gftp_request * request, char *service, char *proxy_hostname,
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1044 int proxy_port)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1045 {
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1046 gftp_config_list_vars * proxy_hosts;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1047 gftp_proxy_hosts * hostname;
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1048 size_t hostlen, domlen;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1049 unsigned char addy[4];
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1050 struct sockaddr *addr;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1051 GList * templist;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1052 gint32 netaddr;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1053 char *pos;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1054 #if defined (HAVE_GETADDRINFO) && defined (HAVE_GAI_STRERROR)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1055 struct addrinfo hints;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1056 int port, errnum;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1057 char serv[8];
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1058 #endif
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1059
218
de6a2e8e51cb 2003-7-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 215
diff changeset
1060 gftp_lookup_global_option ("dont_use_proxy", &proxy_hosts);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1061
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1062 if (proxy_hostname == NULL || *proxy_hostname == '\0')
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1063 return (0);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1064 else if (proxy_hosts->list == NULL)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1065 return (proxy_hostname != NULL &&
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1066 *proxy_hostname != '\0');
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1067
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1068 request->hostp = NULL;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1069 #if defined (HAVE_GETADDRINFO) && defined (HAVE_GAI_STRERROR)
151
2f15b3000dbc 2003-4-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 146
diff changeset
1070 request->free_hostp = 1;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1071 memset (&hints, 0, sizeof (hints));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1072 hints.ai_flags = AI_CANONNAME;
146
782f84694489 2003-4-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 143
diff changeset
1073 hints.ai_family = PF_UNSPEC;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1074 hints.ai_socktype = SOCK_STREAM;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1075
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1076 port = request->use_proxy ? proxy_port : request->port;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1077 if (port == 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1078 strcpy (serv, service);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1079 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1080 snprintf (serv, sizeof (serv), "%d", port);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1081
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
1082 request->logging_function (gftp_logging_misc, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1083 _("Looking up %s\n"), request->hostname);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1084
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1085 if ((errnum = getaddrinfo (request->hostname, serv, &hints,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1086 &request->hostp)) != 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1087 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
1088 request->logging_function (gftp_logging_error, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1089 _("Cannot look up hostname %s: %s\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1090 request->hostname, gai_strerror (errnum));
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1091 return (GFTP_ERETRYABLE);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1092 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1093
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1094 addr = request->hostp->ai_addr;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1095
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1096 #else /* !HAVE_GETADDRINFO */
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
1097 request->logging_function (gftp_logging_misc, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1098 _("Looking up %s\n"), request->hostname);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1099
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1100 if (!(request->hostp = r_gethostbyname (request->hostname, &request->host,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1101 NULL)))
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1102 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
1103 request->logging_function (gftp_logging_error, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1104 _("Cannot look up hostname %s: %s\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1105 request->hostname, g_strerror (errno));
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1106 return (GFTP_ERETRYABLE);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1107 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1108
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1109 addr = (struct sockaddr *) request->host.h_addr_list[0];
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1110
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1111 #endif /* HAVE_GETADDRINFO */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1112
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1113 templist = proxy_hosts->list;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1114 while (templist != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1115 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1116 hostname = templist->data;
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1117 if (hostname->domain != NULL)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1118 {
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1119 hostlen = strlen (request->hostname);
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1120 domlen = strlen (hostname->domain);
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1121 if (hostlen > domlen)
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1122 {
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1123 pos = request->hostname + hostlen - domlen;
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1124 if (strcmp (hostname->domain, pos) == 0)
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1125 return (0);
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1126 }
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1127 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1128
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1129 if (hostname->ipv4_network_address != 0)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1130 {
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1131 memcpy (addy, addr, sizeof (addy));
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1132 netaddr =
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1133 (((addy[0] & 0xff) << 24) | ((addy[1] & 0xff) << 16) |
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1134 ((addy[2] & 0xff) << 8) | (addy[3] & 0xff)) &
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1135 hostname->ipv4_netmask;
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1136 if (netaddr == hostname->ipv4_network_address)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1137 return (0);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1138 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1139 templist = templist->next;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1140 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1141
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1142 return (proxy_hostname != NULL && *proxy_hostname != '\0');
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1143 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1144
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1145
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1146 static char *
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1147 copy_token (char **dest, char *source)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1148 {
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1149 /* This function is used internally by gftp_parse_ls () */
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1150 char *endpos, savepos;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1151
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1152 endpos = source;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1153 while (*endpos != ' ' && *endpos != '\t' && *endpos != '\0')
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1154 endpos++;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1155 if (*endpos == '\0')
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1156 return (NULL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1157
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1158 savepos = *endpos;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1159 *endpos = '\0';
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1160 *dest = g_malloc (endpos - source + 1);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1161 strcpy (*dest, source);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1162 *endpos = savepos;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1163
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1164 /* Skip the blanks till we get to the next entry */
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1165 source = endpos + 1;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1166 while ((*source == ' ' || *source == '\t') && *source != '\0')
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1167 source++;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1168 return (source);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1169 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1170
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1171
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1172 static char *
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1173 goto_next_token (char *pos)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1174 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1175 while (*pos != ' ' && *pos != '\t' && *pos != '\0')
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1176 pos++;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1177
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1178 if (pos == '\0')
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1179 return (pos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1180
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1181 while ((*pos == ' ' || *pos == '\t') && *pos != '\0')
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1182 pos++;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1183
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1184 return (pos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1185 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1186
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1187
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1188 static time_t
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1189 parse_vms_time (char *str, char **endpos)
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1190 {
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1191 struct tm curtime;
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1192 time_t ret;
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1193
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1194 /* 8-JUN-2004 13:04:14 */
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1195 memset (&curtime, 0, sizeof (curtime));
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1196
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1197 *endpos = strptime (str, "%d-%b-%Y %H:%M:%S", &curtime);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1198 if (*endpos == NULL)
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1199 *endpos = strptime (str, "%d-%b-%Y %H:%M", &curtime);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1200
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1201 if (*endpos != NULL)
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1202 {
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1203 ret = mktime (&curtime);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1204 for (; **endpos == ' ' || **endpos == '\t'; (*endpos)++);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1205 }
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1206 else
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1207 {
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1208 ret = 0;
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1209 *endpos = goto_next_token (str);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1210 if (*endpos != NULL)
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1211 *endpos = goto_next_token (*endpos);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1212 }
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1213
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1214 return (ret);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1215 }
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1216
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1217
102
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1218 time_t
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1219 parse_time (char *str, char **endpos)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1220 {
102
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1221 struct tm curtime, *loctime;
105
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1222 time_t t, ret;
102
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1223 char *tmppos;
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1224 size_t slen;
260
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1225 int i, num;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1226
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1227 slen = strlen (str);
102
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1228 memset (&curtime, 0, sizeof (curtime));
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1229 curtime.tm_isdst = -1;
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1230
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1231 if (slen > 4 && isdigit ((int) str[0]) && str[2] == '-' &&
260
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1232 isdigit ((int) str[3]))
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1233 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1234 /* This is how DOS will return the date/time */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1235 /* 07-06-99 12:57PM */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1236
102
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1237 tmppos = strptime (str, "%m-%d-%y %I:%M%p", &curtime);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1238 }
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1239 else if (slen > 4 && isdigit ((int) str[0]) && str[2] == '-' &&
260
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1240 isalpha (str[3]))
105
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1241 {
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1242 /* 10-Jan-2003 09:14 */
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1243 tmppos = strptime (str, "%d-%h-%Y %H:%M", &curtime);
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1244 }
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1245 else if (slen > 4 && isdigit ((int) str[0]) && str[4] == '/')
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1246 {
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1247 /* 2003/12/25 */
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1248 tmppos = strptime (str, "%Y/%m/%d", &curtime);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1249 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1250 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1251 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1252 /* This is how most UNIX, Novell, and MacOS ftp servers send their time */
102
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1253 /* Jul 06 12:57 or Jul 6 1999 */
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1254
102
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1255 if (strchr (str, ':') != NULL)
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1256 {
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1257 tmppos = strptime (str, "%h %d %H:%M", &curtime);
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1258 t = time (NULL);
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1259 loctime = localtime (&t);
359
52c5ee1fa455 2003-1-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 358
diff changeset
1260
52c5ee1fa455 2003-1-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 358
diff changeset
1261 if (curtime.tm_mon > loctime->tm_mon)
52c5ee1fa455 2003-1-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 358
diff changeset
1262 curtime.tm_year = loctime->tm_year - 1;
52c5ee1fa455 2003-1-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 358
diff changeset
1263 else
52c5ee1fa455 2003-1-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 358
diff changeset
1264 curtime.tm_year = loctime->tm_year;
102
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1265 }
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1266 else
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1267 tmppos = strptime (str, "%h %d %Y", &curtime);
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1268 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1269
105
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1270 if (tmppos != NULL)
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1271 ret = mktime (&curtime);
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1272 else
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1273 ret = 0;
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1274
102
3b573c8ef706 2003-2-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 91
diff changeset
1275 if (endpos != NULL)
105
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1276 {
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1277 if (tmppos == NULL)
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1278 {
260
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1279 /* We cannot parse this date format. So, just skip this date field
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1280 and continue to the next token. This is mainly for the HTTP
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1281 support */
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1282
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1283 *endpos = str;
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1284 for (num = 0; num < 2 && **endpos != '\0'; num++)
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1285 {
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1286 for (i=0;
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1287 (*endpos)[i] != ' ' && (*endpos)[i] != '\t' &&
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1288 (*endpos)[i] != '\0';
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1289 i++);
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1290 *endpos += i;
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1291
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1292 for (i=0; (*endpos)[i] == ' ' || (*endpos)[i] == '\t'; i++);
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1293 *endpos += i;
71d0098c3735 2003-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 249
diff changeset
1294 }
105
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1295 }
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1296 else
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1297 *endpos = tmppos;
ae13b18c9336 2003-2-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 102
diff changeset
1298 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1299
281
1c7cde8a3a53 2003-10-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 275
diff changeset
1300 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1301 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1302
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1303
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1304 static mode_t
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1305 gftp_parse_vms_attribs (char **src, mode_t mask)
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1306 {
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1307 char *endpos;
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1308 mode_t ret;
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1309
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1310 if (*src == NULL)
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1311 return (0);
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1312
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1313 if ((endpos = strchr (*src, ',')) != NULL)
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1314 *endpos = '\0';
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1315
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1316 ret = 0;
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1317 if (strchr (*src, 'R') != NULL)
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1318 ret |= S_IRUSR | S_IRGRP | S_IROTH;
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1319 if (strchr (*src, 'W') != NULL)
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1320 ret |= S_IWUSR | S_IWGRP | S_IWOTH;
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1321 if (strchr (*src, 'E') != NULL)
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1322 ret |= S_IXUSR | S_IXGRP | S_IXOTH;
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1323
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1324 *src = endpos + 1;
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1325
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1326 return (ret & mask);
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1327 }
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1328
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1329
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1330 static int
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1331 gftp_parse_ls_vms (gftp_request * request, int fd, char *str, gftp_file * fle)
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1332 {
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1333 char *curpos, *endpos, tempstr[1024];
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1334 int multiline;
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1335 ssize_t len;
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1336
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1337 /* .PINE-DEBUG1;1 9 21-AUG-2002 20:06 [MYERSRG] (RWED,RWED,,) */
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1338 /* WWW.DIR;1 1 23-NOV-1999 05:47 [MYERSRG] (RWE,RWE,RE,E) */
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1339
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1340 /* Multiline VMS
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1341 $MAIN.TPU$JOURNAL;1
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1342 1/18 8-JUN-2004 13:04:14 [NUCLEAR,FISSION] (RWED,RWED,RE,)
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1343 TCPIP$FTP_SERVER.LOG;29
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1344 0/18 8-JUN-2004 14:42:04 [NUCLEAR,FISSION] (RWED,RWED,RE,)
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1345 TCPIP$FTP_SERVER.LOG;28
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1346 5/18 8-JUN-2004 13:05:11 [NUCLEAR,FISSION] (RWED,RWED,RE,)
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1347 TCPIP$FTP_SERVER.LOG;27
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1348 5/18 8-JUN-2004 13:03:51 [NUCLEAR,FISSION] (RWED,RWED,RE,) */
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1349
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1350 if ((curpos = strchr (str, ';')) == NULL)
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1351 return (GFTP_EFATAL);
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1352
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1353 multiline = strchr (str, ' ') == NULL;
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1354
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1355 *curpos = '\0';
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1356 if (strlen (str) > 4 && strcmp (curpos - 4, ".DIR") == 0)
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1357 {
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1358 fle->st_mode |= S_IFDIR;
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1359 *(curpos - 4) = '\0';
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1360 }
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1361
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1362 fle->file = g_strdup (str);
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1363
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1364 if (multiline)
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1365 {
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1366 if (request->get_next_dirlist_line == NULL)
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1367 return (GFTP_EFATAL);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1368
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1369 len = request->get_next_dirlist_line (request, fd, tempstr,
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1370 sizeof (tempstr));
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1371 if (len <= 0)
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1372 return ((int) len);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1373
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1374 for (curpos = tempstr; *curpos == ' ' || *curpos == '\t'; curpos++);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1375 }
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1376 else
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1377 curpos = goto_next_token (curpos + 1);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1378
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
1379 fle->size = gftp_parse_file_size (curpos) * 512; /* Is this correct? */
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1380
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1381 curpos = goto_next_token (curpos);
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1382
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1383 fle->datetime = parse_vms_time (curpos, &curpos);
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1384
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1385 if (*curpos != '[')
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1386 return (GFTP_EFATAL);
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1387
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1388 if ((endpos = strchr (curpos, ']')) == NULL)
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1389 return (GFTP_EFATAL);
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1390
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1391 curpos = goto_next_token (endpos + 1);
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1392 if ((curpos = strchr (curpos, ',')) == NULL)
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1393 return (0);
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1394 curpos++;
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1395
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1396 fle->st_mode = gftp_parse_vms_attribs (&curpos, S_IRWXU);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1397 fle->st_mode |= gftp_parse_vms_attribs (&curpos, S_IRWXG);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1398 fle->st_mode |= gftp_parse_vms_attribs (&curpos, S_IRWXO);
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1399
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1400 fle->user = g_strdup ("");
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1401 fle->group = g_strdup ("");
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1402
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1403 return (0);
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1404 }
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1405
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1406
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1407 static int
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1408 gftp_parse_ls_mvs (char *str, gftp_file * fle)
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1409 {
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1410 char *curpos;
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1411
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1412 /* Volume Unit Referred Ext Used Recfm Lrecl BlkSz Dsorg Dsname */
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1413 /* SVI52A 3390 2003/12/10 8 216 FB 80 27920 PS CARDS.DELETES */
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1414 /* SVI528 3390 2003/12/12 1 5 FB 80 24000 PO CLIST */
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1415
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1416 curpos = goto_next_token (str + 1);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1417 if (curpos == NULL)
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1418 return (GFTP_EFATAL);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1419
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1420 curpos = goto_next_token (curpos + 1);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1421 if (curpos == NULL)
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1422 return (GFTP_EFATAL);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1423
479
11ab311ccb67 2004-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 478
diff changeset
1424 fle->datetime = parse_time (curpos, &curpos);
11ab311ccb67 2004-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 478
diff changeset
1425
11ab311ccb67 2004-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 478
diff changeset
1426 curpos = goto_next_token (curpos);
11ab311ccb67 2004-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 478
diff changeset
1427 if (curpos == NULL)
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1428 return (GFTP_EFATAL);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1429
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1430 curpos = goto_next_token (curpos + 1);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1431 if (curpos == NULL)
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1432 return (GFTP_EFATAL);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1433
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1434 fle->size = gftp_parse_file_size (curpos) * 55996;
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1435 curpos = goto_next_token (curpos + 1);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1436 if (curpos == NULL)
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1437 return (GFTP_EFATAL);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1438
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1439 curpos = goto_next_token (curpos + 1);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1440 if (curpos == NULL)
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1441 return (GFTP_EFATAL);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1442
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1443 curpos = goto_next_token (curpos + 1);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1444 if (curpos == NULL)
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1445 return (GFTP_EFATAL);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1446
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1447 curpos = goto_next_token (curpos + 1);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1448 if (curpos == NULL)
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1449 return (GFTP_EFATAL);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1450
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1451 if (strncmp (curpos, "PS", 2) == 0)
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1452 fle->st_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1453 else if (strncmp (curpos, "PO", 2) == 0)
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1454 fle->st_mode = S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1455 else
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1456 return (GFTP_EFATAL);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1457
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1458 curpos = goto_next_token (curpos + 1);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1459
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1460 fle->user = g_strdup (_("unknown"));
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1461 fle->group = g_strdup (_("unknown"));
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1462 fle->file = g_strdup (curpos);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1463
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1464 return (0);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1465 }
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1466
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1467
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1468 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1469 gftp_parse_ls_eplf (char *str, gftp_file * fle)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1470 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1471 char *startpos;
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1472 int isdir = 0;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1473
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1474 startpos = str;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1475 while (startpos)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1476 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1477 startpos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1478 switch (*startpos)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1479 {
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1480 case '/':
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1481 isdir = 1;
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1482 break;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1483 case 's':
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
1484 fle->size = gftp_parse_file_size (startpos + 1);
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1485 break;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1486 case 'm':
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1487 fle->datetime = strtol (startpos + 1, NULL, 10);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1488 break;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1489 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1490 startpos = strchr (startpos, ',');
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1491 }
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1492
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1493 if ((startpos = strchr (str, 9)) == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1494 return (GFTP_EFATAL);
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1495
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1496 if (isdir)
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1497 fle->st_mode = S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1498 else
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1499 fle->st_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1500
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1501 fle->file = g_strdup (startpos + 1);
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1502 fle->user = g_strdup (_("unknown"));
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1503 fle->group = g_strdup (_("unknown"));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1504 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1505 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1506
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1507
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1508 static int
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1509 gftp_parse_ls_unix (gftp_request * request, char *str, size_t slen,
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1510 gftp_file * fle)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1511 {
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1512 char *endpos, *startpos, *pos, *attribs;
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1513 int cols;
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1514
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1515 /* If there is no space between the attribs and links field, just make one */
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1516 if (slen > 10)
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1517 str[10] = ' ';
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1518
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1519 /* Determine the number of columns */
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1520 cols = 0;
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1521 pos = str;
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1522 while (*pos != '\0')
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1523 {
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1524 while (*pos != '\0' && *pos != ' ' && *pos != '\t')
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1525 {
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1526 if (*pos == ':')
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1527 break;
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1528 pos++;
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1529 }
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1530
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1531 cols++;
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1532
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1533 if (*pos == ':')
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1534 {
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1535 cols++;
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1536 break;
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1537 }
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1538
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1539 while (*pos == ' ' || *pos == '\t')
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1540 pos++;
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1541 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1542
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1543 startpos = str;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1544 /* Copy file attributes */
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1545 if ((startpos = copy_token (&attribs, startpos)) == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1546 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1547
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1548 fle->st_mode = gftp_convert_attributes_to_mode_t (attribs);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1549 g_free (attribs);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1550
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1551 if (cols >= 9)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1552 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1553 /* Skip the number of links */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1554 startpos = goto_next_token (startpos);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1555
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1556 /* Copy the user that owns this file */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1557 if ((startpos = copy_token (&fle->user, startpos)) == NULL)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1558 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1559
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1560 /* Copy the group that owns this file */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1561 if ((startpos = copy_token (&fle->group, startpos)) == NULL)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1562 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1563 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1564 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1565 {
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1566 fle->group = g_strdup (_("unknown"));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1567 if (cols == 8)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1568 {
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1569 if ((startpos = copy_token (&fle->user, startpos)) == NULL)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1570 return (GFTP_EFATAL);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1571 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1572 else
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1573 fle->user = g_strdup (_("unknown"));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1574 startpos = goto_next_token (startpos);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1575 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1576
281
1c7cde8a3a53 2003-10-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 275
diff changeset
1577 if (request->server_type == GFTP_DIRTYPE_CRAY)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1578 {
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1579 /* See if this is a Cray directory listing. It has the following format:
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1580 drwx------ 2 feiliu g913 DK common 4096 Sep 24 2001 wv */
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1581 if (cols == 11 && strstr (str, "->") == NULL)
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1582 {
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1583 startpos = goto_next_token (startpos);
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1584 startpos = goto_next_token (startpos);
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1585 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1586 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1587
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1588 /* See if this is a block or character device. We will store the major number
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1589 in the high word and the minor number in the low word. */
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1590 if (GFTP_IS_SPECIAL_DEVICE (fle->st_mode) &&
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1591 (endpos = strchr (startpos, ',')) != NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1592 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1593 fle->size = strtol (startpos, NULL, 10) << 16;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1594
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1595 startpos = endpos + 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1596 while (*startpos == ' ')
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1597 startpos++;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1598
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1599 /* Get the minor number */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1600 if ((endpos = strchr (startpos, ' ')) == NULL)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1601 return (GFTP_EFATAL);
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
1602 fle->size |= strtol (startpos, NULL, 10) & 0xFF;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1603 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1604 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1605 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1606 /* This is a regular file */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1607 if ((endpos = strchr (startpos, ' ')) == NULL)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
1608 return (GFTP_EFATAL);
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
1609 fle->size = gftp_parse_file_size (startpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1610 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1611
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1612 /* Skip the blanks till we get to the next entry */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1613 startpos = endpos + 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1614 while (*startpos == ' ')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1615 startpos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1616
479
11ab311ccb67 2004-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 478
diff changeset
1617 fle->datetime = parse_time (startpos, &startpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1618
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1619 /* Skip the blanks till we get to the next entry */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1620 startpos = goto_next_token (startpos);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1621
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1622 /* Parse the filename. If this file is a symbolic link, remove the -> part */
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1623 if (S_ISLNK (fle->st_mode) && ((endpos = strstr (startpos, "->")) != NULL))
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1624 *(endpos - 1) = '\0';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1625
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1626 fle->file = g_strdup (startpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1627
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1628 /* Uncomment this if you want to strip the spaces off of the end of the file.
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1629 I don't want to do this by default since there are valid filenames with
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1630 spaces at the end of them. Some broken FTP servers like the Paradyne IPC
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1631 DSLAMS append a bunch of spaces at the end of the file.
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1632 for (endpos = fle->file + strlen (fle->file) - 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1633 *endpos == ' ';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1634 *endpos-- = '\0');
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1635 */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1636
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1637 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1638 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1639
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1640
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1641 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1642 gftp_parse_ls_nt (char *str, gftp_file * fle)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1643 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1644 char *startpos;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1645
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1646 startpos = str;
479
11ab311ccb67 2004-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 478
diff changeset
1647 fle->datetime = parse_time (startpos, &startpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1648
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1649 fle->user = g_strdup (_("unknown"));
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1650 fle->group = g_strdup (_("unknown"));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1651
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1652 startpos = goto_next_token (startpos);
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1653
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1654 if (startpos[0] == '<')
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1655 fle->st_mode = S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1656 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1657 {
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1658 fle->st_mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
1659 fle->size = gftp_parse_file_size (startpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1660 }
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1661
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1662 startpos = goto_next_token (startpos);
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1663 fle->file = g_strdup (startpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1664 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1665 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1666
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1667
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1668 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1669 gftp_parse_ls_novell (char *str, gftp_file * fle)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1670 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1671 char *startpos;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1672
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1673 if (str[12] != ' ')
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1674 return (GFTP_EFATAL);
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1675
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1676 str[12] = '\0';
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1677 fle->st_mode = gftp_convert_attributes_to_mode_t (str);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1678 startpos = str + 13;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1679
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1680 while ((*startpos == ' ' || *startpos == '\t') && *startpos != '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1681 startpos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1682
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1683 if ((startpos = copy_token (&fle->user, startpos)) == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1684 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1685
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1686 fle->group = g_strdup (_("unknown"));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1687
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
1688 fle->size = gftp_parse_file_size (startpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1689
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1690 startpos = goto_next_token (startpos);
479
11ab311ccb67 2004-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 478
diff changeset
1691 fle->datetime = parse_time (startpos, &startpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1692
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1693 startpos = goto_next_token (startpos);
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1694 fle->file = g_strdup (startpos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1695 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1696 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1697
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1698
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1699 int
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1700 gftp_parse_ls (gftp_request * request, const char *lsoutput, gftp_file * fle,
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1701 int fd)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1702 {
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1703 char *str, *endpos, tmpchar;
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1704 int result, is_vms;
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1705 size_t len;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1706
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1707 g_return_val_if_fail (lsoutput != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1708 g_return_val_if_fail (fle != NULL, GFTP_EFATAL);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1709
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
1710 str = g_strdup (lsoutput);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1711 memset (fle, 0, sizeof (*fle));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1712
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1713 len = strlen (str);
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1714 if (len > 0 && str[len - 1] == '\n')
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1715 str[--len] = '\0';
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1716 if (len > 0 && str[len - 1] == '\r')
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1717 str[--len] = '\0';
39
474d562c7268 2002-10-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 33
diff changeset
1718
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1719 switch (request->server_type)
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1720 {
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1721 case GFTP_DIRTYPE_CRAY:
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1722 case GFTP_DIRTYPE_UNIX:
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1723 result = gftp_parse_ls_unix (request, str, len, fle);
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1724 break;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1725 case GFTP_DIRTYPE_EPLF:
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1726 result = gftp_parse_ls_eplf (str, fle);
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1727 break;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1728 case GFTP_DIRTYPE_NOVELL:
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1729 result = gftp_parse_ls_novell (str, fle);
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1730 break;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1731 case GFTP_DIRTYPE_DOS:
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1732 result = gftp_parse_ls_nt (str, fle);
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1733 break;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1734 case GFTP_DIRTYPE_VMS:
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1735 result = gftp_parse_ls_vms (request, fd, str, fle);
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1736 break;
358
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1737 case GFTP_DIRTYPE_MVS:
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1738 result = gftp_parse_ls_mvs (str, fle);
28a50fb598ed 2003-1-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 356
diff changeset
1739 break;
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1740 default: /* autodetect */
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1741 if (*lsoutput == '+')
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1742 result = gftp_parse_ls_eplf (str, fle);
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1743 else if (isdigit ((int) str[0]) && str[2] == '-')
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1744 result = gftp_parse_ls_nt (str, fle);
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1745 else if (str[1] == ' ' && str[2] == '[')
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1746 result = gftp_parse_ls_novell (str, fle);
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1747 else
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1748 {
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1749 if ((endpos = strchr (str, ' ')) != NULL)
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1750 {
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1751 /* If the first token in the string has a ; in it, then */
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1752 /* we'll assume that this is a VMS directory listing */
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1753 tmpchar = *endpos;
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1754 *endpos = '\0';
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1755 is_vms = strchr (str, ';') != NULL;
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1756 *endpos = tmpchar;
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1757 }
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1758 else
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1759 is_vms = 0;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1760
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1761 if (is_vms)
485
7334a74db6f6 2004-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 480
diff changeset
1762 result = gftp_parse_ls_vms (request, fd, str, fle);
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1763 else
460
075f89b4395c 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 451
diff changeset
1764 result = gftp_parse_ls_unix (request, str, len, fle);
107
982e3890e7fe 2003-2-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 105
diff changeset
1765 }
91
8c37d73d3f1f 2003-1-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 87
diff changeset
1766 break;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1767 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1768 g_free (str);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1769
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1770 return (result);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1771 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1772
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1773
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1774 static GHashTable *
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1775 gftp_gen_dir_hash (gftp_request * request, int *ret)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1776 {
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1777 unsigned long *newsize;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1778 GHashTable * dirhash;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1779 gftp_file * fle;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1780 char * newname;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1781
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1782 dirhash = g_hash_table_new (string_hash_function, string_hash_compare);
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1783 *ret = gftp_list_files (request);
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1784 if (*ret == 0)
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1785 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1786 fle = g_malloc0 (sizeof (*fle));
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1787 while (gftp_get_next_file (request, NULL, fle) > 0)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1788 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1789 newname = fle->file;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1790 newsize = g_malloc (sizeof (unsigned long));
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1791 *newsize = fle->size;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1792 g_hash_table_insert (dirhash, newname, newsize);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1793 fle->file = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1794 gftp_file_destroy (fle);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1795 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1796 gftp_end_transfer (request);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1797 g_free (fle);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1798 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1799 else
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1800 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1801 g_hash_table_destroy (dirhash);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1802 dirhash = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1803 }
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1804
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1805 return (dirhash);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1806 }
39
474d562c7268 2002-10-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 33
diff changeset
1807
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1808
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1809 static void
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1810 destroy_hash_ent (gpointer key, gpointer value, gpointer user_data)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1811 {
39
474d562c7268 2002-10-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 33
diff changeset
1812
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1813 g_free (key);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1814 g_free (value);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1815 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1816
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1817
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1818 static void
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1819 gftp_destroy_dir_hash (GHashTable * dirhash)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1820 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1821 g_hash_table_foreach (dirhash, destroy_hash_ent, NULL);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
1822 g_hash_table_destroy (dirhash);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1823 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1824
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1825
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1826 static GList *
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1827 gftp_get_dir_listing (gftp_transfer * transfer, int getothdir, int *ret)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1828 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1829 unsigned long *newsize;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1830 GHashTable * dirhash;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1831 GList * templist;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1832 gftp_file * fle;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1833 char *newname;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1834
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1835 if (getothdir && transfer->toreq)
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1836 {
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1837 dirhash = gftp_gen_dir_hash (transfer->toreq, ret);
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1838 if (*ret < 0)
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1839 return (NULL);
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1840 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1841 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1842 dirhash = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1843
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1844 *ret = gftp_list_files (transfer->fromreq);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1845 if (*ret < 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1846 return (NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1847
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1848 fle = g_malloc (sizeof (*fle));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1849 templist = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1850 while (gftp_get_next_file (transfer->fromreq, NULL, fle) > 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1851 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1852 if (strcmp (fle->file, ".") == 0 || strcmp (fle->file, "..") == 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1853 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1854 gftp_file_destroy (fle);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1855 continue;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1856 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1857
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1858 if (dirhash &&
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1859 (newsize = g_hash_table_lookup (dirhash, fle->file)) != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1860 fle->startsize = *newsize;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1861
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1862 if (transfer->toreq && fle->destfile == NULL)
245
41af60bc1f88 2003-8-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 244
diff changeset
1863 fle->destfile = gftp_build_path (transfer->toreq->directory,
41af60bc1f88 2003-8-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 244
diff changeset
1864 fle->file, NULL);
41af60bc1f88 2003-8-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 244
diff changeset
1865
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1866 if (transfer->fromreq->directory != NULL &&
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1867 *transfer->fromreq->directory != '\0' &&
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1868 *fle->file != '/')
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1869 {
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1870 newname = gftp_build_path (transfer->fromreq->directory,
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1871 fle->file, NULL);
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1872
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1873 g_free (fle->file);
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1874 fle->file = newname;
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1875 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1876
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1877 templist = g_list_append (templist, fle);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1878
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1879 fle = g_malloc (sizeof (*fle));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1880 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1881 gftp_end_transfer (transfer->fromreq);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1882
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1883 gftp_file_destroy (fle);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1884 g_free (fle);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1885
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1886 if (dirhash != NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1887 gftp_destroy_dir_hash (dirhash);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1888
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1889 return (templist);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1890 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1891
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1892
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1893 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1894 gftp_get_all_subdirs (gftp_transfer * transfer,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1895 void (*update_func) (gftp_transfer * transfer))
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1896 {
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1897 char *oldfromdir, *oldtodir, *newname, *pos;
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1898 int forcecd, remotechanged, ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1899 GList * templist, * lastlist;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1900 unsigned long *newsize;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1901 GHashTable * dirhash;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1902 gftp_file * curfle;
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1903 mode_t st_mode;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1904
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1905 g_return_val_if_fail (transfer != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1906 g_return_val_if_fail (transfer->fromreq != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
1907 g_return_val_if_fail (transfer->files != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1908
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1909 if (transfer->toreq != NULL)
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1910 {
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1911 ret = 0;
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1912 dirhash = gftp_gen_dir_hash (transfer->toreq, &ret);
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1913 if (ret < 0)
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1914 return (ret);
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1915 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1916 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1917 dirhash = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1918
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1919 for (lastlist = transfer->files; ; lastlist = lastlist->next)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1920 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1921 curfle = lastlist->data;
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1922
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1923 if ((pos = strrchr (curfle->file, '/')) != NULL)
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1924 pos++;
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1925 else
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1926 pos = curfle->file;
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1927
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1928 if (dirhash != NULL &&
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1929 (newsize = g_hash_table_lookup (dirhash, pos)) != NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1930 curfle->startsize = *newsize;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1931
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1932 if (curfle->size < 0 && GFTP_IS_CONNECTED (transfer->fromreq))
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1933 {
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1934 curfle->size = gftp_get_file_size (transfer->fromreq, curfle->file);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1935 if (curfle->size < 0)
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1936 return (curfle->size);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1937 }
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1938
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1939 if (transfer->toreq && curfle->destfile == NULL)
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1940 curfle->destfile = gftp_build_path (transfer->toreq->directory,
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1941 curfle->file, NULL);
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1942
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1943 if (transfer->fromreq->directory != NULL &&
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1944 *transfer->fromreq->directory != '\0' && *curfle->file != '/')
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1945 {
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1946 newname = gftp_build_path (transfer->fromreq->directory,
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1947 curfle->file, NULL);
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1948 g_free (curfle->file);
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1949 curfle->file = newname;
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1950 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1951
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1952 if (lastlist->next == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1953 break;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1954 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1955
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1956 if (dirhash != NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1957 gftp_destroy_dir_hash (dirhash);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1958
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1959 oldfromdir = oldtodir = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1960 remotechanged = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1961 forcecd = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1962 for (templist = transfer->files; templist != NULL; templist = templist->next)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1963 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1964 curfle = templist->data;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1965
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1966 if (S_ISLNK (curfle->st_mode) && !S_ISDIR (curfle->st_mode))
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1967 {
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1968 st_mode = gftp_stat_filename (transfer->fromreq, curfle->file);
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1969 if (st_mode < 0)
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1970 return (st_mode);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1971 else if (S_ISDIR (st_mode))
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1972 curfle->st_mode = st_mode;
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1973 }
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1974
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1975 if (curfle->st_mode & S_IFDIR)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1976 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1977 oldfromdir = transfer->fromreq->directory;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1978 transfer->fromreq->directory = curfle->file;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1979
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1980 if (transfer->toreq != NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1981 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1982 oldtodir = transfer->toreq->directory;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1983 transfer->toreq->directory = curfle->destfile;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1984 }
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1985
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1986 forcecd = 1;
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1987 ret = gftp_set_directory (transfer->fromreq,
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1988 transfer->fromreq->directory);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1989 if (ret < 0)
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1990 return (ret);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1991
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1992 if (curfle->startsize > 0 && transfer->toreq != NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1993 {
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1994 remotechanged = 1;
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1995 ret = gftp_set_directory (transfer->toreq,
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1996 transfer->toreq->directory);
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1997 if (ret < 0)
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1998 return (ret);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1999 }
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2000
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2001 ret = 0;
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2002 lastlist->next = gftp_get_dir_listing (transfer,
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2003 curfle->startsize > 0,
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2004 &ret);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2005 if (ret < 0)
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2006 return (ret);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2007
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2008 if (lastlist->next != NULL)
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2009 {
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2010 lastlist->next->prev = lastlist;
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2011 for (; lastlist->next != NULL; lastlist = lastlist->next);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2012 }
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2013
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2014 transfer->numdirs++;
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2015 if (update_func != NULL)
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2016 update_func (transfer);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2017
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2018 transfer->fromreq->directory = oldfromdir;
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2019 if (transfer->toreq != NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2020 transfer->toreq->directory = oldtodir;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2021 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2022 else
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2023 transfer->numfiles++;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2024 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2025
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2026 if (forcecd)
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2027 {
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2028 ret = gftp_set_directory (transfer->fromreq,
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2029 transfer->fromreq->directory);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2030 if (ret < 0)
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2031 return (ret);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2032 }
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2033
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2034 if (remotechanged && transfer->toreq != NULL)
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2035 {
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2036 ret = gftp_set_directory (transfer->toreq, transfer->toreq->directory);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2037 if (ret < 0)
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2038 return (ret);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2039 }
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2040
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2041 if (update_func != NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2042 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2043 transfer->numfiles = transfer->numdirs = -1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2044 update_func (transfer);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2045 }
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
2046
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2047 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2048 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2049
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2050
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2051 #if defined (HAVE_GETADDRINFO) && defined (HAVE_GAI_STRERROR)
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2052 static int
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2053 get_port (struct addrinfo *addr)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2054 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2055 struct sockaddr_in * saddr;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2056 int port;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2057
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2058 if (addr->ai_family == AF_INET)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2059 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2060 saddr = (struct sockaddr_in *) addr->ai_addr;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2061 port = ntohs (saddr->sin_port);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2062 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2063 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2064 port = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2065
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2066 return (port);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2067 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2068 #endif
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2069
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2070
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2071 int
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2072 gftp_connect_server (gftp_request * request, char *service,
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2073 char *proxy_hostname, int proxy_port)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2074 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2075 char *connect_host, *disphost;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2076 int port, sock;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2077 #if defined (HAVE_GETADDRINFO) && defined (HAVE_GAI_STRERROR)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2078 struct addrinfo hints, *res;
463
39d9cf1bf0df 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
2079 intptr_t enable_ipv6;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2080 char serv[8];
463
39d9cf1bf0df 2004-4-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 460
diff changeset
2081 int errnum;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2082
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2083 if ((request->use_proxy = gftp_need_proxy (request, service,
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2084 proxy_hostname, proxy_port)) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2085 return (request->use_proxy);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2086 else if (request->use_proxy == 1)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2087 request->hostp = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2088
313
32a6b26b7026 2003-11-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
2089 gftp_lookup_request_option (request, "enable_ipv6", &enable_ipv6);
32a6b26b7026 2003-11-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
2090
151
2f15b3000dbc 2003-4-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 146
diff changeset
2091 request->free_hostp = 1;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2092 memset (&hints, 0, sizeof (hints));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2093 hints.ai_flags = AI_CANONNAME;
313
32a6b26b7026 2003-11-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
2094
32a6b26b7026 2003-11-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
2095 if (enable_ipv6)
32a6b26b7026 2003-11-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
2096 hints.ai_family = PF_UNSPEC;
32a6b26b7026 2003-11-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
2097 else
32a6b26b7026 2003-11-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
2098 hints.ai_family = AF_INET;
32a6b26b7026 2003-11-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
2099
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2100 hints.ai_socktype = SOCK_STREAM;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2101
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2102 if (request->use_proxy)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2103 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2104 connect_host = proxy_hostname;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2105 port = proxy_port;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2106 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2107 else
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2108 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2109 connect_host = request->hostname;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2110 port = request->port;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2111 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2112
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2113 if (request->hostp == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2114 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2115 if (port == 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2116 strcpy (serv, service);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2117 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2118 snprintf (serv, sizeof (serv), "%d", port);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2119
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2120 request->logging_function (gftp_logging_misc, request,
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2121 _("Looking up %s\n"), connect_host);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2122 if ((errnum = getaddrinfo (connect_host, serv, &hints,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2123 &request->hostp)) != 0)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2124 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2125 request->logging_function (gftp_logging_error, request,
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2126 _("Cannot look up hostname %s: %s\n"),
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2127 connect_host, gai_strerror (errnum));
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2128 return (GFTP_ERETRYABLE);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2129 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2130 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2131
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2132 disphost = connect_host;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2133 for (res = request->hostp; res != NULL; res = res->ai_next)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2134 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2135 disphost = res->ai_canonname ? res->ai_canonname : connect_host;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2136 port = get_port (res);
56
a12bcbc2fce4 2002-11-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
2137 if (!request->use_proxy)
a12bcbc2fce4 2002-11-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
2138 request->port = port;
a12bcbc2fce4 2002-11-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
2139
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2140 if ((sock = socket (res->ai_family, res->ai_socktype,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2141 res->ai_protocol)) < 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2142 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2143 request->logging_function (gftp_logging_error, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2144 _("Failed to create a socket: %s\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2145 g_strerror (errno));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2146 continue;
66
cd3e457cbc85 2002-11-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 65
diff changeset
2147 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2148
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2149 request->logging_function (gftp_logging_misc, request,
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2150 _("Trying %s:%d\n"), disphost, port);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2151
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2152 if (connect (sock, res->ai_addr, res->ai_addrlen) == -1)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2153 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2154 request->logging_function (gftp_logging_error, request,
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2155 _("Cannot connect to %s: %s\n"),
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2156 disphost, g_strerror (errno));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2157 close (sock);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2158 continue;
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2159 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2160 break;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2161 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2162
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2163 if (res == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2164 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2165 if (request->hostp != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2166 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2167 freeaddrinfo (request->hostp);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2168 request->hostp = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2169 }
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2170 return (GFTP_ERETRYABLE);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2171 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2172
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2173 #else /* !HAVE_GETADDRINFO */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2174 struct sockaddr_in remote_address;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2175 struct servent serv_struct;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2176 int curhost;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2177
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2178 if ((request->use_proxy = gftp_need_proxy (request, service,
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2179 proxy_hostname, proxy_port)) < 0)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2180 return (request->use_proxy);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2181 else if (request->use_proxy == 1)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2182 request->hostp = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2183
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2184 if ((sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2185 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2186 request->logging_function (gftp_logging_error, request,
313
32a6b26b7026 2003-11-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 309
diff changeset
2187 _("Failed to create a IPv4 socket: %s\n"),
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2188 g_strerror (errno));
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2189 return (GFTP_ERETRYABLE);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2190 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2191
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2192 memset (&remote_address, 0, sizeof (remote_address));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2193 remote_address.sin_family = AF_INET;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2194
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2195 if (request->use_proxy)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2196 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2197 connect_host = proxy_hostname;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2198 port = proxy_port;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2199 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2200 else
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2201 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2202 connect_host = request->hostname;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2203 port = request->port;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2204 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2205
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2206 if (port == 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2207 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2208 if (!r_getservbyname (service, "tcp", &serv_struct, NULL))
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2209 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2210 request->logging_function (gftp_logging_error, request,
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2211 _("Cannot look up service name %s/tcp. Please check your services file\n"),
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2212 service);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2213 close (sock);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2214 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2215 }
451
83cfffb2878a 2004-3-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 443
diff changeset
2216
83cfffb2878a 2004-3-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 443
diff changeset
2217 port = ntohs (serv_struct.s_port);
56
a12bcbc2fce4 2002-11-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
2218
a12bcbc2fce4 2002-11-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
2219 if (!request->use_proxy)
451
83cfffb2878a 2004-3-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 443
diff changeset
2220 request->port = port;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2221 }
451
83cfffb2878a 2004-3-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 443
diff changeset
2222
83cfffb2878a 2004-3-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 443
diff changeset
2223 remote_address.sin_port = htons (port);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2224
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2225 if (request->hostp == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2226 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2227 request->logging_function (gftp_logging_misc, request,
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2228 _("Looking up %s\n"), connect_host);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2229 if (!(request->hostp = r_gethostbyname (connect_host, &request->host,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2230 NULL)))
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2231 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2232 request->logging_function (gftp_logging_error, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2233 _("Cannot look up hostname %s: %s\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2234 connect_host, g_strerror (errno));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2235 close (sock);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2236 return (GFTP_ERETRYABLE);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2237 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2238 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2239
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2240 disphost = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2241 for (curhost = 0; request->host.h_addr_list[curhost] != NULL; curhost++)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2242 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2243 disphost = request->host.h_name;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2244 memcpy (&remote_address.sin_addr, request->host.h_addr_list[curhost],
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2245 request->host.h_length);
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2246 request->logging_function (gftp_logging_misc, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2247 _("Trying %s:%d\n"),
451
83cfffb2878a 2004-3-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 443
diff changeset
2248 request->host.h_name, port);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2249
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2250 if (connect (sock, (struct sockaddr *) &remote_address,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2251 sizeof (remote_address)) == -1)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2252 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2253 request->logging_function (gftp_logging_error, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2254 _("Cannot connect to %s: %s\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2255 connect_host, g_strerror (errno));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2256 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2257 break;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2258 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2259
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2260 if (request->host.h_addr_list[curhost] == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2261 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2262 close (sock);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2263 return (GFTP_ERETRYABLE);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2264 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2265 #endif /* HAVE_GETADDRINFO */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2266
182
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2267 if (fcntl (sock, F_SETFD, 1) == -1)
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2268 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2269 request->logging_function (gftp_logging_error, request,
182
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2270 _("Error: Cannot set close on exec flag: %s\n"),
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2271 g_strerror (errno));
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2272
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2273 return (GFTP_ERETRYABLE);
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2274 }
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2275
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2276 request->logging_function (gftp_logging_misc, request,
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2277 _("Connected to %s:%d\n"), connect_host, port);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2278
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2279 if (gftp_fd_set_sockblocking (request, sock, 1) < 0)
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2280 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2281 close (sock);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2282 return (GFTP_ERETRYABLE);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2283 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2284
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
2285 request->datafd = sock;
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2286
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2287 if (request->post_connect != NULL)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2288 return (request->post_connect (request));
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2289
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2290 return (0);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2291 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2292
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2293
177
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
2294 int
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2295 gftp_set_config_options (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2296 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2297 if (request->set_config_options != NULL)
177
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
2298 return (request->set_config_options (request));
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
2299 else
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
2300 return (0);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2301 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2302
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2303
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2304 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2305 print_file_list (GList * list)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2306 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2307 gftp_file * tempfle;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2308 GList * templist;
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2309 char *attribs;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2310
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2311 printf ("--START OF FILE LISTING - TOP TO BOTTOM--\n");
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2312 for (templist = list; ; templist = templist->next)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2313 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2314 tempfle = templist->data;
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2315 attribs = gftp_convert_attributes_from_mode_t (tempfle->st_mode);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2316
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
2317 #if defined (_LARGEFILE_SOURCE)
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
2318 printf ("%s:%s:%lld:%lld:%s:%s:%s\n",
372
44b792841e3f 2003-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 367
diff changeset
2319 tempfle->file, tempfle->destfile,
44b792841e3f 2003-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 367
diff changeset
2320 (long long) tempfle->size, (long long) tempfle->startsize,
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2321 tempfle->user, tempfle->group, attribs);
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
2322 #else
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
2323 printf ("%s:%s:%ld:%ld:%s:%s:%s\n",
16
ddb983d8574b * Improved directory sorting algorithm
masneyb
parents: 14
diff changeset
2324 tempfle->file, tempfle->destfile,
ddb983d8574b * Improved directory sorting algorithm
masneyb
parents: 14
diff changeset
2325 tempfle->size, tempfle->startsize,
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2326 tempfle->user, tempfle->group, attribs);
372
44b792841e3f 2003-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 367
diff changeset
2327 #endif
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2328
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2329 g_free (attribs);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2330 if (templist->next == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2331 break;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2332 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2333
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2334 printf ("--START OF FILE LISTING - BOTTOM TO TOP--\n");
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2335 for (; ; templist = templist->prev)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2336 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2337 tempfle = templist->data;
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2338 attribs = gftp_convert_attributes_from_mode_t (tempfle->st_mode);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2339
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
2340 #if defined (_LARGEFILE_SOURCE)
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
2341 printf ("%s:%s:%lld:%lld:%s:%s:%s\n",
372
44b792841e3f 2003-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 367
diff changeset
2342 tempfle->file, tempfle->destfile,
44b792841e3f 2003-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 367
diff changeset
2343 (long long) tempfle->size, (long long) tempfle->startsize,
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2344 tempfle->user, tempfle->group, attribs);
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
2345 #else
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
2346 printf ("%s:%s:%ld:%ld:%s:%s:%s\n",
16
ddb983d8574b * Improved directory sorting algorithm
masneyb
parents: 14
diff changeset
2347 tempfle->file, tempfle->destfile,
ddb983d8574b * Improved directory sorting algorithm
masneyb
parents: 14
diff changeset
2348 tempfle->size, tempfle->startsize,
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2349 tempfle->user, tempfle->group, attribs);
372
44b792841e3f 2003-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 367
diff changeset
2350 #endif
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2351
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2352 g_free (attribs);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2353 if (templist == list)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2354 break;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2355 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2356 printf ("--END OF FILE LISTING--\n");
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2357 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
2358
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2359
201
0098dae654a5 2003-6-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 199
diff changeset
2360 void
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2361 gftp_free_getline_buffer (gftp_getline_buffer ** rbuf)
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2362 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2363 g_free ((*rbuf)->buffer);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2364 g_free (*rbuf);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2365 *rbuf = NULL;
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2366 }
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2367
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2368
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2369 ssize_t
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2370 gftp_get_line (gftp_request * request, gftp_getline_buffer ** rbuf,
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2371 char * str, size_t len, int fd)
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2372 {
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2373 ssize_t ret, retval, rlen;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2374 char *pos, *nextpos;
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2375 ssize_t (*read_function) (gftp_request * request, void *ptr, size_t size,
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2376 int fd);
179
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2377 int end_of_buffer;
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2378
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2379 if (request == NULL || request->read_function == NULL)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2380 read_function = gftp_fd_read;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2381 else
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2382 read_function = request->read_function;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2383
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2384 if (*rbuf == NULL)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2385 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2386 *rbuf = g_malloc0 (sizeof (**rbuf));
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2387 (*rbuf)->max_bufsize = len;
249
094e83b55cb1 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 248
diff changeset
2388 (*rbuf)->buffer = g_malloc0 ((*rbuf)->max_bufsize + 1);
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2389
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2390 if ((ret = read_function (request, (*rbuf)->buffer,
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2391 (*rbuf)->max_bufsize, fd)) <= 0)
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2392 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2393 gftp_free_getline_buffer (rbuf);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2394 return (ret);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2395 }
60
8a9324fb63a4 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
2396 (*rbuf)->buffer[ret] = '\0';
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2397 (*rbuf)->cur_bufsize = ret;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2398 (*rbuf)->curpos = (*rbuf)->buffer;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2399 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2400
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2401 retval = GFTP_ERETRYABLE;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2402 do
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2403 {
179
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2404 pos = strchr ((*rbuf)->curpos, '\n');
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2405 end_of_buffer = (*rbuf)->curpos == (*rbuf)->buffer &&
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2406 ((*rbuf)->max_bufsize == (*rbuf)->cur_bufsize || (*rbuf)->eof);
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2407
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2408 if ((*rbuf)->cur_bufsize > 0 && (pos != NULL || end_of_buffer))
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2409 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2410 if (pos != NULL)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2411 {
249
094e83b55cb1 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 248
diff changeset
2412 retval = pos - (*rbuf)->curpos + 1;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2413 nextpos = pos + 1;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2414 if (pos > (*rbuf)->curpos && *(pos - 1) == '\r')
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2415 pos--;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2416 *pos = '\0';
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2417 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2418 else
249
094e83b55cb1 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 248
diff changeset
2419 {
094e83b55cb1 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 248
diff changeset
2420 retval = (*rbuf)->cur_bufsize;
094e83b55cb1 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 248
diff changeset
2421 nextpos = NULL;
094e83b55cb1 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 248
diff changeset
2422
094e83b55cb1 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 248
diff changeset
2423 /* This is not an overflow since we allocated one extra byte to
094e83b55cb1 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 248
diff changeset
2424 buffer above */
094e83b55cb1 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 248
diff changeset
2425 ((*rbuf)->curpos)[retval] = '\0';
094e83b55cb1 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 248
diff changeset
2426 }
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2427
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2428 strncpy (str, (*rbuf)->curpos, len);
249
094e83b55cb1 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 248
diff changeset
2429 str[len - 1] = '\0';
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2430 (*rbuf)->cur_bufsize -= retval;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2431
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2432 if (nextpos != NULL)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2433 (*rbuf)->curpos = nextpos;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2434 else
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2435 (*rbuf)->cur_bufsize = 0;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2436 break;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2437 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2438 else
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2439 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2440 if ((*rbuf)->cur_bufsize == 0 || *(*rbuf)->curpos == '\0')
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2441 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2442 rlen = (*rbuf)->max_bufsize;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2443 pos = (*rbuf)->buffer;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2444 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2445 else
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2446 {
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2447 memmove ((*rbuf)->buffer, (*rbuf)->curpos, (*rbuf)->cur_bufsize);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2448 pos = (*rbuf)->buffer + (*rbuf)->cur_bufsize;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2449 rlen = (*rbuf)->max_bufsize - (*rbuf)->cur_bufsize;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2450 }
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2451
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2452 (*rbuf)->curpos = (*rbuf)->buffer;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2453
209
d79e2782eb1b 2003-7-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 207
diff changeset
2454 if ((*rbuf)->eof)
d79e2782eb1b 2003-7-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 207
diff changeset
2455 ret = 0;
d79e2782eb1b 2003-7-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 207
diff changeset
2456 else
d79e2782eb1b 2003-7-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 207
diff changeset
2457 ret = read_function (request, pos, rlen, fd);
d79e2782eb1b 2003-7-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 207
diff changeset
2458
d79e2782eb1b 2003-7-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 207
diff changeset
2459 if (ret < 0)
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2460 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2461 gftp_free_getline_buffer (rbuf);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2462 return (ret);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2463 }
179
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2464 else if (ret == 0)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2465 {
179
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2466 if ((*rbuf)->cur_bufsize == 0)
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2467 {
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2468 gftp_free_getline_buffer (rbuf);
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2469 return (ret);
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2470 }
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2471
8d933999bba6 2003-6-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 177
diff changeset
2472 (*rbuf)->eof = 1;
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2473 }
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2474
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2475 (*rbuf)->cur_bufsize += ret;
215
3d6e024dbf31 2003-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 211
diff changeset
2476 (*rbuf)->curpos[(*rbuf)->cur_bufsize] = '\0';
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2477 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2478 }
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2479 while (retval == GFTP_ERETRYABLE);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2480
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2481 return (retval);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2482 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2483
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2484
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2485 ssize_t
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2486 gftp_fd_read (gftp_request * request, void *ptr, size_t size, int fd)
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2487 {
325
0fcc6468a0af 2003-12-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 313
diff changeset
2488 intptr_t network_timeout;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2489 struct timeval tv;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2490 fd_set fset;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2491 ssize_t ret;
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2492
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2493 gftp_lookup_request_option (request, "network_timeout", &network_timeout);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2494
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2495 errno = 0;
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2496 ret = 0;
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2497 do
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2498 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2499 FD_ZERO (&fset);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2500 FD_SET (fd, &fset);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2501 tv.tv_sec = network_timeout;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2502 tv.tv_usec = 0;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2503 ret = select (fd + 1, &fset, NULL, NULL, &tv);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2504 if (ret == -1 && errno == EINTR)
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2505 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2506 if (request && request->cancel)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2507 break;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2508 else
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2509 continue;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2510 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2511 else if (ret <= 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2512 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2513 if (request != NULL)
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2514 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2515 request->logging_function (gftp_logging_error, request,
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2516 _("Connection to %s timed out\n"),
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2517 request->hostname);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2518 gftp_disconnect (request);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2519 }
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2520 return (GFTP_ERETRYABLE);
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2521 }
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2522
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2523 if ((ret = read (fd, ptr, size)) < 0)
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2524 {
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2525 if (errno == EINTR)
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2526 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2527 if (request != NULL && request->cancel)
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2528 break;
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2529 else
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2530 continue;
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2531 }
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2532
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2533 if (request != NULL)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2534 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2535 request->logging_function (gftp_logging_error, request,
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2536 _("Error: Could not read from socket: %s\n"),
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2537 g_strerror (errno));
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2538 gftp_disconnect (request);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2539 }
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2540 return (GFTP_ERETRYABLE);
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2541 }
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2542 }
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2543 while (errno == EINTR && !(request != NULL && request->cancel));
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2544
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2545 if (errno == EINTR && request != NULL && request->cancel)
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2546 {
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2547 gftp_disconnect (request);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2548 return (GFTP_ERETRYABLE);
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2549 }
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2550
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2551 return (ret);
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2552 }
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
2553
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2554
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2555 ssize_t
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2556 gftp_fd_write (gftp_request * request, const char *ptr, size_t size, int fd)
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2557 {
325
0fcc6468a0af 2003-12-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 313
diff changeset
2558 intptr_t network_timeout;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2559 struct timeval tv;
248
16a967a4d003 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 245
diff changeset
2560 ssize_t w_ret;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2561 fd_set fset;
248
16a967a4d003 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 245
diff changeset
2562 size_t ret;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2563
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2564 gftp_lookup_request_option (request, "network_timeout", &network_timeout);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2565
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2566 errno = 0;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2567 ret = 0;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2568 do
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2569 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2570 FD_ZERO (&fset);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2571 FD_SET (fd, &fset);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2572 tv.tv_sec = network_timeout;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2573 tv.tv_usec = 0;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2574 ret = select (fd + 1, NULL, &fset, NULL, &tv);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2575 if (ret == -1 && errno == EINTR)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2576 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2577 if (request != NULL && request->cancel)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2578 break;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2579 else
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2580 continue;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2581 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2582 else if (ret <= 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2583 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2584 if (request != NULL)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2585 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2586 request->logging_function (gftp_logging_error, request,
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2587 _("Connection to %s timed out\n"),
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2588 request->hostname);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2589 gftp_disconnect (request);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2590 }
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2591 return (GFTP_ERETRYABLE);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2592 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2593
248
16a967a4d003 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 245
diff changeset
2594 w_ret = write (fd, ptr, size);
16a967a4d003 2003-8-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 245
diff changeset
2595 if (w_ret < 0)
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2596 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2597 if (errno == EINTR)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2598 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2599 if (request != NULL && request->cancel)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2600 break;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2601 else
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2602 continue;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2603 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2604
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2605 if (request != NULL)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2606 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2607 request->logging_function (gftp_logging_error, request,
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2608 _("Error: Could not write to socket: %s\n"),
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2609 g_strerror (errno));
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2610 gftp_disconnect (request);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2611 }
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2612 return (GFTP_ERETRYABLE);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2613 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2614
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2615 ptr += w_ret;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2616 size -= w_ret;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2617 ret += w_ret;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2618 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2619 while (size > 0);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2620
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2621 if (errno == EINTR && request != NULL && request->cancel)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2622 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2623 gftp_disconnect (request);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2624 return (GFTP_ERETRYABLE);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2625 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2626
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2627 return (ret);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2628 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2629
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2630
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2631 ssize_t
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2632 gftp_writefmt (gftp_request * request, int fd, const char *fmt, ...)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2633 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2634 char *tempstr;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2635 va_list argp;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2636 ssize_t ret;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2637
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2638 va_start (argp, fmt);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2639 tempstr = g_strdup_vprintf (fmt, argp);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2640 va_end (argp);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2641
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2642 ret = request->write_function (request, tempstr, strlen (tempstr), fd);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2643 g_free (tempstr);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2644 return (ret);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2645 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2646
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2647
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2648 int
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
2649 gftp_fd_set_sockblocking (gftp_request * request, int fd, int non_blocking)
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2650 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2651 int flags;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2652
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2653 if ((flags = fcntl (fd, F_GETFL, 0)) < 0)
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2654 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2655 request->logging_function (gftp_logging_error, request,
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2656 _("Cannot get socket flags: %s\n"),
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2657 g_strerror (errno));
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2658 gftp_disconnect (request);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2659 return (GFTP_ERETRYABLE);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2660 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2661
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2662 if (non_blocking)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2663 flags |= O_NONBLOCK;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2664 else
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2665 flags &= ~O_NONBLOCK;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2666
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2667 if (fcntl (fd, F_SETFL, flags) < 0)
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2668 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2669 request->logging_function (gftp_logging_error, request,
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2670 _("Cannot set socket to non-blocking: %s\n"),
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2671 g_strerror (errno));
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2672 gftp_disconnect (request);
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
2673 return (GFTP_ERETRYABLE);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2674 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2675
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2676 return (0);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2677 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2678
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
2679
63
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2680 void
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2681 gftp_swap_socks (gftp_request * dest, gftp_request * source)
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2682 {
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2683 g_return_if_fail (dest != NULL);
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2684 g_return_if_fail (source != NULL);
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2685 g_return_if_fail (dest->protonum == source->protonum);
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2686
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2687 dest->datafd = source->datafd;
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2688 dest->cached = 0;
397
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
2689 #ifdef USE_SSL
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
2690 dest->ssl = source->ssl;
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
2691 #endif
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
2692
63
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2693 if (!source->always_connected)
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2694 {
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2695 source->datafd = -1;
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2696 source->cached = 1;
397
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
2697 #ifdef USE_SSL
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
2698 source->ssl = NULL;
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
2699 #endif
63
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2700 }
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2701
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2702 if (dest->swap_socks)
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2703 dest->swap_socks (dest, source);
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2704 }
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
2705
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2706
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2707 void
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2708 gftp_calc_kbs (gftp_transfer * tdata, ssize_t num_read)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2709 {
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
2710 /* Needed for systems that size(float) < size(void *) */
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
2711 union { intptr_t i; float f; } maxkbs;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2712 unsigned long waitusecs;
220
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
2713 double start_difftime;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2714 gftp_file * tempfle;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2715 struct timeval tv;
222
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
2716 int waited;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2717
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
2718 gftp_lookup_request_option (tdata->fromreq, "maxkbs", &maxkbs.f);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2719
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2720 if (g_thread_supported ())
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2721 g_static_mutex_lock (&tdata->statmutex);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2722
220
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
2723 gettimeofday (&tv, NULL);
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
2724
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2725 tempfle = tdata->curfle->data;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2726 tdata->trans_bytes += num_read;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2727 tdata->curtrans += num_read;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2728 tdata->stalled = 0;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2729
220
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
2730 start_difftime = (tv.tv_sec - tdata->starttime.tv_sec) + ((double) (tv.tv_usec - tdata->starttime.tv_usec) / 1000000.0);
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
2731
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
2732 if (start_difftime <= 0)
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
2733 tdata->kbs = tdata->trans_bytes / 1024.0;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2734 else
220
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
2735 tdata->kbs = tdata->trans_bytes / 1024.0 / start_difftime;
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
2736
222
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
2737 waited = 0;
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
2738 if (maxkbs.f > 0 && tdata->kbs > maxkbs.f)
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2739 {
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
2740 waitusecs = num_read / 1024.0 / maxkbs.f * 1000000.0 - start_difftime;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2741
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2742 if (waitusecs > 0)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2743 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2744 if (g_thread_supported ())
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2745 g_static_mutex_unlock (&tdata->statmutex);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2746
222
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
2747 waited = 1;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2748 usleep (waitusecs);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2749
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2750 if (g_thread_supported ())
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2751 g_static_mutex_lock (&tdata->statmutex);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2752 }
222
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
2753
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2754 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2755
222
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
2756 if (waited)
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
2757 gettimeofday (&tdata->lasttime, NULL);
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
2758 else
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
2759 memcpy (&tdata->lasttime, &tv, sizeof (tdata->lasttime));
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2760
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2761 if (g_thread_supported ())
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2762 g_static_mutex_unlock (&tdata->statmutex);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2763 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
2764
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2765
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2766 int
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2767 gftp_get_transfer_status (gftp_transfer * tdata, ssize_t num_read)
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2768 {
325
0fcc6468a0af 2003-12-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 313
diff changeset
2769 intptr_t retries, sleep_time;
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2770 gftp_file * tempfle;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2771 struct timeval tv;
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
2772 int ret1, ret2;
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2773
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2774 ret1 = ret2 = 0;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2775 gftp_lookup_request_option (tdata->fromreq, "retries", &retries);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2776 gftp_lookup_request_option (tdata->fromreq, "sleep_time", &sleep_time);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2777
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2778 if (g_thread_supported ())
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2779 g_static_mutex_lock (&tdata->structmutex);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2780
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2781 if (tdata->curfle == NULL)
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2782 {
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2783 if (g_thread_supported ())
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2784 g_static_mutex_unlock (&tdata->structmutex);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2785
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2786 return (GFTP_EFATAL);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2787 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2788
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2789 tempfle = tdata->curfle->data;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2790
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2791 if (g_thread_supported ())
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2792 g_static_mutex_unlock (&tdata->structmutex);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2793
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2794 gftp_disconnect (tdata->fromreq);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2795 gftp_disconnect (tdata->toreq);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2796
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2797 if (num_read < 0 || tdata->skip_file)
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2798 {
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2799 if (num_read == GFTP_EFATAL)
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2800 return (GFTP_EFATAL);
303
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2801 else if (!tdata->conn_error_no_timeout)
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2802 {
303
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2803 if (retries != 0 &&
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2804 tdata->current_file_retries >= retries)
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2805 {
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2806 tdata->fromreq->logging_function (gftp_logging_error, tdata->fromreq,
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2807 _("Error: Remote site %s disconnected. Max retries reached...giving up\n"),
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2808 tdata->fromreq->hostname != NULL ?
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2809 tdata->fromreq->hostname : tdata->toreq->hostname);
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2810 return (GFTP_EFATAL);
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2811 }
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2812 else
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2813 {
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2814 tdata->fromreq->logging_function (gftp_logging_error, tdata->fromreq,
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2815 _("Error: Remote site %s disconnected. Will reconnect in %d seconds\n"),
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2816 tdata->fromreq->hostname != NULL ?
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2817 tdata->fromreq->hostname : tdata->toreq->hostname,
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2818 sleep_time);
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2819 }
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2820 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2821
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2822 while (retries == 0 ||
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2823 tdata->current_file_retries <= retries)
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2824 {
303
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2825 if (!tdata->conn_error_no_timeout && !tdata->skip_file)
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2826 {
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2827 tv.tv_sec = sleep_time;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2828 tv.tv_usec = 0;
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
2829
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
2830 do
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
2831 {
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
2832 ret1 = select (0, NULL, NULL, NULL, &tv);
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
2833 }
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
2834 while (ret1 == -1 && errno == EINTR);
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2835 }
303
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2836 else
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
2837 tdata->conn_error_no_timeout = 0;
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2838
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2839 if ((ret1 = gftp_connect (tdata->fromreq)) == 0 &&
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2840 (ret2 = gftp_connect (tdata->toreq)) == 0)
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2841 {
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2842 if (g_thread_supported ())
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2843 g_static_mutex_lock (&tdata->structmutex);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2844
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2845 tdata->resumed_bytes = tdata->resumed_bytes + tdata->trans_bytes - tdata->curresumed - tdata->curtrans;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2846 tdata->trans_bytes = 0;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2847 if (tdata->skip_file)
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2848 {
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2849 tdata->total_bytes -= tempfle->size;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2850 tdata->curtrans = 0;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2851
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2852 tdata->curfle = tdata->curfle->next;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2853 tdata->next_file = 1;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2854 tdata->skip_file = 0;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2855 tdata->cancel = 0;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2856 tdata->fromreq->cancel = 0;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2857 tdata->toreq->cancel = 0;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2858 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2859 else
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2860 {
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2861 tempfle->transfer_action = GFTP_TRANS_ACTION_RESUME;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2862 tempfle->startsize = tdata->curtrans + tdata->curresumed;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2863 /* We decrement this here because it will be incremented in
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2864 the loop again */
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2865 tdata->curresumed = 0;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2866 tdata->current_file_number--; /* Decrement this because it
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2867 will be incremented when we
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2868 continue in the loop */
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2869 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2870
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2871 gettimeofday (&tdata->starttime, NULL);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2872
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2873 if (g_thread_supported ())
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2874 g_static_mutex_unlock (&tdata->structmutex);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2875
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2876 return (GFTP_ERETRYABLE);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2877 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2878 else if (ret1 == GFTP_EFATAL || ret2 == GFTP_EFATAL)
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2879 {
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2880 gftp_disconnect (tdata->fromreq);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2881 gftp_disconnect (tdata->toreq);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2882 return (GFTP_EFATAL);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2883 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2884 else
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2885 tdata->current_file_retries++;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2886 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2887 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2888 else if (tdata->cancel)
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2889 return (GFTP_EFATAL);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2890
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2891 return (0);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2892 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
2893
182
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2894
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2895 int
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2896 gftp_fd_open (gftp_request * request, const char *pathname, int flags, mode_t mode)
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2897 {
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2898 int fd;
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2899
227
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
2900 if (mode == 0)
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
2901 fd = open (pathname, flags);
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
2902 else
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
2903 fd = open (pathname, flags, mode);
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
2904
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
2905 if (fd < 0)
182
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2906 {
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2907 if (request != NULL)
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2908 request->logging_function (gftp_logging_error, request,
182
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2909 _("Error: Cannot open local file %s: %s\n"),
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2910 pathname, g_strerror (errno));
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2911 return (GFTP_ERETRYABLE);
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2912 }
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2913
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2914 if (fcntl (fd, F_SETFD, 1) == -1)
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2915 {
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2916 if (request != NULL)
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
2917 request->logging_function (gftp_logging_error, request,
182
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2918 _("Error: Cannot set close on exec flag: %s\n"),
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2919 g_strerror (errno));
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2920
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2921 return (-1);
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2922 }
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2923
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2924 return (fd);
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
2925 }
422
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2926
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2927
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2928 void
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2929 gftp_setup_startup_directory (gftp_request * request)
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2930 {
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2931 char *startup_directory, *tempstr;
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2932
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2933 gftp_lookup_request_option (request, "startup_directory", &startup_directory);
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2934
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2935 if (*startup_directory != '\0' &&
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2936 (tempstr = expand_path (startup_directory)) != NULL)
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2937 {
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2938 gftp_set_directory (request, tempstr);
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2939 g_free (tempstr);
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2940 }
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2941 }
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
2942
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2943
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2944 char *
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2945 gftp_convert_attributes_from_mode_t (mode_t mode)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2946 {
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2947 char *str;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2948
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2949 str = g_malloc0 (11);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2950
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2951 str[0] = '?';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2952 if (S_ISREG (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2953 str[0] = '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2954
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2955 if (S_ISLNK (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2956 str[0] = 'l';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2957
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2958 if (S_ISBLK (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2959 str[0] = 'b';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2960
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2961 if (S_ISCHR (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2962 str[0] = 'c';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2963
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2964 if (S_ISFIFO (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2965 str[0] = 'p';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2966
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2967 if (S_ISSOCK (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2968 str[0] = 's';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2969
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2970 if (S_ISDIR (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2971 str[0] = 'd';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2972
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2973 str[1] = mode & S_IRUSR ? 'r' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2974 str[2] = mode & S_IWUSR ? 'w' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2975
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2976 if ((mode & S_ISUID) && (mode & S_IXUSR))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2977 str[3] = 's';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2978 else if (mode & S_ISUID)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2979 str[3] = 'S';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2980 else if (mode & S_IXUSR)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2981 str[3] = 'x';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2982 else
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2983 str[3] = '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2984
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2985 str[4] = mode & S_IRGRP ? 'r' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2986 str[5] = mode & S_IWGRP ? 'w' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2987
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2988 if ((mode & S_ISGID) && (mode & S_IXGRP))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2989 str[6] = 's';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2990 else if (mode & S_ISGID)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2991 str[6] = 'S';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2992 else if (mode & S_IXGRP)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2993 str[6] = 'x';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2994 else
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2995 str[6] = '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2996
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2997 str[7] = mode & S_IROTH ? 'r' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2998 str[8] = mode & S_IWOTH ? 'w' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
2999
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3000 if ((mode & S_ISVTX) && (mode & S_IXOTH))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3001 str[9] = 't';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3002 else if (mode & S_ISVTX)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3003 str[9] = 'T';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3004 else if (mode & S_IXOTH)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3005 str[9] = 'x';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3006 else
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3007 str[9] = '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3008
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3009 return (str);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3010 }
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3011
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3012
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3013 mode_t
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3014 gftp_convert_attributes_to_mode_t (char *attribs)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3015 {
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3016 mode_t mode;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3017
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3018 if (attribs[0] == 'd')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3019 mode = S_IFDIR;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3020 else if (attribs[0] == 'l')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3021 mode = S_IFLNK;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3022 else if (attribs[0] == 's')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3023 mode = S_IFSOCK;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3024 else if (attribs[0] == 'b')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3025 mode = S_IFBLK;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3026 else if (attribs[0] == 'c')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3027 mode = S_IFCHR;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3028 else
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3029 mode = S_IFREG;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3030
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3031 if (attribs[1] == 'r')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3032 mode |= S_IRUSR;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3033 if (attribs[2] == 'w')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3034 mode |= S_IWUSR;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3035 if (attribs[3] == 'x' || attribs[3] == 's')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3036 mode |= S_IXUSR;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3037 if (attribs[3] == 's' || attribs[3] == 'S')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3038 mode |= S_ISUID;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3039
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3040 if (attribs[4] == 'r')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3041 mode |= S_IRGRP;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3042 if (attribs[5] == 'w')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3043 mode |= S_IWGRP;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3044 if (attribs[6] == 'x' ||
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3045 attribs[6] == 's')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3046 mode |= S_IXGRP;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3047 if (attribs[6] == 's' || attribs[6] == 'S')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3048 mode |= S_ISGID;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3049
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3050 if (attribs[7] == 'r')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3051 mode |= S_IROTH;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3052 if (attribs[8] == 'w')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3053 mode |= S_IWOTH;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3054 if (attribs[9] == 'x' ||
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3055 attribs[9] == 's')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3056 mode |= S_IXOTH;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3057 if (attribs[9] == 't' || attribs[9] == 'T')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3058 mode |= S_ISVTX;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3059
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3060 return (mode);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3061 }
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
3062