1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-10 22:41:43 +02:00

FTP: Автоматическое переподключение

This commit is contained in:
Anton Titovets
2025-08-07 10:50:30 +03:00
parent 390ddce6a0
commit 44b174f60e
9 changed files with 38 additions and 11 deletions

View File

@@ -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

View File

@@ -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<R: Read>(
&mut self,
path: &str,

View File

@@ -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<dyn
Err(e) => Box::new(e.to_string())
}
},
18 => {
Box::new(match &mut obj.get_client(){
Ok(c) => c.ping(),
Err(_) => false
})
}
_ => Box::new(false), // Неверный номер команды
};

View File

@@ -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",

Binary file not shown.

Binary file not shown.

View File

@@ -380,12 +380,7 @@
Путь = ?(Путь = ".", "", Путь);
Сообщить("A: " + Путь);
Результат = Соединение.ListDirectory(Путь);
Сообщить("B: " + Результат);
Результат = OPI_Инструменты.JsonВСтруктуру(Результат);
Если Результат["result"] Тогда
@@ -402,7 +397,6 @@
ПутьОбъекта = ИмяОбъекта;
КонецЕсли;
Сообщить("C: " + ПутьОбъекта);
Объект.Вставить("path", ПутьОбъекта);
Если Рекурсивно Тогда
@@ -759,7 +753,15 @@
Функция ПроверитьСоздатьСоединение(Соединение)
Если ЭтоКоннектор(Соединение) Тогда
Проверка = Соединение.Ping();
Если Не Проверка Тогда
Соединение = ПолучитьКопиюСоединения(Соединение);
КонецЕсли;
ЗакрыватьСоединение = Ложь;
Иначе
ЗакрыватьСоединение = Истина;
Соединение = ОткрытьСоединениеПоКонфигурации(Соединение);