annotate lib/fsp.c @ 765:d553d14a2565

2006-7-13 Brian Masney <masneyb@gftp.org> * lib/cache.c lib/config_file.c lib/fsp.c lib/ftps.c lib/gftp.h lib/local.c lib/misc.c lib/options.h lib/protocols.c lib/rfc2068.c lib/rfc959.c lib/sshv2.c - started to add some annotations for splint. Fixed a few minor warnings from splint.
author masneyb
date Fri, 14 Jul 2006 00:34:11 +0000
parents 2d3ea4db3106
children 3751478bb260
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
661
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
1 /*****************************************************************************/
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
2 /* fsp.c - functions interfacing with FSP v2 protocol library */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
3 /* Copyright (C) 1998-2003 Brian Masney <masneyb@gftp.org> */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
4 /* Copyright (C) 2004 Radim Kolar <hsn@netmag.cz> */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
5 /* */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
6 /* This program is free software; you can redistribute it and/or modify */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
7 /* it under the terms of the GNU General Public License as published by */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
8 /* the Free Software Foundation; either version 2 of the License, or */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
9 /* (at your option) any later version. */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
10 /* */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
11 /* This program is distributed in the hope that it will be useful, */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
12 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
13 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
14 /* GNU General Public License for more details. */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
15 /* */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
16 /* You should have received a copy of the GNU General Public License */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
17 /* along with this program; if not, write to the Free Software */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
18 /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
19 /*****************************************************************************/
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
20
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
21 #include "gftp.h"
765
d553d14a2565 2006-7-13 Brian Masney <masneyb@gftp.org>
masneyb
parents: 663
diff changeset
22 static const char cvsid[] = "$Id$";
663
2d3ea4db3106 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 661
diff changeset
23
661
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
24 #define FSP_USE_SHAREMEM_AND_SEMOP 1
663
2d3ea4db3106 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 661
diff changeset
25 #include "fsplib/fsplib.h"
2d3ea4db3106 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents: 661
diff changeset
26 #include "fsplib/lock.h"
661
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
27
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
28 typedef struct fsp_protocol_data_tag
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
29 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
30 FSP_SESSION *fsp;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
31 FSP_DIR *dir;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
32 FSP_FILE *file;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
33 } fsp_protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
34
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
35 static void
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
36 fsp_destroy (gftp_request * request)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
37 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
38 g_return_if_fail (request != NULL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
39 g_return_if_fail (request->protonum == GFTP_FSP_NUM);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
40 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
41
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
42 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
43 fsp_connect (gftp_request * request)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
44 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
45 fsp_protocol_data * lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
46 intptr_t network_timeout;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
47
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
48 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
49 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
50
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
51 if(! request->port)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
52 request->port = gftp_protocol_default_port (request);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
53
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
54 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
55 lpd->fsp=fsp_open_session(request->hostname, request->port, request->password);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
56
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
57 if(lpd->fsp == NULL)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
58 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
59 /* set up network timeout */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
60 gftp_lookup_request_option (request, "network_timeout", &network_timeout);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
61 lpd->fsp->timeout=1000*network_timeout;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
62
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
63 if (!request->directory)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
64 request->directory = g_strdup ("/");
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
65
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
66 request->datafd = lpd->fsp->fd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
67 return (0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
68 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
69
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
70 static void
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
71 fsp_disconnect (gftp_request * request)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
72 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
73 fsp_protocol_data * lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
74
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
75 g_return_if_fail (request != NULL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
76 g_return_if_fail (request->protonum == GFTP_FSP_NUM);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
77
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
78 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
79 g_return_if_fail (lpd != NULL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
80
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
81 if(lpd->file)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
82 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
83 fsp_fclose(lpd->file);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
84 lpd->file=NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
85 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
86 fsp_close_session(lpd->fsp);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
87 lpd->fsp=NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
88 request->datafd = -1;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
89 if(lpd->dir)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
90 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
91 fsp_closedir(lpd->dir);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
92 lpd->dir=NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
93 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
94 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
95
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
96 static off_t
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
97 fsp_get_file (gftp_request * request, const char *filename, int fd,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
98 off_t startsize)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
99 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
100 fsp_protocol_data * lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
101 struct stat sb;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
102
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
103 g_return_val_if_fail (request != NULL,GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
104 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM,GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
105 g_return_val_if_fail (filename != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
106
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
107 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
108 g_return_val_if_fail (lpd != NULL,GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
109 g_return_val_if_fail (lpd->fsp != NULL,GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
110
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
111 /* CHECK: close prev. opened file, is this needed? */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
112 if(lpd->file != NULL)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
113 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
114 fsp_fclose(lpd->file);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
115 lpd->file=NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
116 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
117
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
118 if(fsp_stat(lpd->fsp,filename,&sb))
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
119 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
120 if(!S_ISREG(sb.st_mode))
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
121 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
122 lpd->file=fsp_fopen(lpd->fsp,filename,"rb");
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
123
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
124 if (fsp_fseek (lpd->file, startsize, SEEK_SET) == -1)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
125 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
126 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
127 _("Error: Cannot seek on file %s: %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
128 filename, g_strerror (errno));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
129 gftp_disconnect (request);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
130 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
131 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
132
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
133 return (sb.st_size);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
134 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
135
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
136 static ssize_t fsp_read_function(gftp_request *request, void *buf, size_t size,int fd)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
137 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
138 fsp_protocol_data * lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
139
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
140 g_return_val_if_fail (request != NULL, -1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
141 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, -1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
142 g_return_val_if_fail (buf != NULL, -1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
143
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
144 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
145 g_return_val_if_fail (lpd != NULL, -1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
146 g_return_val_if_fail (lpd->file != NULL, -1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
147
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
148 return fsp_fread(buf,1,size,lpd->file);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
149 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
150
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
151 static ssize_t fsp_write_function(gftp_request *request, const char *buf, size_t size,int fd)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
152 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
153 fsp_protocol_data * lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
154
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
155 g_return_val_if_fail (request != NULL, -1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
156 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, -1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
157 g_return_val_if_fail (buf != NULL, -1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
158
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
159 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
160 g_return_val_if_fail (lpd != NULL, -1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
161 g_return_val_if_fail (lpd->file != NULL, -1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
162
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
163 return fsp_fwrite(buf,1,size,lpd->file);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
164 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
165
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
166 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
167 fsp_put_file (gftp_request * request, const char *filename, int fd,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
168 off_t startsize, off_t totalsize)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
169 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
170 fsp_protocol_data * lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
171
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
172 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
173 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
174 g_return_val_if_fail (filename != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
175
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
176 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
177 g_return_val_if_fail (lpd != NULL,GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
178 g_return_val_if_fail (lpd->fsp != NULL,GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
179
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
180 if(lpd->file != NULL)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
181 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
182 fsp_fclose(lpd->file);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
183 lpd->file=NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
184 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
185
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
186 if(fsp_canupload(lpd->fsp,filename))
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
187 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
188 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
189 _("Error: Cannot upload file %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
190 filename );
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
191 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
192 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
193
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
194
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
195 lpd->file=fsp_fopen(lpd->fsp,filename, "wb");
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
196 if(lpd->file == NULL)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
197 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
198 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
199 _("Error: Cannot write to file %s: %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
200 filename, g_strerror (errno));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
201 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
202 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
203
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
204 if (fsp_fseek (lpd->file, startsize, SEEK_SET) == -1)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
205 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
206 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
207 _("Error: Cannot seek on file %s: %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
208 filename, g_strerror (errno));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
209 gftp_disconnect (request);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
210 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
211 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
212 return (0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
213 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
214
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
215 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
216 fsp_end_transfer (gftp_request * request)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
217 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
218 fsp_protocol_data * lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
219
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
220 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
221 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
222
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
223 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
224 g_return_val_if_fail (lpd->fsp != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
225
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
226 if (lpd->dir)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
227 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
228 fsp_closedir (lpd->dir);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
229 lpd->dir = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
230 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
231 if (lpd ->file)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
232 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
233 if(fsp_fclose(lpd->file))
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
234 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
235 lpd -> file = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
236 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
237 _("Error: Error closing file: %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
238 g_strerror (errno));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
239 return GFTP_EFATAL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
240 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
241 lpd->file=NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
242 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
243
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
244 return (0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
245 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
246
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
247 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
248 fsp_abort_transfer (gftp_request * request)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
249 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
250 fsp_protocol_data * lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
251
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
252 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
253 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
254
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
255 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
256 g_return_val_if_fail (lpd->fsp != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
257
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
258 if (lpd->dir)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
259 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
260 fsp_closedir (lpd->dir);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
261 lpd->dir = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
262 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
263 if (lpd ->file)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
264 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
265 if(lpd->file->writing && lpd->file->pos>0)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
266 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
267 /* need to cancel upload in progress */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
268 lpd->file->writing=0;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
269 fsp_install(lpd->fsp,"",0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
270 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
271 /* we can safely ignore file close error on abort */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
272 fsp_fclose(lpd->file);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
273 lpd->file=NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
274 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
275
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
276 return (0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
277 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
278
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
279 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
280 fsp_stat_filename (gftp_request * request, const char *filename,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
281 mode_t * mode)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
282 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
283 struct stat st;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
284 fsp_protocol_data * lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
285
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
286 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
287 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
288 g_return_val_if_fail (filename != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
289
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
290 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
291 g_return_val_if_fail (lpd->fsp != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
292
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
293 if (fsp_stat (lpd->fsp,filename, &st) != 0)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
294 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
295
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
296 *mode = st.st_mode;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
297 return (0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
298 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
299
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
300 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
301 fsp_get_next_file (gftp_request * request, gftp_file * fle, int fd)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
302 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
303 fsp_protocol_data *lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
304 struct FSP_RDENTRY dirent;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
305 struct FSP_RDENTRY *result;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
306 char *symlink;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
307
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
308 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
309 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
310 g_return_val_if_fail (fle != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
311
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
312 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
313
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
314 g_return_val_if_fail (lpd != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
315
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
316 memset (fle, 0, sizeof (*fle));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
317
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
318 result=&dirent;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
319
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
320 if ( fsp_readdir_native (lpd->dir,&dirent,&result))
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
321 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
322 fsp_closedir (lpd->dir);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
323 lpd->dir = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
324 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
325 _("Corrupted file listing from FSP server %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
326 request->directory );
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
327 return (GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
328 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
329
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
330 if ( result == NULL)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
331 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
332 fsp_closedir (lpd->dir);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
333 lpd->dir = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
334 return 0;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
335 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
336
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
337 fle->user = g_strdup (_("unknown"));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
338 fle->group = g_strdup (_("unknown"));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
339
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
340 /* turn FSP symlink into normal file */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
341 symlink=strchr(dirent.name,'\n');
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
342 if (symlink)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
343 *symlink='\0';
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
344 fle->file = g_strdup (dirent.name);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
345 if (dirent.type==FSP_RDTYPE_DIR)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
346 fle->st_mode = S_IFDIR | 0755;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
347 else
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
348 fle->st_mode = S_IFREG | 0644;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
349 fle->datetime = dirent.lastmod;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
350 fle->size = dirent.size;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
351 return (1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
352 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
353
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
354 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
355 fsp_list_files (gftp_request * request)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
356 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
357 fsp_protocol_data *lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
358
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
359 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
360 g_return_val_if_fail (request->directory != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
361 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
362
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
363 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
364
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
365 g_return_val_if_fail (lpd != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
366
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
367 if (request->directory == NULL)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
368 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
369 request->directory = g_strdup("/");
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
370 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
371
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
372 if ((lpd->dir = fsp_opendir (lpd->fsp,request->directory)) == NULL)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
373 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
374 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
375 _("Could not get FSP directory listing %s: %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
376 request->directory, g_strerror (errno));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
377 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
378 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
379
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
380 return (0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
381 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
382
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
383
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
384 static off_t
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
385 fsp_get_file_size (gftp_request * request, const char *filename)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
386 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
387 struct stat st;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
388 fsp_protocol_data * lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
389
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
390 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
391 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
392 g_return_val_if_fail (filename != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
393
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
394 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
395 g_return_val_if_fail (lpd->fsp != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
396
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
397 if (fsp_stat (lpd->fsp,filename, &st) != 0)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
398 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
399
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
400 return (st.st_size);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
401 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
402
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
403 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
404 fsp_chdir (gftp_request * request, const char *directory)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
405 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
406 fsp_protocol_data *lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
407 char *tempstr, *olddir;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
408
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
409 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
410 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
411 g_return_val_if_fail (directory != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
412
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
413 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
414
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
415 g_return_val_if_fail (lpd != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
416 g_return_val_if_fail (lpd->fsp != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
417
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
418 olddir=NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
419 /* build new directory string */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
420 if (request->directory != directory)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
421 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
422 olddir = request->directory;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
423
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
424 if (*directory != '/' && request->directory != NULL)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
425 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
426 tempstr = g_strconcat (request->directory, "/", directory, NULL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
427 request->directory = gftp_expand_path (request, tempstr);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
428 g_free (tempstr);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
429 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
430 else
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
431 request->directory = gftp_expand_path (request, directory);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
432 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
433
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
434 if (fsp_getpro (lpd->fsp,request->directory,NULL) == 0)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
435 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
436 request->logging_function (gftp_logging_misc, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
437 _("Successfully changed directory to %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
438 directory);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
439
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
440 if (olddir != NULL)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
441 g_free (olddir);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
442 return (0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
443 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
444 else
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
445 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
446 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
447 _("Could not change directory to %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
448 directory);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
449 g_free (request->directory);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
450 request->directory = olddir;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
451 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
452 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
453 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
454
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
455 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
456 fsp_removedir (gftp_request * request, const char *directory)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
457 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
458 fsp_protocol_data *lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
459
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
460 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
461 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
462 g_return_val_if_fail (directory != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
463
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
464 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
465
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
466 g_return_val_if_fail (lpd != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
467 g_return_val_if_fail (lpd->fsp != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
468
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
469 if (fsp_rmdir (lpd->fsp,directory) == 0)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
470 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
471 request->logging_function (gftp_logging_misc, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
472 _("Successfully removed %s\n"), directory);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
473 return (0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
474 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
475 else
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
476 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
477 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
478 _("Error: Could not remove directory %s: %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
479 directory, g_strerror (errno));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
480 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
481 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
482 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
483
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
484
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
485 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
486 fsp_rmfile (gftp_request * request, const char *file)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
487 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
488 fsp_protocol_data *lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
489
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
490 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
491 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
492 g_return_val_if_fail (file != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
493
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
494 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
495 g_return_val_if_fail (lpd != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
496 g_return_val_if_fail (lpd->fsp != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
497
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
498 if (fsp_unlink (lpd->fsp,file) == 0)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
499 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
500 request->logging_function (gftp_logging_misc, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
501 _("Successfully removed %s\n"), file);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
502 return (0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
503 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
504 else
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
505 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
506 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
507 _("Error: Could not remove file %s: %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
508 file, g_strerror (errno));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
509 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
510 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
511 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
512
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
513 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
514 fsp_makedir (gftp_request * request, const char *directory)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
515 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
516 fsp_protocol_data *lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
517
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
518 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
519 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
520 g_return_val_if_fail (directory != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
521
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
522 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
523 g_return_val_if_fail (lpd != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
524 g_return_val_if_fail (lpd->fsp != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
525
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
526 if (fsp_mkdir (lpd->fsp,directory) == 0)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
527 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
528 request->logging_function (gftp_logging_misc, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
529 _("Successfully made directory %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
530 directory);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
531 return (0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
532 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
533 else
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
534 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
535 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
536 _("Error: Could not make directory %s: %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
537 directory, g_strerror (errno));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
538 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
539 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
540 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
541
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
542 static int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
543 fsp_ren (gftp_request * request, const char *oldname,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
544 const char *newname)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
545 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
546 char *newname1,*newname2;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
547 fsp_protocol_data *lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
548
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
549 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
550 g_return_val_if_fail (request->protonum == GFTP_FSP_NUM, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
551 g_return_val_if_fail (oldname != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
552 g_return_val_if_fail (newname != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
553
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
554 lpd = request->protocol_data;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
555 g_return_val_if_fail (lpd != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
556 g_return_val_if_fail (lpd->fsp != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
557
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
558 newname1= g_strconcat (request->directory, "/", oldname, NULL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
559 newname2= g_strconcat (request->directory, "/", newname, NULL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
560
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
561 if (fsp_rename (lpd->fsp,newname1, newname2) == 0)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
562 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
563 request->logging_function (gftp_logging_misc, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
564 _("Successfully renamed %s to %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
565 oldname, newname);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
566 g_free(newname1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
567 g_free(newname2);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
568 return (0);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
569 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
570 else
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
571 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
572 g_free(newname1);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
573 g_free(newname2);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
574
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
575 request->logging_function (gftp_logging_error, request,
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
576 _("Error: Could not rename %s to %s: %s\n"),
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
577 oldname, newname, g_strerror (errno));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
578 return (GFTP_ERETRYABLE);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
579 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
580 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
581
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
582 /* TODO: FSP needs to know file last modification time while starting
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
583 upload. It can not change last mod time of existing files on server.
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
584 */
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
585
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
586 void
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
587 fsp_register_module (void)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
588 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
589 }
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
590
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
591 int
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
592 fsp_init (gftp_request * request)
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
593 {
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
594 fsp_protocol_data *lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
595
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
596 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
597
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
598 request->protonum = GFTP_FSP_NUM;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
599 request->init = fsp_init;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
600 request->copy_param_options = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
601 request->destroy = fsp_destroy;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
602 request->read_function = fsp_read_function;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
603 request->write_function = fsp_write_function;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
604 request->connect = fsp_connect;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
605 request->post_connect = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
606 request->disconnect = fsp_disconnect;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
607 request->get_file = fsp_get_file;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
608 request->put_file = fsp_put_file;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
609 request->transfer_file = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
610 request->get_next_file_chunk = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
611 request->put_next_file_chunk = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
612 request->end_transfer = fsp_end_transfer;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
613 request->abort_transfer = fsp_abort_transfer;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
614 request->stat_filename = fsp_stat_filename;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
615 request->list_files = fsp_list_files;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
616 request->get_next_file = fsp_get_next_file;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
617 request->get_next_dirlist_line = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
618 request->get_file_size = fsp_get_file_size;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
619 request->chdir = fsp_chdir;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
620 request->rmdir = fsp_removedir;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
621 request->rmfile = fsp_rmfile;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
622 request->mkdir = fsp_makedir;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
623 request->rename = fsp_ren;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
624 request->chmod = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
625 request->set_file_time = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
626 request->site = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
627 request->parse_url = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
628 request->set_config_options = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
629 request->swap_socks = NULL;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
630 request->url_prefix = "fsp";
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
631 request->need_hostport = 1;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
632 request->need_username = 0;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
633 request->need_password = 0;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
634 request->use_cache = 1;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
635 request->always_connected = 0;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
636
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
637 lpd = g_malloc0 (sizeof (*lpd));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
638 request->protocol_data = lpd;
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
639
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
640 return (gftp_set_config_options (request));
2e718fba351e 2005-1-16 Brian Masney <masneyb@gftp.org>
masneyb
parents:
diff changeset
641 }