comparison lib/rfc959.c @ 820:435b11d2d628

2006-10-1 Brian Masney <masneyb@gftp.org> * lib/ftpcommon.h lib/ftps.c lib/rfc959.c - automatically reconnect to the server if a timeout occurs. * src/uicommon/gftpui.c (_gftpui_common_thread_callback) - removed checks for the timeouts. This is now transparently handled in the FTP[S]* protocols. I need to check for timeouts in the other protocols.
author masneyb
date Sun, 01 Oct 2006 18:25:16 +0000
parents 42a92d671a0d
children afbe37351940
comparison
equal deleted inserted replaced
819:d6fdfcbdb056 820:435b11d2d628
144 } 144 }
145 145
146 146
147 int 147 int
148 rfc959_send_command (gftp_request * request, const char *command, 148 rfc959_send_command (gftp_request * request, const char *command,
149 int read_response) 149 int read_response, int dont_try_to_reconnect)
150 { 150 {
151 int ret; 151 int ret;
152 152
153 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 153 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
154 g_return_val_if_fail (command != NULL, GFTP_EFATAL); 154 g_return_val_if_fail (command != NULL, GFTP_EFATAL);
173 if ((ret = request->write_function (request, command, strlen (command), 173 if ((ret = request->write_function (request, command, strlen (command),
174 request->datafd)) < 0) 174 request->datafd)) < 0)
175 return (ret); 175 return (ret);
176 176
177 if (read_response) 177 if (read_response)
178 return (rfc959_read_response (request, 1)); 178 {
179 ret = rfc959_read_response (request, 1);
180 if (ret == GFTP_ETIMEDOUT && !dont_try_to_reconnect)
181 {
182 ret = gftp_connect (request);
183 if (ret < 0)
184 return (ret);
185
186 return (rfc959_send_command (request, command, 1, 1));
187 }
188 else
189 return (ret);
190 }
179 else 191 else
180 return (0); 192 return (0);
181 } 193 }
182 194
183 195
311 rfc959_getcwd (gftp_request * request) 323 rfc959_getcwd (gftp_request * request)
312 { 324 {
313 char *pos, *dir; 325 char *pos, *dir;
314 int ret; 326 int ret;
315 327
316 ret = rfc959_send_command (request, "PWD\r\n", 1); 328 ret = rfc959_send_command (request, "PWD\r\n", 1, 0);
317 if (ret < 0) 329 if (ret < 0)
318 return (ret); 330 return (ret);
319 else if (ret != '2') 331 else if (ret != '2')
320 { 332 {
321 request->logging_function (gftp_logging_error, request, 333 request->logging_function (gftp_logging_error, request,
363 375
364 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 376 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
365 g_return_val_if_fail (directory != NULL, GFTP_EFATAL); 377 g_return_val_if_fail (directory != NULL, GFTP_EFATAL);
366 378
367 if (strcmp (directory, "..") == 0) 379 if (strcmp (directory, "..") == 0)
368 ret = rfc959_send_command (request, "CDUP\r\n", 1); 380 ret = rfc959_send_command (request, "CDUP\r\n", 1, 0);
369 else 381 else
370 { 382 {
371 tempstr = g_strconcat ("CWD ", directory, "\r\n", NULL); 383 tempstr = g_strconcat ("CWD ", directory, "\r\n", NULL);
372 ret = rfc959_send_command (request, tempstr, 1); 384 ret = rfc959_send_command (request, tempstr, 1, 0);
373 g_free (tempstr); 385 g_free (tempstr);
374 } 386 }
375 387
376 if (ret < 0) 388 if (ret < 0)
377 return (ret); 389 return (ret);
394 406
395 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 407 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
396 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 408 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
397 409
398 parms = request->protocol_data; 410 parms = request->protocol_data;
399 ret = rfc959_send_command (request, "SYST\r\n", 1); 411 ret = rfc959_send_command (request, "SYST\r\n", 1, 0);
400 412
401 if (ret < 0) 413 if (ret < 0)
402 return (ret); 414 return (ret);
403 else if (ret != '2') 415 else if (ret != '2')
404 return (GFTP_ERETRYABLE); 416 return (GFTP_ERETRYABLE);
507 if (*endpos == '\n' || *endpos == '\0') 519 if (*endpos == '\n' || *endpos == '\0')
508 { 520 {
509 tempchar = *(endpos + 1); 521 tempchar = *(endpos + 1);
510 if (*endpos != '\0') 522 if (*endpos != '\0')
511 *(endpos + 1) = '\0'; 523 *(endpos + 1) = '\0';
512 if ((resp = rfc959_send_command (request, startpos, 1)) < 0) 524 if ((resp = rfc959_send_command (request, startpos, 1, 0)) < 0)
513 return (resp); 525 return (resp);
514 if (*endpos != '\0') 526 if (*endpos != '\0')
515 *(endpos + 1) = tempchar; 527 *(endpos + 1) = tempchar;
516 else 528 else
517 break; 529 break;
522 g_free (tempstr); 534 g_free (tempstr);
523 } 535 }
524 else 536 else
525 { 537 {
526 tempstr = g_strconcat ("USER ", request->username, "\r\n", NULL); 538 tempstr = g_strconcat ("USER ", request->username, "\r\n", NULL);
527 resp = rfc959_send_command (request, tempstr, 1); 539 resp = rfc959_send_command (request, tempstr, 1, 0);
528 g_free (tempstr); 540 g_free (tempstr);
529 if (resp < 0) 541 if (resp < 0)
530 return (resp); 542 return (resp);
531 543
532 if (resp == '3') 544 if (resp == '3')
538 g_free (utf8); 550 g_free (utf8);
539 } 551 }
540 else 552 else
541 tempstr = g_strconcat ("PASS ", request->password, "\r\n", NULL); 553 tempstr = g_strconcat ("PASS ", request->password, "\r\n", NULL);
542 554
543 resp = rfc959_send_command (request, tempstr, 1); 555 resp = rfc959_send_command (request, tempstr, 1, 0);
544 g_free (tempstr); 556 g_free (tempstr);
545 if (resp < 0) 557 if (resp < 0)
546 return (resp); 558 return (resp);
547 } 559 }
548 560
549 if (resp == '3' && request->account != NULL) 561 if (resp == '3' && request->account != NULL)
550 { 562 {
551 tempstr = g_strconcat ("ACCT ", request->account, "\r\n", NULL); 563 tempstr = g_strconcat ("ACCT ", request->account, "\r\n", NULL);
552 resp = rfc959_send_command (request, tempstr, 1); 564 resp = rfc959_send_command (request, tempstr, 1, 0);
553 g_free (tempstr); 565 g_free (tempstr);
554 if (resp < 0) 566 if (resp < 0)
555 return (resp); 567 return (resp);
556 } 568 }
557 } 569 }
579 { 591 {
580 tempstr = "TYPE I\r\n"; 592 tempstr = "TYPE I\r\n";
581 parms->is_ascii_transfer = 0; 593 parms->is_ascii_transfer = 0;
582 } 594 }
583 595
584 if ((ret = rfc959_send_command (request, tempstr, 1)) < 0) 596 if ((ret = rfc959_send_command (request, tempstr, 1, 0)) < 0)
585 return (ret); 597 return (ret);
586 598
587 ret = -1; 599 ret = -1;
588 if (request->directory != NULL && *request->directory != '\0') 600 if (request->directory != NULL && *request->directory != '\0')
589 { 601 {
651 unsigned char ad[6]; 663 unsigned char ad[6];
652 int i, resp; 664 int i, resp;
653 665
654 parms = request->protocol_data; 666 parms = request->protocol_data;
655 667
656 if ((parms->data_connection = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) 668 parms->data_connection = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
669 if (parms->data_connection == -1)
657 { 670 {
658 request->logging_function (gftp_logging_error, request, 671 request->logging_function (gftp_logging_error, request,
659 _("Failed to create a IPv4 socket: %s\n"), 672 _("Failed to create a IPv4 socket: %s\n"),
660 g_strerror (errno)); 673 g_strerror (errno));
661 gftp_disconnect (request); 674 gftp_disconnect (request);
676 data_addr.sin_family = AF_INET; 689 data_addr.sin_family = AF_INET;
677 690
678 gftp_lookup_request_option (request, "passive_transfer", &passive_transfer); 691 gftp_lookup_request_option (request, "passive_transfer", &passive_transfer);
679 if (passive_transfer) 692 if (passive_transfer)
680 { 693 {
681 resp = rfc959_send_command (request, "PASV\r\n", 1); 694 resp = rfc959_send_command (request, "PASV\r\n", 1, 1);
682 if (resp < 0) 695 if (resp < 0)
683 return (resp); 696 return (resp);
684 else if (resp != '2') 697 else if (resp != '2')
685 { 698 {
686 gftp_set_request_option (request, "passive_transfer", 699 gftp_set_request_option (request, "passive_transfer",
795 pos1 = (char *) &data_addr.sin_port; 808 pos1 = (char *) &data_addr.sin_port;
796 command = g_strdup_printf ("PORT %u,%u,%u,%u,%u,%u\r\n", 809 command = g_strdup_printf ("PORT %u,%u,%u,%u,%u,%u\r\n",
797 pos[0] & 0xff, pos[1] & 0xff, pos[2] & 0xff, 810 pos[0] & 0xff, pos[1] & 0xff, pos[2] & 0xff,
798 pos[3] & 0xff, pos1[0] & 0xff, 811 pos[3] & 0xff, pos1[0] & 0xff,
799 pos1[1] & 0xff); 812 pos1[1] & 0xff);
800 resp = rfc959_send_command (request, command, 1); 813 resp = rfc959_send_command (request, command, 1, 1);
801 g_free (command); 814 g_free (command);
802 815
803 if (resp < 0) 816 if (resp < 0)
804 return (resp); 817 return (resp);
805 else if (resp != '2') 818 else if (resp != '2')
862 data_addr.sin6_family = AF_INET6; 875 data_addr.sin6_family = AF_INET6;
863 876
864 gftp_lookup_request_option (request, "passive_transfer", &passive_transfer); 877 gftp_lookup_request_option (request, "passive_transfer", &passive_transfer);
865 if (passive_transfer) 878 if (passive_transfer)
866 { 879 {
867 resp = rfc959_send_command (request, "EPSV\r\n", 1); 880 resp = rfc959_send_command (request, "EPSV\r\n", 1, 1);
868 if (resp < 0) 881 if (resp < 0)
869 return (resp); 882 return (resp);
870 else if (resp != '2') 883 else if (resp != '2')
871 { 884 {
872 gftp_set_request_option (request, "passive_transfer", 885 gftp_set_request_option (request, "passive_transfer",
954 } 967 }
955 968
956 command = g_strdup_printf ("EPRT |2|%s|%d|\n", buf, 969 command = g_strdup_printf ("EPRT |2|%s|%d|\n", buf,
957 ntohs (data_addr.sin6_port)); 970 ntohs (data_addr.sin6_port));
958 971
959 resp = rfc959_send_command (request, command, 1); 972 resp = rfc959_send_command (request, command, 1, 1);
960 g_free (command); 973 g_free (command);
961 974
962 if (resp < 0) 975 if (resp < 0)
963 return (resp); 976 return (resp);
964 else if (resp != '2') 977 else if (resp != '2')
973 986
974 #endif /* HAVE_IPV6 */ 987 #endif /* HAVE_IPV6 */
975 988
976 989
977 static int 990 static int
978 rfc959_data_connection_new (gftp_request * request) 991 rfc959_data_connection_new (gftp_request * request, int dont_try_to_reconnect)
979 { 992 {
980 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 993 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
981 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 994 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
995
996 int ret;
982 997
983 #ifdef HAVE_IPV6 998 #ifdef HAVE_IPV6
984 if (request->ai_family == AF_INET6) 999 if (request->ai_family == AF_INET6)
985 return (rfc959_ipv6_data_connection_new (request)); 1000 ret = rfc959_ipv6_data_connection_new (request);
986 else 1001 else
987 return (rfc959_ipv4_data_connection_new (request)); 1002 ret = rfc959_ipv4_data_connection_new (request);
988 #else 1003 #else
989 return (rfc959_ipv4_data_connection_new (request)); 1004 ret = rfc959_ipv4_data_connection_new (request);
990 #endif 1005 #endif
1006
1007 if (ret == GFTP_ETIMEDOUT && !dont_try_to_reconnect)
1008 {
1009 ret = gftp_connect (request);
1010 if (ret < 0)
1011 return (ret);
1012
1013 return (rfc959_data_connection_new (request, 1));
1014 }
1015 else
1016 return (ret);
991 } 1017 }
992 1018
993 1019
994 static int 1020 static int
995 rfc959_accept_active_connection (gftp_request * request) 1021 rfc959_accept_active_connection (gftp_request * request)
1093 { 1119 {
1094 tempstr = "TYPE I\r\n"; 1120 tempstr = "TYPE I\r\n";
1095 parms->is_ascii_transfer = 0; 1121 parms->is_ascii_transfer = 0;
1096 } 1122 }
1097 1123
1098 if ((ret = rfc959_send_command (request, tempstr, 1)) < 0) 1124 if ((ret = rfc959_send_command (request, tempstr, 1, 0)) < 0)
1099 return (ret); 1125 return (ret);
1100 } 1126 }
1101 1127
1102 return (0); 1128 return (0);
1103 } 1129 }
1122 1148
1123 if ((ret = rfc959_set_data_type (request, filename)) < 0) 1149 if ((ret = rfc959_set_data_type (request, filename)) < 0)
1124 return (ret); 1150 return (ret);
1125 1151
1126 if (parms->data_connection < 0 && 1152 if (parms->data_connection < 0 &&
1127 (ret = rfc959_data_connection_new (request)) < 0) 1153 (ret = rfc959_data_connection_new (request, 0)) < 0)
1128 return (ret); 1154 return (ret);
1129 1155
1130 if ((ret = gftp_fd_set_sockblocking (request, parms->data_connection, 1)) < 0) 1156 if ((ret = gftp_fd_set_sockblocking (request, parms->data_connection, 1)) < 0)
1131 return (ret); 1157 return (ret);
1132 1158
1133 if (startsize > 0) 1159 if (startsize > 0)
1134 { 1160 {
1135 command = g_strdup_printf ("REST " GFTP_OFF_T_PRINTF_MOD "\r\n", 1161 command = g_strdup_printf ("REST " GFTP_OFF_T_PRINTF_MOD "\r\n",
1136 startsize); 1162 startsize);
1137 ret = rfc959_send_command (request, command, 1); 1163 ret = rfc959_send_command (request, command, 1, 0);
1138 g_free (command); 1164 g_free (command);
1139 1165
1140 if (ret < 0) 1166 if (ret < 0)
1141 return (ret); 1167 return (ret);
1142 else if (ret != '3') 1168 else if (ret != '3')
1145 return (GFTP_ERETRYABLE); 1171 return (GFTP_ERETRYABLE);
1146 } 1172 }
1147 } 1173 }
1148 1174
1149 tempstr = g_strconcat ("RETR ", filename, "\r\n", NULL); 1175 tempstr = g_strconcat ("RETR ", filename, "\r\n", NULL);
1150 ret = rfc959_send_command (request, tempstr, 1); 1176 ret = rfc959_send_command (request, tempstr, 1, 0);
1151 g_free (tempstr); 1177 g_free (tempstr);
1152 1178
1153 if (ret < 0) 1179 if (ret < 0)
1154 return (ret); 1180 return (ret);
1155 else if (ret != '1') 1181 else if (ret != '1')
1195 1221
1196 if ((ret = rfc959_set_data_type (request, filename)) < 0) 1222 if ((ret = rfc959_set_data_type (request, filename)) < 0)
1197 return (ret); 1223 return (ret);
1198 1224
1199 if (parms->data_connection < 0 && 1225 if (parms->data_connection < 0 &&
1200 (ret = rfc959_data_connection_new (request)) < 0) 1226 (ret = rfc959_data_connection_new (request, 0)) < 0)
1201 return (ret); 1227 return (ret);
1202 1228
1203 if ((ret = gftp_fd_set_sockblocking (request, parms->data_connection, 1)) < 0) 1229 if ((ret = gftp_fd_set_sockblocking (request, parms->data_connection, 1)) < 0)
1204 return (ret); 1230 return (ret);
1205 1231
1206 if (startsize > 0) 1232 if (startsize > 0)
1207 { 1233 {
1208 command = g_strdup_printf ("REST " GFTP_OFF_T_PRINTF_MOD "\r\n", 1234 command = g_strdup_printf ("REST " GFTP_OFF_T_PRINTF_MOD "\r\n",
1209 startsize); 1235 startsize);
1210 ret = rfc959_send_command (request, command, 1); 1236 ret = rfc959_send_command (request, command, 1, 0);
1211 g_free (command); 1237 g_free (command);
1212 if (ret < 0) 1238 if (ret < 0)
1213 return (ret); 1239 return (ret);
1214 else if (ret != '3') 1240 else if (ret != '3')
1215 { 1241 {
1217 return (GFTP_ERETRYABLE); 1243 return (GFTP_ERETRYABLE);
1218 } 1244 }
1219 } 1245 }
1220 1246
1221 tempstr = g_strconcat ("STOR ", filename, "\r\n", NULL); 1247 tempstr = g_strconcat ("STOR ", filename, "\r\n", NULL);
1222 ret = rfc959_send_command (request, tempstr, 1); 1248 ret = rfc959_send_command (request, tempstr, 1, 0);
1223 g_free (tempstr); 1249 g_free (tempstr);
1224 if (ret < 0) 1250 if (ret < 0)
1225 return (ret); 1251 return (ret);
1226 else if (ret != '1') 1252 else if (ret != '1')
1227 { 1253 {
1252 g_return_val_if_fail (toreq != NULL, GFTP_EFATAL); 1278 g_return_val_if_fail (toreq != NULL, GFTP_EFATAL);
1253 g_return_val_if_fail (tofile != NULL, GFTP_EFATAL); 1279 g_return_val_if_fail (tofile != NULL, GFTP_EFATAL);
1254 g_return_val_if_fail (fromreq->datafd > 0, GFTP_EFATAL); 1280 g_return_val_if_fail (fromreq->datafd > 0, GFTP_EFATAL);
1255 g_return_val_if_fail (toreq->datafd > 0, GFTP_EFATAL); 1281 g_return_val_if_fail (toreq->datafd > 0, GFTP_EFATAL);
1256 1282
1257 if ((ret = rfc959_send_command (fromreq, "PASV\r\n", 1)) < 0) 1283 if ((ret = rfc959_send_command (fromreq, "PASV\r\n", 1, 0)) < 0)
1258 return (ret); 1284 return (ret);
1259 else if (ret != '2') 1285 else if (ret != '2')
1260 return (GFTP_ERETRYABLE); 1286 return (GFTP_ERETRYABLE);
1261 1287
1262 pos = fromreq->last_ftp_response + 4; 1288 pos = fromreq->last_ftp_response + 4;
1270 endpos++; 1296 endpos++;
1271 if (*endpos == ')') 1297 if (*endpos == ')')
1272 *endpos = '\0'; 1298 *endpos = '\0';
1273 1299
1274 tempstr = g_strconcat ("PORT ", pos, "\r\n", NULL); 1300 tempstr = g_strconcat ("PORT ", pos, "\r\n", NULL);
1275 ret = rfc959_send_command (toreq, tempstr, 1); 1301 ret = rfc959_send_command (toreq, tempstr, 1, 0);
1276 g_free (tempstr); 1302 g_free (tempstr);
1277 1303
1278 if (ret < 0) 1304 if (ret < 0)
1279 return (ret); 1305 return (ret);
1280 else if (ret != '2') 1306 else if (ret != '2')
1281 return (GFTP_ERETRYABLE); 1307 return (GFTP_ERETRYABLE);
1282 1308
1283 tempstr = g_strconcat ("RETR ", fromfile, "\r\n", NULL); 1309 tempstr = g_strconcat ("RETR ", fromfile, "\r\n", NULL);
1284 ret = rfc959_send_command (fromreq, tempstr, 0); 1310 ret = rfc959_send_command (fromreq, tempstr, 0, 0);
1285 g_free (tempstr); 1311 g_free (tempstr);
1286 1312
1287 if (ret < 0) 1313 if (ret < 0)
1288 return (ret); 1314 return (ret);
1289 1315
1290 tempstr = g_strconcat ("STOR ", tofile, "\r\n", NULL); 1316 tempstr = g_strconcat ("STOR ", tofile, "\r\n", NULL);
1291 ret = rfc959_send_command (toreq, tempstr, 0); 1317 ret = rfc959_send_command (toreq, tempstr, 0, 0);
1292 g_free (tempstr); 1318 g_free (tempstr);
1293 1319
1294 if (ret < 0) 1320 if (ret < 0)
1295 return (ret); 1321 return (ret);
1296 1322
1341 int ret; 1367 int ret;
1342 1368
1343 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 1369 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1344 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 1370 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1345 1371
1346 if ((ret = rfc959_send_command (request, "ABOR\r\n", 0)) < 0) 1372 if ((ret = rfc959_send_command (request, "ABOR\r\n", 0, 0)) < 0)
1347 return (ret); 1373 return (ret);
1348 1374
1349 rfc959_close_data_connection (request); 1375 rfc959_close_data_connection (request);
1350 1376
1351 if (request->datafd > 0) 1377 if (request->datafd > 0)
1366 int ret; 1392 int ret;
1367 1393
1368 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 1394 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1369 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 1395 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1370 1396
1371 if ((ret = rfc959_data_connection_new (request)) < 0) 1397 if ((ret = rfc959_data_connection_new (request, 0)) < 0)
1372 return (ret); 1398 return (ret);
1373 1399
1374 gftp_lookup_request_option (request, "show_hidden_files", &show_hidden_files); 1400 gftp_lookup_request_option (request, "show_hidden_files", &show_hidden_files);
1375 gftp_lookup_request_option (request, "resolve_symlinks", &resolve_symlinks); 1401 gftp_lookup_request_option (request, "resolve_symlinks", &resolve_symlinks);
1376 gftp_lookup_request_option (request, "passive_transfer", &passive_transfer); 1402 gftp_lookup_request_option (request, "passive_transfer", &passive_transfer);
1379 strcat (parms, show_hidden_files ? "a" : ""); 1405 strcat (parms, show_hidden_files ? "a" : "");
1380 strcat (parms, resolve_symlinks ? "L" : ""); 1406 strcat (parms, resolve_symlinks ? "L" : "");
1381 tempstr = g_strconcat ("LIST", *parms != '\0' ? " -" : "", parms, "\r\n", 1407 tempstr = g_strconcat ("LIST", *parms != '\0' ? " -" : "", parms, "\r\n",
1382 NULL); 1408 NULL);
1383 1409
1384 ret = rfc959_send_command (request, tempstr, 1); 1410 ret = rfc959_send_command (request, tempstr, 1, 0);
1385 g_free (tempstr); 1411 g_free (tempstr);
1386 1412
1387 if (ret < 0) 1413 if (ret < 0)
1388 return (ret); 1414 return (ret);
1389 else if (ret != '1') 1415 else if (ret != '1')
1590 g_return_val_if_fail (request != NULL, 0); 1616 g_return_val_if_fail (request != NULL, 0);
1591 g_return_val_if_fail (filename != NULL, 0); 1617 g_return_val_if_fail (filename != NULL, 0);
1592 g_return_val_if_fail (request->datafd > 0, 0); 1618 g_return_val_if_fail (request->datafd > 0, 0);
1593 1619
1594 tempstr = g_strconcat ("SIZE ", filename, "\r\n", NULL); 1620 tempstr = g_strconcat ("SIZE ", filename, "\r\n", NULL);
1595 ret = rfc959_send_command (request, tempstr, 1); 1621 ret = rfc959_send_command (request, tempstr, 1, 0);
1596 g_free (tempstr); 1622 g_free (tempstr);
1597 if (ret < 0) 1623 if (ret < 0)
1598 return (ret); 1624 return (ret);
1599 1625
1600 if (*request->last_ftp_response != '2') 1626 if (*request->last_ftp_response != '2')
1612 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 1638 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1613 g_return_val_if_fail (directory != NULL, GFTP_EFATAL); 1639 g_return_val_if_fail (directory != NULL, GFTP_EFATAL);
1614 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 1640 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1615 1641
1616 tempstr = g_strconcat ("RMD ", directory, "\r\n", NULL); 1642 tempstr = g_strconcat ("RMD ", directory, "\r\n", NULL);
1617 ret = rfc959_send_command (request, tempstr, 1); 1643 ret = rfc959_send_command (request, tempstr, 1, 0);
1618 g_free (tempstr); 1644 g_free (tempstr);
1619 1645
1620 if (ret < 0) 1646 if (ret < 0)
1621 return (ret); 1647 return (ret);
1622 else if (ret == '2') 1648 else if (ret == '2')
1635 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 1661 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1636 g_return_val_if_fail (file != NULL, GFTP_EFATAL); 1662 g_return_val_if_fail (file != NULL, GFTP_EFATAL);
1637 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 1663 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1638 1664
1639 tempstr = g_strconcat ("DELE ", file, "\r\n", NULL); 1665 tempstr = g_strconcat ("DELE ", file, "\r\n", NULL);
1640 ret = rfc959_send_command (request, tempstr, 1); 1666 ret = rfc959_send_command (request, tempstr, 1, 0);
1641 g_free (tempstr); 1667 g_free (tempstr);
1642 1668
1643 if (ret < 0) 1669 if (ret < 0)
1644 return (ret); 1670 return (ret);
1645 else if (ret == '2') 1671 else if (ret == '2')
1658 g_return_val_if_fail (request != NULL, GFTP_EFATAL); 1684 g_return_val_if_fail (request != NULL, GFTP_EFATAL);
1659 g_return_val_if_fail (directory != NULL, GFTP_EFATAL); 1685 g_return_val_if_fail (directory != NULL, GFTP_EFATAL);
1660 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 1686 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1661 1687
1662 tempstr = g_strconcat ("MKD ", directory, "\r\n", NULL); 1688 tempstr = g_strconcat ("MKD ", directory, "\r\n", NULL);
1663 ret = rfc959_send_command (request, tempstr, 1); 1689 ret = rfc959_send_command (request, tempstr, 1, 0);
1664 g_free (tempstr); 1690 g_free (tempstr);
1665 1691
1666 if (ret < 0) 1692 if (ret < 0)
1667 return (ret); 1693 return (ret);
1668 else if (ret == '2') 1694 else if (ret == '2')
1683 g_return_val_if_fail (oldname != NULL, GFTP_EFATAL); 1709 g_return_val_if_fail (oldname != NULL, GFTP_EFATAL);
1684 g_return_val_if_fail (newname != NULL, GFTP_EFATAL); 1710 g_return_val_if_fail (newname != NULL, GFTP_EFATAL);
1685 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 1711 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1686 1712
1687 tempstr = g_strconcat ("RNFR ", oldname, "\r\n", NULL); 1713 tempstr = g_strconcat ("RNFR ", oldname, "\r\n", NULL);
1688 ret = rfc959_send_command (request, tempstr, 1); 1714 ret = rfc959_send_command (request, tempstr, 1, 0);
1689 g_free (tempstr); 1715 g_free (tempstr);
1690 1716
1691 if (ret < 0) 1717 if (ret < 0)
1692 return (ret); 1718 return (ret);
1693 else if (ret != '3') 1719 else if (ret != '3')
1694 return (GFTP_ERETRYABLE); 1720 return (GFTP_ERETRYABLE);
1695 1721
1696 tempstr = g_strconcat ("RNTO ", newname, "\r\n", NULL); 1722 tempstr = g_strconcat ("RNTO ", newname, "\r\n", NULL);
1697 ret = rfc959_send_command (request, tempstr, 1); 1723 ret = rfc959_send_command (request, tempstr, 1, 0);
1698 g_free (tempstr); 1724 g_free (tempstr);
1699 1725
1700 if (ret < 0) 1726 if (ret < 0)
1701 return (ret); 1727 return (ret);
1702 else if (ret == '2') 1728 else if (ret == '2')
1718 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL); 1744 g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
1719 1745
1720 parms = request->protocol_data; 1746 parms = request->protocol_data;
1721 tempstr = g_strdup_printf ("SITE CHMOD %o %s\r\n", mode, file); 1747 tempstr = g_strdup_printf ("SITE CHMOD %o %s\r\n", mode, file);
1722 1748
1723 ret = rfc959_send_command (request, tempstr, 1); 1749 ret = rfc959_send_command (request, tempstr, 1, 0);
1724 g_free (tempstr); 1750 g_free (tempstr);
1725 1751
1726 if (ret < 0) 1752 if (ret < 0)
1727 return (ret); 1753 return (ret);
1728 else if (ret == '2') 1754 else if (ret == '2')
1745 if (specify_site) 1771 if (specify_site)
1746 tempstr = g_strconcat ("SITE ", command, "\r\n", NULL); 1772 tempstr = g_strconcat ("SITE ", command, "\r\n", NULL);
1747 else 1773 else
1748 tempstr = g_strconcat (command, "\r\n", NULL); 1774 tempstr = g_strconcat (command, "\r\n", NULL);
1749 1775
1750 ret = rfc959_send_command (request, tempstr, 1); 1776 ret = rfc959_send_command (request, tempstr, 1, 0);
1751 g_free (tempstr); 1777 g_free (tempstr);
1752 1778
1753 if (ret < 0) 1779 if (ret < 0)
1754 return (ret); 1780 return (ret);
1755 else if (ret == '2') 1781 else if (ret == '2')