annotate lib/rfc2068.c @ 58:c01d91c10f6c

2002-11-20 Brian Masney <masneyb@gftp.org> * lib/protocols.c lib/gftp.h - added gftp_get_line(), gftp_read(), gftp_write(), gftp_writefmt(), and gftp_set_sockblocking() functions. Added struct_gftp_getline_buffer for gftp_get_line function() * lib/cache.c lib/gftp.h lib/local.c lib/misc.c lib/protocols.c lib/rfc2068.c lib/rfc959.c lib/ssh.c lib/sshv2.c - *_get_file() returns off_t instead of long. *_{get,put}_next_file_chunk returns ssize_t instead of size_t. Added *_set_config_options function to gftp_request structure and protocol files. Use the new network functions documented above. Convert usage of ANSI C IO (FILE *) to standard BSD sockets so that I can use timeouts properly with select * lib/misc.c (ssh_start_login_sequence) - use gftp_set_sockblock(), gftp_read() and gftp_write() functions * lib/protocols.c - move some protocol specific code to the protocol specific files * lib/local.c - log succesful messages to gftp_logging_misc instead of gftp_logging_error * lib/cache.c - log some more error conditions to the user * lib/rfc959.c - added rfc959_getcwd(). In, rfc959_accept_active_connection(), set set socket to blocking mode before calling accept() * src/text/gftk-text.c - If we get no files in gftp_text_ls(), return instead of segfaulting * src/gtk/gftp-gtk.c - expand the port field in the toolbar to be 45 pixels wide * src/text/gftp-text.c src/gtk/misc-gtk.c src/gtk/transfer.c src/gtk/view_dialog.c - changes for conversion of request->{sock,data} from ANSI C IO (FILE *) to standard BSD sockets
author masneyb
date Thu, 21 Nov 2002 00:33:51 +0000
parents e5f6054590b5
children 8a9324fb63a4
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 /* rfc2068.c - General purpose routines for the HTTP protocol */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
3 /* Copyright (C) 1998-2002 Brian Masney <masneyb@gftp.org> */
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: 14
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 typedef struct rfc2068_params_tag
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
24 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
25 unsigned long read_bytes,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
26 max_bytes;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
27 int chunked_transfer : 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
28 } rfc2068_params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
29
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
30
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
31 static char *
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
32 base64_encode (char *str)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
33 {
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
34
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
35 /* The standard to Base64 encoding can be found in RFC2045 */
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
36
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
37 char *newstr, *newpos, *fillpos, *pos;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
38 unsigned char table[64], encode[3];
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
39 int i, num;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
40
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
41 for (i = 0; i < 26; i++)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
42 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
43 table[i] = 'A' + i;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
44 table[i + 26] = 'a' + i;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
45 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
46
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
47 for (i = 0; i < 10; i++)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
48 table[i + 52] = '0' + i;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
49
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
50 table[62] = '+';
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
51 table[63] = '-';
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
52
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
53 num = strlen (str) / 3;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
54 if (strlen (str) % 3 > 0)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
55 num++;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
56 newstr = g_malloc (num * 4 + 1);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
57 newstr[num * 4] = '\0';
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
58 newpos = newstr;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
59
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
60 pos = str;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
61 while (*pos != '\0')
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
62 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
63 memset (encode, 0, sizeof (encode));
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
64 for (i = 0; i < 3 && *pos != '\0'; i++)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
65 encode[i] = *pos++;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
66
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
67 fillpos = newpos;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
68 *newpos++ = table[encode[0] >> 2];
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
69 *newpos++ = table[(encode[0] & 3) << 4 | encode[1] >> 4];
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
70 *newpos++ = table[(encode[1] & 0xF) << 2 | encode[2] >> 6];
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
71 *newpos++ = table[encode[2] & 0x3F];
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
72 while (i < 3)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
73 fillpos[++i] = '=';
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
74 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
75 return (newstr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
76 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
77
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
78
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
79 static off_t
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
80 rfc2068_read_response (gftp_request * request)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
81 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
82 gftp_getline_buffer * rbuf;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
83 rfc2068_params * params;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
84 char tempstr[255];
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
85
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
86 params = request->protocol_data;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
87 params->max_bytes = 0;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
88
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
89 rbuf = NULL;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
90 if (gftp_get_line (request, &rbuf, tempstr, sizeof (tempstr) - 1,
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
91 request->sockfd) < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
92 return (-1);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
93
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
94 if (request->last_ftp_response)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
95 g_free (request->last_ftp_response);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
96 request->last_ftp_response = g_malloc (strlen (tempstr) + 1);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
97 strcpy (request->last_ftp_response, tempstr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
98
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
99 request->logging_function (gftp_logging_recv, request->user_data, "%s",
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
100 tempstr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
101
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
102 params->chunked_transfer = 0;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
103 while (1)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
104 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
105 /* Read rest of proxy header */
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
106 if (gftp_get_line (request, &rbuf, tempstr, sizeof (tempstr) - 1,
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
107 request->sockfd) < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
108 return (-1);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
109
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
110 if (*tempstr == '\r' || *tempstr == '\n')
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
111 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
112
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
113 request->logging_function (gftp_logging_recv, request->user_data, "%s",
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
114 tempstr);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
115
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
116 if (strncmp (tempstr, "Content-Length:", 15) == 0)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
117 params->max_bytes = strtol (tempstr + 16, NULL, 10);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
118 if (strncmp (tempstr, "Transfer-Encoding: chunked", 26) == 0)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
119 params->chunked_transfer = 1;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
120 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
121
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
122 return (params->max_bytes);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
123 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
124
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
125
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
126 static off_t
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
127 rfc2068_send_command (gftp_request * request, const char *command,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
128 const char *extrahdr)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
129 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
130 char *tempstr, *str;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
131 ssize_t ret;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
132
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
133 g_return_val_if_fail (request != NULL, -2);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
134 g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
135 g_return_val_if_fail (command != NULL, -2);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
136
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
137 tempstr = g_strdup_printf ("%sUser-Agent: %s\nHost: %s\n", command,
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
138 version, request->hostname);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
139
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
140 request->logging_function (gftp_logging_send, request->user_data,
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
141 "%s", tempstr);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
142
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
143 ret = gftp_write (request, tempstr, strlen (tempstr), request->sockfd);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
144 g_free (tempstr);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
145
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
146 if (ret < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
147 return (-1);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
148
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
149 if (request->use_proxy && request->proxy_username != NULL &&
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
150 *request->proxy_username != '\0')
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
151 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
152 tempstr = g_strconcat (request->proxy_username, ":",
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
153 request->proxy_password, NULL);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
154 str = base64_encode (tempstr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
155 g_free (tempstr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
156
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
157 request->logging_function (gftp_logging_send, request->user_data,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
158 "Proxy-authorization: Basic xxxx:xxxx\n");
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
159 ret = gftp_writefmt (request, request->sockfd,
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
160 "Proxy-authorization: Basic %s\n", str);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
161 g_free (str);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
162 if (ret < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
163 return (-2);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
164 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
165
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
166 if (request->username != NULL && *request->username != '\0')
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
167 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
168 tempstr = g_strconcat (request->username, ":", request->password, NULL);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
169 str = base64_encode (tempstr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
170 g_free (tempstr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
171
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
172 request->logging_function (gftp_logging_send, request->user_data,
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
173 "Authorization: Basic xxxx\n");
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
174 ret = gftp_writefmt (request, request->sockfd,
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
175 "Authorization: Basic %s\n", str);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
176 g_free (str);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
177 if (ret < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
178 return (-2);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
179 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
180
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
181 if (extrahdr)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
182 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
183 request->logging_function (gftp_logging_send, request->user_data, "%s",
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
184 extrahdr);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
185 if (gftp_write (request, extrahdr, strlen (extrahdr), request->sockfd) < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
186 return (-1);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
187 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
188
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
189 if (gftp_write (request, "\n", 1, request->sockfd) < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
190 return (-1);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
191
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
192 return (rfc2068_read_response (request));
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
193 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
194
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
195
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
196 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
197 rfc2068_connect (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
198 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
199 char *service;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
200
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
201 g_return_val_if_fail (request != NULL, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
202 g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
203 g_return_val_if_fail (request->hostname != NULL, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
204
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
205 if (request->sockfd > 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
206 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
207
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
208 service = request->use_proxy && request->proxy_config != NULL &&
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
209 *request->proxy_config != '\0' ? request->proxy_config : "http";
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
210 if ((request->sockfd = gftp_connect_server (request, service)) < 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
211 return (-1);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
212
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
213 if (request->directory && *request->directory == '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
214 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
215 g_free (request->directory);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
216 request->directory = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
217 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
218
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
219 if (!request->directory)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
220 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
221 request->directory = g_malloc (2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
222 strcpy (request->directory, "/");
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
223 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
224
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
225 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
226 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
227
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
228
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
229 static void
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
230 rfc2068_disconnect (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
231 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
232 g_return_if_fail (request != NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
233 g_return_if_fail (request->protonum == GFTP_HTTP_NUM);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
234
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
235 if (request->sockfd > 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
236 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
237 request->logging_function (gftp_logging_misc, request->user_data,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
238 _("Disconnecting from site %s\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
239 request->hostname);
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
240
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
241 if (close (request->sockfd) < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
242 request->logging_function (gftp_logging_error, request->user_data,
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
243 _("Error closing file descriptor: %s\n"),
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
244 g_strerror (errno));
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
245
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
246 request->sockfd = -1;
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
247 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
248 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
249
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
250
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
251 static off_t
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
252 rfc2068_get_file (gftp_request * request, const char *filename, int fd,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
253 off_t startsize)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
254 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
255 char *tempstr, *extrahdr, *pos, *proto;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
256 int restarted;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
257 off_t size;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
258
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
259 g_return_val_if_fail (request != NULL, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
260 g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
261 g_return_val_if_fail (filename != NULL, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
262
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
263 if (fd > 0)
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
264 request->sockfd = fd;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
265
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
266 if (request->sockfd < 0 && rfc2068_connect (request) != 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
267 return (-2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
268
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
269 if (request->proxy_config != NULL && *request->proxy_config != '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
270 proto = request->proxy_config;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
271 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
272 proto = "http";
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
273
7
5551ab2301fe * Fixed a DND crash
masneyb
parents: 1
diff changeset
274 if (request->username == NULL || *request->username == '\0')
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
275 tempstr = g_strconcat ("GET ", proto, "://",
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
276 request->hostname, "/", filename,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
277 use_http11 ? " HTTP/1.1\n" : " HTTP/1.0\n", NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
278 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
279 tempstr = g_strconcat ("GET ", proto, "://",
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
280 request->username, "@", request->hostname, "/", filename,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
281 use_http11 ? " HTTP/1.1\n" : " HTTP/1.0\n", NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
282
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
283 if ((pos = strstr (tempstr, "://")) != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
284 remove_double_slashes (pos + 3);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
285 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
286 remove_double_slashes (tempstr);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
287
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
288 if (!use_http11 || startsize == 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
289 extrahdr = NULL;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
290 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
291 {
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
292 #if defined (_LARGEFILE_SOURCE)
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
293 extrahdr = g_strdup_printf ("Range: bytes=%lld-\n", startsize);
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
294 request->logging_function (gftp_logging_misc, request->user_data,
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
295 _("Starting the file transfer at offset %lld\n"),
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
296 startsize);
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
297 #else
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
298 extrahdr = g_strdup_printf ("Range: bytes=%ld-\n", startsize);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
299 request->logging_function (gftp_logging_misc, request->user_data,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
300 _("Starting the file transfer at offset %ld\n"),
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
301 startsize);
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
302 #endif
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 size = rfc2068_send_command (request, tempstr, extrahdr);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
306 g_free (tempstr);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
307 if (extrahdr)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
308 g_free (extrahdr);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
309 if (size < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
310 return (-1);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
311
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
312 restarted = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
313 if (strlen (request->last_ftp_response) > 9
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
314 && strncmp (request->last_ftp_response + 9, "206", 3) == 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
315 restarted = 1;
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
316 else if (strlen (request->last_ftp_response) < 9 ||
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
317 strncmp (request->last_ftp_response + 9, "200", 3) != 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
318 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
319 request->logging_function (gftp_logging_error, request->user_data,
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
320 _("Cannot retrieve file %s\n"), filename);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
321 return (-2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
322 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
323
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
324 return (restarted ? size + startsize : size);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
325 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
326
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
327
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
328 static ssize_t
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
329 rfc2068_get_next_file_chunk (gftp_request * request, char *buf, size_t size)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
330 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
331 rfc2068_params * params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
332 size_t len;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
333
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
334 g_return_val_if_fail (request != NULL, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
335 g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
336
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
337 params = request->protocol_data;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
338 if (params->max_bytes == params->read_bytes)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
339 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
340
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
341 if (params->max_bytes > 0 &&
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
342 size + params->read_bytes > params->max_bytes)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
343 size = params->max_bytes - params->read_bytes;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
344
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
345 if ((len = gftp_read (request, buf, size, request->sockfd)) < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
346 return (-2);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
347
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
348 return (len);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
349 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
350
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
351
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
352 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
353 rfc2068_end_transfer (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
354 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
355 rfc2068_params * params;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
356
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
357 g_return_val_if_fail (request != NULL, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
358 g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
359
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
360 if (request->sockfd < 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
361 return (-2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
362
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
363 if (close (request->sockfd) < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
364 request->logging_function (gftp_logging_error, request->user_data,
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
365 _("Error closing file descriptor: %s\n"),
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
366 g_strerror (errno));
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
367 request->sockfd = -1;
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
368
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
369 params = request->protocol_data;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
370 params->max_bytes = 0;
14
83090328581e * More largefile support. Hopefully all that is left is the configure stuff
masneyb
parents: 7
diff changeset
371
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
372 request->logging_function (gftp_logging_misc, request->user_data,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
373 _("Finished retrieving data\n"));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
374 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
375 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
376
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
377
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
378 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
379 rfc2068_list_files (gftp_request * request)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
380 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
381 char *tempstr, *pos, *proto;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
382 rfc2068_params *params;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
383 off_t ret;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
384
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
385 g_return_val_if_fail (request != NULL, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
386 g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
387
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
388 params = request->protocol_data;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
389 if (request->sockfd < 0 && rfc2068_connect (request) != 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
390 return (-2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
391
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
392 if (request->proxy_config != NULL && *request->proxy_config != '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
393 proto = request->proxy_config;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
394 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
395 proto = "http";
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
396
7
5551ab2301fe * Fixed a DND crash
masneyb
parents: 1
diff changeset
397 if (request->username == NULL || *request->username == '\0')
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
398 tempstr = g_strconcat ("GET ", proto, "://",
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
399 request->hostname, "/", request->directory,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
400 use_http11 ? "/ HTTP/1.1\n" : "/ HTTP/1.0\n", NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
401 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
402 tempstr = g_strconcat ("GET ", proto, "://", request->username, "@",
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
403 request->hostname, "/", request->directory,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
404 use_http11 ? "/ HTTP/1.1\n" : "/ HTTP/1.0\n", NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
405
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
406 if ((pos = strstr (tempstr, "://")) != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
407 remove_double_slashes (pos + 3);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
408 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
409 remove_double_slashes (tempstr);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
410
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
411 ret = rfc2068_send_command (request, tempstr, NULL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
412 g_free (tempstr);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
413 if (ret < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
414 return (-1);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
415
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
416 params->read_bytes = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
417 if (strlen (request->last_ftp_response) > 9 &&
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
418 strncmp (request->last_ftp_response + 9, "200", 3) == 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
419 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
420 request->logging_function (gftp_logging_misc, request->user_data,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
421 _("Retrieving directory listing...\n"));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
422 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
423 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
424
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
425 return (-2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
426 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
427
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
428
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
429 static off_t
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
430 rfc2068_get_file_size (gftp_request * request, const char *filename)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
431 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
432 char *tempstr, *pos, *proto;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
433 off_t size;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
434
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
435 g_return_val_if_fail (request != NULL, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
436 g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
437 g_return_val_if_fail (filename != NULL, -2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
438
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
439 if (request->sockfd < 0 && rfc2068_connect (request) != 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
440 return (-2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
441
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
442 if (request->proxy_config != NULL && *request->proxy_config != '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
443 proto = request->proxy_config;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
444 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
445 proto = "http";
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
446
7
5551ab2301fe * Fixed a DND crash
masneyb
parents: 1
diff changeset
447 if (request->username == NULL || *request->username == '\0')
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
448 tempstr = g_strconcat ("HEAD ", proto, request->hostname, "/", filename,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
449 use_http11 ? " HTTP/1.1\n" : " HTTP/1.0\n", NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
450 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
451 tempstr = g_strconcat ("HEAD ", proto, request->username, "@",
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
452 request->hostname, "/", filename,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
453 use_http11 ? " HTTP/1.1\n" : " HTTP/1.0\n", NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
454
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
455 if ((pos = strstr (tempstr, "://")) != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
456 remove_double_slashes (pos + 3);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
457 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
458 remove_double_slashes (tempstr);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
459
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
460 size = rfc2068_send_command (request, tempstr, NULL);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
461 g_free (tempstr);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
462 if (size < 0)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
463 return (-2);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
464
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
465 return (size);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
466 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
467
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
468
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
469 static int
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
470 parse_html_line (char *tempstr, gftp_file * fle)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
471 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
472 char months[13][3] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
473 "Sep", "Oct", "Nov", "Dec"};
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
474 char *stpos, *pos, month[4];
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
475 struct tm t;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
476 long units;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
477 int i;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
478
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
479 memset (fle, 0, sizeof (*fle));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
480
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
481 if ((pos = strstr (tempstr, "<A HREF=")) == NULL &&
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
482 (pos = strstr (tempstr, "<a href=")) == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
483 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
484
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
485 /* Find the filename */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
486 while (*pos != '"' && *pos != '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
487 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
488 if (*pos == '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
489 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
490 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
491
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
492 for (stpos = pos; *pos != '"' && *pos != '\0'; pos++);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
493 if (*pos == '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
494 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
495 *pos = '\0';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
496
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
497 /* Copy file attributes. Just about the only thing we can get is whether it
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
498 is a directory or not */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
499 fle->attribs = g_malloc (11);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
500 strcpy (fle->attribs, "----------");
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
501 if (*(pos - 1) == '/')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
502 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
503 *(pos - 1) = '\0';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
504 *fle->attribs = 'd';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
505 fle->isdir = 1;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
506 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
507
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
508 /* Copy filename */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
509 if (strchr (stpos, '/') != NULL || strncmp (stpos, "mailto:", 7) == 0 ||
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
510 *stpos == '\0' || *stpos == '?')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
511 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
512
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
513 fle->file = g_malloc (strlen (stpos) + 1);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
514 strcpy (fle->file, stpos);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
515
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
516 if (*(pos - 1) == '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
517 *(pos - 1) = '/';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
518 *pos = '"';
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
519 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
520
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
521 /* Skip whitespace and html tags after file and before date */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
522 stpos = pos;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
523 if ((pos = strstr (stpos, "</A>")) == NULL &&
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
524 (pos = strstr (stpos, "</a>")) == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
525 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
526
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
527 pos += 4;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
528
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
529 while (*pos == ' ' || *pos == '.' || *pos == '<')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
530 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
531 if (*pos == '<')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
532 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
533 if (strncmp (pos, "<A ", 3) == 0 || strncmp (pos, "<a ", 3) == 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
534 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
535 stpos = pos;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
536 if ((pos = strstr (stpos, "</A>")) == NULL
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
537 && (pos = strstr (stpos, "</a>")) == NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
538 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
539 pos += 4;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
540 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
541 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
542 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
543 while (*pos != '>' && *pos != '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
544 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
545 if (*pos == '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
546 return (0);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
547 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
548 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
549 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
550 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
551
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
552 /* Now get the date */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
553 memset (&t, 0, sizeof (t));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
554 memset (month, 0, sizeof (month));
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
555 if (strchr (pos, ':') != NULL)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
556 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
557 if (*pos == '[')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
558 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
559 sscanf (pos, "%02d-%3s-%04d %02d:%02d", &t.tm_mday, month, &t.tm_year,
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
560 &t.tm_hour, &t.tm_min);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
561 while (*pos != ' ' && *pos != '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
562 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
563 if (*pos == '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
564 return (1);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
565
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
566 while (*pos == ' ')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
567 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
568
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
569 while (*pos != ' ' && *pos != '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
570 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
571 if (*pos == '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
572 return (1);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
573
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
574 t.tm_year -= 1900;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
575 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
576 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
577 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
578 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
579 strncpy (month, pos, 3);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
580 for (i=0; i<3 && *pos != '\0'; i++)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
581 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
582 if (*pos == '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
583 return (1);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
584
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
585 while (*pos == ' ')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
586 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
587
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
588 t.tm_mday = strtol (pos, NULL, 10);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
589 while (*pos != ' ' && *pos != '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
590 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
591 if (*pos == '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
592 return (1);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
593
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
594 while (*pos == ' ')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
595 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
596
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
597 t.tm_year = strtol (pos, NULL, 10) - 1900;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
598 while (*pos != ' ' && *pos != '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
599 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
600 if (*pos == '\0')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
601 return (1);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
602 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
603
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
604 for (i=0; i<12; i++)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
605 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
606 if (strncmp (month, months[i], 3) == 0)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
607 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
608 t.tm_mon = i;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
609 break;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
610 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
611 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
612
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
613 fle->datetime = mktime (&t);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
614
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
615 while (*pos == ' ' || *pos == ']')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
616 pos++;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
617
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
618 /* Get the size */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
619 /* This gets confusing on lines like "... 1.1M RedHat RPM package" */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
620 /* We need to avoid finding the 'k' in package */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
621
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
622 stpos = strchr (pos, 'k');
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
623 if (stpos == NULL || !isdigit (*(stpos - 1)))
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
624 stpos = strchr (pos, 'M');
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
625 if (stpos == NULL || !isdigit (*(stpos - 1)))
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
626 return (1); /* Return successfully
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
627 since we got the file */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
628 if (*stpos == 'k')
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
629 units = 1024;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
630 else
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
631 units = 1048576;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
632
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
633 fle->size = 0;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
634
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
635 while (*(stpos - 1) != ' ' && *(stpos - 1) != '\t' && stpos > tempstr)
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
636 {
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
637 stpos--;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
638 if ((*stpos == '.') && isdigit (*(stpos + 1)) )
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
639 { /* found decimal point */
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
640 fle->size = units * strtol (stpos + 1, NULL, 10);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
641 fle->size /= 10;
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
642 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
643 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
644
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
645 fle->size += units * strtol (stpos, NULL, 10);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
646 return (1);
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
647 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
648
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
649
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
650 static int
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
651 rfc2068_get_next_file (gftp_request * request, gftp_file * fle, int fd)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
652 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
653 gftp_getline_buffer * rbuf;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
654 rfc2068_params * params;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
655 char tempstr[255];
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
656 size_t len;
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
657
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
658 g_return_val_if_fail (request != NULL, -2);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
659 g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
660 g_return_val_if_fail (fle != NULL, -2);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
661
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
662 params = request->protocol_data;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
663 if (request->last_dir_entry)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
664 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
665 g_free (request->last_dir_entry);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
666 request->last_dir_entry = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
667 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
668
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
669 rbuf = NULL;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
670 while (1)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
671 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
672 if (gftp_get_line (request, &rbuf, tempstr, sizeof (tempstr) - 1, fd) < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
673 return (-2);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
674
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
675 tempstr[sizeof (tempstr) - 1] = '\0';
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
676 params->read_bytes += strlen (tempstr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
677
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
678 if (params->chunked_transfer && strcmp (tempstr, "0\r\n") == 0)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
679 {
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
680 while ((len = gftp_get_line (request, &rbuf, tempstr,
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
681 sizeof (tempstr) - 1, fd)) > 0)
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
682 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
683 if (strcmp (tempstr, "\r\n") == 0)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
684 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
685 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
686 gftp_file_destroy (fle);
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
687
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
688 if (len < 0)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
689 return (-1);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
690
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
691 return (0);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
692 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
693
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
694 if (parse_html_line (tempstr, fle) == 0 || fle->file == NULL)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
695 gftp_file_destroy (fle);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
696 else
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
697 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
698
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
699 if (params->max_bytes != 0 && params->read_bytes == params->max_bytes)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
700 break;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
701 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
702
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
703 if (fle->file == NULL)
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
704 {
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
705 gftp_file_destroy (fle);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
706 return (-2);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
707 }
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
708
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
709 len = strlen (tempstr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
710 if (!request->cached)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
711 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
712 request->last_dir_entry = g_malloc (len + 1);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
713 strcpy (request->last_dir_entry, tempstr);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
714 request->last_dir_entry_len = len;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
715 }
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
716 return (len);
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
717 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
718
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
719
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
720 static int
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
721 rfc2068_chdir (gftp_request * request, const char *directory)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
722 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
723 g_return_val_if_fail (request != NULL, -2);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
724 g_return_val_if_fail (request->protonum == GFTP_HTTP_NUM, -2);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
725 g_return_val_if_fail (directory != NULL, -2);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
726
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
727 if (request->directory != directory)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
728 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
729 if (request->directory)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
730 g_free (request->directory);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
731 request->directory = g_malloc (strlen (directory) + 1);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
732 strcpy (request->directory, directory);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
733 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
734 return (0);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
735 }
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
736
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
737
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
738 static void
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
739 rfc2068_set_config_options (gftp_request * request)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
740 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
741 gftp_set_proxy_hostname (request, http_proxy_host);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
742 gftp_set_proxy_port (request, http_proxy_port);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
743 gftp_set_proxy_username (request, http_proxy_username);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
744 gftp_set_proxy_password (request, http_proxy_password);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
745
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
746
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
747 if (request->proxy_config == NULL)
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
748 {
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
749 request->proxy_config = g_malloc (5);
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
750 strcpy (request->proxy_config, "http");
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
751 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
752 }
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
753
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
754
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
755 void
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
756 rfc2068_init (gftp_request * request)
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
757 {
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
758 g_return_if_fail (request != NULL);
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
759
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
760 request->protonum = GFTP_HTTP_NUM;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
761 request->init = rfc2068_init;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
762 request->destroy = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
763 request->connect = rfc2068_connect;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
764 request->disconnect = rfc2068_disconnect;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
765 request->get_file = rfc2068_get_file;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
766 request->put_file = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
767 request->transfer_file = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
768 request->get_next_file_chunk = rfc2068_get_next_file_chunk;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
769 request->put_next_file_chunk = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
770 request->end_transfer = rfc2068_end_transfer;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
771 request->abort_transfer = rfc2068_end_transfer; /* NOTE: uses end_transfer */
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
772 request->list_files = rfc2068_list_files;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
773 request->get_next_file = rfc2068_get_next_file;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
774 request->set_data_type = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
775 request->get_file_size = rfc2068_get_file_size;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
776 request->chdir = rfc2068_chdir;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
777 request->rmdir = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
778 request->rmfile = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
779 request->mkdir = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
780 request->rename = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
781 request->chmod = NULL;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
782 request->site = NULL;
58
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
783 request->parse_url = NULL;
c01d91c10f6c 2002-11-20 Brian Masney <masneyb@gftp.org>
masneyb
parents: 48
diff changeset
784 request->set_config_options = rfc2068_set_config_options;
48
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
785 request->url_prefix = "http";
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
786 request->protocol_name = "HTTP";
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
787 request->need_hostport = 1;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
788 request->need_userpass = 0;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
789 request->use_cache = 1;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
790 request->use_threads = 1;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
791 request->always_connected = 0;
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
792 request->protocol_data = g_malloc0 (sizeof (rfc2068_params));
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
793 gftp_set_config_options (request);
e5f6054590b5 2002-11-5 Brian Masney <masneyb@gftp.org>
masneyb
parents: 41
diff changeset
794 }
1
8b1883341c6f Initial revision
masneyb
parents:
diff changeset
795