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-07-29 19:09:05 +03:00
parent 46c298414b
commit 9cfe28594d
8 changed files with 30 additions and 13 deletions

View File

@@ -1,9 +1,9 @@
"MAIN ---"
linux-vdso.so.1 (0x00007ffe095f0000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x000077d974600000)
libc.so.6 => /lib64/libc.so.6 (0x000077d974200000)
libdl.so.2 => /lib64/libdl.so.2 (0x000077d973e00000)
/lib64/ld-linux-x86-64.so.2 (0x000077d974c00000)
linux-vdso.so.1 (0x00007ffee9155000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000727c25800000)
libc.so.6 => /lib64/libc.so.6 (0x0000727c25400000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000727c25000000)
/lib64/ld-linux-x86-64.so.2 (0x0000727c25e00000)
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.3.4

View File

@@ -9,6 +9,7 @@ pub struct FtpSettings {
pub write_timeout: u64,
pub login: Option<String>,
pub password: Option<String>,
pub advanced_resolve: bool
}
#[derive(Deserialize,Serialize,Clone)]

View File

@@ -10,8 +10,17 @@ pub fn make_passive_proxy_stream(
proxy_settings: &Option<FtpProxySettings>,
addr: SocketAddr) -> Result<TcpStream, FtpError> {
let corrected_addr = if addr.ip().is_loopback() {
match ftp_settings.domain.parse::<std::net::IpAddr>() {
let redirect = match ftp_settings.advanced_resolve{
true => {
if proxy_settings.is_some() || addr.ip().is_loopback() {
Some(&ftp_settings.domain)
}else { None }
},
false => None
};
let corrected_addr = if redirect.is_some() {
match redirect.unwrap().parse::<std::net::IpAddr>() {
Ok(ftp_ip) => {
SocketAddr::new(ftp_ip, addr.port())
},

Binary file not shown.

Binary file not shown.

View File

@@ -179,6 +179,10 @@
// Получить настройки соединения
// Формирует структуру настроек подключения FTP
//
// Примечание:
// При `РазрешениеIP = Истина` адрес для подключения, возвращаемый сервером в пассивном режиме после `PASV`, будет заменен на IP^^
// прокси-сервера, если используется прокси, или IP основного подключения, если сервер вернул `127.0.0.1`
//
// Параметры:
// Домен - Строка - Домен сервера - host
// Порт - Число - Порт сервера - port
@@ -187,6 +191,7 @@
// Пассивный - Булево - Пассивный режим соединения - passive
// ТаймаутЧтения - Число - Таймаут чтения - rtout
// ТаймаутЗаписи - Число - Таймаут записи - wtout
// РазрешениеIP - Булево - Расширенное определение адресов в пассивном режиме - ipresl
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Структура настроек соединения
@@ -196,7 +201,8 @@
, Знач Пароль = Неопределено
, Знач Пассивный = Истина
, Знач ТаймаутЧтения = 120
, Знач ТаймаутЗаписи = 120) Экспорт
, Знач ТаймаутЗаписи = 120
, Знач РазрешениеIP = Истина) Экспорт
СтруктураНастроек = Новый Структура;
OPI_Инструменты.ДобавитьПоле("domain" , Домен , "Строка", СтруктураНастроек);
@@ -204,6 +210,7 @@
OPI_Инструменты.ДобавитьПоле("passive" , Пассивный , "Булево", СтруктураНастроек);
OPI_Инструменты.ДобавитьПоле("read_timeout" , ТаймаутЧтения , "Число" , СтруктураНастроек);
OPI_Инструменты.ДобавитьПоле("write_timeout" , ТаймаутЗаписи , "Число" , СтруктураНастроек);
OPI_Инструменты.ДобавитьПоле("advanced_resolve", ТаймаутЗаписи , "Булево", СтруктураНастроек);
Если Не Логин = Неопределено Тогда
OPI_ПреобразованиеТипов.ПолучитьСтроку(Логин);