summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaymond Hilseth <rhi@vizrt.com>2016-01-07 10:38:06 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2016-03-07 02:13:13 +0100
commit86db71b402e9f6b5782e1110ece4cb35c525d4b0 (patch)
treefd18f3ada2208689e82c3ca0c3990c3180cba101
parente356487fdae890a8236fbe374c58685e5945a280 (diff)
avformat/ftp: Support response code 125 for STOR and RETR commands
This fixes a problem where ffmpeg would hang if there is already an open data connection, and the server sends a 125 response code in reply to a STOR or RETR command. Signed-off-by: Raymond Hilseth <rhi@vizrt.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavformat/ftp.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/libavformat/ftp.c b/libavformat/ftp.c
index 890930c4f0..b9fee2450e 100644
--- a/libavformat/ftp.c
+++ b/libavformat/ftp.c
@@ -401,10 +401,12 @@ static int ftp_file_size(FTPContext *s)
static int ftp_retrieve(FTPContext *s)
{
char command[CONTROL_BUFFER_SIZE];
- static const int retr_codes[] = {150, 0};
+ static const int retr_codes[] = {150, 125, 0};
+ int resp_code;
snprintf(command, sizeof(command), "RETR %s\r\n", s->path);
- if (ftp_send_command(s, command, retr_codes, NULL) != 150)
+ resp_code = ftp_send_command(s, command, retr_codes, NULL);
+ if (resp_code != 125 && resp_code != 150)
return AVERROR(EIO);
s->state = DOWNLOADING;
@@ -415,10 +417,12 @@ static int ftp_retrieve(FTPContext *s)
static int ftp_store(FTPContext *s)
{
char command[CONTROL_BUFFER_SIZE];
- static const int stor_codes[] = {150, 0};
+ static const int stor_codes[] = {150, 125, 0};
+ int resp_code;
snprintf(command, sizeof(command), "STOR %s\r\n", s->path);
- if (ftp_send_command(s, command, stor_codes, NULL) != 150)
+ resp_code = ftp_send_command(s, command, stor_codes, NULL);
+ if (resp_code != 125 && resp_code != 150)
return AVERROR(EIO);
s->state = UPLOADING;