diff options
Diffstat (limited to 'libavformat/ftp.c')
-rw-r--r-- | libavformat/ftp.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libavformat/ftp.c b/libavformat/ftp.c index e99d4dd6db..bbed7eb2f5 100644 --- a/libavformat/ftp.c +++ b/libavformat/ftp.c @@ -434,6 +434,21 @@ static int ftp_restart(FTPContext *s, int64_t pos) return 0; } +static int ftp_features(FTPContext *s) +{ + static const char *feat_command = "FEAT\r\n"; + static const char *enable_utf8_command = "OPTS UTF8 ON\r\n"; + static const int feat_codes[] = {211, 500, 502, 0}; /* 500, 502 are incorrect codes */ + static const int opts_codes[] = {200, 451, 500, 502}; /* 500, 451, 502 are incorrect codes */ + char *feat; + + if (ftp_send_command(s, feat_command, feat_codes, &feat) == 211) { + if (av_stristr(feat, "UTF8")) + ftp_send_command(s, enable_utf8_command, opts_codes, NULL); + } + return 0; +} + static int ftp_connect_control_connection(URLContext *h) { char buf[CONTROL_BUFFER_SIZE], opts_format[20], *response = NULL; @@ -477,6 +492,8 @@ static int ftp_connect_control_connection(URLContext *h) av_log(h, AV_LOG_ERROR, "Set content type failed\n"); return err; } + + ftp_features(s); } return 0; } |