annotate lib/protocols.c @ 992:9c583f570950 default tip

more character set conversion on remote file names.
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Wed, 15 Sep 2010 11:42:57 +0900
parents c99b134c6185
children
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 */
885
1808cebed602 2007-3-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 872
diff changeset
3 /* Copyright (C) 1998-2007 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)
944
5b681cba67b2 2008-01-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 924
diff changeset
51 g_free (request->password);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
52 if (request->account)
944
5b681cba67b2 2008-01-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 924
diff changeset
53 g_free (request->account);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
54 if (request->directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
55 g_free (request->directory);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
56 if (request->last_ftp_response)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
57 g_free (request->last_ftp_response);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
58 if (request->protocol_data)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
59 g_free (request->protocol_data);
67
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
60
944
5b681cba67b2 2008-01-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 924
diff changeset
61 #if defined (HAVE_GETADDRINFO) && defined (HAVE_GAI_STRERROR)
5b681cba67b2 2008-01-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 924
diff changeset
62 if (request->remote_addr != NULL)
5b681cba67b2 2008-01-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 924
diff changeset
63 g_free (request->remote_addr);
5b681cba67b2 2008-01-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 924
diff changeset
64 #endif
5b681cba67b2 2008-01-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 924
diff changeset
65
198
8fea1b1a2ec6 2003-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 191
diff changeset
66 if (request->local_options_vars != NULL)
8fea1b1a2ec6 2003-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 191
diff changeset
67 {
201
0098dae654a5 2003-6-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 199
diff changeset
68 gftp_config_free_options (request->local_options_vars,
0098dae654a5 2003-6-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 199
diff changeset
69 request->local_options_hash,
0098dae654a5 2003-6-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 199
diff changeset
70 request->num_local_options_vars);
198
8fea1b1a2ec6 2003-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 191
diff changeset
71 }
8fea1b1a2ec6 2003-6-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 191
diff changeset
72
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
73 memset (request, 0, sizeof (*request));
67
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
74
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
75 if (free_request)
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
76 g_free (request);
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
77 else
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
78 {
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
79 request->datafd = -1;
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
80 request->cachefd = -1;
924
f37091406523 2007-5-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 923
diff changeset
81 request->server_type = GFTP_DIRTYPE_OTHER;
67
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);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
109 if (file->user)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
110 g_free (file->user);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
111 if (file->group)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
112 g_free (file->group);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
113 if (file->destfile)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
114 g_free (file->destfile);
598
fa0838b22b14 2004-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 582
diff changeset
115
fa0838b22b14 2004-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 582
diff changeset
116 if (free_it)
fa0838b22b14 2004-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 582
diff changeset
117 g_free (file);
fa0838b22b14 2004-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 582
diff changeset
118 else
fa0838b22b14 2004-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 582
diff changeset
119 memset (file, 0, sizeof (*file));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
120 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
121
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
122
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
123 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
124 gftp_connect (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
125 {
177
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
126 int ret;
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
127
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
128 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
129
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
130 if (request->connect == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
131 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
132
177
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
133 if ((ret = gftp_set_config_options (request)) < 0)
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
134 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
135
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
136 return (request->connect (request));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
137 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
138
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
139
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
140 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
141 gftp_disconnect (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
142 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
143 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
144
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
145 #ifdef USE_SSL
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
146 if (request->ssl != NULL)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
147 {
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
148 SSL_free (request->ssl);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
149 request->ssl = NULL;
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
150 }
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
151 #endif
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
152
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
153 #if 0
187
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
154 #if GLIB_MAJOR_VERSION > 1
899
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
155 if (request->iconv_from_initialized)
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
156 {
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
157 g_iconv_close (request->iconv_from);
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
158 request->iconv_from_initialized = 0;
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
159 }
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
160
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
161 if (request->iconv_to_initialized)
187
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
162 {
899
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
163 g_iconv_close (request->iconv_to);
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
164 request->iconv_to_initialized = 0;
187
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
165 }
899
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
166
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
167 if (request->iconv_charset)
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
168 {
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
169 g_free (request->iconv_charset);
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
170 request->iconv_charset = NULL;
f716c8dbeaff 2007-3-22 Brian Masney <masneyb@gftp.org>
masneyb
parents: 895
diff changeset
171 }
187
a8ec69e39112 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 186
diff changeset
172 #endif
989
c99b134c6185 [mq]: charset2
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 988
diff changeset
173 #endif
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
174 request->cached = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
175 if (request->disconnect == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
176 return;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
177 request->disconnect (request);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
178 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
179
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
180
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
181 off_t
895
4ab11f70a7f4 2007-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 885
diff changeset
182 gftp_get_file (gftp_request * request, const char *filename,
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
183 off_t startsize)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
184 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
185 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
186
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
187 request->cached = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
188 if (request->get_file == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
189 return (GFTP_EFATAL);
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
190
895
4ab11f70a7f4 2007-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 885
diff changeset
191 return (request->get_file (request, filename, startsize));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
192 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
193
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
194
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
195 int
895
4ab11f70a7f4 2007-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 885
diff changeset
196 gftp_put_file (gftp_request * request, const char *filename,
244
afbbc72b73e2 2003-8-3 Brian Masney <masneyb@gftp.org>
masneyb
parents: 243
diff changeset
197 off_t startsize, off_t totalsize)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
198 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
199 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
200
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
201 request->cached = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
202 if (request->put_file == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
203 return (GFTP_EFATAL);
566
502a126418cd 2004-9-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 555
diff changeset
204
895
4ab11f70a7f4 2007-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 885
diff changeset
205 return (request->put_file (request, filename, startsize, totalsize));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
206 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
207
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
208
261
dbf13a10be13 2003-8-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 260
diff changeset
209 off_t
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
210 gftp_transfer_file (gftp_request * fromreq, const char *fromfile,
895
4ab11f70a7f4 2007-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 885
diff changeset
211 off_t fromsize, gftp_request * toreq, const char *tofile,
4ab11f70a7f4 2007-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 885
diff changeset
212 off_t tosize)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
213 {
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
214 /* Needed for systems that size(float) < size(void *) */
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
215 union { intptr_t i; float f; } maxkbs;
261
dbf13a10be13 2003-8-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 260
diff changeset
216 off_t size;
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
217 int ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
218
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
219 g_return_val_if_fail (fromreq != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
220 g_return_val_if_fail (fromfile != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
221 g_return_val_if_fail (toreq != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
222 g_return_val_if_fail (tofile != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
223
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
224 gftp_lookup_request_option (toreq, "maxkbs", &maxkbs.f);
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
225
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
226 if (maxkbs.f > 0)
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 toreq->logging_function (gftp_logging_misc, toreq,
4747f621b79b 2003-10-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 291
diff changeset
229 _("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
230 maxkbs.f);
294
4747f621b79b 2003-10-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 291
diff changeset
231 }
4747f621b79b 2003-10-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 291
diff changeset
232
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
233 if (fromreq->protonum == toreq->protonum &&
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
234 fromreq->transfer_file != NULL)
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
235 return (fromreq->transfer_file (fromreq, fromfile, fromsize, toreq,
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
236 tofile, tosize));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
237
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
238 fromreq->cached = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
239 toreq->cached = 0;
443
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
240
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
241 get_file:
895
4ab11f70a7f4 2007-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 885
diff changeset
242 size = gftp_get_file (fromreq, fromfile, tosize);
443
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
243 if (size < 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
244 {
443
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
245 if (size == GFTP_ETIMEDOUT)
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 ret = gftp_connect (fromreq);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
248 if (ret < 0)
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
249 return (ret);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
250
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
251 goto get_file;
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
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
254 return (size);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
255 }
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 put_file:
895
4ab11f70a7f4 2007-3-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 885
diff changeset
258 ret = gftp_put_file (toreq, tofile, tosize, size);
443
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
259 if (ret != 0)
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
260 {
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
261 if (size == GFTP_ETIMEDOUT)
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 ret = gftp_connect (fromreq);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
264 if (ret < 0)
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
265 return (ret);
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
266
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
267 goto put_file;
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
268 }
6b1e4bd20ae4 2004-3-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 429
diff changeset
269
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
270 if (gftp_abort_transfer (fromreq) != 0)
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
271 gftp_end_transfer (fromreq);
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
272
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
273 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
274 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
275
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
276 return (size);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
277 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
278
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
279
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
280 ssize_t
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
281 gftp_get_next_file_chunk (gftp_request * request, char *buf, size_t size)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
282 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
283 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
284 g_return_val_if_fail (buf != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
285
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
286 if (request->get_next_file_chunk != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
287 return (request->get_next_file_chunk (request, buf, size));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
288
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
289 return (request->read_function (request, buf, size, request->datafd));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
290 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
291
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
292
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
293 ssize_t
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
294 gftp_put_next_file_chunk (gftp_request * request, char *buf, size_t size)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
295 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
296 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
297 g_return_val_if_fail (buf != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
298
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
299 if (request->put_next_file_chunk != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
300 return (request->put_next_file_chunk (request, buf, size));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
301
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
302 return (request->write_function (request, buf, size, request->datafd));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
303 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
304
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
305
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
306 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
307 gftp_end_transfer (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
308 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
309 int ret;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
310
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
311 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
312
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
313 if (!request->cached &&
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
314 request->end_transfer != NULL)
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
315 ret = request->end_transfer (request);
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
316 else
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
317 ret = 0;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
318
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
319 if (request->cachefd > 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
320 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
321 close (request->cachefd);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
322 request->cachefd = -1;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
323 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
324
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
325 if (request->last_dir_entry)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
326 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
327 g_free (request->last_dir_entry);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
328 request->last_dir_entry = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
329 request->last_dir_entry_len = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
330 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
331
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
332 return (ret);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
333 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
334
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
335
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
336 int
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
337 gftp_abort_transfer (gftp_request * request)
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
338 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
339 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
340
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
341 if (request->abort_transfer == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
342 return (GFTP_EFATAL);
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
343
813
11159114bb97 2006-9-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 811
diff changeset
344 /* FIXME - end the transfer if it is not successful */
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
345 return (request->abort_transfer (request));
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
346 }
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
347
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
348
520
e67a52327b24 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
349 int
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
350 gftp_stat_filename (gftp_request * request, const char *filename, mode_t * mode,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
351 off_t * filesize)
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 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
520
e67a52327b24 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
354 g_return_val_if_fail (filename != NULL, GFTP_EFATAL);
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
355
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
356 if (request->stat_filename != NULL)
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
357 return (request->stat_filename (request, filename, mode, filesize));
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
358 else
520
e67a52327b24 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
359 return (0);
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
360 }
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
361
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
362
40
66c064fd05bc 2002-10-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 39
diff changeset
363 int
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
364 gftp_list_files (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
365 {
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
366 char *remote_lc_time, *locret;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
367 int fd;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
368
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
369 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
370
623
43a0556c994f 2004-11-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 601
diff changeset
371 #if ENABLE_NLS
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
372 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
373 if (remote_lc_time != NULL && *remote_lc_time != '\0')
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
374 locret = setlocale (LC_TIME, remote_lc_time);
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
375 else
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
376 locret = setlocale (LC_TIME, NULL);
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
377
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
378 if (locret == NULL)
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
379 {
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
380 locret = setlocale (LC_TIME, NULL);
677
8990a8a26ccf 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 676
diff changeset
381 request->logging_function (gftp_logging_error, request,
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
382 _("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
383 remote_lc_time, locret);
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
384 }
623
43a0556c994f 2004-11-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 601
diff changeset
385 #else
43a0556c994f 2004-11-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 601
diff changeset
386 locret = _("<unknown>");
43a0556c994f 2004-11-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 601
diff changeset
387 #endif
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
388
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
389 request->cached = 0;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
390 if (request->use_cache && (fd = gftp_find_cache_entry (request)) > 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
391 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
392 request->logging_function (gftp_logging_misc, request,
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
393 _("Loading directory listing %s from cache (LC_TIME=%s)\n"),
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
394 request->directory, locret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
395
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
396 request->cachefd = fd;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
397 request->cached = 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
398 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
399 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
400 else if (request->use_cache)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
401 {
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
402 request->logging_function (gftp_logging_misc, request,
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
403 _("Loading directory listing %s from server (LC_TIME=%s)\n"),
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
404 request->directory, locret);
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
405
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
406 request->cachefd = gftp_new_cache_entry (request);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
407 request->cached = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
408 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
409
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
410 if (request->list_files == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
411 return (GFTP_EFATAL);
473
45fb9dc47a2e 2004-5-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 469
diff changeset
412
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
413 return (request->list_files (request));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
414 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
415
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
416
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
417 int
377
14da115b149b 2003-1-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 372
diff changeset
418 gftp_get_next_file (gftp_request * request, const char *filespec,
14da115b149b 2003-1-23 Brian Masney <masneyb@gftp.org>
masneyb
parents: 372
diff changeset
419 gftp_file * fle)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
420 {
830
afbe37351940 2006-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 826
diff changeset
421 char *slashpos, *tmpfile, *utf8;
838
57aad6d4b304 2006-10-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 832
diff changeset
422 size_t destlen;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
423 int fd, ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
424
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
425 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
426
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
427 if (request->get_next_file == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
428 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
429
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
430 if (request->cached && request->cachefd > 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
431 fd = request->cachefd;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
432 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
433 fd = request->datafd;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
434
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
435 memset (fle, 0, sizeof (*fle));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
436 do
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
437 {
598
fa0838b22b14 2004-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 582
diff changeset
438 gftp_file_destroy (fle, 0);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
439 ret = request->get_next_file (request, fle, fd);
666
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
440 if (fle->file != NULL && (slashpos = strrchr (fle->file, '/')) != NULL)
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
441 {
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
442 if (*(slashpos + 1) == '\0')
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
443 {
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
444 gftp_file_destroy (fle, 0);
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
445 continue;
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
446 }
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
447
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
448 *slashpos = '\0';
830
afbe37351940 2006-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 826
diff changeset
449 tmpfile = g_strdup (slashpos + 1);
666
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
450
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
451 if (strcmp (fle->file, request->directory) != 0)
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
452 request->logging_function (gftp_logging_error, request,
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
453 _("Warning: Stripping path off of file '%s'. The stripped path (%s) doesn't match the current directory (%s)\n"),
830
afbe37351940 2006-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 826
diff changeset
454 tmpfile, fle->file, request->directory,
666
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
455 g_strerror (errno));
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
456
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
457 g_free (fle->file);
830
afbe37351940 2006-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 826
diff changeset
458 fle->file = tmpfile;
666
8ff1c1647b95 2005-1-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 646
diff changeset
459 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
460
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
461 if (ret >= 0 && fle->file != NULL)
830
afbe37351940 2006-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 826
diff changeset
462 {
916
936635b76f02 2007-4-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 899
diff changeset
463 if (g_utf8_validate (fle->file, -1, NULL))
936635b76f02 2007-4-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 899
diff changeset
464 fle->filename_utf8_encoded = 1;
936635b76f02 2007-4-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 899
diff changeset
465 else
830
afbe37351940 2006-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 826
diff changeset
466 {
992
9c583f570950 more character set conversion on remote file names.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 989
diff changeset
467 utf8 = gftp_remote_filename_to_utf8 (request, fle->file, &destlen);
916
936635b76f02 2007-4-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 899
diff changeset
468 if (utf8 != NULL)
936635b76f02 2007-4-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 899
diff changeset
469 {
936635b76f02 2007-4-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 899
diff changeset
470 g_free (fle->file);
936635b76f02 2007-4-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 899
diff changeset
471 fle->file = utf8;
936635b76f02 2007-4-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 899
diff changeset
472 fle->filename_utf8_encoded = 1;
936635b76f02 2007-4-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 899
diff changeset
473 }
830
afbe37351940 2006-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 826
diff changeset
474 }
afbe37351940 2006-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 826
diff changeset
475 }
45
311e29c40ed6 2002-10-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
476
60
8a9324fb63a4 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
477 if (ret >= 0 && !request->cached && request->cachefd > 0 &&
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
478 request->last_dir_entry != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
479 {
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
480 if (gftp_fd_write (request, request->last_dir_entry,
60
8a9324fb63a4 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
481 request->last_dir_entry_len, request->cachefd) < 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
482 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
483 request->logging_function (gftp_logging_error, request,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
484 _("Error: Cannot write to cache: %s\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
485 g_strerror (errno));
60
8a9324fb63a4 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
486 close (request->cachefd);
8a9324fb63a4 2002-11-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 58
diff changeset
487 request->cachefd = -1;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
488 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
489 }
821
b282e346bd25 2006-10-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 817
diff changeset
490 } while (ret > 0 && !gftp_match_filespec (request, fle->file, filespec));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
491
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
492 return (ret);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
493 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
494
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
495
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
496 int
243
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 227
diff changeset
497 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
498 const char * bookmark, int *refresh_local)
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
499 {
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
500 gftp_logging_func logging_function;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
501 gftp_bookmarks_var * tempentry;
838
57aad6d4b304 2006-10-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 832
diff changeset
502 char *default_protocol;
646
cd38f25b7c5e 2004-12-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 641
diff changeset
503 const char *email;
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
504 int i, init_ret;
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
505
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
506 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
507 g_return_val_if_fail (bookmark != NULL, GFTP_EFATAL);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
508
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
509 logging_function = request->logging_function;
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
510 gftp_request_destroy (request, 0);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
511 request->logging_function = logging_function;
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
512
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
513 if ((tempentry = g_hash_table_lookup (gftp_bookmarks_htable,
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
514 bookmark)) == NULL)
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
515 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
516 request->logging_function (gftp_logging_error, request,
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
517 _("Error: Could not find bookmark %s\n"),
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
518 bookmark);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
519 return (GFTP_EFATAL);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
520 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
521 else if (tempentry->hostname == NULL || *tempentry->hostname == '\0')
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
522 {
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
523 request->logging_function (gftp_logging_error, request,
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
524 _("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
525 return (GFTP_EFATAL);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
526 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
527
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
528 if (tempentry->user != NULL)
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
529 gftp_set_username (request, tempentry->user);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
530
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
531 if (tempentry->pass != NULL)
646
cd38f25b7c5e 2004-12-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 641
diff changeset
532 {
cd38f25b7c5e 2004-12-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 641
diff changeset
533 if (strcmp (tempentry->pass, "@EMAIL@") == 0)
cd38f25b7c5e 2004-12-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 641
diff changeset
534 {
cd38f25b7c5e 2004-12-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 641
diff changeset
535 gftp_lookup_request_option (request, "email", &email);
cd38f25b7c5e 2004-12-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 641
diff changeset
536 gftp_set_password (request, email);
cd38f25b7c5e 2004-12-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 641
diff changeset
537 }
cd38f25b7c5e 2004-12-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 641
diff changeset
538 else
cd38f25b7c5e 2004-12-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 641
diff changeset
539 gftp_set_password (request, tempentry->pass);
cd38f25b7c5e 2004-12-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 641
diff changeset
540 }
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
541
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
542 if (tempentry->acct != NULL)
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
543 gftp_set_account (request, tempentry->acct);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
544
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
545 gftp_set_hostname (request, tempentry->hostname);
838
57aad6d4b304 2006-10-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 832
diff changeset
546 gftp_set_directory (request, tempentry->remote_dir);
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
547 gftp_set_port (request, tempentry->port);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
548
988
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
549 /* charset */
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
550 gftp_set_remote_charset (request, tempentry->remote_charset);
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
551
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 512
diff changeset
552 if (local_request != NULL && tempentry->local_dir != NULL &&
243
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 227
diff changeset
553 *tempentry->local_dir != '\0')
275
5810b0f97eee 2003-9-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 261
diff changeset
554 {
838
57aad6d4b304 2006-10-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 832
diff changeset
555 gftp_set_directory (local_request, tempentry->local_dir);
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 512
diff changeset
556 if (refresh_local != NULL)
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 512
diff changeset
557 *refresh_local = 1;
275
5810b0f97eee 2003-9-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 261
diff changeset
558 }
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 512
diff changeset
559 else if (refresh_local != NULL)
275
5810b0f97eee 2003-9-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 261
diff changeset
560 *refresh_local = 0;
243
b42e7233533a 2003-7-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 227
diff changeset
561
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
562 for (i = 0; gftp_protocols[i].name; i++)
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
563 {
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
564 if (strcmp (gftp_protocols[i].name, tempentry->protocol) == 0)
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
565 {
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
566 if ((init_ret = gftp_protocols[i].init (request)) < 0)
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
567 {
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
568 gftp_request_destroy (request, 0);
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
569 return (init_ret);
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
570 }
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
571 break;
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
572 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
573 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
574
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
575 if (gftp_protocols[i].name == NULL)
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
576 {
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
577 gftp_lookup_request_option (request, "default_protocol",
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
578 &default_protocol);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
579
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
580 if (default_protocol != NULL && *default_protocol != '\0')
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
581 {
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
582 for (i = 0; gftp_protocols[i].url_prefix; i++)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
583 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
584 if (strcmp (gftp_protocols[i].name, default_protocol) == 0)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
585 break;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
586 }
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
587 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
588
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
589 if (gftp_protocols[i].url_prefix == NULL)
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
590 i = GFTP_FTP_NUM;
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
591 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
592
199
75eebb3b0592 2003-6-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 198
diff changeset
593 gftp_copy_local_options (&request->local_options_vars,
75eebb3b0592 2003-6-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 198
diff changeset
594 &request->local_options_hash,
429
1d45758e5cf5 2004-3-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 423
diff changeset
595 &request->num_local_options_vars,
199
75eebb3b0592 2003-6-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 198
diff changeset
596 tempentry->local_options_vars,
75eebb3b0592 2003-6-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 198
diff changeset
597 tempentry->num_local_options_vars);
75eebb3b0592 2003-6-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 198
diff changeset
598
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
599 if ((init_ret = gftp_protocols[i].init (request)) < 0)
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
600 {
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
601 gftp_request_destroy (request, 0);
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
602 return (init_ret);
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
603 }
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
604
87
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
605 return (0);
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
606 }
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
607
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
608
6df043359b41 2003-1-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 84
diff changeset
609 int
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
610 gftp_parse_url (gftp_request * request, const char *url)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
611 {
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
612 char *pos, *endpos, *default_protocol, *new_url;
67
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
613 gftp_logging_func logging_function;
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
614 const char *clear_pos;
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
615 int i, ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
616
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
617 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
618 g_return_val_if_fail (url != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
619
67
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
620 logging_function = request->logging_function;
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
621 gftp_request_destroy (request, 0);
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
622 request->logging_function = logging_function;
aa971a4bb16f 2002-11-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 66
diff changeset
623
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
624 for (clear_pos = url;
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
625 *clear_pos == ' ' || *clear_pos == '\t';
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
626 clear_pos++);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
627
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
628 new_url = g_strdup (clear_pos);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
629
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
630 for (pos = new_url + strlen (new_url) - 1;
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
631 *pos == ' ' || *pos == '\t';
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
632 pos--)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
633 *pos = '\0';
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
634
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
635 /* See if the URL has a protocol... */
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
636 if ((pos = strstr (new_url, "://")) != NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
637 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
638 *pos = '\0';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
639
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
640 for (i = 0; gftp_protocols[i].url_prefix; i++)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
641 {
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
642 if (strcmp (gftp_protocols[i].url_prefix, new_url) == 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
643 break;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
644 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
645
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
646 if (gftp_protocols[i].url_prefix == NULL)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
647 {
677
8990a8a26ccf 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 676
diff changeset
648 request->logging_function (gftp_logging_error, NULL,
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
649 _("The protocol '%s' is currently not supported.\n"),
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
650 new_url);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
651 g_free (new_url);
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
652 return (GFTP_EFATAL);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
653 }
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
654
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
655 *pos = ':';
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
656 pos += 3;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
657 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
658 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
659 {
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
660 gftp_lookup_request_option (request, "default_protocol",
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
661 &default_protocol);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
662
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
663 i = GFTP_FTP_NUM;
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
664 if (default_protocol != NULL && *default_protocol != '\0')
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
665 {
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
666 for (i = 0; gftp_protocols[i].url_prefix; i++)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
667 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
668 if (strcmp (gftp_protocols[i].name, default_protocol) == 0)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
669 break;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
670 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
671 }
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
672
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
673 if (gftp_protocols[i].url_prefix == NULL)
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
674 {
677
8990a8a26ccf 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 676
diff changeset
675 request->logging_function (gftp_logging_error, NULL,
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
676 _("The protocol '%s' is currently not supported.\n"),
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
677 default_protocol);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
678 g_free (new_url);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
679 return (GFTP_EFATAL);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
680 }
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
681
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
682 pos = new_url;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
683 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
684
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
685 if ((ret = gftp_protocols[i].init (request)) < 0)
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
686 {
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
687 gftp_request_destroy (request, 0);
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
688 return (ret);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
689 }
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
690
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
691 if ((endpos = strchr (pos, '/')) != NULL)
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
692 {
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
693 gftp_set_directory (request, endpos);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
694 *endpos = '\0';
173
4c288d05b26a 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 169
diff changeset
695 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
696
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
697 if (request->parse_url != NULL)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
698 {
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
699 ret = request->parse_url (request, new_url);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
700 g_free (new_url);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
701 return (ret);
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
702 }
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
703
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
704 if (*pos != '\0')
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
705 {
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
706 if (endpos == NULL)
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
707 endpos = pos + strlen (pos) - 1;
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
708 else
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
709 endpos--;
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
710
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
711 for (; isdigit (*endpos); endpos--);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
712
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
713 if (*endpos == ':' && isdigit (*(endpos + 1)))
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
714 {
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
715 gftp_set_port (request, strtol (endpos + 1, NULL, 10));
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
716 *endpos = '\0';
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
717 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
718
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
719 if ((endpos = strrchr (pos, '@')) != NULL)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
720 {
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
721 gftp_set_hostname (request, endpos + 1);
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
722 *endpos = '\0';
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
723
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
724 if ((endpos = strchr (pos, ':')) != NULL)
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
725 {
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
726 *endpos = '\0';
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
727 gftp_set_username (request, pos);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
728 gftp_set_password (request, endpos + 1);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
729 }
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
730 else
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
731 {
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
732 gftp_set_username (request, pos);
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
733 gftp_set_password (request, "");
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
734 }
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
735 }
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
736 else
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
737 gftp_set_hostname (request, pos);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
738 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
739
676
72a6de68d9c8 2005-1-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 666
diff changeset
740 g_free (new_url);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
741 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
742 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
743
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
744
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
745 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
746 gftp_set_hostname (gftp_request * request, const char *hostname)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
747 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
748 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
749 g_return_if_fail (hostname != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
750
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
751 if (request->hostname)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
752 g_free (request->hostname);
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
753 request->hostname = g_strdup (hostname);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
754 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
755
988
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
756 void
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
757 gftp_set_remote_charset(gftp_request * request, const char *remote_charset)
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
758 {
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
759 g_return_if_fail (request != NULL);
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
760 g_return_if_fail (remote_charset != NULL);
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
761
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
762 if (request->remote_charset)
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
763 g_free (request->remote_charset);
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
764 request->remote_charset = g_strdup (remote_charset);
63555c9744c2 remote charset should be specified by each bookmark entry.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents: 950
diff changeset
765 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
766
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
767 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
768 gftp_set_username (gftp_request * request, const char *username)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
769 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
770 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
771
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
772 if (request->username)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
773 g_free (request->username);
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
774
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
775 if (username != NULL)
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
776 request->username = g_strdup (username);
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
777 else
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
778 request->username = NULL;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
779 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
780
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
781
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
782 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
783 gftp_set_password (gftp_request * request, const char *password)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
784 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
785 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
786
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
787 if (request->password)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
788 g_free (request->password);
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
789
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
790 if (password != NULL)
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
791 request->password = g_strdup (password);
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
792 else
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
793 request->password = NULL;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
794 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
795
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
796
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
797 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
798 gftp_set_account (gftp_request * request, const char *account)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
799 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
800 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
801 g_return_if_fail (account != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
802
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
803 if (request->account)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
804 g_free (request->account);
124
65048c959029 2003-4-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 122
diff changeset
805 request->account = g_strdup (account);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
806 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
807
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
808
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
809 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
810 gftp_set_directory (gftp_request * request, const char *directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
811 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
812 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
813 g_return_val_if_fail (directory != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
814
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
815
169
d40f9db52cdf 2003-6-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 168
diff changeset
816 if (request->datafd <= 0 && !request->always_connected)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
817 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
818 if (directory != request->directory)
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
819 {
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
820 if (request->directory)
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
821 g_free (request->directory);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
822 request->directory = g_strdup (directory);
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
823 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
824 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
825 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
826 else if (request->chdir == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
827 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
828 return (request->chdir (request, directory));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
829 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
830
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
831
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
832 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
833 gftp_set_port (gftp_request * request, unsigned int port)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
834 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
835 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
836
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
837 request->port = port;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
838 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
839
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
840
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
841 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
842 gftp_remove_directory (gftp_request * request, const char *directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
843 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
844 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
845
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
846 if (request->rmdir == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
847 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
848 return (request->rmdir (request, directory));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
849 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
850
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
851
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
852 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
853 gftp_remove_file (gftp_request * request, const char *file)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
854 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
855 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
856
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
857 if (request->rmfile == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
858 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
859 return (request->rmfile (request, file));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
860 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
861
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
862
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
863 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
864 gftp_make_directory (gftp_request * request, const char *directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
865 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
866 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
867
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
868 if (request->mkdir == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
869 return (GFTP_EFATAL);
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
870
838
57aad6d4b304 2006-10-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 832
diff changeset
871 return (request->mkdir (request, directory));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
872 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
873
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
874
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
875 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
876 gftp_rename_file (gftp_request * request, const char *oldname,
168
c505d9ba9d53 2003-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 151
diff changeset
877 const char *newname)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
878 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
879 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
880
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
881 if (request->rename == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
882 return (GFTP_EFATAL);
291
265244924868 2003-10-19 Brian Masney <masneyb@gftp.org>
masneyb
parents: 281
diff changeset
883
838
57aad6d4b304 2006-10-31 Brian Masney <masneyb@gftp.org>
masneyb
parents: 832
diff changeset
884 return (request->rename (request, oldname, newname));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
885 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
886
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
887
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
888 int
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
889 gftp_chmod (gftp_request * request, const char *file, mode_t mode)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
890 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
891 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
892
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
893 if (request->chmod == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
894 return (GFTP_EFATAL);
504
93d7d3b9a477 2004-7-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
895
93d7d3b9a477 2004-7-18 Brian Masney <masneyb@gftp.org>
masneyb
parents: 500
diff changeset
896 mode &= S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID | S_ISVTX;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
897 return (request->chmod (request, file, mode));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
898 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
899
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
900
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
901 int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
902 gftp_set_file_time (gftp_request * request, const char *file, time_t datetime)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
903 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
904 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
905
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
906 if (request->set_file_time == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
907 return (GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
908 return (request->set_file_time (request, file, datetime));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
909 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
910
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
911
765
d553d14a2565 2006-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 764
diff changeset
912 int
478
97fd5eb34be0 2004-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 473
diff changeset
913 gftp_site_cmd (gftp_request * request, int specify_site, const char *command)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
914 {
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
915 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
916
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
917 if (request->site == NULL)
84
7ef60ce2bdb2 2002-12-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 76
diff changeset
918 return (GFTP_EFATAL);
478
97fd5eb34be0 2004-6-6 Brian Masney <masneyb@gftp.org>
masneyb
parents: 473
diff changeset
919 return (request->site (request, specify_site, command));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
920 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
921
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
922
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
923 off_t
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
924 gftp_get_file_size (gftp_request * request, const char *filename)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
925 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
926 g_return_val_if_fail (request != NULL, 0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
927
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
928 if (request->get_file_size == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
929 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
930 return (request->get_file_size (request, filename));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
931 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
932
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
933
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
934 static GHashTable *
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
935 gftp_gen_dir_hash (gftp_request * request, int *ret)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
936 {
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
937 GHashTable * dirhash;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
938 gftp_file * fle;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 512
diff changeset
939 off_t *newsize;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
940
851
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
941 dirhash = g_hash_table_new (string_hash_function, string_hash_compare);
850
1c8d6b6b7950 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 845
diff changeset
942 *ret = gftp_list_files (request);
851
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
943 if (*ret == 0)
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
944 {
851
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
945 fle = g_malloc0 (sizeof (*fle));
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
946 while (gftp_get_next_file (request, NULL, fle) > 0)
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
947 {
944
5b681cba67b2 2008-01-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 924
diff changeset
948 newsize = g_malloc0 (sizeof (*newsize));
851
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
949 *newsize = fle->size;
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
950 g_hash_table_insert (dirhash, fle->file, newsize);
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
951 fle->file = NULL;
598
fa0838b22b14 2004-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 582
diff changeset
952 gftp_file_destroy (fle, 0);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
953 }
851
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
954 gftp_end_transfer (request);
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
955 g_free (fle);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
956 }
851
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
957 else
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
958 {
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
959 g_hash_table_destroy (dirhash);
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
960 dirhash = NULL;
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
961 }
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
962
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
963 return (dirhash);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
964 }
39
474d562c7268 2002-10-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 33
diff changeset
965
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
966
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
967 static void
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
968 destroy_hash_ent (gpointer key, gpointer value, gpointer user_data)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
969 {
39
474d562c7268 2002-10-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 33
diff changeset
970
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
971 g_free (key);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
972 g_free (value);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
973 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
974
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
975
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
976 static void
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
977 gftp_destroy_dir_hash (GHashTable * dirhash)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
978 {
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
979 if (dirhash == NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
980 return;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
981
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
982 g_hash_table_foreach (dirhash, destroy_hash_ent, NULL);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 46
diff changeset
983 g_hash_table_destroy (dirhash);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
984 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
985
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
986
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
987 static GList *
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
988 gftp_get_dir_listing (gftp_transfer * transfer, int getothdir, int *ret)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
989 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
990 GHashTable * dirhash;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
991 GList * templist;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
992 gftp_file * fle;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 512
diff changeset
993 off_t *newsize;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
994 char *newname;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
995
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
996 if (getothdir && transfer->toreq != NULL)
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
997 {
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
998 dirhash = gftp_gen_dir_hash (transfer->toreq, ret);
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
999 if (*ret == GFTP_EFATAL)
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1000 return (NULL);
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1001 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1002 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1003 dirhash = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1004
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1005 *ret = gftp_list_files (transfer->fromreq);
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1006 if (*ret < 0)
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1007 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1008 gftp_destroy_dir_hash (dirhash);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1009 return (NULL);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1010 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1011
944
5b681cba67b2 2008-01-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 924
diff changeset
1012 fle = g_malloc0 (sizeof (*fle));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1013 templist = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1014 while (gftp_get_next_file (transfer->fromreq, NULL, fle) > 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1015 {
851
83d39217749c 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 850
diff changeset
1016 if (strcmp (fle->file, ".") == 0 || strcmp (fle->file, "..") == 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1017 {
598
fa0838b22b14 2004-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 582
diff changeset
1018 gftp_file_destroy (fle, 0);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1019 continue;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1020 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1021
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1022 if (dirhash &&
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1023 (newsize = g_hash_table_lookup (dirhash, fle->file)) != NULL)
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1024 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1025 fle->exists_other_side = 1;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1026 fle->startsize = *newsize;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1027 }
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1028 else
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1029 fle->exists_other_side = 0;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1030
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1031 if (transfer->toreq && fle->destfile == NULL)
555
7f54d0c0edbc 2004-9-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 547
diff changeset
1032 fle->destfile = gftp_build_path (transfer->toreq,
7f54d0c0edbc 2004-9-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 547
diff changeset
1033 transfer->toreq->directory,
245
41af60bc1f88 2003-8-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 244
diff changeset
1034 fle->file, NULL);
41af60bc1f88 2003-8-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 244
diff changeset
1035
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1036 if (transfer->fromreq->directory != NULL &&
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1037 *transfer->fromreq->directory != '\0' &&
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1038 *fle->file != '/')
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1039 {
555
7f54d0c0edbc 2004-9-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 547
diff changeset
1040 newname = gftp_build_path (transfer->fromreq,
7f54d0c0edbc 2004-9-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 547
diff changeset
1041 transfer->fromreq->directory,
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1042 fle->file, NULL);
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1043
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1044 g_free (fle->file);
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1045 fle->file = newname;
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1046 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1047
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1048 templist = g_list_append (templist, fle);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1049
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1050 fle = g_malloc0 (sizeof (*fle));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1051 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1052 gftp_end_transfer (transfer->fromreq);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1053
598
fa0838b22b14 2004-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 582
diff changeset
1054 gftp_file_destroy (fle, 1);
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1055 gftp_destroy_dir_hash (dirhash);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1056
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1057 return (templist);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1058 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1059
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1060
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1061 static void
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1062 _cleanup_get_all_subdirs (gftp_transfer * transfer, char *oldfromdir,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1063 char *oldtodir,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1064 void (*update_func) (gftp_transfer * transfer))
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1065 {
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1066 if (update_func != NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1067 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1068 transfer->numfiles = transfer->numdirs = -1;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1069 update_func (transfer);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1070 }
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1071
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1072 if (oldfromdir != NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1073 g_free (oldfromdir);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1074
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1075 if (oldtodir != NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1076 g_free (oldtodir);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1077 }
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1078
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1079
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1080 static GList *
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1081 _setup_current_directory_transfer (gftp_transfer * transfer, int *ret)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1082 {
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1083 GHashTable * dirhash;
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1084 char *pos, *newname;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1085 gftp_file * curfle;
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1086 GList * lastlist;
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 512
diff changeset
1087 off_t *newsize;
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1088
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1089 *ret = 0;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1090 if (transfer->toreq != NULL)
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1091 {
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1092 dirhash = gftp_gen_dir_hash (transfer->toreq, ret);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1093 if (*ret == GFTP_EFATAL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1094 return (NULL);
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1095 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1096 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1097 dirhash = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1098
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1099 for (lastlist = transfer->files; ; lastlist = lastlist->next)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1100 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1101 curfle = lastlist->data;
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1102
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1103 if ((pos = strrchr (curfle->file, '/')) != NULL)
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1104 pos++;
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1105 else
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1106 pos = curfle->file;
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1107
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1108 if (dirhash != NULL &&
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1109 (newsize = g_hash_table_lookup (dirhash, pos)) != NULL)
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1110 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1111 curfle->exists_other_side = 1;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1112 curfle->startsize = *newsize;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1113 }
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1114 else
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1115 curfle->exists_other_side = 0;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1116
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1117 if (curfle->size < 0 && GFTP_IS_CONNECTED (transfer->fromreq))
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1118 {
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1119 curfle->size = gftp_get_file_size (transfer->fromreq, curfle->file);
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1120 if (curfle->size == GFTP_EFATAL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1121 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1122 gftp_destroy_dir_hash (dirhash);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1123 *ret = curfle->size;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1124 return (NULL);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1125 }
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1126 }
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1127
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1128 if (transfer->toreq && curfle->destfile == NULL)
555
7f54d0c0edbc 2004-9-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 547
diff changeset
1129 curfle->destfile = gftp_build_path (transfer->toreq,
7f54d0c0edbc 2004-9-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 547
diff changeset
1130 transfer->toreq->directory,
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1131 curfle->file, NULL);
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1132
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1133 if (transfer->fromreq->directory != NULL &&
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1134 *transfer->fromreq->directory != '\0' && *curfle->file != '/')
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1135 {
555
7f54d0c0edbc 2004-9-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 547
diff changeset
1136 newname = gftp_build_path (transfer->fromreq,
7f54d0c0edbc 2004-9-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 547
diff changeset
1137 transfer->fromreq->directory,
381
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1138 curfle->file, NULL);
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1139 g_free (curfle->file);
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1140 curfle->file = newname;
1c86bcb0b232 2003-2-1 Brian Masney <masneyb@gftp.org>
masneyb
parents: 377
diff changeset
1141 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1142
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1143 if (lastlist->next == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1144 break;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1145 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1146
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1147 gftp_destroy_dir_hash (dirhash);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1148
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1149 return (lastlist);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1150 }
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1151
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1152
852
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1153 static int
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1154 _lookup_curfle_in_device_hash (gftp_request * request, gftp_file * curfle,
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1155 GHashTable * device_hash)
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1156 {
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1157 GHashTable * inode_hash;
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1158
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1159 if (curfle->st_dev == 0 || curfle->st_ino == 0)
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1160 return (0);
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1161
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1162 if ((inode_hash = g_hash_table_lookup (device_hash,
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1163 GUINT_TO_POINTER ((guint) curfle->st_dev))) != NULL)
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1164 {
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1165 if (g_hash_table_lookup (inode_hash,
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1166 GUINT_TO_POINTER ((guint) curfle->st_ino)))
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1167 {
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1168 request->logging_function (gftp_logging_error, request,
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1169 _("Found recursive symbolic link %s\n"),
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1170 curfle->file);
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1171 return (1);
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1172 }
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1173
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1174 g_hash_table_insert (inode_hash, GUINT_TO_POINTER ((guint) curfle->st_ino),
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1175 GUINT_TO_POINTER (1));
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1176 return (0);
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1177 }
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1178 else
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1179 {
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1180 inode_hash = g_hash_table_new (uint_hash_function, uint_hash_compare);
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1181 g_hash_table_insert (inode_hash, GUINT_TO_POINTER ((guint) curfle->st_ino),
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1182 GUINT_TO_POINTER (1));
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1183 g_hash_table_insert (device_hash, GUINT_TO_POINTER ((guint) curfle->st_dev),
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1184 inode_hash);
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1185 return (0);
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1186 }
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1187
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1188 }
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1189
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1190
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1191 static void
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1192 _free_inode_hash (gpointer key, gpointer value, gpointer user_data)
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1193 {
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1194 g_hash_table_destroy (value);
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1195 }
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1196
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1197
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1198 static void
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1199 _free_device_hash (GHashTable * device_hash)
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1200 {
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1201 g_hash_table_foreach (device_hash, _free_inode_hash, NULL);
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1202 g_hash_table_destroy (device_hash);
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1203 }
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1204
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1205
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1206 int
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1207 gftp_get_all_subdirs (gftp_transfer * transfer,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1208 void (*update_func) (gftp_transfer * transfer))
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1209 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1210 GList * templist, * lastlist;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1211 char *oldfromdir, *oldtodir;
852
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1212 GHashTable * device_hash;
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1213 gftp_file * curfle;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1214 off_t linksize;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1215 mode_t st_mode;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1216 int ret;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1217
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1218 g_return_val_if_fail (transfer != NULL, GFTP_EFATAL);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1219 g_return_val_if_fail (transfer->fromreq != NULL, GFTP_EFATAL);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1220 g_return_val_if_fail (transfer->files != NULL, GFTP_EFATAL);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1221
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1222 if (transfer->files == NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1223 return (0);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1224
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1225 ret = 0;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1226 lastlist = _setup_current_directory_transfer (transfer, &ret);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1227 if (lastlist == NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1228 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1229
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1230 oldfromdir = oldtodir = NULL;
852
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1231 device_hash = g_hash_table_new (uint_hash_function, uint_hash_compare);
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1232
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1233 for (templist = transfer->files; templist != NULL; templist = templist->next)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1234 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1235 curfle = templist->data;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1236
852
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1237 if (_lookup_curfle_in_device_hash (transfer->fromreq, curfle,
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1238 device_hash))
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1239 continue;
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1240
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1241 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
1242 {
520
e67a52327b24 2004-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 518
diff changeset
1243 st_mode = 0;
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1244 linksize = 0;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1245 ret = gftp_stat_filename (transfer->fromreq, curfle->file, &st_mode,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1246 &linksize);
855
30eaf54a63f7 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 852
diff changeset
1247 if (ret == GFTP_EFATAL)
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1248 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1249 _cleanup_get_all_subdirs (transfer, oldfromdir, oldtodir,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1250 update_func);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1251 return (ret);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1252 }
855
30eaf54a63f7 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 852
diff changeset
1253 else if (ret == 0)
30eaf54a63f7 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 852
diff changeset
1254 {
30eaf54a63f7 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 852
diff changeset
1255 if (S_ISDIR (st_mode))
30eaf54a63f7 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 852
diff changeset
1256 curfle->st_mode = st_mode;
30eaf54a63f7 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 852
diff changeset
1257 else
30eaf54a63f7 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 852
diff changeset
1258 curfle->size = linksize;
30eaf54a63f7 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 852
diff changeset
1259 }
500
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1260 }
ba50a7085d93 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 499
diff changeset
1261
826
92ba2b1e144a 2006-10-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 821
diff changeset
1262 if (!S_ISDIR (curfle->st_mode))
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1263 {
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1264 transfer->numfiles++;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1265 continue;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1266 }
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1267
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1268 /* Got a directory... */
826
92ba2b1e144a 2006-10-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 821
diff changeset
1269 transfer->numdirs++;
92ba2b1e144a 2006-10-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 821
diff changeset
1270
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1271 if (oldfromdir == NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1272 oldfromdir = g_strdup (transfer->fromreq->directory);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1273
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1274 ret = gftp_set_directory (transfer->fromreq, curfle->file);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1275 if (ret < 0)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1276 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1277 _cleanup_get_all_subdirs (transfer, oldfromdir, oldtodir,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1278 update_func);
852
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1279 _free_device_hash (device_hash);
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1280 return (ret);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1281 }
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1282
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1283 if (transfer->toreq != NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1284 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1285 if (oldtodir == NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1286 oldtodir = g_strdup (transfer->toreq->directory);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1287
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1288 if (curfle->exists_other_side)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1289 {
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1290 ret = gftp_set_directory (transfer->toreq, curfle->destfile);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1291 if (ret == GFTP_EFATAL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1292 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1293 _cleanup_get_all_subdirs (transfer, oldfromdir, oldtodir,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1294 update_func);
852
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1295 _free_device_hash (device_hash);
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1296 return (ret);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1297 }
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1298 }
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1299 else
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1300 {
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1301 if (transfer->toreq->directory != NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1302 g_free (transfer->toreq->directory);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1303
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1304 transfer->toreq->directory = g_strdup (curfle->destfile);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1305 }
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1306 }
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1307
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1308 ret = 0;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1309 lastlist->next = gftp_get_dir_listing (transfer,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1310 curfle->exists_other_side, &ret);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1311 if (ret < 0)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1312 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1313 _cleanup_get_all_subdirs (transfer, oldfromdir, oldtodir,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1314 update_func);
852
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1315 _free_device_hash (device_hash);
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1316 return (ret);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1317 }
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1318
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1319 if (lastlist->next != NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1320 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1321 lastlist->next->prev = lastlist;
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1322 for (; lastlist->next != NULL; lastlist = lastlist->next);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1323 }
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1324
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1325 if (update_func != NULL)
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1326 update_func (transfer);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1327 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1328
852
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1329 _free_device_hash (device_hash);
5e3005923374 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 851
diff changeset
1330
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1331 if (oldfromdir != NULL)
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1332 {
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1333 ret = gftp_set_directory (transfer->fromreq, oldfromdir);
855
30eaf54a63f7 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 852
diff changeset
1334 if (ret == GFTP_EFATAL)
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1335 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1336 _cleanup_get_all_subdirs (transfer, oldfromdir, oldtodir,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1337 update_func);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1338 return (ret);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1339 }
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1340 }
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1341
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1342 if (oldtodir != NULL)
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1343 {
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1344 ret = gftp_set_directory (transfer->toreq, oldtodir);
855
30eaf54a63f7 2006-11-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 852
diff changeset
1345 if (ret == GFTP_EFATAL)
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1346 {
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1347 _cleanup_get_all_subdirs (transfer, oldfromdir, oldtodir,
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1348 update_func);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1349 return (ret);
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1350 }
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1351 }
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1352
787
3751478bb260 2006-7-27 Brian Masney <masneyb@gftp.org>
masneyb
parents: 776
diff changeset
1353 _cleanup_get_all_subdirs (transfer, oldfromdir, oldtodir, update_func);
509
b6ce74de1cd9 2004-7-24 Brian Masney <masneyb@gftp.org>
masneyb
parents: 504
diff changeset
1354
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1355 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1356 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1357
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1358
177
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
1359 int
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1360 gftp_set_config_options (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1361 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 56
diff changeset
1362 if (request->set_config_options != NULL)
177
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
1363 return (request->set_config_options (request));
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
1364 else
aec4b4541d3a 2003-6-9 Brian Masney <masneyb@gftp.org>
masneyb
parents: 173
diff changeset
1365 return (0);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1366 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1367
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1368
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1369 void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1370 print_file_list (GList * list)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1371 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1372 gftp_file * tempfle;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1373 GList * templist;
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1374 char *attribs;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1375
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1376 printf ("--START OF FILE LISTING - TOP TO BOTTOM--\n");
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1377 for (templist = list; ; templist = templist->next)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1378 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1379 tempfle = templist->data;
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1380 attribs = gftp_convert_attributes_from_mode_t (tempfle->st_mode);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1381
532
bccfdbfaac00 2004-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 520
diff changeset
1382 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
1383 tempfle->file, tempfle->destfile,
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 512
diff changeset
1384 tempfle->size, tempfle->startsize,
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1385 tempfle->user, tempfle->group, attribs);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1386
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1387 g_free (attribs);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1388 if (templist->next == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1389 break;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1390 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1391
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1392 printf ("--START OF FILE LISTING - BOTTOM TO TOP--\n");
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1393 for (; ; templist = templist->prev)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1394 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1395 tempfle = templist->data;
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1396 attribs = gftp_convert_attributes_from_mode_t (tempfle->st_mode);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1397
532
bccfdbfaac00 2004-8-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 520
diff changeset
1398 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
1399 tempfle->file, tempfle->destfile,
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 512
diff changeset
1400 tempfle->size, tempfle->startsize,
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1401 tempfle->user, tempfle->group, attribs);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1402
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1403 g_free (attribs);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1404 if (templist == list)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1405 break;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1406 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1407 printf ("--END OF FILE LISTING--\n");
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1408 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
1409
41
4bcfaf6307b5 2002-10-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 40
diff changeset
1410
201
0098dae654a5 2003-6-25 Brian Masney <masneyb@gftp.org>
masneyb
parents: 199
diff changeset
1411 void
63
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1412 gftp_swap_socks (gftp_request * dest, gftp_request * source)
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1413 {
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1414 g_return_if_fail (dest != NULL);
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1415 g_return_if_fail (source != NULL);
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1416 g_return_if_fail (dest->protonum == source->protonum);
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1417
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1418 dest->datafd = source->datafd;
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1419 dest->cached = 0;
397
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
1420 #ifdef USE_SSL
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
1421 dest->ssl = source->ssl;
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
1422 #endif
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
1423
63
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1424 if (!source->always_connected)
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1425 {
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1426 source->datafd = -1;
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1427 source->cached = 1;
397
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
1428 #ifdef USE_SSL
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
1429 source->ssl = NULL;
14ef37b62c20 2004-2-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 381
diff changeset
1430 #endif
63
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1431 }
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1432
516
fbb5a02beddb 2004-7-26 Brian Masney <masneyb@gftp.org>
masneyb
parents: 512
diff changeset
1433 if (dest->swap_socks != NULL)
63
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1434 dest->swap_socks (dest, source);
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1435 }
41b71c4e5076 2002-11-2333 Brian Masney <masneyb@gftp.org>
masneyb
parents: 60
diff changeset
1436
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1437
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1438 void
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1439 gftp_calc_kbs (gftp_transfer * tdata, ssize_t num_read)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1440 {
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1441 /* Needed for systems that size(float) < size(void *) */
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1442 union { intptr_t i; float f; } maxkbs;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1443 unsigned long waitusecs;
220
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1444 double start_difftime;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1445 struct timeval tv;
222
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
1446 int waited;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1447
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1448 gftp_lookup_request_option (tdata->fromreq, "maxkbs", &maxkbs.f);
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1449
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1450 if (g_thread_supported ())
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1451 g_static_mutex_lock (&tdata->statmutex);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1452
220
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1453 gettimeofday (&tv, NULL);
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1454
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1455 tdata->trans_bytes += num_read;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1456 tdata->curtrans += num_read;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1457 tdata->stalled = 0;
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1458
220
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1459 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
1460
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1461 if (start_difftime <= 0)
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1462 tdata->kbs = tdata->trans_bytes / 1024.0;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1463 else
220
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1464 tdata->kbs = tdata->trans_bytes / 1024.0 / start_difftime;
6de9a8280aa4 2003-7-10 Brian Masney <masneyb@gftp.org>
masneyb
parents: 218
diff changeset
1465
222
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
1466 waited = 0;
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1467 if (maxkbs.f > 0 && tdata->kbs > maxkbs.f)
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1468 {
469
2ad1916dc611 2004-5-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 463
diff changeset
1469 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
1470
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1471 if (waitusecs > 0)
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1472 {
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1473 if (g_thread_supported ())
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1474 g_static_mutex_unlock (&tdata->statmutex);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1475
222
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
1476 waited = 1;
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1477 usleep (waitusecs);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1478
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1479 if (g_thread_supported ())
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1480 g_static_mutex_lock (&tdata->statmutex);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1481 }
222
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
1482
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1483 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1484
222
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
1485 if (waited)
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
1486 gettimeofday (&tdata->lasttime, NULL);
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
1487 else
007145d7d975 2003-7-11 Brian Masney <masneyb@gftp.org>
masneyb
parents: 220
diff changeset
1488 memcpy (&tdata->lasttime, &tv, sizeof (tdata->lasttime));
122
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1489
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1490 if (g_thread_supported ())
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1491 g_static_mutex_unlock (&tdata->statmutex);
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1492 }
76e2b58a9440 2003-4-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 107
diff changeset
1493
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1494
764
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1495 static int
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1496 _do_sleep (int sleep_time)
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1497 {
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1498 struct timeval tv;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1499
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1500 tv.tv_sec = sleep_time;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1501 tv.tv_usec = 0;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1502
872
d7cbef177dfc 2007-2-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 865
diff changeset
1503 return (select (0, NULL, NULL, NULL, &tv));
764
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1504 }
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1505
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1506
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1507 int
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1508 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
1509 {
325
0fcc6468a0af 2003-12-4 Brian Masney <masneyb@gftp.org>
masneyb
parents: 313
diff changeset
1510 intptr_t retries, sleep_time;
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1511 gftp_file * tempfle;
498
76c4e4cd108e 2004-7-12 Brian Masney <masneyb@gftp.org>
masneyb
parents: 485
diff changeset
1512 int ret1, ret2;
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1513
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1514 gftp_lookup_request_option (tdata->fromreq, "retries", &retries);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1515 gftp_lookup_request_option (tdata->fromreq, "sleep_time", &sleep_time);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1516
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1517 if (g_thread_supported ())
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1518 g_static_mutex_lock (&tdata->structmutex);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1519
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1520 if (tdata->curfle == NULL)
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1521 {
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1522 if (g_thread_supported ())
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1523 g_static_mutex_unlock (&tdata->structmutex);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1524
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1525 return (GFTP_EFATAL);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1526 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1527
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1528 tempfle = tdata->curfle->data;
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1529
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1530 if (g_thread_supported ())
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1531 g_static_mutex_unlock (&tdata->structmutex);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1532
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1533 gftp_disconnect (tdata->fromreq);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1534 gftp_disconnect (tdata->toreq);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1535
764
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1536 if (tdata->cancel || num_read == GFTP_EFATAL)
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1537 return (GFTP_EFATAL);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1538 else if (num_read >= 0 && !tdata->skip_file)
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1539 return (0);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1540
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1541 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
1542 {
764
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1543 if (retries != 0 &&
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1544 tdata->current_file_retries >= retries)
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1545 {
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1546 tdata->fromreq->logging_function (gftp_logging_error, tdata->fromreq,
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1547 _("Error: Remote site %s disconnected. Max retries reached...giving up\n"),
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1548 tdata->fromreq->hostname != NULL ?
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1549 tdata->fromreq->hostname : tdata->toreq->hostname);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1550 return (GFTP_EFATAL);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1551 }
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1552 else
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1553 {
764
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1554 tdata->fromreq->logging_function (gftp_logging_error, tdata->fromreq,
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1555 _("Error: Remote site %s disconnected. Will reconnect in %d seconds\n"),
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1556 tdata->fromreq->hostname != NULL ?
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1557 tdata->fromreq->hostname : tdata->toreq->hostname,
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1558 sleep_time);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1559 }
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1560 }
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1561
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1562 while (retries == 0 ||
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1563 tdata->current_file_retries <= retries)
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1564 {
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1565 /* Look up the options in case the user changes them... */
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1566 gftp_lookup_request_option (tdata->fromreq, "retries", &retries);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1567 gftp_lookup_request_option (tdata->fromreq, "sleep_time", &sleep_time);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1568
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1569 if (num_read != GFTP_ETIMEDOUT && !tdata->conn_error_no_timeout &&
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1570 !tdata->skip_file)
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1571 _do_sleep (sleep_time);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1572
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1573 tdata->current_file_retries++;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1574
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1575 ret1 = ret2 = 0;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1576 if ((ret1 = gftp_connect (tdata->fromreq)) == 0 &&
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1577 (ret2 = gftp_connect (tdata->toreq)) == 0)
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1578 {
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1579 if (g_thread_supported ())
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1580 g_static_mutex_lock (&tdata->structmutex);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1581
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1582 tdata->resumed_bytes = tdata->resumed_bytes + tdata->trans_bytes - tdata->curresumed - tdata->curtrans;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1583 tdata->trans_bytes = 0;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1584 if (tdata->skip_file)
303
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
1585 {
764
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1586 tdata->total_bytes -= tempfle->size;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1587 tdata->curtrans = 0;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1588
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1589 tdata->curfle = tdata->curfle->next;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1590 tdata->next_file = 1;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1591 tdata->skip_file = 0;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1592 tdata->cancel = 0;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1593 tdata->fromreq->cancel = 0;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1594 tdata->toreq->cancel = 0;
303
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
1595 }
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
1596 else
3b9d5797050f 2003-11-2 Brian Masney <masneyb@gftp.org>
masneyb
parents: 294
diff changeset
1597 {
764
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1598 tempfle->transfer_action = GFTP_TRANS_ACTION_RESUME;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1599 tempfle->startsize = tdata->curtrans + tdata->curresumed;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1600 /* We decrement this here because it will be incremented in
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1601 the loop again */
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1602 tdata->curresumed = 0;
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1603 tdata->current_file_number--; /* Decrement this because it
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1604 will be incremented when we
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1605 continue in the loop */
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1606 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1607
764
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1608 gettimeofday (&tdata->starttime, NULL);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1609
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1610 if (g_thread_supported ())
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1611 g_static_mutex_unlock (&tdata->structmutex);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1612
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1613 return (GFTP_ERETRYABLE);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1614 }
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1615 else if (ret1 == GFTP_EFATAL || ret2 == GFTP_EFATAL)
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1616 {
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1617 gftp_disconnect (tdata->fromreq);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1618 gftp_disconnect (tdata->toreq);
4ed80df6729d 2006-7-7 Brian Masney <masneyb@gftp.org>
masneyb
parents: 677
diff changeset
1619 return (GFTP_EFATAL);
125
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1620 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1621 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1622
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1623 return (0);
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1624 }
b875de05c22d 2003-4-8 Brian Masney <masneyb@gftp.org>
masneyb
parents: 124
diff changeset
1625
182
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1626
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1627 int
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1628 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
1629 {
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1630 int fd;
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1631
227
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
1632 if (mode == 0)
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
1633 fd = open (pathname, flags);
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
1634 else
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
1635 fd = open (pathname, flags, mode);
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
1636
a85a097bbb02 2003-7-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 222
diff changeset
1637 if (fd < 0)
182
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1638 {
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1639 if (request != NULL)
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
1640 request->logging_function (gftp_logging_error, request,
182
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1641 _("Error: Cannot open local file %s: %s\n"),
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1642 pathname, g_strerror (errno));
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1643 return (GFTP_ERETRYABLE);
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1644 }
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1645
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1646 if (fcntl (fd, F_SETFD, 1) == -1)
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1647 {
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1648 if (request != NULL)
186
13ca1defdc75 2003-6-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 185
diff changeset
1649 request->logging_function (gftp_logging_error, request,
182
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1650 _("Error: Cannot set close on exec flag: %s\n"),
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1651 g_strerror (errno));
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1652
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1653 return (-1);
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1654 }
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1655
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1656 return (fd);
33b394ebba68 2003-6-15 Brian Masney <masneyb@gftp.org>
masneyb
parents: 179
diff changeset
1657 }
422
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1658
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1659
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1660 void
792
37bc51131e2d 2006-7-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 787
diff changeset
1661 gftp_setup_startup_directory (gftp_request * request, const char *option_name)
422
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1662 {
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1663 char *startup_directory, *tempstr;
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1664
792
37bc51131e2d 2006-7-29 Brian Masney <masneyb@gftp.org>
masneyb
parents: 787
diff changeset
1665 gftp_lookup_request_option (request, option_name, &startup_directory);
422
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1666
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1667 if (*startup_directory != '\0' &&
555
7f54d0c0edbc 2004-9-17 Brian Masney <masneyb@gftp.org>
masneyb
parents: 547
diff changeset
1668 (tempstr = gftp_expand_path (request, startup_directory)) != NULL)
422
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1669 {
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1670 gftp_set_directory (request, tempstr);
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1671 g_free (tempstr);
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1672 }
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1673 }
38bfc112ab46 2004-3-14 Brian Masney <masneyb@gftp.org>
masneyb
parents: 397
diff changeset
1674
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1675
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1676 char *
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1677 gftp_convert_attributes_from_mode_t (mode_t mode)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1678 {
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1679 char *str;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1680
765
d553d14a2565 2006-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 764
diff changeset
1681 str = g_malloc0 (11UL);
499
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1682
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1683 str[0] = '?';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1684 if (S_ISREG (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1685 str[0] = '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1686
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1687 if (S_ISLNK (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1688 str[0] = 'l';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1689
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1690 if (S_ISBLK (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1691 str[0] = 'b';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1692
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1693 if (S_ISCHR (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1694 str[0] = 'c';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1695
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1696 if (S_ISFIFO (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1697 str[0] = 'p';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1698
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1699 if (S_ISSOCK (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1700 str[0] = 's';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1701
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1702 if (S_ISDIR (mode))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1703 str[0] = 'd';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1704
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1705 str[1] = mode & S_IRUSR ? 'r' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1706 str[2] = mode & S_IWUSR ? 'w' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1707
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1708 if ((mode & S_ISUID) && (mode & S_IXUSR))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1709 str[3] = 's';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1710 else if (mode & S_ISUID)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1711 str[3] = 'S';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1712 else if (mode & S_IXUSR)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1713 str[3] = 'x';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1714 else
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1715 str[3] = '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1716
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1717 str[4] = mode & S_IRGRP ? 'r' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1718 str[5] = mode & S_IWGRP ? 'w' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1719
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1720 if ((mode & S_ISGID) && (mode & S_IXGRP))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1721 str[6] = 's';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1722 else if (mode & S_ISGID)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1723 str[6] = 'S';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1724 else if (mode & S_IXGRP)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1725 str[6] = 'x';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1726 else
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1727 str[6] = '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1728
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1729 str[7] = mode & S_IROTH ? 'r' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1730 str[8] = mode & S_IWOTH ? 'w' : '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1731
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1732 if ((mode & S_ISVTX) && (mode & S_IXOTH))
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1733 str[9] = 't';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1734 else if (mode & S_ISVTX)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1735 str[9] = 'T';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1736 else if (mode & S_IXOTH)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1737 str[9] = 'x';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1738 else
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1739 str[9] = '-';
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1740
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1741 return (str);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1742 }
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1743
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1744
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1745 mode_t
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1746 gftp_convert_attributes_to_mode_t (char *attribs)
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1747 {
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1748 mode_t mode;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1749
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1750 if (attribs[0] == 'd')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1751 mode = S_IFDIR;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1752 else if (attribs[0] == 'l')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1753 mode = S_IFLNK;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1754 else if (attribs[0] == 's')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1755 mode = S_IFSOCK;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1756 else if (attribs[0] == 'b')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1757 mode = S_IFBLK;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1758 else if (attribs[0] == 'c')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1759 mode = S_IFCHR;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1760 else
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1761 mode = S_IFREG;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1762
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1763 if (attribs[1] == 'r')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1764 mode |= S_IRUSR;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1765 if (attribs[2] == 'w')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1766 mode |= S_IWUSR;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1767 if (attribs[3] == 'x' || attribs[3] == 's')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1768 mode |= S_IXUSR;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1769 if (attribs[3] == 's' || attribs[3] == 'S')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1770 mode |= S_ISUID;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1771
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1772 if (attribs[4] == 'r')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1773 mode |= S_IRGRP;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1774 if (attribs[5] == 'w')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1775 mode |= S_IWGRP;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1776 if (attribs[6] == 'x' ||
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1777 attribs[6] == 's')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1778 mode |= S_IXGRP;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1779 if (attribs[6] == 's' || attribs[6] == 'S')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1780 mode |= S_ISGID;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1781
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1782 if (attribs[7] == 'r')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1783 mode |= S_IROTH;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1784 if (attribs[8] == 'w')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1785 mode |= S_IWOTH;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1786 if (attribs[9] == 'x' ||
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1787 attribs[9] == 's')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1788 mode |= S_IXOTH;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1789 if (attribs[9] == 't' || attribs[9] == 'T')
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1790 mode |= S_ISVTX;
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1791
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1792 return (mode);
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1793 }
39e9945288ea 2004-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 498
diff changeset
1794
542
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1795
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1796 unsigned int
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1797 gftp_protocol_default_port (gftp_request * request)
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1798 {
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1799 struct servent serv_struct;
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1800
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1801 if (r_getservbyname (gftp_protocols[request->protonum].url_prefix, "tcp",
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1802 &serv_struct, NULL) == NULL)
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1803 return (gftp_protocols[request->protonum].default_port);
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1804 else
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1805 return (ntohs (serv_struct.s_port));
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1806 }
fd9ce7797984 2004-8-21 Brian Masney <masneyb@gftp.org>
masneyb
parents: 532
diff changeset
1807