Mercurial > gftp.yaz
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') |