diff --git a/src/addins/ftp/dependencies.log b/src/addins/ftp/dependencies.log index 87012ce061..fdbc4b6312 100644 --- a/src/addins/ftp/dependencies.log +++ b/src/addins/ftp/dependencies.log @@ -1,9 +1,9 @@ "MAIN ---" - linux-vdso.so.1 (0x00007fff63ba5000) - libpthread.so.0 => /lib64/libpthread.so.0 (0x000073ba6ee00000) - libc.so.6 => /lib64/libc.so.6 (0x000073ba6ea00000) - libdl.so.2 => /lib64/libdl.so.2 (0x000073ba6e600000) - /lib64/ld-linux-x86-64.so.2 (0x000073ba6f400000) + linux-vdso.so.1 (0x00007ffd7fdf6000) + libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ec7c5000000) + libc.so.6 => /lib64/libc.so.6 (0x00007ec7c4c00000) + libdl.so.2 => /lib64/libdl.so.2 (0x00007ec7c4800000) + /lib64/ld-linux-x86-64.so.2 (0x00007ec7c5600000) GLIBC_2.2.5 GLIBC_2.3 GLIBC_2.3.4 diff --git a/src/addins/ftp/src/component/ftp_client.rs b/src/addins/ftp/src/component/ftp_client.rs index 0af065b051..bf2df67e8a 100644 --- a/src/addins/ftp/src/component/ftp_client.rs +++ b/src/addins/ftp/src/component/ftp_client.rs @@ -257,6 +257,20 @@ impl FtpClient { } } + pub fn ping(&mut self) -> bool { + + let result = match self { + FtpClient::Secure(stream) => stream.noop(), + FtpClient::Insecure(stream) => stream.noop(), + }; + + match result { + Ok(_) => true, + Err(e) => false + } + + } + fn upload_from_reader( &mut self, path: &str, diff --git a/src/addins/ftp/src/component/mod.rs b/src/addins/ftp/src/component/mod.rs index ce70a66472..8e8a0e8ded 100644 --- a/src/addins/ftp/src/component/mod.rs +++ b/src/addins/ftp/src/component/mod.rs @@ -37,6 +37,7 @@ pub const METHODS: &[&[u16]] = &[ name!("RenameObject"), name!("DownloadToFile"), name!("DownloadToBuffer"), + name!("Ping"), ]; // Число параметров функций компоненты @@ -60,6 +61,7 @@ pub fn get_params_amount(num: usize) -> usize { 15 => 2, 16 => 2, 17 => 1, + 18 => 0, _ => 0, } } @@ -204,6 +206,12 @@ pub fn cal_func(obj: &mut AddIn, num: usize, params: &mut [Variant]) -> Box Box::new(e.to_string()) } }, + 18 => { + Box::new(match &mut obj.get_client(){ + Ok(c) => c.ping(), + Err(_) => false + }) + } _ => Box::new(false), // Неверный номер команды }; diff --git a/src/addins/ftp/src/component/tcp_establish.rs b/src/addins/ftp/src/component/tcp_establish.rs index 0d88df9eab..e4bd1151c0 100644 --- a/src/addins/ftp/src/component/tcp_establish.rs +++ b/src/addins/ftp/src/component/tcp_establish.rs @@ -137,6 +137,9 @@ pub fn connect_via_http_proxy(proxy_settings: &FtpProxySettings, target_addr: (& .ok_or_else(|| "Proxy address resolution returned no results".to_string())? ).map_err(|e| format!("Failed to connect to HTTP proxy: {}", e))?; + stream.set_read_timeout(Some(Duration::from_secs(20))).ok(); + stream.set_write_timeout(Some(Duration::from_secs(20))).ok(); + let host_port = format!("{}:{}", target_addr.0, target_addr.1); let mut request = format!( "CONNECT {} HTTP/1.1\r\nHost: {}\r\nConnection: keep-alive\r\n", diff --git a/src/en/OInt/addins/OPI_FTP.zip b/src/en/OInt/addins/OPI_FTP.zip index 186344d6e5..27908f4e6c 100644 Binary files a/src/en/OInt/addins/OPI_FTP.zip and b/src/en/OInt/addins/OPI_FTP.zip differ diff --git a/src/en/OPI/src/CommonTemplates/OPI_FTP/Template.addin b/src/en/OPI/src/CommonTemplates/OPI_FTP/Template.addin index 186344d6e5..27908f4e6c 100644 Binary files a/src/en/OPI/src/CommonTemplates/OPI_FTP/Template.addin and b/src/en/OPI/src/CommonTemplates/OPI_FTP/Template.addin differ diff --git a/src/ru/OInt/addins/OPI_FTP.zip b/src/ru/OInt/addins/OPI_FTP.zip index 186344d6e5..27908f4e6c 100644 Binary files a/src/ru/OInt/addins/OPI_FTP.zip and b/src/ru/OInt/addins/OPI_FTP.zip differ diff --git a/src/ru/OPI/src/CommonModules/OPI_FTP/Module.bsl b/src/ru/OPI/src/CommonModules/OPI_FTP/Module.bsl index b27c3dfbad..fc033ebb12 100644 --- a/src/ru/OPI/src/CommonModules/OPI_FTP/Module.bsl +++ b/src/ru/OPI/src/CommonModules/OPI_FTP/Module.bsl @@ -380,12 +380,7 @@ Путь = ?(Путь = ".", "", Путь); - Сообщить("A: " + Путь); - Результат = Соединение.ListDirectory(Путь); - - Сообщить("B: " + Результат); - Результат = OPI_Инструменты.JsonВСтруктуру(Результат); Если Результат["result"] Тогда @@ -402,7 +397,6 @@ ПутьОбъекта = ИмяОбъекта; КонецЕсли; - Сообщить("C: " + ПутьОбъекта); Объект.Вставить("path", ПутьОбъекта); Если Рекурсивно Тогда @@ -759,7 +753,15 @@ Функция ПроверитьСоздатьСоединение(Соединение) Если ЭтоКоннектор(Соединение) Тогда + + Проверка = Соединение.Ping(); + + Если Не Проверка Тогда + Соединение = ПолучитьКопиюСоединения(Соединение); + КонецЕсли; + ЗакрыватьСоединение = Ложь; + Иначе ЗакрыватьСоединение = Истина; Соединение = ОткрытьСоединениеПоКонфигурации(Соединение); diff --git a/src/ru/OPI/src/CommonTemplates/OPI_FTP/Template.addin b/src/ru/OPI/src/CommonTemplates/OPI_FTP/Template.addin index 186344d6e5..27908f4e6c 100644 Binary files a/src/ru/OPI/src/CommonTemplates/OPI_FTP/Template.addin and b/src/ru/OPI/src/CommonTemplates/OPI_FTP/Template.addin differ