annotate lib/protocols.c @ 676:72a6de68d9c8

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