summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Stahl <michael.stahl@allotropia.de>2023-11-07 11:57:58 +0100
committerMichael Stahl <michael.stahl@allotropia.de>2023-11-09 16:51:42 +0100
commit4a26dcac8e4f3ff3cbc3c356ad0a34968ef9d8fe (patch)
tree73cc949ad18d73cdfa88cd640c94ac9e42da04d5
parentofficecfg,*: add Office::Security::Net::AllowInsecureProtocols (diff)
downloadcore-4a26dcac8e4f3ff3cbc3c356ad0a34968ef9d8fe.tar.gz
core-4a26dcac8e4f3ff3cbc3c356ad0a34968ef9d8fe.zip
tdf#146386 curl,ucb: remove FTP UCP
FTP support has been deprecated since LO 7.4. The UCP currently doesn't even support TLS connections. Also disable FTP protocol in libcurl. Also remove JunitTest_ucb_complex: turns out the only test in it, checkWrongFtpConnection, fails on Linux because now GIO UCP handles ftp:// URLs and it throws InteractiveAugmentedIOException instead of expected ones, and on other platforms it would fail differently because there is no GIO. Change-Id: I4631d124371fef390f105fb16bf09aaa59e739e7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/159065 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.stahl@allotropia.de>
-rw-r--r--Repository.mk1
-rw-r--r--external/curl/ExternalProject_curl.mk2
-rw-r--r--external/curl/curl-msvc-disable-protocols.patch.12
-rw-r--r--officecfg/registry/data/org/openoffice/ucb/Configuration.xcu11
-rw-r--r--qadevOOo/Jar_OOoRunner.mk1
-rw-r--r--qadevOOo/objdsc/ucpftp/com.sun.star.comp.ucb.FTPContentProvider.csv2
-rw-r--r--qadevOOo/tests/java/mod/_ucpftp/FTPContentProvider.java66
-rw-r--r--ucb/JunitTest_ucb_complex.mk26
-rw-r--r--ucb/Library_ucpftp1.mk50
-rw-r--r--ucb/Module_ucb.mk2
-rw-r--r--ucb/qa/complex/ucb/UCB.java151
-rw-r--r--ucb/qa/complex/ucb/makefile.mk53
-rw-r--r--ucb/qa/unoapi/ucb.sce1
-rw-r--r--ucb/source/ucp/ftp/curl.hxx24
-rw-r--r--ucb/source/ucp/ftp/ftpcfunc.cxx50
-rw-r--r--ucb/source/ucp/ftp/ftpcfunc.hxx39
-rw-r--r--ucb/source/ucp/ftp/ftpcontainer.hxx56
-rw-r--r--ucb/source/ucp/ftp/ftpcontent.cxx853
-rw-r--r--ucb/source/ucp/ftp/ftpcontent.hxx146
-rw-r--r--ucb/source/ucp/ftp/ftpcontentcaps.cxx167
-rw-r--r--ucb/source/ucp/ftp/ftpcontentidentifier.cxx65
-rw-r--r--ucb/source/ucp/ftp/ftpcontentidentifier.hxx59
-rw-r--r--ucb/source/ucp/ftp/ftpcontentprovider.cxx244
-rw-r--r--ucb/source/ucp/ftp/ftpcontentprovider.hxx107
-rw-r--r--ucb/source/ucp/ftp/ftpdirp.cxx1269
-rw-r--r--ucb/source/ucp/ftp/ftpdirp.hxx158
-rw-r--r--ucb/source/ucp/ftp/ftpdynresultset.cxx67
-rw-r--r--ucb/source/ucp/ftp/ftpdynresultset.hxx48
-rw-r--r--ucb/source/ucp/ftp/ftpintreq.cxx64
-rw-r--r--ucb/source/ucp/ftp/ftpintreq.hxx84
-rw-r--r--ucb/source/ucp/ftp/ftploaderthread.cxx96
-rw-r--r--ucb/source/ucp/ftp/ftploaderthread.hxx59
-rw-r--r--ucb/source/ucp/ftp/ftpresultsetI.cxx90
-rw-r--r--ucb/source/ucp/ftp/ftpresultsetI.hxx46
-rw-r--r--ucb/source/ucp/ftp/ftpresultsetbase.cxx510
-rw-r--r--ucb/source/ucp/ftp/ftpresultsetbase.hxx410
-rw-r--r--ucb/source/ucp/ftp/ftpresultsetfactory.hxx57
-rw-r--r--ucb/source/ucp/ftp/ftpurl.cxx793
-rw-r--r--ucb/source/ucp/ftp/ftpurl.hxx161
-rw-r--r--ucb/source/ucp/ftp/ucpftp1.component26
40 files changed, 2 insertions, 6114 deletions
diff --git a/Repository.mk b/Repository.mk
index f2d560b4cad3..72a88d3e8429 100644
--- a/Repository.mk
+++ b/Repository.mk
@@ -679,7 +679,6 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \
ucbhelper \
$(if $(WITH_WEBDAV),ucpdav1) \
ucpfile1 \
- ucpftp1 \
$(call gb_Helper_optional,XMLHELP,ucpchelp1) \
ucphier1 \
ucppkg1 \
diff --git a/external/curl/ExternalProject_curl.mk b/external/curl/ExternalProject_curl.mk
index 5f72e4807394..c63a8e0465ce 100644
--- a/external/curl/ExternalProject_curl.mk
+++ b/external/curl/ExternalProject_curl.mk
@@ -38,7 +38,7 @@ $(call gb_ExternalProject_get_state_target,curl,build):
$(gb_RUN_CONFIGURE) ./configure \
--without-amissl --without-bearssl --without-gnutls \
--without-mbedtls --without-rustls --without-wolfssl \
- --enable-ftp --enable-http --enable-ipv6 \
+ --disable-ftp --enable-http --enable-ipv6 \
--without-libidn2 --without-libpsl --without-librtmp \
--without-libssh2 --without-nghttp2 \
--without-libssh --without-brotli \
diff --git a/external/curl/curl-msvc-disable-protocols.patch.1 b/external/curl/curl-msvc-disable-protocols.patch.1
index 71ff0c01a028..905a2d6a7ac3 100644
--- a/external/curl/curl-msvc-disable-protocols.patch.1
+++ b/external/curl/curl-msvc-disable-protocols.patch.1
@@ -8,7 +8,7 @@ disable protocols nobody needs in MSVC build
+#define CURL_DISABLE_DICT 1
+#define CURL_DISABLE_FILE 1
-+#undef CURL_DISABLE_FTP
++#define CURL_DISABLE_FTP 1
+#define CURL_DISABLE_GOPHER 1
+#undef CURL_DISABLE_HTTP
+#define CURL_DISABLE_IMAP 1
diff --git a/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu b/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu
index 958202157838..9a2d98b31e69 100644
--- a/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu
+++ b/officecfg/registry/data/org/openoffice/ucb/Configuration.xcu
@@ -89,17 +89,6 @@
<value/>
</prop>
</node>
- <node oor:name="Provider6" oor:op="replace">
- <prop oor:name="ServiceName">
- <value>com.sun.star.ucb.FTPContentProvider</value>
- </prop>
- <prop oor:name="URLTemplate">
- <value>ftp</value>
- </prop>
- <prop oor:name="Arguments">
- <value/>
- </prop>
- </node>
<node oor:name="Provider8" oor:op="replace">
<prop oor:name="ServiceName">
<value>com.sun.star.ucb.PackageContentProvider</value>
diff --git a/qadevOOo/Jar_OOoRunner.mk b/qadevOOo/Jar_OOoRunner.mk
index 365ea75bc71b..3ba2d4525aee 100644
--- a/qadevOOo/Jar_OOoRunner.mk
+++ b/qadevOOo/Jar_OOoRunner.mk
@@ -1232,7 +1232,6 @@ $(eval $(call gb_Jar_add_sourcefiles,OOoRunner,\
qadevOOo/tests/java/mod/_ucpchelp/CHelpContentProvider \
qadevOOo/tests/java/mod/_ucpdav/WebDAVContentProvider \
qadevOOo/tests/java/mod/_ucpfile/FileProvider \
- qadevOOo/tests/java/mod/_ucpftp/FTPContentProvider \
qadevOOo/tests/java/mod/_ucphier/HierarchyContentProvider \
qadevOOo/tests/java/mod/_ucphier/HierarchyDataSource \
qadevOOo/tests/java/mod/_ucppkg/PackageContentProvider \
diff --git a/qadevOOo/objdsc/ucpftp/com.sun.star.comp.ucb.FTPContentProvider.csv b/qadevOOo/objdsc/ucpftp/com.sun.star.comp.ucb.FTPContentProvider.csv
deleted file mode 100644
index c5adee391f2a..000000000000
--- a/qadevOOo/objdsc/ucpftp/com.sun.star.comp.ucb.FTPContentProvider.csv
+++ /dev/null
@@ -1,2 +0,0 @@
-"FTPContentProvider";"com::sun::star::ucb::XContentProvider";"queryContent()"
-"FTPContentProvider";"com::sun::star::ucb::XContentProvider";"compareContentIds()"
diff --git a/qadevOOo/tests/java/mod/_ucpftp/FTPContentProvider.java b/qadevOOo/tests/java/mod/_ucpftp/FTPContentProvider.java
deleted file mode 100644
index 7bb047214d37..000000000000
--- a/qadevOOo/tests/java/mod/_ucpftp/FTPContentProvider.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-package mod._ucpftp;
-
-import java.io.PrintWriter;
-
-import lib.TestCase;
-import lib.TestEnvironment;
-import lib.TestParameters;
-
-import com.sun.star.lang.XMultiServiceFactory;
-import com.sun.star.ucb.XContentIdentifierFactory;
-import com.sun.star.uno.UnoRuntime;
-import com.sun.star.uno.XInterface;
-
-public class FTPContentProvider extends TestCase {
-
- @Override
- public TestEnvironment createTestEnvironment
- ( TestParameters Param,PrintWriter log ) throws Exception {
-
- XInterface oObj = null;
- Object oInterface = null;
- Object aUCB = null;
-
- XMultiServiceFactory xMSF = Param.getMSF();
- oInterface = xMSF.createInstance
- ( "com.sun.star.ucb.FTPContentProvider" );
- aUCB = xMSF.createInstance
- ( "com.sun.star.comp.ucb.UniversalContentBroker" );
-
- oObj = (XInterface) oInterface;
-
- XContentIdentifierFactory CIF = UnoRuntime.queryInterface(XContentIdentifierFactory.class,aUCB);
-
- log.println("ImplementationName: "+util.utils.getImplName(oObj));
- util.dbg.printInterfaces(oObj);
- TestEnvironment tEnv = new TestEnvironment( oObj );
-
- //Adding ObjRelation for XContentProvider
- tEnv.addObjRelation("FACTORY",CIF);
- tEnv.addObjRelation("CONTENT1","ftp:///ftp.sun.com");
- tEnv.addObjRelation("CONTENT2","ftp:///ftp.openoffice.org");
-
- return tEnv;
-
- } // finish method getTestEnvironment
-
-} // finish class FileProvider
-
diff --git a/ucb/JunitTest_ucb_complex.mk b/ucb/JunitTest_ucb_complex.mk
deleted file mode 100644
index 6aa02ff9dbfb..000000000000
--- a/ucb/JunitTest_ucb_complex.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_JunitTest_JunitTest,ucb_complex))
-
-$(eval $(call gb_JunitTest_set_defs,ucb_complex,\
- $$(DEFS) \
- -Dorg.openoffice.test.arg.tdoc=$(SRCDIR)/ucb/qa/complex/testdocuments \
-))
-
-$(eval $(call gb_JunitTest_use_unoapi_jars,ucb_complex))
-
-$(eval $(call gb_JunitTest_add_sourcefiles,ucb_complex,\
- ucb/qa/complex/ucb/UCB \
-))
-$(eval $(call gb_JunitTest_add_classes,ucb_complex,\
- complex.ucb.UCB \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/ucb/Library_ucpftp1.mk b/ucb/Library_ucpftp1.mk
deleted file mode 100644
index a6ac6c69f69b..000000000000
--- a/ucb/Library_ucpftp1.mk
+++ /dev/null
@@ -1,50 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_Library_Library,ucpftp1))
-
-$(eval $(call gb_Library_set_componentfile,ucpftp1,ucb/source/ucp/ftp/ucpftp1,services))
-
-$(eval $(call gb_Library_use_external,ucpftp1,boost_headers))
-
-$(eval $(call gb_Library_use_sdk_api,ucpftp1))
-
-$(eval $(call gb_Library_use_custom_headers,ucpftp1,\
- officecfg/registry \
-))
-
-$(eval $(call gb_Library_use_libraries,ucpftp1,\
- comphelper \
- cppu \
- cppuhelper \
- sal \
- ucbhelper \
-))
-
-$(eval $(call gb_Library_use_externals,ucpftp1,\
- curl \
-))
-
-$(eval $(call gb_Library_add_exception_objects,ucpftp1,\
- ucb/source/ucp/ftp/ftpcfunc \
- ucb/source/ucp/ftp/ftpcontentcaps \
- ucb/source/ucp/ftp/ftpcontent \
- ucb/source/ucp/ftp/ftpcontentidentifier \
- ucb/source/ucp/ftp/ftpcontentprovider \
- ucb/source/ucp/ftp/ftpdirp \
- ucb/source/ucp/ftp/ftpdynresultset \
- ucb/source/ucp/ftp/ftpintreq \
- ucb/source/ucp/ftp/ftploaderthread \
- ucb/source/ucp/ftp/ftpresultsetbase \
- ucb/source/ucp/ftp/ftpresultsetI \
- ucb/source/ucp/ftp/ftpurl \
-))
-
-# vim: set noet sw=4 ts=4:
diff --git a/ucb/Module_ucb.mk b/ucb/Module_ucb.mk
index 7bbcc925e28d..3964eb1d9c39 100644
--- a/ucb/Module_ucb.mk
+++ b/ucb/Module_ucb.mk
@@ -18,7 +18,6 @@ $(eval $(call gb_Module_add_targets,ucb,\
Library_ucpexpand1 \
Library_ucpext \
Library_ucpfile1 \
- $(if $(ENABLE_CURL),Library_ucpftp1) \
Library_ucphier1 \
Library_ucpimage \
Library_ucppkg1 \
@@ -40,7 +39,6 @@ $(eval $(call gb_Module_add_check_targets,ucb,\
endif
$(eval $(call gb_Module_add_subsequentcheck_targets,ucb,\
- JunitTest_ucb_complex \
JunitTest_ucb_unoapi \
))
diff --git a/ucb/qa/complex/ucb/UCB.java b/ucb/qa/complex/ucb/UCB.java
deleted file mode 100644
index 16ee670805ff..000000000000
--- a/ucb/qa/complex/ucb/UCB.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-package complex.ucb;
-
-import com.sun.star.beans.Property;
-import com.sun.star.sdbc.XRow;
-import com.sun.star.ucb.*;
-import com.sun.star.uno.UnoRuntime;
-
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.openoffice.test.OfficeConnection;
-import static org.junit.Assert.*;
-
-/**
- * This class is used to copy the content of a folder to
- * another folder.
- * There is an inconsistency with argument order.
- * It should be always: dir,filename.
- */
-public class UCB {
- private XUniversalContentBroker ucb;
-
- public void init() throws Exception {
- ucb = UniversalContentBroker.create(connection.getComponentContext());
- }
-
- public void delete(String filename) throws Exception {
- executeCommand(getContent(filename), "delete", Boolean.TRUE);
- }
-
- /**
- * target name can be "", in which case the name stays lige the source name
- */
- public Object executeCommand(
- Object xContent,
- String aCommandName,
- Object aArgument)
- throws com.sun.star.ucb.CommandAbortedException, com.sun.star.uno.Exception {
- XCommandProcessor xCmdProcessor =
- UnoRuntime.queryInterface(XCommandProcessor.class, xContent);
- Command aCommand = new Command();
- aCommand.Name = aCommandName;
- aCommand.Handle = -1; // not available
- aCommand.Argument = aArgument;
- return xCmdProcessor.execute(aCommand, 0, null);
- }
-
- public Object getContentProperty(
- Object content,
- String propName,
- Class type)
- throws Exception {
- Property[] pv = new Property[1];
- pv[0] = new Property();
- pv[0].Name = propName;
- pv[0].Handle = -1;
-
- Object row = executeCommand(content, "getPropertyValues", pv);
- XRow xrow = UnoRuntime.queryInterface(XRow.class, row);
- if (type.equals(String.class))
- {
- return xrow.getString(1);
- }
- else if (type.equals(Boolean.class))
- {
- return xrow.getBoolean(1) ? Boolean.TRUE : Boolean.FALSE;
- }
- else if (type.equals(Integer.class))
- {
- return Integer.valueOf(xrow.getInt(1));
- }
- else if (type.equals(Short.class))
- {
- return Short.valueOf(xrow.getShort(1));
- }
- else
- {
- return null;
- }
-
- }
-
- public Object getContent(String path) throws Exception
- {
- XContentIdentifier id = ucb.createContentIdentifier(path);
- return ucb.queryContent(id);
- }
-
- @Test public void checkWrongFtpConnection() {
- try {
- String acountUrl = "ftp://noname:nopasswd@*nohost.invalid";
- System.out.println(acountUrl);
- init();
- Object content = getContent(acountUrl);
-
- OpenCommandArgument2 aArg = new OpenCommandArgument2();
- aArg.Mode = OpenMode.ALL; // FOLDER, DOCUMENTS -> simple filter
- aArg.Priority = 32768; // Ignored by most implementations
-
- System.out.println("now executing open");
- executeCommand(content, "open", aArg);
- fail("Expected exception 'IllegalArgumentException' or 'IllegalIdentifierException' was not thrown.");
- } catch (com.sun.star.lang.IllegalArgumentException ex) {
- // correct
- } catch (com.sun.star.ucb.IllegalIdentifierException ex) {
- // correct
- } catch(com.sun.star.ucb.InteractiveNetworkException ex) {
- System.out.println("This Exception is correctly thrown when no Proxy in StarOffice is used.");
- System.out.println("To reproduce the bug behaviour, use a Proxy and try again.");
- } catch (Exception ex) {
- ex.printStackTrace();
- String exceptionName = ex.toString();
- System.out.println("ExName: '"+exceptionName+"'");
- fail("Wrong exception thrown: " + exceptionName);
- }
- }
-
- // setup and close connections
- @BeforeClass public static void setUpConnection() throws Exception {
- System.out.println("setUpConnection()");
- connection.setUp();
- }
-
- @AfterClass public static void tearDownConnection()
- throws InterruptedException, com.sun.star.uno.Exception
- {
- System.out.println("tearDownConnection()");
- connection.tearDown();
- }
-
- private static final OfficeConnection connection = new OfficeConnection();
-
-}
diff --git a/ucb/qa/complex/ucb/makefile.mk b/ucb/qa/complex/ucb/makefile.mk
deleted file mode 100644
index 401576c9cf16..000000000000
--- a/ucb/qa/complex/ucb/makefile.mk
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-# This file incorporates work covered by the following license notice:
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed
-# with this work for additional information regarding copyright
-# ownership. The ASF licenses this file to you under the Apache
-# License, Version 2.0 (the "License"); you may not use this file
-# except in compliance with the License. You may obtain a copy of
-# the License at http://www.apache.org/licenses/LICENSE-2.0 .
-#
-
-.IF "$(OOO_SUBSEQUENT_TESTS)" == ""
-nothing .PHONY:
-.ELSE
-
-PRJ = ../../..
-PRJNAME = UCB
-TARGET = qa_complex_ucb
-
-.IF "$(OOO_JUNIT_JAR)" != ""
-PACKAGE = complex/ucb
-JAVATESTFILES = \
- UCB.java
-
-JAVAFILES = $(JAVATESTFILES)
-
-JARFILES = OOoRunner.jar ridl.jar test.jar unoil.jar jurt.jar
-EXTRAJARFILES = $(OOO_JUNIT_JAR)
-
-# Sample how to debug
-# JAVAIFLAGS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=9003,suspend=y
-.END
-
-.INCLUDE: settings.mk
-.INCLUDE: target.mk
-.INCLUDE: installationtest.mk
-
-ALLTAR : javatest
-
-.END
-
-
-
-
-
-
diff --git a/ucb/qa/unoapi/ucb.sce b/ucb/qa/unoapi/ucb.sce
index 0c798cfdedab..7898f55c5a98 100644
--- a/ucb/qa/unoapi/ucb.sce
+++ b/ucb/qa/unoapi/ucb.sce
@@ -22,7 +22,6 @@
-o ucpchelp.CHelpContentProvider
-o ucpdav.WebDAVContentProvider
-o ucpfile.FileProvider
--o ucpftp.FTPContentProvider
-o ucphier.HierarchyContentProvider
-o ucphier.HierarchyDataSource
-o ucppkg.PackageContentProvider
diff --git a/ucb/source/ucp/ftp/curl.hxx b/ucb/source/ucp/ftp/curl.hxx
deleted file mode 100644
index 3dac8a057ffa..000000000000
--- a/ucb/source/ucp/ftp/curl.hxx
+++ /dev/null
@@ -1,24 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include <curl/curl.h>
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpcfunc.cxx b/ucb/source/ucp/ftp/ftpcfunc.cxx
deleted file mode 100644
index a39043aa792e..000000000000
--- a/ucb/source/ucp/ftp/ftpcfunc.cxx
+++ /dev/null
@@ -1,50 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-#include <osl/file.h>
-#include "ftpcontentidentifier.hxx"
-#include "ftpcfunc.hxx"
-
-using namespace ftp;
-using namespace com::sun::star::uno;
-
-extern "C" {
-
- int file_write(void *buffer,size_t size,size_t nmemb,void *stream)
- {
- oslFileHandle aFile = reinterpret_cast< oslFileHandle >( stream );
- if( !aFile )
- return 0;
-
- sal_uInt64 nWritten = 0;
- sal_uInt64 nToWrite( size * nmemb );
- osl_writeFile( aFile, buffer, nToWrite, &nWritten );
-
- return nWritten != nToWrite ? 0 : nmemb;
- }
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpcfunc.hxx b/ucb/source/ucp/ftp/ftpcfunc.hxx
deleted file mode 100644
index f5a29a3fbf46..000000000000
--- a/ucb/source/ucp/ftp/ftpcfunc.hxx
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-#pragma once
-
-#include <stddef.h>
-
-extern "C" {
-
-/** callback for curl_easy_perform(),
- * forwarding the written content to the stream.
- * stream has to be of type oslFileHandle.
- */
-
-int file_write(void* buffer, size_t size, size_t nmemb, void* stream);
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpcontainer.hxx b/ucb/source/ucp/ftp/ftpcontainer.hxx
deleted file mode 100644
index e555111a223d..000000000000
--- a/ucb/source/ucp/ftp/ftpcontainer.hxx
+++ /dev/null
@@ -1,56 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-
-#pragma once
-
-#include <sal/types.h>
-
-namespace ftp {
-
-class MemoryContainer {
-
-public:
-
- MemoryContainer();
-
- ~MemoryContainer();
-
- int append(
- const void* pBuffer,
- size_t size,
- size_t nmemb
- ) noexcept;
-
-
- sal_uInt32 m_nLen,m_nWritePos;
- void *m_pBuffer;
-};
-
-}
-
-
-extern "C" int memory_write(
- void *buffer,size_t size,size_t nmemb,void *stream);
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpcontent.cxx b/ucb/source/ucp/ftp/ftpcontent.cxx
deleted file mode 100644
index 4cca92f3b601..000000000000
--- a/ucb/source/ucp/ftp/ftpcontent.cxx
+++ /dev/null
@@ -1,853 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-
-#include "ftpdynresultset.hxx"
-#include "ftpresultsetfactory.hxx"
-#include "ftpresultsetI.hxx"
-#include "ftpcontent.hxx"
-#include "ftpcontentprovider.hxx"
-#include "ftpdirp.hxx"
-#include "ftpcontentidentifier.hxx"
-#include "ftpintreq.hxx"
-
-#include <memory>
-#include <utility>
-#include <vector>
-#include <string.h>
-#include "curl.hxx"
-#include <comphelper/propertysequence.hxx>
-#include <cppuhelper/queryinterface.hxx>
-#include <cppuhelper/supportsservice.hxx>
-#include <cppuhelper/typeprovider.hxx>
-#include <ucbhelper/cancelcommandexecution.hxx>
-#include <ucbhelper/fd_inputstream.hxx>
-#include <ucbhelper/propertyvalueset.hxx>
-#include <ucbhelper/simpleauthenticationrequest.hxx>
-#include <com/sun/star/lang/IllegalAccessException.hpp>
-#include <com/sun/star/lang/NoSupportException.hpp>
-#include <com/sun/star/ucb/ContentInfoAttribute.hpp>
-#include <com/sun/star/ucb/UnsupportedCommandException.hpp>
-#include <com/sun/star/beans/IllegalTypeException.hpp>
-#include <com/sun/star/beans/UnknownPropertyException.hpp>
-#include <com/sun/star/beans/Property.hpp>
-#include <com/sun/star/ucb/XCommandInfo.hpp>
-#include <com/sun/star/io/BufferSizeExceededException.hpp>
-#include <com/sun/star/io/IOException.hpp>
-#include <com/sun/star/io/NotConnectedException.hpp>
-#include <com/sun/star/io/XActiveDataSink.hpp>
-#include <com/sun/star/io/XOutputStream.hpp>
-#include <com/sun/star/ucb/UnsupportedDataSinkException.hpp>
-#include <com/sun/star/ucb/OpenCommandArgument2.hpp>
-#include <com/sun/star/ucb/UnsupportedOpenModeException.hpp>
-#include <com/sun/star/ucb/IllegalIdentifierException.hpp>
-#include <com/sun/star/ucb/InteractiveNetworkConnectException.hpp>
-#include <com/sun/star/ucb/InteractiveNetworkResolveNameException.hpp>
-#include <com/sun/star/ucb/InteractiveIOException.hpp>
-#include <com/sun/star/ucb/MissingPropertiesException.hpp>
-#include <com/sun/star/ucb/MissingInputStreamException.hpp>
-#include <com/sun/star/ucb/UnsupportedNameClashException.hpp>
-#include <com/sun/star/ucb/OpenMode.hpp>
-#include <com/sun/star/ucb/IOErrorCode.hpp>
-
-using namespace ftp;
-using namespace com::sun::star::task;
-using namespace com::sun::star::container;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::ucb;
-using namespace com::sun::star::beans;
-using namespace com::sun::star::io;
-using namespace com::sun::star::sdbc;
-
-
-// Content Implementation.
-
-FTPContent::FTPContent( const Reference< XComponentContext >& rxContext,
- FTPContentProvider* pProvider,
- const Reference< XContentIdentifier >& Identifier,
- const FTPURL& aFTPURL)
- : ContentImplHelper(rxContext,pProvider,Identifier)
- , m_pFCP(pProvider)
- , m_aFTPURL(aFTPURL)
- , m_bInserted(false)
- , m_bTitleSet(false)
-{
-}
-
-FTPContent::FTPContent( const Reference< XComponentContext >& rxContext,
- FTPContentProvider* pProvider,
- const Reference< XContentIdentifier >& Identifier,
- ContentInfo Info)
- : ContentImplHelper(rxContext,pProvider,Identifier)
- , m_pFCP(pProvider)
- , m_aFTPURL(Identifier->getContentIdentifier(), pProvider)
- , m_bInserted(true)
- , m_bTitleSet(false)
- , m_aInfo(std::move(Info))
-{
-}
-
-FTPContent::~FTPContent()
-{
-}
-
-// XInterface methods.
-
-void SAL_CALL FTPContent::acquire()
- noexcept
-{
- OWeakObject::acquire();
-}
-
-void SAL_CALL FTPContent::release()
- noexcept
-{
- OWeakObject::release();
-}
-
-css::uno::Any SAL_CALL FTPContent::queryInterface( const css::uno::Type & rType )
-{
- css::uno::Any aRet = cppu::queryInterface( rType,
- static_cast< XTypeProvider* >(this),
- static_cast< XServiceInfo* >(this),
- static_cast< XContent* >(this),
- static_cast< XCommandProcessor* >(this),
- static_cast< XContentCreator* >(this),
- static_cast< XChild* >(this)
- );
- return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType );
-}
-
-// XTypeProvider methods.
-
-css::uno::Sequence< sal_Int8 > SAL_CALL FTPContent::getImplementationId()
-{
- return css::uno::Sequence<sal_Int8>();
-}
-
-css::uno::Sequence< css::uno::Type > SAL_CALL FTPContent::getTypes()
-{
- static cppu::OTypeCollection s_aCollection(
- cppu::UnoType<XTypeProvider>::get(),
- cppu::UnoType<XServiceInfo>::get(),
- cppu::UnoType<XContent>::get(),
- cppu::UnoType<XCommandProcessor>::get(),
- cppu::UnoType<XContentCreator>::get(),
- cppu::UnoType<XChild>::get()
- );
-
- return s_aCollection.getTypes();
-}
-
-
-// XServiceInfo methods.
-
-OUString SAL_CALL FTPContent::getImplementationName()
-{
- return "com.sun.star.comp.FTPContent";
-}
-
-sal_Bool SAL_CALL FTPContent::supportsService( const OUString& ServiceName )
-{
- return cppu::supportsService( this, ServiceName );
-}
-
-css::uno::Sequence< OUString > SAL_CALL FTPContent::getSupportedServiceNames()
-{
- return { "com.sun.star.ucb.FTPContent" };
-}
-
-
-// XContent methods.
-
-// virtual
-OUString SAL_CALL FTPContent::getContentType()
-{
- return FTP_CONTENT_TYPE;
-}
-
-// XCommandProcessor methods.
-
-//virtual
-void SAL_CALL FTPContent::abort( sal_Int32 /*CommandId*/ )
-{
-}
-
-
-ResultSetFactory::ResultSetFactory(const Reference<XComponentContext >& rxContext,
- const Reference<XContentProvider >& xProvider,
- const Sequence<Property>& seq,
- std::vector<FTPDirentry>&& dirvec)
- : m_xContext(rxContext),
- m_xProvider(xProvider),
- m_seq(seq),
- m_dirvec(std::move(dirvec))
-{
-}
-
-
-rtl::Reference<ResultSetBase> ResultSetFactory::createResultSet()
-{
- return new ResultSetI(m_xContext,
- m_xProvider,
- m_seq,
- m_dirvec);
-}
-
-
-// XCommandProcessor methods.
-
-namespace {
-
-enum ACTION { NOACTION,
- THROWAUTHENTICATIONREQUEST,
- THROWACCESSDENIED,
- THROWINTERACTIVECONNECT,
- THROWMALFORMED,
- THROWRESOLVENAME,
- THROWQUOTE,
- THROWNOFILE,
- THROWGENERAL };
-
-}
-
-// virtual
-Any SAL_CALL FTPContent::execute( const Command& aCommand,
- sal_Int32 /*CommandId*/,
- const Reference<
- XCommandEnvironment >& Environment)
-{
- ACTION action(NOACTION);
- Any aRet;
-
- while(true)
- {
- try
- {
- if(action == THROWAUTHENTICATIONREQUEST)
- {
- // try to get a continuation first
- OUString aPassword,aAccount;
- m_pFCP->forHost(m_aFTPURL.host(),
- m_aFTPURL.port(),
- m_aFTPURL.username(),
- aPassword,
- aAccount);
- rtl::Reference<ucbhelper::SimpleAuthenticationRequest>
- p( new ucbhelper::SimpleAuthenticationRequest(
- m_aFTPURL.ident(false, false),
- m_aFTPURL.host(), // ServerName
- ucbhelper::SimpleAuthenticationRequest::ENTITY_NA,
- OUString(),
- ucbhelper::SimpleAuthenticationRequest
- ::ENTITY_FIXED,
- m_aFTPURL.username(),
- ucbhelper::SimpleAuthenticationRequest
- ::ENTITY_MODIFY,
- aPassword));
-
- Reference<XInteractionHandler> xInteractionHandler;
- if(Environment.is())
- xInteractionHandler =
- Environment->getInteractionHandler();
-
- if( xInteractionHandler.is()) {
- xInteractionHandler->handle(p);
-
- Reference<XInterface> xSelection(
- p->getSelection());
-
- if(Reference<XInteractionRetry>(
- xSelection,UNO_QUERY).is())
- action = NOACTION;
- else if(Reference<XInteractionSupplyAuthentication>(
- xSelection,UNO_QUERY).is()) {
- m_pFCP->setHost(
- m_aFTPURL.host(),
- m_aFTPURL.port(),
- m_aFTPURL.username(),
- p->getAuthenticationSupplier()->getPassword(),
- aAccount);
- action = NOACTION;
- }
- }
- aRet = p->getRequest();
- }
-
-// if(aCommand.Name.equalsAscii(
-// "getPropertyValues") &&
-// action != NOACTION) {
-// // It is not allowed to throw if
-// // command is getPropertyValues
-// rtl::Reference<ucbhelper::PropertyValueSet> xRow =
-// new ucbhelper::PropertyValueSet(m_xSMgr);
-// Sequence<Property> Properties;
-// aCommand.Argument >>= Properties;
-// for(int i = 0; i < Properties.getLength(); ++i)
-// xRow->appendVoid(Properties[i]);
-// aRet <<= Reference<XRow>(xRow.get());
-// return aRet;
-// }
-
- switch (action)
- {
- case NOACTION:
- break;
-
- case THROWAUTHENTICATIONREQUEST:
- ucbhelper::cancelCommandExecution(
- aRet,
- Reference<XCommandEnvironment>(nullptr));
- break;
-
- case THROWACCESSDENIED:
- {
- Sequence<Any> seq(comphelper::InitAnyPropertySequence(
- {
- {"Uri", Any(m_aFTPURL.ident(false,false))}
- }));
- ucbhelper::cancelCommandExecution(
- IOErrorCode_ACCESS_DENIED,
- seq,
- Environment);
- break;
- }
- case THROWINTERACTIVECONNECT:
- {
- InteractiveNetworkConnectException excep;
- excep.Server = m_aFTPURL.host();
- aRet <<= excep;
- ucbhelper::cancelCommandExecution(
- aRet,
- Environment);
- break;
- }
- case THROWMALFORMED:
- {
- IllegalIdentifierException ex;
- aRet <<= ex;
- ucbhelper::cancelCommandExecution(
- aRet,
- Environment);
- break;
- }
- case THROWRESOLVENAME:
- {
- InteractiveNetworkResolveNameException excep;
- excep.Server = m_aFTPURL.host();
- aRet <<= excep;
- ucbhelper::cancelCommandExecution(
- aRet,
- Environment);
- break;
- }
- case THROWNOFILE:
- {
- Sequence<Any> seq(comphelper::InitAnyPropertySequence(
- {
- {"Uri", Any(m_aFTPURL.ident(false,false))}
- }));
- ucbhelper::cancelCommandExecution(
- IOErrorCode_NO_FILE,
- seq,
- Environment);
- break;
- }
- case THROWQUOTE:
- case THROWGENERAL:
- ucbhelper::cancelCommandExecution(
- IOErrorCode_GENERAL,
- Sequence<Any>(0),
- Environment);
- break;
- }
-
- if(aCommand.Name == "getPropertyValues") {
- Sequence<Property> Properties;
- if(!(aCommand.Argument >>= Properties))
- {
- aRet <<= IllegalArgumentException(
- "Wrong argument type!",
- getXWeak(),
- -1);
- ucbhelper::cancelCommandExecution(aRet,Environment);
- }
-
- aRet <<= getPropertyValues(Properties);
- }
- else if(aCommand.Name == "setPropertyValues")
- {
- Sequence<PropertyValue> propertyValues;
-
- if( ! ( aCommand.Argument >>= propertyValues ) ) {
- aRet <<= IllegalArgumentException(
- "Wrong argument type!",
- getXWeak(),
- -1);
- ucbhelper::cancelCommandExecution(aRet,Environment);
- }
-
- aRet <<= setPropertyValues(propertyValues);
- }
- else if(aCommand.Name == "getCommandInfo") {
- // Note: Implemented by base class.
- aRet <<= getCommandInfo(Environment);
- }
- else if(aCommand.Name == "getPropertySetInfo") {
- // Note: Implemented by base class.
- aRet <<= getPropertySetInfo(Environment);
- }
- else if(aCommand.Name == "insert")
- {
- InsertCommandArgument aInsertArgument;
- if ( ! ( aCommand.Argument >>= aInsertArgument ) ) {
- aRet <<= IllegalArgumentException(
- "Wrong argument type!",
- getXWeak(),
- -1);
- ucbhelper::cancelCommandExecution(aRet,Environment);
- }
- insert(aInsertArgument,Environment);
- }
- else if(aCommand.Name == "delete") {
- m_aFTPURL.del();
- deleted();
- }
- else if(aCommand.Name == "open") {
- OpenCommandArgument2 aOpenCommand;
- if ( !( aCommand.Argument >>= aOpenCommand ) ) {
- aRet <<= IllegalArgumentException(
- "Wrong argument type!",
- getXWeak(),
- -1);
-
- ucbhelper::cancelCommandExecution(aRet,Environment);
- }
-
- if(aOpenCommand.Mode == OpenMode::DOCUMENT) {
- // Open as a document
- Reference<XActiveDataSink>
- xActiveDataSink(aOpenCommand.Sink,UNO_QUERY);
- Reference< XOutputStream >
- xOutputStream(aOpenCommand.Sink,UNO_QUERY);
-
- if(xActiveDataSink.is()) {
- xActiveDataSink->setInputStream(
- new ucbhelper::FdInputStream(m_aFTPURL.open()));
- }
- else if(xOutputStream.is()) {
- Reference<XInputStream> xStream(
- new ucbhelper::FdInputStream(m_aFTPURL.open()));
- for (;;) {
- Sequence<sal_Int8> byte_seq(4096);
- sal_Int32 n = xStream->readBytes(byte_seq, 4096);
- if (n == 0) {
- break;
- }
- try {
- if(byte_seq.getLength() != n)
- byte_seq.realloc(n);
- xOutputStream->writeBytes(byte_seq);
- } catch(const NotConnectedException&) {
-
- } catch(const BufferSizeExceededException&) {
-
- } catch(const IOException&) {
-
- }
- }
- }
- else {
- aRet <<= UnsupportedDataSinkException(
- OUString(),
- getXWeak(),
- aOpenCommand.Sink);
- ucbhelper::cancelCommandExecution(aRet,Environment);
- }
- }
- else if(aOpenCommand.Mode == OpenMode::ALL ||
- aOpenCommand.Mode == OpenMode::DOCUMENTS ||
- aOpenCommand.Mode == OpenMode::FOLDERS ) {
- std::vector<FTPDirentry> resvec =
- m_aFTPURL.list(sal_Int16(aOpenCommand.Mode));
- Reference< XDynamicResultSet > xSet
- = new DynamicResultSet(
- m_xContext,
- aOpenCommand,
- std::make_unique<ResultSetFactory>(m_xContext,
- m_xProvider.get(),
- aOpenCommand.Properties,
- std::move(resvec)));
- aRet <<= xSet;
- }
- else if(aOpenCommand.Mode ==
- OpenMode::DOCUMENT_SHARE_DENY_NONE ||
- aOpenCommand.Mode ==
- OpenMode::DOCUMENT_SHARE_DENY_WRITE) {
- // Unsupported OpenMode
- aRet <<= UnsupportedOpenModeException(
- OUString(),
- getXWeak(),
- static_cast< sal_Int16 >(aOpenCommand.Mode));
- ucbhelper::cancelCommandExecution(aRet,Environment);
- }
- else {
- aRet <<= IllegalArgumentException(
- "Unexpected OpenMode!",
- getXWeak(),
- -1);
-
- ucbhelper::cancelCommandExecution(aRet,Environment);
- }
- } else if(aCommand.Name == "createNewContent") {
- ContentInfo aArg;
- if (!(aCommand.Argument >>= aArg)) {
- ucbhelper::cancelCommandExecution(
- Any(
- IllegalArgumentException(
- "Wrong argument type!",
- getXWeak(),
- -1)),
- Environment);
- // Unreachable
- }
- aRet <<= createNewContent(aArg);
- } else {
- aRet <<= UnsupportedCommandException(
- aCommand.Name,
- getXWeak());
- ucbhelper::cancelCommandExecution(aRet,Environment);
- }
-
- return aRet;
- }
- catch(const curl_exception& e)
- {
- if(e.code() == CURLE_COULDNT_CONNECT)
- action = THROWINTERACTIVECONNECT;
- else if (e.code() == CURLE_URL_MALFORMAT)
- {
- action = THROWMALFORMED;
- }
- else if(e.code() == CURLE_COULDNT_RESOLVE_HOST )
- action = THROWRESOLVENAME;
- else if(e.code() == CURLE_FTP_USER_PASSWORD_INCORRECT ||
- e.code() == CURLE_LOGIN_DENIED ||
- e.code() == CURLE_BAD_PASSWORD_ENTERED ||
- e.code() == CURLE_FTP_WEIRD_PASS_REPLY)
- action = THROWAUTHENTICATIONREQUEST;
- else if(e.code() == CURLE_FTP_ACCESS_DENIED)
- action = THROWACCESSDENIED;
- else if(e.code() == CURLE_FTP_QUOTE_ERROR)
- action = THROWQUOTE;
- else if(e.code() == CURLE_FTP_COULDNT_RETR_FILE)
- action = THROWNOFILE;
- else
- // nothing known about the cause of the error
- action = THROWGENERAL;
- }
- }
-}
-
-constexpr OUString FTP_FILE = u"application/vnd.sun.staroffice.ftp-file"_ustr;
-
-constexpr OUString FTP_FOLDER = u"application/vnd.sun.staroffice.ftp-folder"_ustr;
-
-Sequence<ContentInfo > SAL_CALL
-FTPContent::queryCreatableContentsInfo( )
-{
- return queryCreatableContentsInfo_Static();
-}
-
-// static
-Sequence<ContentInfo >
-FTPContent::queryCreatableContentsInfo_Static( )
-{
- Sequence< Property > props{ Property(
- "Title",
- -1,
- cppu::UnoType<OUString>::get(),
- PropertyAttribute::MAYBEVOID
- | PropertyAttribute::BOUND ) };
- return
- {
- { FTP_FILE, ContentInfoAttribute::INSERT_WITH_INPUTSTREAM | ContentInfoAttribute::KIND_DOCUMENT, props },
- { FTP_FOLDER, ContentInfoAttribute::KIND_FOLDER, props }
- };
-}
-
-Reference<XContent > SAL_CALL
-FTPContent::createNewContent( const ContentInfo& Info )
-{
- if( Info.Type =="application/vnd.sun.staroffice.ftp-file" || Info.Type == "application/vnd.sun.staroffice.ftp-folder" )
- return new FTPContent(m_xContext,
- m_pFCP,
- m_xIdentifier,Info);
- else
- return Reference<XContent>(nullptr);
-}
-
-
-Reference<XInterface > SAL_CALL
-FTPContent::getParent( )
-{
- Reference<XContentIdentifier>
- xIdent(new FTPContentIdentifier(m_aFTPURL.parent()));
- return Reference<XInterface>( m_xProvider->queryContent(xIdent), UNO_QUERY );
-}
-
-
-void SAL_CALL
-FTPContent::setParent(const Reference<XInterface >& /*Parent*/ )
-{
- throw NoSupportException();
-}
-
-
-OUString FTPContent::getParentURL()
-{
- return m_aFTPURL.parent();
-}
-
-namespace {
-
-class InsertData
- : public CurlInput {
-
-public:
-
- explicit InsertData(const Reference<XInputStream>& xInputStream)
- : m_xInputStream(xInputStream) { }
- virtual ~InsertData() {}
-
- // returns the number of bytes actually read
- virtual sal_Int32 read(sal_Int8 *dest,sal_Int32 nBytesRequested) override;
-
-private:
-
- Reference<XInputStream> m_xInputStream;
-};
-
-}
-
-sal_Int32 InsertData::read(sal_Int8 *dest,sal_Int32 nBytesRequested)
-{
- sal_Int32 m = 0;
-
- if(m_xInputStream.is()) {
- Sequence<sal_Int8> seq(nBytesRequested);
- m = m_xInputStream->readBytes(seq,nBytesRequested);
- memcpy(dest,seq.getConstArray(),m);
- }
- return m;
-}
-
-
-void FTPContent::insert(const InsertCommandArgument& aInsertCommand,
- const Reference<XCommandEnvironment>& Env)
-{
- osl::MutexGuard aGuard(m_aMutex);
-
- if(m_bInserted && !m_bTitleSet) {
- MissingPropertiesException excep;
- excep.Properties = { "Title" };
- ucbhelper::cancelCommandExecution(Any(excep), Env);
- }
-
- if(m_bInserted &&
- m_aInfo.Type == FTP_FILE &&
- !aInsertCommand.Data.is())
- {
- MissingInputStreamException excep;
- ucbhelper::cancelCommandExecution(Any(excep), Env);
- }
-
- bool bReplace(aInsertCommand.ReplaceExisting);
-
- retry:
- try {
- if(m_aInfo.Type == FTP_FILE) {
- InsertData data(aInsertCommand.Data);
- m_aFTPURL.insert(bReplace,&data);
- } else if(m_aInfo.Type == FTP_FOLDER)
- m_aFTPURL.mkdir(bReplace);
- } catch(const curl_exception& e) {
- if(e.code() == FOLDER_MIGHT_EXIST_DURING_INSERT ||
- e.code() == FILE_MIGHT_EXIST_DURING_INSERT) {
- // Interact
- Reference<XInteractionHandler> xInt;
- if(Env.is())
- xInt = Env->getInteractionHandler();
-
- UnsupportedNameClashException excep;
- excep.NameClash = 0; //NameClash::ERROR;
-
- if(!xInt.is()) {
- ucbhelper::cancelCommandExecution(Any(excep), Env);
- }
-
- XInteractionRequestImpl request;
- const Reference<XInteractionRequest>& xReq(request.getRequest());
- xInt->handle(xReq);
- if (request.approved()) {
- bReplace = true;
- goto retry;
- }
- else
- throw excep;
- }
- else
- throw;
- }
-
- // May not be reached, because both mkdir and insert can throw curl-
- // exceptions
- m_bInserted = false;
- inserted();
-}
-
-
-Reference< XRow > FTPContent::getPropertyValues(
- const Sequence< Property >& seqProp
-)
-{
- rtl::Reference<ucbhelper::PropertyValueSet> xRow =
- new ucbhelper::PropertyValueSet(m_xContext);
-
- FTPDirentry aDirEntry = m_aFTPURL.direntry();
-
- for(const auto& rProp : seqProp) {
- const OUString& Name = rProp.Name;
- if(Name == "Title")
- xRow->appendString(rProp,aDirEntry.m_aName);
- else if(Name == "CreatableContentsInfo")
- xRow->appendObject(rProp,
- Any(queryCreatableContentsInfo()));
- else if(aDirEntry.m_nMode != INETCOREFTP_FILEMODE_UNKNOWN) {
- if(Name == "ContentType")
- xRow->appendString(rProp,
- (aDirEntry.m_nMode & INETCOREFTP_FILEMODE_ISDIR)
- ? FTP_FOLDER
- : FTP_FILE );
- else if(Name == "IsReadOnly")
- xRow->appendBoolean(rProp,
- (aDirEntry.m_nMode
- & INETCOREFTP_FILEMODE_WRITE) == 0 );
- else if(Name == "IsDocument")
- xRow->appendBoolean(rProp,
- (aDirEntry.m_nMode &
- INETCOREFTP_FILEMODE_ISDIR) != INETCOREFTP_FILEMODE_ISDIR);
- else if(Name == "IsFolder")
- xRow->appendBoolean(rProp,
- (aDirEntry.m_nMode &
- INETCOREFTP_FILEMODE_ISDIR) == INETCOREFTP_FILEMODE_ISDIR);
- else if(Name == "Size")
- xRow->appendLong(rProp,
- aDirEntry.m_nSize);
- else if(Name == "DateCreated")
- xRow->appendTimestamp(rProp,
- aDirEntry.m_aDate);
- else
- xRow->appendVoid(rProp);
- } else
- xRow->appendVoid(rProp);
- }
-
- return xRow;
-}
-
-
-Sequence<Any> FTPContent::setPropertyValues(
- const Sequence<PropertyValue>& seqPropVal)
-{
- Sequence<Any> ret(seqPropVal.getLength());
- auto retRange = asNonConstRange(ret);
- Sequence<PropertyChangeEvent > evt;
-
- osl::MutexGuard aGuard(m_aMutex);
- for(sal_Int32 i = 0; i < ret.getLength(); ++i) {
- if ( seqPropVal[i].Name == "Title" ) {
- OUString Title;
- if(!(seqPropVal[i].Value >>= Title)) {
- retRange[i] <<= IllegalTypeException();
- continue;
- } else if(Title.isEmpty()) {
- retRange[i] <<= IllegalArgumentException();
- continue;
- }
-
- if(m_bInserted) {
- m_aFTPURL.child(Title);
- m_xIdentifier =
- new FTPContentIdentifier(m_aFTPURL.ident(false,false));
- m_bTitleSet = true;
- } else
- try {
- OUString OldTitle = m_aFTPURL.ren(Title);
- evt = { { /* Source */ {},
- /* PropertyName */ "Title",
- /* Further */ false,
- /* PropertyHandle */ -1,
- /* OldValue */ Any(OldTitle),
- /* NewValue */ Any(Title) } };
- } catch(const curl_exception&) {
- InteractiveIOException excep;
- // any better possibility here?
- // ( the error code is always CURLE_FTP_QUOTE_ERROR )
- excep.Code = IOErrorCode_ACCESS_DENIED;
- retRange[i] <<= excep;
- }
- } else {
- const Sequence<Property> props =
- getProperties(Reference<XCommandEnvironment>(nullptr));
-
- // either unknown or read-only
- retRange[i] <<= UnknownPropertyException();
- const auto& rName = seqPropVal[i].Name;
- auto pProp = std::find_if(props.begin(), props.end(),
- [&rName](const Property& rProp) { return rProp.Name == rName; });
- if (pProp != props.end()) {
- retRange[i] <<= IllegalAccessException(
- "Property is read-only!",
- //props[j].Attributes & PropertyAttribute::READONLY
- // ? "Property is read-only!"
- // : "Access denied!"),
- getXWeak());
- }
- }
- }
-
- if(evt.hasElements()) {
- // title has changed
- notifyPropertiesChange(evt);
- (void)exchange(new FTPContentIdentifier(m_aFTPURL.ident(false,false)));
- }
-
- return ret;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpcontent.hxx b/ucb/source/ucp/ftp/ftpcontent.hxx
deleted file mode 100644
index 6eef6c30a5c6..000000000000
--- a/ucb/source/ucp/ftp/ftpcontent.hxx
+++ /dev/null
@@ -1,146 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include <ucbhelper/contenthelper.hxx>
-#include <com/sun/star/ucb/InsertCommandArgument.hpp>
-#include <com/sun/star/ucb/XContentCreator.hpp>
-#include "ftpurl.hxx"
-
-namespace com::sun::star::beans {
- struct Property;
- struct PropertyValue;
-}
-
-namespace com::sun::star::sdbc {
- class XRow;
-}
-
-
-namespace ftp
-{
-
-class FTPContentProvider;
-
-class FTPContent : public ::ucbhelper::ContentImplHelper,
- public css::ucb::XContentCreator
-{
-public:
-
- FTPContent( const css::uno::Reference<
- css::uno::XComponentContext >& rxContext,
- FTPContentProvider* pProvider,
- const css::uno::Reference<
- css::ucb::XContentIdentifier >& Identifier,
- const FTPURL& FtpUrl);
-
- FTPContent( const css::uno::Reference<
- css::uno::XComponentContext >& rxContext,
- FTPContentProvider* pProvider,
- const css::uno::Reference<
- css::ucb::XContentIdentifier >& Identifier,
- css::ucb::ContentInfo aInfo);
-
-
- virtual ~FTPContent() override;
-
- // XInterface
- virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
- virtual void SAL_CALL acquire()
- noexcept override;
- virtual void SAL_CALL release()
- noexcept override;
-
- // XTypeProvider
- virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
- virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override;
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName() override;
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
- virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
-
- // XContent
- virtual OUString SAL_CALL getContentType() override;
-
- // XCommandProcessor
- virtual css::uno::Any SAL_CALL execute( const css::ucb::Command& aCommand,
- sal_Int32 CommandId,
- const css::uno::Reference<
- css::ucb::XCommandEnvironment >& Environment ) override;
-
- virtual void SAL_CALL abort(sal_Int32 CommandId) override;
-
- // XContentCreator
- virtual css::uno::Sequence<
- css::ucb::ContentInfo > SAL_CALL
- queryCreatableContentsInfo( ) override;
-
- virtual css::uno::Reference<
- css::ucb::XContent > SAL_CALL
- createNewContent( const css::ucb::ContentInfo& Info ) override;
-
- // XChild
-
- virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getParent( ) override;
-
- virtual void SAL_CALL setParent( const css::uno::Reference< css::uno::XInterface >& Parent ) override;
-
- /// @throws css::uno::RuntimeException
- static css::uno::Sequence< css::ucb::ContentInfo > queryCreatableContentsInfo_Static();
-
-private:
-
- FTPContentProvider *m_pFCP;
- FTPURL m_aFTPURL;
- bool m_bInserted;
- bool m_bTitleSet;
- css::ucb::ContentInfo m_aInfo;
-
- virtual css::uno::Sequence< css::beans::Property >
- getProperties( const css::uno::Reference<
- css::ucb::XCommandEnvironment > & xEnv ) override;
-
-
- virtual css::uno::Sequence< css::ucb::CommandInfo>
- getCommands(const css::uno::Reference<
- css::ucb::XCommandEnvironment > & xEnv) override;
-
-
- virtual OUString getParentURL() override;
-
- css::uno::Reference<css::sdbc::XRow>
- getPropertyValues(
- const css::uno::Sequence<
- css::beans::Property>& seqProp
- );
-
- css::uno::Sequence<css::uno::Any>
- setPropertyValues( const css::uno::Sequence<
- css::beans::PropertyValue>& seqPropVal);
-
- void insert(const css::ucb::InsertCommandArgument&,
- const css::uno::Reference<
- css::ucb::XCommandEnvironment>&);
- };
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpcontentcaps.cxx b/ucb/source/ucp/ftp/ftpcontentcaps.cxx
deleted file mode 100644
index 64dd0e92d5a4..000000000000
--- a/ucb/source/ucp/ftp/ftpcontentcaps.cxx
+++ /dev/null
@@ -1,167 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-#include <com/sun/star/beans/Property.hpp>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/ucb/CommandInfo.hpp>
-#include <com/sun/star/ucb/OpenCommandArgument2.hpp>
-#include <com/sun/star/ucb/InsertCommandArgument.hpp>
-#include <com/sun/star/util/DateTime.hpp>
-#include <com/sun/star/uno/Sequence.hxx>
-
-#include "ftpcontent.hxx"
-
-using namespace com::sun::star;
-using namespace ftp;
-
-// virtual
-uno::Sequence< beans::Property > FTPContent::getProperties(
- const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/)
-{
- #define PROPS_COUNT 8
-
- static const beans::Property aPropsInfoTable[] =
- {
- beans::Property(
- "ContentType",
- -1,
- cppu::UnoType<OUString>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::READONLY
- ),
- beans::Property(
- "IsDocument",
- -1,
- cppu::UnoType<bool>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::READONLY
- ),
- beans::Property(
- "IsFolder",
- -1,
- cppu::UnoType<bool>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::READONLY
- ),
- beans::Property(
- "Title",
- -1,
- cppu::UnoType<OUString>::get(),
- beans::PropertyAttribute::BOUND
- // | beans::PropertyAttribute::READONLY
- ),
- beans::Property(
- "Size",
- -1,
- cppu::UnoType<sal_Int64>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::READONLY
- ),
- beans::Property(
- "DateCreated",
- -1,
- cppu::UnoType<util::DateTime>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::READONLY
- ),
- beans::Property(
- "IsReadOnly",
- -1,
- cppu::UnoType<bool>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::READONLY
- ),
- beans::Property(
- "CreatableContentsInfo",
- -1,
- cppu::UnoType<uno::Sequence< ucb::ContentInfo >>::get(),
- beans::PropertyAttribute::BOUND
- | beans::PropertyAttribute::READONLY
- )
- };
-
- return uno::Sequence< beans::Property >( aPropsInfoTable, PROPS_COUNT );
-}
-
-
-// virtual
-uno::Sequence< ucb::CommandInfo > FTPContent::getCommands(
- const uno::Reference< ucb::XCommandEnvironment > & /*xEnv*/ )
-{
-// osl::MutexGuard aGuard( m_aMutex );
-
-
- // Supported commands
-
-
- #define COMMAND_COUNT 8
-
- static const ucb::CommandInfo aCommandInfoTable[] =
- {
-
- // Required commands
-
- ucb::CommandInfo(
- "getCommandInfo",
- -1,
- cppu::UnoType<void>::get()
- ),
- ucb::CommandInfo(
- "getPropertySetInfo",
- -1,
- cppu::UnoType<void>::get()
- ),
- ucb::CommandInfo(
- "getPropertyValues",
- -1,
- cppu::UnoType<uno::Sequence< beans::Property >>::get()
- ),
- ucb::CommandInfo(
- "setPropertyValues",
- -1,
- cppu::UnoType<uno::Sequence< beans::PropertyValue >>::get()
- ),
- ucb::CommandInfo(
- "open",
- -1,
- cppu::UnoType<ucb::OpenCommandArgument2>::get()
- ),
- ucb::CommandInfo(
- "insert",
- -1,
- cppu::UnoType<ucb::InsertCommandArgument>::get()
- ),
- ucb::CommandInfo(
- "delete",
- -1,
- cppu::UnoType<bool>::get()
- ),
- ucb::CommandInfo(
- "createNewContent",
- -1,
- cppu::UnoType<ucb::ContentInfo>::get()
- )
- };
-
- return uno::Sequence< ucb::CommandInfo >( aCommandInfoTable, COMMAND_COUNT );
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpcontentidentifier.cxx b/ucb/source/ucp/ftp/ftpcontentidentifier.cxx
deleted file mode 100644
index b6df70ef7396..000000000000
--- a/ucb/source/ucp/ftp/ftpcontentidentifier.cxx
+++ /dev/null
@@ -1,65 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-#include <utility>
-
-#include "ftpcontentidentifier.hxx"
-
-using namespace ftp;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::ucb;
-using namespace com::sun::star::lang;
-
-
-FTPContentIdentifier::FTPContentIdentifier(
- OUString ident
-)
- : m_ident(std::move(ident))
-{
-}
-
-
-FTPContentIdentifier::~FTPContentIdentifier()
-{
-}
-
-
-OUString SAL_CALL
-FTPContentIdentifier::getContentIdentifier(
-)
-{
- return m_ident;
-}
-
-
-OUString SAL_CALL
-FTPContentIdentifier::getContentProviderScheme(
-)
-{
- return "ftp";
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpcontentidentifier.hxx b/ucb/source/ucp/ftp/ftpcontentidentifier.hxx
deleted file mode 100644
index d5552559c7e4..000000000000
--- a/ucb/source/ucp/ftp/ftpcontentidentifier.hxx
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-#pragma once
-
-#include <cppuhelper/implbase.hxx>
-#include <com/sun/star/ucb/XContentIdentifier.hpp>
-
-
-namespace ftp {
-
- class FTPContentIdentifier :
- public cppu::WeakImplHelper<css::ucb::XContentIdentifier>
- {
- public:
-
- explicit FTPContentIdentifier(OUString ident);
-
- virtual ~FTPContentIdentifier() override;
-
- // XContentIdentifier
-
- virtual OUString SAL_CALL
- getContentIdentifier() override;
-
- virtual OUString SAL_CALL
- getContentProviderScheme() override;
-
-
- private:
-
- OUString m_ident;
- };
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpcontentprovider.cxx b/ucb/source/ucp/ftp/ftpcontentprovider.cxx
deleted file mode 100644
index 5200fcfd1acf..000000000000
--- a/ucb/source/ucp/ftp/ftpcontentprovider.cxx
+++ /dev/null
@@ -1,244 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <sal/config.h>
-
-#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
-#include <com/sun/star/ucb/IllegalIdentifierException.hpp>
-#include <com/sun/star/ucb/UniversalContentBroker.hpp>
-#include <cppuhelper/exc_hlp.hxx>
-#include <cppuhelper/queryinterface.hxx>
-#include <cppuhelper/typeprovider.hxx>
-#include <cppuhelper/supportsservice.hxx>
-#include <cppuhelper/weak.hxx>
-#include "ftpcontentprovider.hxx"
-#include "ftpcontent.hxx"
-#include "ftploaderthread.hxx"
-
-using namespace ftp;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::container;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::ucb;
-using namespace com::sun::star::beans;
-
-// ContentProvider Implementation.
-
-FTPContentProvider::FTPContentProvider( const Reference< XComponentContext >& rxContext)
- : ::ucbhelper::ContentProviderImplHelper(rxContext)
-{
-}
-
-
-// virtual
-FTPContentProvider::~FTPContentProvider()
-{
- m_ftpLoaderThread.reset();
- m_pProxyDecider.reset();
-}
-
-// XInterface methods.
-void SAL_CALL FTPContentProvider::acquire()
- noexcept
-{
- OWeakObject::acquire();
-}
-
-void SAL_CALL FTPContentProvider::release()
- noexcept
-{
- OWeakObject::release();
-}
-
-css::uno::Any SAL_CALL FTPContentProvider::queryInterface( const css::uno::Type & rType )
-{
- css::uno::Any aRet = cppu::queryInterface( rType,
- static_cast< XTypeProvider* >(this),
- static_cast< XServiceInfo* >(this),
- static_cast< XContentProvider* >(this)
- );
- return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType );
-}
-
-// XTypeProvider methods.
-css::uno::Sequence< sal_Int8 > SAL_CALL FTPContentProvider::getImplementationId()
-{
- return css::uno::Sequence<sal_Int8>();
-}
-
-css::uno::Sequence< css::uno::Type > SAL_CALL FTPContentProvider::getTypes()
-{
- static cppu::OTypeCollection s_aCollection(
- cppu::UnoType<XTypeProvider>::get(),
- cppu::UnoType<XServiceInfo>::get(),
- cppu::UnoType<XContentProvider>::get()
- );
-
- return s_aCollection.getTypes();
-}
-
-
-// XServiceInfo methods.
-
-OUString SAL_CALL FTPContentProvider::getImplementationName()
-{
- return "com.sun.star.comp.FTPContentProvider";
-}
-
-sal_Bool SAL_CALL FTPContentProvider::supportsService( const OUString& ServiceName )
-{
- return cppu::supportsService( this, ServiceName );
-}
-
-css::uno::Sequence< OUString > SAL_CALL FTPContentProvider::getSupportedServiceNames()
-{
- return { FTP_CONTENT_PROVIDER_SERVICE_NAME };
-}
-
-
-
-// XContentProvider methods.
-
-// virtual
-Reference<XContent> SAL_CALL FTPContentProvider::queryContent(
- const Reference< XContentIdentifier >& xCanonicId)
-{
- // Check, if a content with given id already exists...
- Reference<XContent> xContent = queryExistingContent(xCanonicId);
- if(xContent.is())
- return xContent;
-
- // A new content has to be returned:
- {
- // Initialize
- osl::MutexGuard aGuard( m_aMutex );
- if(!m_ftpLoaderThread || !m_pProxyDecider)
- {
- try {
- init();
- } catch (css::uno::Exception const & ex) {
- css::uno::Any anyEx = cppu::getCaughtException();
- throw css::lang::WrappedTargetRuntimeException( ex.Message,
- css::uno::Reference< css::uno::XInterface >(),
- anyEx );
- } catch( ... ) {
- throw RuntimeException();
- }
-
- if(!m_ftpLoaderThread || !m_pProxyDecider)
- throw RuntimeException();
- }
- }
-
- try {
- FTPURL aURL(xCanonicId->getContentIdentifier(),
- this);
-
- if(!m_pProxyDecider->shouldUseProxy(
- "ftp",
- aURL.host(),
- aURL.port().toInt32()))
- {
- xContent = new FTPContent( m_xContext, this,xCanonicId,aURL);
- registerNewContent(xContent);
- }
- else {
- Reference<XContentProvider> xProvider(UniversalContentBroker::create( m_xContext )->queryContentProvider("http:"));
- if(!xProvider.is())
- throw RuntimeException();
- return xProvider->queryContent(xCanonicId);
- }
- } catch(const malformed_exception&) {
- throw IllegalIdentifierException();
- }
-
- // may throw IllegalIdentifierException
- return xContent;
-}
-
-void FTPContentProvider::init()
-{
- m_ftpLoaderThread.reset( new FTPLoaderThread() );
- m_pProxyDecider.reset( new ucbhelper::InternetProxyDecider( m_xContext ) );
-}
-
-CURL* FTPContentProvider::handle()
-{
- // Cannot be zero if called from here;
- return m_ftpLoaderThread->handle();
-}
-
-
-void FTPContentProvider::forHost( std::u16string_view host,
- std::u16string_view port,
- std::u16string_view username,
- OUString& password,
- OUString& account)
-{
- osl::MutexGuard aGuard(m_aMutex);
- for(const ServerInfo & i : m_ServerInfo)
- if(host == i.host &&
- port == i.port &&
- username == i.username )
- {
- password = i.password;
- account = i.account;
- return;
- }
-}
-
-bool FTPContentProvider::setHost( const OUString& host,
- const OUString& port,
- const OUString& username,
- const OUString& password,
- const OUString& account)
-{
- ServerInfo inf;
- inf.host = host;
- inf.port = port;
- inf.username = username;
- inf.password = password;
- inf.account = account;
-
- bool present(false);
- osl::MutexGuard aGuard(m_aMutex);
- for(ServerInfo & i : m_ServerInfo)
- if(host == i.host &&
- port == i.port &&
- username == i.username)
- {
- present = true;
- i.password = password;
- i.account = account;
- }
-
- if(!present)
- m_ServerInfo.push_back(inf);
-
- return !present;
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
-ucb_ftp_FTPContentProvider_get_implementation(
- css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const&)
-{
- return cppu::acquire(new FTPContentProvider(context));
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpcontentprovider.hxx b/ucb/source/ucp/ftp/ftpcontentprovider.hxx
deleted file mode 100644
index 145fe15483c2..000000000000
--- a/ucb/source/ucp/ftp/ftpcontentprovider.hxx
+++ /dev/null
@@ -1,107 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include <vector>
-#include <ucbhelper/proxydecider.hxx>
-#include <ucbhelper/providerhelper.hxx>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include "curl.hxx"
-
-// UNO service name for the provider. This name will be used by the UCB to
-// create instances of the provider.
-
-inline constexpr OUString FTP_CONTENT_PROVIDER_SERVICE_NAME = u"com.sun.star.ucb.FTPContentProvider"_ustr;
-inline constexpr OUString FTP_CONTENT_TYPE = u"application/ftp-content"_ustr;
-
-/**
- * Definition of ftpcontentprovider
- */
-namespace ftp
-{
- class FTPLoaderThread;
-
- class FTPContentProvider:
- public ::ucbhelper::ContentProviderImplHelper
- {
- public:
-
- explicit FTPContentProvider( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
-
- virtual ~FTPContentProvider() override;
-
- // XInterface
- virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
- virtual void SAL_CALL acquire()
- noexcept override;
- virtual void SAL_CALL release()
- noexcept override;
-
- // XTypeProvider
- virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
- virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() override;
-
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName() override;
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
- virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
-
- // XContentProvider
- virtual css::uno::Reference< css::ucb::XContent > SAL_CALL
- queryContent( const css::uno::Reference< css::ucb::XContentIdentifier >& Identifier ) override;
-
- CURL* handle();
-
- /** host is in the form host:port.
- */
-
- void forHost(std::u16string_view host,
- std::u16string_view port,
- std::u16string_view username,
- OUString& password,
- OUString& account);
-
- bool setHost(const OUString& host,
- const OUString& port,
- const OUString& username,
- const OUString& password,
- const OUString& account);
-
- struct ServerInfo
- {
- OUString host;
- OUString port;
- OUString username;
- OUString password;
- OUString account;
- };
-
- private:
- std::unique_ptr<FTPLoaderThread> m_ftpLoaderThread;
- std::unique_ptr<ucbhelper::InternetProxyDecider> m_pProxyDecider;
- std::vector<ServerInfo> m_ServerInfo;
-
- void init();
- }; // end class FTPContentProvider
-
-} // end namespace ftp
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpdirp.cxx b/ucb/source/ucp/ftp/ftpdirp.cxx
deleted file mode 100644
index 69bea64ab0e8..000000000000
--- a/ucb/source/ucp/ftp/ftpdirp.cxx
+++ /dev/null
@@ -1,1269 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-#include "ftpdirp.hxx"
-#include <osl/time.h>
-
-
-using namespace ftp;
-
-static bool ascii_isWhitespace( sal_Unicode ch )
-{
- return ((ch <= 0x20) && ch);
-}
-
-
-/*========================================================================
- *
- * FTPDirectoryParser implementation.
- *
- *======================================================================*/
-/*
- * parseDOS.
- * Accepts one of two styles:
- *
- * 1 *WSP 1*2DIGIT ("." / "-") 1*2DIGIT ("." / "-") 1*4DIGIT 1*WSP
- * 1*2DIGIT ":" 1*2DIGIT [*WSP ("A" / "P") "M"] 1*WSP
- * ((DIGIT *(DIGIT / "." / ",")) / "<DIR>") 1*WSP 1*OCTET
- *
- * interpreted as: mm.dd.yy hh:mm (size / <DIR>) name
- *
- * 2 *WSP 1*DIGIT 1*WSP *(1*CHAR *WSP) *1("DIR" 1*WSP) 1*2DIGIT "-" 1*2DIGIT
- * "-" 1*4DIGIT 1*WSP 1*2DIGIT ":" 1*2DIGIT 1*WSP 1*OCTET
- *
- * interpreted as: size attribs DIR mm-dd-yy hh:mm name
- */
-
-bool FTPDirectoryParser::parseDOS (
- FTPDirentry &rEntry,
- const char *pBuffer)
-{
- bool bDirectory = false;
- sal_uInt32 nSize = 0;
- sal_uInt16 nYear = 0;
- sal_uInt16 nMonth = 0;
- sal_uInt16 nDay = 0;
- sal_uInt16 nHour = 0;
- sal_uInt16 nMinute = 0;
-
- enum StateType
- {
- STATE_INIT_LWS,
- STATE_MONTH_OR_SIZE,
- STATE_1_DAY, STATE_1_YEAR, STATE_1_YEAR_LWS, STATE_1_HOUR,
- STATE_1_MINUTE, STATE_1_MINUTE_LWS, STATE_1_AP,
- STATE_1_APM, STATE_1_LESS, STATE_1_D, STATE_1_DI,
- STATE_1_DIR, STATE_1_SIZE,
- STATE_2_SIZE, STATE_2_SIZE_LWS, STATE_2_ATTRIB,
- STATE_2_D, STATE_2_DI, STATE_2_DIR_LWS,
- STATE_2_MONTH, STATE_2_DAY, STATE_2_YEAR, STATE_2_YEAR_LWS,
- STATE_2_HOUR, STATE_2_MINUTE,
- STATE_LWS_NAME,
- STATE_ERROR
- };
-
- int nDigits = 0;
- enum StateType eState = STATE_INIT_LWS;
- for (const char *p = pBuffer;
- eState != STATE_ERROR && *p;
- ++p)
- {
- switch (eState)
- {
- case STATE_INIT_LWS:
- if (*p >= '0' && *p <= '9')
- {
- nMonth = *p - '0';
- nDigits = 1;
- eState = STATE_MONTH_OR_SIZE;
- }
- else if (!ascii_isWhitespace(*p))
- eState = STATE_ERROR;
- break;
-
- case STATE_MONTH_OR_SIZE:
- if (*p >= '0' && *p <= '9')
- {
- nMonth = 10 * nMonth + (*p - '0');
- if (nDigits < 2)
- ++nDigits;
- else
- {
- nSize = nMonth;
- nMonth = 0;
- eState = STATE_2_SIZE;
- }
- }
- else if (ascii_isWhitespace(*p))
- {
- nSize = nMonth;
- nMonth = 0;
- eState = STATE_2_SIZE_LWS;
- }
- else if ((*p == '.' || *p == '-') && nMonth && nMonth <= 12)
- {
- nDigits = 0;
- eState = STATE_1_DAY;
- }
- else
- eState = STATE_ERROR;
- break;
-
- case STATE_1_DAY:
- if (*p >= '0' && *p <= '9')
- if (nDigits < 2)
- {
- nDay = 10 * nDay + (*p - '0');
- ++nDigits;
- }
- else
- eState = STATE_ERROR;
- else if ((*p == '.' || *p == '-') && nDay && nDay <= 31)
- {
- nDigits = 0;
- eState = STATE_1_YEAR;
- }
- else
- eState = STATE_ERROR;
- break;
-
- case STATE_1_YEAR:
- if (*p >= '0' && *p <= '9')
- {
- if (nDigits < 4)
- {
- nYear = 10 * nYear + (*p - '0');
- ++nDigits;
- }
- else
- eState = STATE_ERROR;
- }
- else
- {
- if (ascii_isWhitespace(*p))
- eState = STATE_1_YEAR_LWS;
- else
- eState = STATE_ERROR;
- }
- break;
-
- case STATE_1_YEAR_LWS:
- if (*p >= '0' && *p <= '9')
- {
- nHour = *p - '0';
- nDigits = 1;
- eState = STATE_1_HOUR;
- }
- else if (!ascii_isWhitespace(*p))
- eState = STATE_ERROR;
- break;
-
- case STATE_1_HOUR:
- if (*p >= '0' && *p <= '9')
- if (nDigits < 2)
- {
- nHour = 10 * nHour + (*p - '0');
- ++nDigits;
- }
- else
- eState = STATE_ERROR;
- else if (*p == ':' && nHour < 24)
- {
- nDigits = 0;
- eState = STATE_1_MINUTE;
- }
- else
- eState = STATE_ERROR;
- break;
-
- case STATE_1_MINUTE:
- if (*p >= '0' && *p <= '9')
- if (nDigits < 2)
- {
- nMinute = 10 * nMinute + (*p - '0');
- ++nDigits;
- }
- else
- eState = STATE_ERROR;
- else if ((*p == 'a' || *p == 'A') && nMinute < 60)
- if (nHour >= 1 && nHour <= 11)
- eState = STATE_1_AP;
- else if (nHour == 12)
- {
- nHour = 0;
- eState = STATE_1_AP;
- }
- else
- eState = STATE_ERROR;
- else if ((*p == 'p' || *p == 'P') && nMinute < 60)
- if (nHour >= 1 && nHour <= 11)
- {
- nHour += 12;
- eState = STATE_1_AP;
- }
- else if (nHour == 12)
- eState = STATE_1_AP;
- else
- eState = STATE_ERROR;
- else if (ascii_isWhitespace(*p) && (nMinute < 60))
- eState = STATE_1_MINUTE_LWS;
- else
- eState = STATE_ERROR;
- break;
-
- case STATE_1_MINUTE_LWS:
- if (*p == 'a' || *p == 'A')
- if (nHour >= 1 && nHour <= 11)
- eState = STATE_1_AP;
- else if (nHour == 12)
- {
- nHour = 0;
- eState = STATE_1_AP;
- }
- else
- eState = STATE_ERROR;
- else if (*p == 'p' || *p == 'P')
- if (nHour >= 1 && nHour <= 11)
- {
- nHour += 12;
- eState = STATE_1_AP;
- }
- else if (nHour == 12)
- eState = STATE_1_AP;
- else
- eState = STATE_ERROR;
- else if (*p == '<')
- eState = STATE_1_LESS;
- else if (*p >= '0' && *p <= '9')
- {
- nSize = *p - '0';
- eState = STATE_1_SIZE;
- }
- else if (!ascii_isWhitespace(*p))
- eState = STATE_ERROR;
- break;
-
- case STATE_1_AP:
- eState = *p == 'm' || *p == 'M' ? STATE_1_APM : STATE_ERROR;
- break;
-
- case STATE_1_APM:
- if (*p == '<')
- eState = STATE_1_LESS;
- else if (*p >= '0' && *p <= '9')
- {
- nSize = *p - '0';
- eState = STATE_1_SIZE;
- }
- else if (!ascii_isWhitespace(*p))
- eState = STATE_ERROR;
- break;
-
- case STATE_1_LESS:
- eState = *p == 'd' || *p == 'D' ? STATE_1_D : STATE_ERROR;
- break;
-
- case STATE_1_D:
- eState = *p == 'i' || *p == 'I' ? STATE_1_DI : STATE_ERROR;
- break;
-
- case STATE_1_DI:
- eState = *p == 'r' || *p == 'R' ? STATE_1_DIR : STATE_ERROR;
- break;
-
- case STATE_1_DIR:
- if (*p == '>')
- {
- bDirectory = true;
- eState = STATE_LWS_NAME;
- }
- else
- eState = STATE_ERROR;
- break;
-
- case STATE_1_SIZE:
- if (*p >= '0' && *p <= '9')
- nSize = 10 * nSize + (*p - '0');
- else if (ascii_isWhitespace(*p))
- eState = STATE_LWS_NAME;
- else
- eState = STATE_ERROR;
- break;
-
- case STATE_2_SIZE:
- if (*p >= '0' && *p <= '9')
- nSize = 10 * nSize + (*p - '0');
- else if (ascii_isWhitespace(*p))
- eState = STATE_2_SIZE_LWS;
- else
- eState = STATE_ERROR;
- break;
-
- case STATE_2_SIZE_LWS:
- if (*p == 'd' || *p == 'D')
- eState = STATE_2_D;
- else if ((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z'))
- eState = STATE_2_ATTRIB;
- else if (*p >= '0' && *p <= '9')
- {
- nMonth = *p - '0';
- nDigits = 1;
- eState = STATE_2_MONTH;
- }
- else if (!ascii_isWhitespace(*p))
- eState = STATE_ERROR;
- break;
-
- case STATE_2_ATTRIB:
- if (ascii_isWhitespace(*p))
- eState = STATE_2_SIZE_LWS;
- else if ((*p < 'a' || *p > 'z') && (*p < 'A' || *p > 'Z'))
- eState = STATE_ERROR;
- break;
-
- case STATE_2_D:
- if (*p == 'i' || *p == 'I')
- eState = STATE_2_DI;
- else if ((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z'))
- eState = STATE_2_ATTRIB;
- else if (ascii_isWhitespace(*p))
- eState = STATE_2_SIZE_LWS;
- else
- eState = STATE_ERROR;
- break;
-
- case STATE_2_DI:
- if (*p == 'r' || *p == 'R')
- {
- bDirectory = true;
- eState = STATE_2_DIR_LWS;
- }
- else
- {
- if ((*p >= 'a' && *p <= 'z') || (*p >= 'A' && *p <= 'Z'))
- eState = STATE_2_ATTRIB;
- else if (ascii_isWhitespace(*p))
- eState = STATE_2_SIZE_LWS;
- else
- eState = STATE_ERROR;
- }
- break;
-
- case STATE_2_DIR_LWS:
- if (*p >= '0' && *p <= '9')
- {
- nMonth = *p - '0';
- nDigits = 1;
- eState = STATE_2_MONTH;
- }
- else if (!ascii_isWhitespace(*p))
- eState = STATE_ERROR;
- break;
-
- case STATE_2_MONTH:
- if (*p >= '0' && *p <= '9')
- if (nDigits < 2)
- {
- nMonth = 10 * nMonth + (*p - '0');
- ++nDigits;
- }
- else
- eState = STATE_ERROR;
- else if (*p == '-' && nMonth && nMonth <= 12)
- {
- nDigits = 0;
- eState = STATE_2_DAY;
- }
- else
- eState = STATE_ERROR;
- break;
-
- case STATE_2_DAY:
- if (*p >= '0' && *p <= '9')
- if (nDigits < 2)
- {
- nDay = 10 * nDay + (*p - '0');
- ++nDigits;
- }
- else
- eState = STATE_ERROR;
- else if (*p == '-' && nDay && nDay <= 31)
- {
- nDigits = 0;
- eState = STATE_2_YEAR;
- }
- else
- eState = STATE_ERROR;
- break;
-
- case STATE_2_YEAR:
- if (*p >= '0' && *p <= '9')
- {
- if (nDigits < 4)
- {
- nYear = 10 * nYear + (*p - '0');
- ++nDigits;
- }
- else
- eState = STATE_ERROR;
- }
- else
- {
- if (ascii_isWhitespace(*p))
- eState = STATE_2_YEAR_LWS;
- else
- eState = STATE_ERROR;
- }
- break;
-
- case STATE_2_YEAR_LWS:
- if (*p >= '0' && *p <= '9')
- {
- nHour = *p - '0';
- nDigits = 1;
- eState = STATE_2_HOUR;
- }
- else if (!ascii_isWhitespace(*p))
- eState = STATE_ERROR;
- break;
-
- case STATE_2_HOUR:
- if (*p >= '0' && *p <= '9')
- if (nDigits < 2)
- {
- nHour = 10 * nHour + (*p - '0');
- ++nDigits;
- }
- else
- eState = STATE_ERROR;
- else if (*p == ':' && nHour < 24)
- {
- nDigits = 0;
- eState = STATE_2_MINUTE;
- }
- else
- eState = STATE_ERROR;
- break;
-
- case STATE_2_MINUTE:
- if (*p >= '0' && *p <= '9')
- {
- if (nDigits < 2)
- {
- nMinute = 10 * nMinute + (*p - '0');
- ++nDigits;
- }
- else
- eState = STATE_ERROR;
- }
- else
- {
- if (ascii_isWhitespace(*p) && (nMinute < 60))
- eState = STATE_LWS_NAME;
- else
- eState = STATE_ERROR;
- }
- break;
-
- case STATE_LWS_NAME:
- if (!ascii_isWhitespace(*p))
- {
- setPath (rEntry.m_aName, p);
- if (bDirectory)
- rEntry.m_nMode |= INETCOREFTP_FILEMODE_ISDIR;
- rEntry.m_nSize = nSize;
-
- setYear (rEntry.m_aDate, nYear);
-
- rEntry.m_aDate.SetMonth(nMonth);
- rEntry.m_aDate.SetDay(nDay);
- rEntry.m_aDate.SetHour(nHour);
- rEntry.m_aDate.SetMin(nMinute);
-
- return true;
- }
- break;
- case STATE_ERROR:
- break;
- }
- }
-
- return false;
-}
-
-/*
- * parseVMS.
- * Directory entries may span one or two lines:
- *
- * entry: *lws name *1(*lws <NEWLINE>) 1*lws size 1*lws datetime rest
- *
- * name: filename "." filetype ";" version
- * filename: 1*39fchar
- * filetype: 1*39fchar
- * version: non0digit *digit
- *
- * size: "0" / non0digit *digit
- *
- * datetime: date 1*lwsp time
- * date: day "-" month "-" year
- * day: (*1"0" non0digit) / ("1"-"2" digit) / ("3" "0"-"1")
- * month: "JAN" / "FEB" / "MAR" / "APR" / "MAY" / "JUN" / "JUL" / "AUG"
- * / "SEP" / "OCT" / "NOV" / "DEC" ; all case insensitive
- * year: 2digit / 4digit
- * time: hour ":" minute
- * hour: ((*1"0" / "1") digit) / ("2" "0"-"3")
- * minute: "0"-"5" digit
- *
- * rest: *1(lws *<ANY>)
- *
- * lws: <TAB> / <SPACE>
- * non0digit: "1"-"9"
- * digit: "0" / non0digit
- * fchar: "A"-"Z" / "a"-"z" / digit / "-" / "_" / "$"
- *
- * For directories, the returned name is the <filename> part; for non-
- * directory files, the returned name is the <filename "." filetype> part.
- * An entry is a directory iff its filetype is "DIR" (ignoring case).
- *
- * The READ, WRITE, and ISLINK mode bits are not supported.
- *
- * The returned size is the <size> part, multiplied by 512, and with the high
- * order bits truncated to fit into a sal_uInt32.
- *
- */
-bool FTPDirectoryParser::parseVMS (
- FTPDirentry &rEntry,
- const char *pBuffer)
-{
- static OUString aFirstLineName;
- static bool bFirstLineDir = false;
-
- for (bool bFirstLine = true;; bFirstLine = false)
- {
- const char *p = pBuffer;
- if (bFirstLine)
- {
- // Skip <*lws> part:
- while (*p == '\t' || *p == ' ')
- ++p;
-
- // Parse <filename "."> part:
- const char *pFileName = p;
- while ((*p >= 'A' && *p <= 'Z') ||
- (*p >= 'a' && *p <= 'z') ||
- (*p >= '0' && *p <= '9') ||
- *p == '-' || *p == '_' || *p == '$')
- ++p;
-
- if (*p != '.' || p == pFileName || p - pFileName > 39)
- {
- if (!aFirstLineName.isEmpty())
- continue;
- else
- return false;
- }
-
- // Parse <filetype ";"> part:
- const char *pFileType = ++p;
- while ((*p >= 'A' && *p <= 'Z') ||
- (*p >= 'a' && *p <= 'z') ||
- (*p >= '0' && *p <= '9') ||
- *p == '-' || *p == '_' || *p == '$')
- ++p;
-
- if (*p != ';' || p == pFileName || p - pFileName > 39)
- {
- if (!aFirstLineName.isEmpty())
- continue;
- else
- return false;
- }
- ++p;
-
- // Set entry's name and mode (ISDIR flag):
- if ((p - pFileType == 4) &&
- (pFileType[0] == 'D' || pFileType[0] == 'd') &&
- (pFileType[1] == 'I' || pFileType[1] == 'i') &&
- (pFileType[2] == 'R' || pFileType[2] == 'r') )
- {
- setPath (rEntry.m_aName, pFileName, (pFileType - pFileName));
- rEntry.m_nMode = INETCOREFTP_FILEMODE_ISDIR;
- }
- else
- {
- setPath (rEntry.m_aName, pFileName, (p - pFileName));
- rEntry.m_nMode = 0;
- }
-
- // Skip <version> part:
- if (*p < '1' || *p > '9')
- {
- if (!aFirstLineName.isEmpty())
- continue;
- else
- return false;
- }
- ++p;
- while (*p >= '0' && *p <= '9')
- ++p;
-
- // Parse <1*lws> or <*lws <NEWLINE>> part:
- bool bLWS = false;
- while (*p == '\t' || *p == ' ')
- {
- bLWS = true;
- ++p;
- }
- if (*p)
- {
- if (!bLWS)
- {
- if (!aFirstLineName.isEmpty())
- continue;
- else
- return false;
- }
- }
- else
- {
- /*
- * First line of entry spanning two lines,
- * wait for second line.
- */
- aFirstLineName = rEntry.m_aName;
- bFirstLineDir =
- ((rEntry.m_nMode & INETCOREFTP_FILEMODE_ISDIR) != 0);
- return false;
- }
- }
- else
- {
- /*
- * Second line of entry spanning two lines,
- * restore entry's name and mode (ISDIR flag).
- */
- rEntry.m_aName = aFirstLineName;
- rEntry.m_nMode = (bFirstLineDir ? INETCOREFTP_FILEMODE_ISDIR : 0);
-
- // Skip <1*lws> part:
- if (*p != '\t' && *p != ' ')
- return false;
- ++p;
- while (*p == '\t' || *p == ' ')
- ++p;
- }
-
- // Parse <size> part and set entry's size:
- if (*p < '0' || *p > '9')
- return false;
- sal_uInt32 nSize = *p - '0';
- if (*p++ != '0')
- while (*p >= '0' && *p <= '9')
- nSize = 10 * rEntry.m_nSize + (*p++ - '0');
- rEntry.m_nSize = 512 * nSize;
-
- // Skip <1*lws> part:
- if (*p != '\t' && *p != ' ')
- return false;
- ++p;
- while (*p == '\t' || *p == ' ')
- ++p;
-
- // Parse <day "-"> part and set entry date's day:
- sal_uInt16 nDay;
- if (*p == '0')
- {
- ++p;
- if (*p < '1' || *p > '9')
- return false;
- nDay = *p++ - '0';
- }
- else if (*p == '1' || *p == '2')
- {
- nDay = *p++ - '0';
- if (*p >= '0' && *p <= '9')
- nDay = 10 * nDay + (*p++ - '0');
- }
- else if (*p == '3')
- {
- ++p;
- nDay = (*p == '0' || *p == '1') ? 30 + (*p++ - '0') : 3;
- }
- else if (*p >= '4' && *p <= '9')
- nDay = *p++ - '0';
- else
- return false;
-
- rEntry.m_aDate.SetDay(nDay);
- if (*p++ != '-')
- return false;
-
- // Parse <month "-"> part and set entry date's month:
- char const * pMonth = p;
- sal_Int32 const monthLen = 3;
- for (int i = 0; i < monthLen; ++i)
- {
- if (!((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')))
- return false;
- ++p;
- }
- if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "JAN", monthLen) == 0)
- rEntry.m_aDate.SetMonth(1);
- else if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "FEB", monthLen) == 0)
- rEntry.m_aDate.SetMonth(2);
- else if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "MAR", monthLen) == 0)
- rEntry.m_aDate.SetMonth(3);
- else if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "APR", monthLen) == 0)
- rEntry.m_aDate.SetMonth(4);
- else if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "MAY", monthLen) == 0)
- rEntry.m_aDate.SetMonth(5);
- else if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "JUN", monthLen) == 0)
- rEntry.m_aDate.SetMonth(6);
- else if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "JUL", monthLen) == 0)
- rEntry.m_aDate.SetMonth(7);
- else if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "AUG", monthLen) == 0)
- rEntry.m_aDate.SetMonth(8);
- else if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "SEP", monthLen) == 0)
- rEntry.m_aDate.SetMonth(9);
- else if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "OCT", monthLen) == 0)
- rEntry.m_aDate.SetMonth(10);
- else if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "NOV", monthLen) == 0)
- rEntry.m_aDate.SetMonth(11);
- else if (rtl_str_compareIgnoreAsciiCase_WithLength(
- pMonth, monthLen, "DEC", monthLen) == 0)
- rEntry.m_aDate.SetMonth(12);
- else
- return false;
- if (*p++ != '-')
- return false;
-
- // Parse <year> part and set entry date's year:
- sal_uInt16 nYear = 0;
- for (int i = 0; i < 2; ++i)
- {
- if (*p < '0' || *p > '9')
- return false;
- nYear = 10 * nYear + (*p++ - '0');
- }
- if (*p >= '0' && *p <= '9')
- {
- nYear = 10 * nYear + (*p++ - '0');
- if (*p < '0' || *p > '9')
- return false;
- nYear = 10 * nYear + (*p++ - '0');
- }
- setYear (rEntry.m_aDate, nYear);
-
- // Skip <1*lws> part:
- if (*p != '\t' && *p != ' ')
- return false;
- ++p;
- while (*p == '\t' || *p == ' ')
- ++p;
-
- // Parse <hour ":"> part and set entry time's hour:
- sal_uInt16 nHour;
- if (*p == '0' || *p == '1')
- {
- nHour = *p++ - '0';
- if (*p >= '0' && *p <= '9')
- nHour = 10 * nHour + (*p++ - '0');
- }
- else if (*p == '2')
- {
- ++p;
- nHour = (*p >= '0' && *p <= '3') ? 20 + (*p++ - '0') : 2;
- }
- else if (*p >= '3' && *p <= '9')
- nHour = *p++ - '0';
- else
- return false;
-
- rEntry.m_aDate.SetHour(nHour);
- if (*p++ != ':')
- return false;
-
- /*
- * Parse <minute> part and set entry time's minutes,
- * seconds (0), and nanoseconds (0).
- */
- if (*p < '0' || *p > '5')
- return false;
-
- sal_uInt16 nMinute = *p++ - '0';
- if (*p < '0' || *p > '9')
- return false;
-
- nMinute = 10 * nMinute + (*p++ - '0');
- rEntry.m_aDate.SetMin(nMinute);
- rEntry.m_aDate.SetSec(0);
- rEntry.m_aDate.SetNanoSec(0);
-
- // Skip <rest> part:
- return !*p || *p == '\t' || *p == ' ';
- }
-}
-
-/*
- * parseUNIX
- */
-bool FTPDirectoryParser::parseUNIX (
- FTPDirentry &rEntry,
- const char *pBuffer)
-{
- const char *p1, *p2;
- p1 = pBuffer;
-
- if (!((*p1 == '-') || (*p1 == 'd') || (*p1 == 'l')))
- return false;
-
- // 1st column: FileMode.
- if (*p1 == 'd')
- rEntry.m_nMode |= INETCOREFTP_FILEMODE_ISDIR;
-
- if (*p1 == 'l')
- rEntry.m_nMode |= INETCOREFTP_FILEMODE_ISLINK;
-
- // Skip to end of column and set rights by the way
- while (*p1 && !ascii_isWhitespace(*p1)) {
- if(*p1 == 'r')
- rEntry.m_nMode |= INETCOREFTP_FILEMODE_READ;
- else if(*p1 == 'w')
- rEntry.m_nMode |= INETCOREFTP_FILEMODE_WRITE;
- p1++;
- }
-
- /*
- * Scan for the sequence of size and date fields:
- * *LWS 1*DIGIT 1*LWS 3CHAR 1*LWS 1*2DIGIT 1*LWS
- * (4DIGIT / (1*2DIGIT ":" 2DIGIT)) 1*LWS
- */
- enum Mode
- {
- FOUND_NONE, FOUND_SIZE, FOUND_MONTH, FOUND_DAY, FOUND_YEAR_TIME
- };
-
- const char *pDayStart = nullptr;
- const char *pDayEnd = nullptr;
- Mode eMode;
- for (eMode = FOUND_NONE; *p1 && eMode != FOUND_YEAR_TIME; p1 = p2 + 1)
- {
- while (*p1 && ascii_isWhitespace(*p1))
- ++p1;
- p2 = p1;
- while (*p2 && !ascii_isWhitespace(*p2))
- ++p2;
-
- switch (eMode)
- {
- case FOUND_NONE:
- if (parseUNIX_isSizeField (p1, p2, rEntry.m_nSize))
- eMode = FOUND_SIZE;
- break;
-
- case FOUND_SIZE:
- if (parseUNIX_isMonthField (p1, p2, rEntry.m_aDate))
- eMode = FOUND_MONTH;
- else if (!parseUNIX_isSizeField (p1, p2, rEntry.m_nSize))
- eMode = FOUND_NONE;
- break;
-
- case FOUND_MONTH:
- if (parseUNIX_isDayField (p1, p2, rEntry.m_aDate))
- {
- pDayStart = p1;
- pDayEnd = p2;
- eMode = FOUND_DAY;
- }
- else if (parseUNIX_isSizeField (p1, p2, rEntry.m_nSize))
- eMode = FOUND_SIZE;
- else
- eMode = FOUND_NONE;
- break;
-
- case FOUND_DAY:
- if (parseUNIX_isYearTimeField (p1, p2, rEntry.m_aDate))
- eMode = FOUND_YEAR_TIME;
- else if (
- parseUNIX_isSizeField (
- pDayStart, pDayEnd, rEntry.m_nSize) &&
- parseUNIX_isMonthField (
- p1, p2, rEntry.m_aDate))
- eMode = FOUND_MONTH;
- else if (parseUNIX_isSizeField (p1, p2, rEntry.m_nSize))
- eMode = FOUND_SIZE;
- else
- eMode = FOUND_NONE;
- break;
- // coverity[dead_error_begin] - following conditions exist to avoid compiler warning
- case FOUND_YEAR_TIME:
- break;
- }
- }
-
- if (eMode == FOUND_YEAR_TIME)
- {
- // 9th column: FileName (rest of line).
- while (*p1 && ascii_isWhitespace(*p1)) p1++;
- setPath (rEntry.m_aName, p1);
-
- // Done.
- return true;
- }
- return false;
-}
-
-/*
- * parseUNIX_isSizeField.
- */
-bool FTPDirectoryParser::parseUNIX_isSizeField (
- const char *pStart,
- const char *pEnd,
- sal_uInt32 &rSize)
-{
- if (!*pStart || !*pEnd || pStart == pEnd)
- return false;
-
- rSize = 0;
- if (*pStart >= '0' && *pStart <= '9')
- {
- for (; pStart < pEnd; ++pStart)
- if ((*pStart >= '0') && (*pStart <= '9'))
- rSize = 10 * rSize + (*pStart - '0');
- else
- return false;
- return true;
- }
- else
- {
- /*
- * For a combination of long group name and large file size,
- * some FTPDs omit LWS between those two columns.
- */
- int nNonDigits = 0;
- int nDigits = 0;
-
- for (; pStart < pEnd; ++pStart)
- if ((*pStart >= '1') && (*pStart <= '9'))
- {
- ++nDigits;
- rSize = 10 * rSize + (*pStart - '0');
- }
- else if ((*pStart == '0') && nDigits)
- {
- ++nDigits;
- rSize *= 10;
- }
- else if ((*pStart > ' ') && (sal::static_int_cast<sal_uInt8>(*pStart) <= '\x7F'))
- {
- nNonDigits += nDigits + 1;
- nDigits = 0;
- rSize = 0;
- }
- else
- return false;
- return ((nNonDigits >= 9) && (nDigits >= 7));
- }
-}
-
-/*
- * parseUNIX_isMonthField.
- */
-bool FTPDirectoryParser::parseUNIX_isMonthField (
- const char *pStart,
- const char *pEnd,
- DateTime &rDateTime)
-{
- if (!*pStart || !*pEnd || pStart + 3 != pEnd)
- return false;
-
- if ((pStart[0] == 'j' || pStart[0] == 'J') &&
- (pStart[1] == 'a' || pStart[1] == 'A') &&
- (pStart[2] == 'n' || pStart[2] == 'N') )
- {
- rDateTime.SetMonth(1);
- return true;
- }
- if ((pStart[0] == 'f' || pStart[0] == 'F') &&
- (pStart[1] == 'e' || pStart[1] == 'E') &&
- (pStart[2] == 'b' || pStart[2] == 'B') )
- {
- rDateTime.SetMonth(2);
- return true;
- }
- if ((pStart[0] == 'm' || pStart[0] == 'M') &&
- (pStart[1] == 'a' || pStart[1] == 'A') &&
- (pStart[2] == 'r' || pStart[2] == 'R') )
- {
- rDateTime.SetMonth(3);
- return true;
- }
- if ((pStart[0] == 'a' || pStart[0] == 'A') &&
- (pStart[1] == 'p' || pStart[1] == 'P') &&
- (pStart[2] == 'r' || pStart[2] == 'R') )
- {
- rDateTime.SetMonth(4);
- return true;
- }
- if ((pStart[0] == 'm' || pStart[0] == 'M') &&
- (pStart[1] == 'a' || pStart[1] == 'A') &&
- (pStart[2] == 'y' || pStart[2] == 'Y') )
- {
- rDateTime.SetMonth(5);
- return true;
- }
- if ((pStart[0] == 'j' || pStart[0] == 'J') &&
- (pStart[1] == 'u' || pStart[1] == 'U') &&
- (pStart[2] == 'n' || pStart[2] == 'N') )
- {
- rDateTime.SetMonth(6);
- return true;
- }
- if ((pStart[0] == 'j' || pStart[0] == 'J') &&
- (pStart[1] == 'u' || pStart[1] == 'U') &&
- (pStart[2] == 'l' || pStart[2] == 'L') )
- {
- rDateTime.SetMonth(7);
- return true;
- }
- if ((pStart[0] == 'a' || pStart[0] == 'A') &&
- (pStart[1] == 'u' || pStart[1] == 'U') &&
- (pStart[2] == 'g' || pStart[2] == 'G') )
- {
- rDateTime.SetMonth(8);
- return true;
- }
- if ((pStart[0] == 's' || pStart[0] == 'S') &&
- (pStart[1] == 'e' || pStart[1] == 'E') &&
- (pStart[2] == 'p' || pStart[2] == 'P') )
- {
- rDateTime.SetMonth(9);
- return true;
- }
- if ((pStart[0] == 'o' || pStart[0] == 'O') &&
- (pStart[1] == 'c' || pStart[1] == 'C') &&
- (pStart[2] == 't' || pStart[2] == 'T') )
- {
- rDateTime.SetMonth(10);
- return true;
- }
- if ((pStart[0] == 'n' || pStart[0] == 'N') &&
- (pStart[1] == 'o' || pStart[1] == 'O') &&
- (pStart[2] == 'v' || pStart[2] == 'V') )
- {
- rDateTime.SetMonth(11);
- return true;
- }
- if ((pStart[0] == 'd' || pStart[0] == 'D') &&
- (pStart[1] == 'e' || pStart[1] == 'E') &&
- (pStart[2] == 'c' || pStart[2] == 'C') )
- {
- rDateTime.SetMonth(12);
- return true;
- }
- return false;
-}
-
-/*
- * parseUNIX_isDayField.
- */
-bool FTPDirectoryParser::parseUNIX_isDayField (
- const char *pStart,
- const char *pEnd,
- DateTime &rDateTime)
-{
- if (!*pStart || !*pEnd || pStart == pEnd)
- return false;
- if (*pStart < '0' || *pStart > '9')
- return false;
-
- sal_uInt16 nDay = *pStart - '0';
- if (pStart + 1 < pEnd)
- {
- if (pStart + 2 != pEnd || pStart[1] < '0' || pStart[1] > '9')
- return false;
- nDay = 10 * nDay + (pStart[1] - '0');
- }
- if (!nDay || nDay > 31)
- return false;
-
- rDateTime.SetDay(nDay);
- return true;
-}
-
-/*
- * parseUNIX_isYearTimeField.
- */
-bool FTPDirectoryParser::parseUNIX_isYearTimeField (
- const char *pStart,
- const char *pEnd,
- DateTime &rDateTime)
-{
- if (!*pStart || !*pEnd || pStart == pEnd ||
- *pStart < '0' || *pStart > '9')
- return false;
-
- sal_uInt16 nNumber = *pStart - '0';
- ++pStart;
-
- if (pStart == pEnd)
- return false;
- if (*pStart == ':')
- return parseUNIX_isTime (pStart, pEnd, nNumber, rDateTime);
- if (*pStart < '0' || *pStart > '9')
- return false;
-
- nNumber = 10 * nNumber + (*pStart - '0');
- ++pStart;
-
- if (pStart == pEnd)
- return false;
- if (*pStart == ':')
- return parseUNIX_isTime (pStart, pEnd, nNumber, rDateTime);
- if (*pStart < '0' || *pStart > '9')
- return false;
-
- nNumber = 10 * nNumber + (*pStart - '0');
- ++pStart;
-
- if (pStart == pEnd || *pStart < '0' || *pStart > '9')
- return false;
-
- nNumber = 10 * nNumber + (*pStart - '0');
- if (pStart + 1 != pEnd || nNumber < 1970)
- return false;
-
- rDateTime.SetYear(nNumber);
- rDateTime.SetTime();
- return true;
-}
-
-/*
- * parseUNIX_isTime.
- */
-bool FTPDirectoryParser::parseUNIX_isTime (
- const char *pStart,
- const char *pEnd,
- sal_uInt16 nHour,
- DateTime &rDateTime)
-{
- if ((nHour > 23 ) || (pStart + 3 != pEnd) ||
- (pStart[1] < '0') || (pStart[1] > '5') ||
- (pStart[2] < '0') || (pStart[2] > '9') )
- return false;
-
- sal_uInt16 nMin = 10 * (pStart[1] - '0') + (pStart[2] - '0');
-
- rDateTime.SetHour (nHour);
- rDateTime.SetMin (nMin);
- rDateTime.SetSec (0);
- rDateTime.SetNanoSec (0);
-
-// Date aCurDate;
-// if (rDateTime.GetMonth() > aCurDate.GetMonth())
-// rDateTime.SetYear(aCurDate.GetYear() - 1);
-// else
-// rDateTime.SetYear(aCurDate.GetYear());
-// return sal_True;
-
- TimeValue aTimeVal;
- osl_getSystemTime(&aTimeVal);
- oslDateTime aCurrDateTime;
- osl_getDateTimeFromTimeValue(&aTimeVal,&aCurrDateTime);
-
- if (rDateTime.GetMonth() > aCurrDateTime.Month)
- rDateTime.SetYear(aCurrDateTime.Year - 1);
- else
- rDateTime.SetYear(aCurrDateTime.Year);
- return true;
-}
-
-/*
- * setYear.
- *
- * Two-digit years are taken as within 50 years back and 49 years forward
- * (both ends inclusive) from the current year. The returned date is not
- * checked for validity of the given day in the given month and year.
- *
- */
-void FTPDirectoryParser::setYear (
- DateTime &rDateTime, sal_uInt16 nYear)
-{
- if (nYear < 100)
- {
- TimeValue aTimeVal;
- osl_getSystemTime(&aTimeVal);
- oslDateTime aCurrDateTime;
- osl_getDateTimeFromTimeValue(&aTimeVal,&aCurrDateTime);
- sal_uInt16 nCurrentYear = aCurrDateTime.Year;
-// sal_uInt16 nCurrentYear = Date().GetYear();
- sal_uInt16 nCurrentCentury = nCurrentYear / 100;
- nCurrentYear %= 100;
- if (nCurrentYear < 50)
- if (nYear <= nCurrentYear)
- nYear += nCurrentCentury * 100;
- else if (nYear < nCurrentYear + 50)
- nYear += nCurrentCentury * 100;
- else
- nYear += (nCurrentCentury - 1) * 100;
- else
- if (nYear >= nCurrentYear)
- nYear += nCurrentCentury * 100;
- else if (nYear >= nCurrentYear - 50)
- nYear += nCurrentCentury * 100;
- else
- nYear += (nCurrentCentury + 1) * 100;
- }
-
- rDateTime.SetYear(nYear);
-}
-
-/*
- * setPath.
- */
-bool FTPDirectoryParser::setPath (
- OUString &rPath, const char *value, sal_Int32 length)
-{
- if (value)
- {
- if (length < 0)
- length = rtl_str_getLength (value);
- rPath = OUString (value, length, RTL_TEXTENCODING_UTF8);
- }
- return (!!value);
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpdirp.hxx b/ucb/source/ucp/ftp/ftpdirp.hxx
deleted file mode 100644
index ae9f36a47303..000000000000
--- a/ucb/source/ucp/ftp/ftpdirp.hxx
+++ /dev/null
@@ -1,158 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-#pragma once
-
-#include <rtl/ustring.hxx>
-#include <com/sun/star/util/DateTime.hpp>
-
-
-namespace ftp {
-
- /*========================================================================
- *
- * the DateTime structure
- *
- *======================================================================*/
-
- struct DateTime
- : public css::util::DateTime
- {
- DateTime() : css::util::DateTime(0, 0, 0, 0, 0, 0, 0, false) { }
-
- void SetYear(sal_uInt16 year) { Year = year; }
- void SetMonth(sal_uInt16 month) { Month = month; }
- void SetDay(sal_uInt16 day) { Day = day; }
- // Only zero allowed and used for time-argument
- void SetTime() { Hours = 0; Minutes = 0; Seconds = 0; NanoSeconds = 0; }
- void SetHour(sal_uInt16 hours) { Hours = hours; }
- void SetMin(sal_uInt16 minutes) { Minutes = minutes; }
- void SetSec(sal_uInt16 seconds) { Seconds = seconds; }
- void SetNanoSec(sal_uInt32 nanoSec) { NanoSeconds = nanoSec; }
-
- sal_uInt16 GetMonth() const { return Month; }
- };
-
-
-/*========================================================================
- *
- * the directory information structure
- *
- *======================================================================*/
-
- enum FTPDirentryMode { INETCOREFTP_FILEMODE_UNKNOWN = 0x00,
- INETCOREFTP_FILEMODE_READ = 0x01,
- INETCOREFTP_FILEMODE_WRITE = 0x02,
- INETCOREFTP_FILEMODE_ISDIR = 0x04,
- INETCOREFTP_FILEMODE_ISLINK = 0x08 };
-
- struct FTPDirentry
- {
- OUString m_aURL;
- OUString m_aName;
- DateTime m_aDate;
- sal_uInt32 m_nMode;
- sal_uInt32 m_nSize;
-
- FTPDirentry()
- : m_aDate(),
- m_nMode(INETCOREFTP_FILEMODE_UNKNOWN),
- m_nSize(sal_uInt32(-1)) { }
-
- void clear() {
- m_aURL.clear();
- m_aName.clear();
- m_aDate = DateTime();
- m_nMode = INETCOREFTP_FILEMODE_UNKNOWN;
- m_nSize = sal_uInt32(-1);
- }
- };
-
-
-/*========================================================================
- *
- * the directory parser
- *
- *======================================================================*/
-
-
- class FTPDirectoryParser
- {
- public:
- static bool parseDOS (
- FTPDirentry &rEntry,
- const char *pBuffer );
-
- static bool parseVMS (
- FTPDirentry &rEntry,
- const char *pBuffer );
-
- static bool parseUNIX (
- FTPDirentry &rEntry,
- const char *pBuffer );
-
-
- private:
-
- static bool parseUNIX_isSizeField (
- const char *pStart,
- const char *pEnd,
- sal_uInt32 &rSize);
-
- static bool parseUNIX_isMonthField (
- const char *pStart,
- const char *pEnd,
- DateTime& rDateTime);
-
- static bool parseUNIX_isDayField (
- const char *pStart,
- const char *pEnd,
- DateTime& rDateTime);
-
- static bool parseUNIX_isYearTimeField (
- const char *pStart,
- const char *pEnd,
- DateTime& rDateTime);
-
- static bool parseUNIX_isTime (
- const char *pStart,
- const char *pEnd,
- sal_uInt16 nHour,
- DateTime& rDateTime);
-
- static void setYear (
- DateTime& rDateTime,
- sal_uInt16 nYear);
-
- static bool setPath (
- OUString& rPath,
- const char *value,
- sal_Int32 length = -1);
- };
-
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpdynresultset.cxx b/ucb/source/ucp/ftp/ftpdynresultset.cxx
deleted file mode 100644
index 8021f9dd48ad..000000000000
--- a/ucb/source/ucp/ftp/ftpdynresultset.cxx
+++ /dev/null
@@ -1,67 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <com/sun/star/sdbc/XResultSet.hpp>
-#include "ftpdynresultset.hxx"
-#include "ftpresultsetfactory.hxx"
-
-using namespace com::sun::star::lang;
-using namespace com::sun::star::sdbc;
-using namespace com::sun::star::ucb;
-using namespace com::sun::star::uno;
-
-
-using namespace ftp;
-
-
-// DynamicResultSet Implementation.
-
-
-DynamicResultSet::DynamicResultSet(
- const Reference< XComponentContext >& rxContext,
- const OpenCommandArgument2& rCommand,
- std::unique_ptr<ResultSetFactory> pFactory )
- : ResultSetImplHelper( rxContext, rCommand ),
- m_pFactory( std::move(pFactory) )
-{
-}
-
-DynamicResultSet::~DynamicResultSet()
-{
-}
-
-
-// Non-interface methods.
-
-
-void DynamicResultSet::initStatic()
-{
- m_xResultSet1.set( m_pFactory->createResultSet() );
-}
-
-
-void DynamicResultSet::initDynamic()
-{
- m_xResultSet1.set( m_pFactory->createResultSet() );
-
- m_xResultSet2 = m_xResultSet1;
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpdynresultset.hxx b/ucb/source/ucp/ftp/ftpdynresultset.hxx
deleted file mode 100644
index 76a070a6da04..000000000000
--- a/ucb/source/ucp/ftp/ftpdynresultset.hxx
+++ /dev/null
@@ -1,48 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include <memory>
-#include <ucbhelper/resultsethelper.hxx>
-
-namespace ftp {
-
- class ResultSetFactory;
-
- class DynamicResultSet : public ::ucbhelper::ResultSetImplHelper
- {
- std::unique_ptr<ResultSetFactory> m_pFactory;
-
- private:
- virtual void initStatic() override;
- virtual void initDynamic() override;
-
- public:
- DynamicResultSet(
- const css::uno::Reference< css::uno::XComponentContext >& rxContext,
- const css::ucb::OpenCommandArgument2& rCommand,
- std::unique_ptr<ResultSetFactory> pFactory );
-
- virtual ~DynamicResultSet() override;
- };
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpintreq.cxx b/ucb/source/ucp/ftp/ftpintreq.cxx
deleted file mode 100644
index 32c765a4e3be..000000000000
--- a/ucb/source/ucp/ftp/ftpintreq.cxx
+++ /dev/null
@@ -1,64 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include "ftpintreq.hxx"
-
-#include <comphelper/interaction.hxx>
-
-#include <com/sun/star/ucb/UnsupportedNameClashException.hpp>
-#include <com/sun/star/ucb/NameClash.hpp>
-
-using namespace cppu;
-using namespace com::sun::star;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::ucb;
-using namespace com::sun::star::task;
-using namespace ftp;
-
-XInteractionApproveImpl::XInteractionApproveImpl()
- : m_bSelected(false)
-{
-}
-
-void SAL_CALL XInteractionApproveImpl::select() { m_bSelected = true; }
-
-// XInteractionDisapproveImpl
-
-XInteractionDisapproveImpl::XInteractionDisapproveImpl() {}
-
-void SAL_CALL XInteractionDisapproveImpl::select() {}
-
-// XInteractionRequestImpl
-
-XInteractionRequestImpl::XInteractionRequestImpl()
- : p1(new XInteractionApproveImpl)
-{
- std::vector<uno::Reference<task::XInteractionContinuation>> continuations{
- Reference<XInteractionContinuation>(p1),
- Reference<XInteractionContinuation>(new XInteractionDisapproveImpl)
- };
- UnsupportedNameClashException excep;
- excep.NameClash = NameClash::ERROR;
- m_xRequest.set(new ::comphelper::OInteractionRequest(Any(excep), std::move(continuations)));
-}
-
-bool XInteractionRequestImpl::approved() const { return p1->isSelected(); }
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpintreq.hxx b/ucb/source/ucp/ftp/ftpintreq.hxx
deleted file mode 100644
index 79bf74ed75ca..000000000000
--- a/ucb/source/ucp/ftp/ftpintreq.hxx
+++ /dev/null
@@ -1,84 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include <com/sun/star/task/XInteractionDisapprove.hpp>
-#include <com/sun/star/task/XInteractionApprove.hpp>
-#include <com/sun/star/task/XInteractionRequest.hpp>
-#include <cppuhelper/implbase.hxx>
-
-
-namespace ftp {
-
- class XInteractionApproveImpl : public cppu::WeakImplHelper <
- css::task::XInteractionApprove >
- {
- public:
-
- XInteractionApproveImpl();
-
- virtual void SAL_CALL select() override;
-
- bool isSelected() const { return m_bSelected;}
-
- private:
-
- bool m_bSelected;
- };
-
-
- class XInteractionDisapproveImpl : public cppu::WeakImplHelper <
- css::task::XInteractionDisapprove >
- {
- public:
-
- XInteractionDisapproveImpl();
-
- virtual void SAL_CALL select() override;
- };
-
-
- class XInteractionRequestImpl
- {
- public:
-
- XInteractionRequestImpl();
-
- bool approved() const;
-
- css::uno::Reference<css::task::XInteractionRequest> const& getRequest() const
- {
- return m_xRequest;
- }
-
- private:
-
- XInteractionApproveImpl* p1;
-
- css::uno::Reference<css::task::XInteractionRequest> m_xRequest;
-
- XInteractionRequestImpl(const XInteractionRequestImpl&) = delete;
- XInteractionRequestImpl& operator=(const XInteractionRequestImpl&) = delete;
- };
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftploaderthread.cxx b/ucb/source/ucp/ftp/ftploaderthread.cxx
deleted file mode 100644
index 91130fc1bc9c..000000000000
--- a/ucb/source/ucp/ftp/ftploaderthread.cxx
+++ /dev/null
@@ -1,96 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-#include "ftploaderthread.hxx"
-#include "curl.hxx"
-
-#include <curlinit.hxx>
-
-using namespace ftp;
-
-
-/********************************************************************************/
-/* */
-/* cleanup function for thread specific data */
-/* */
-/********************************************************************************/
-
-extern "C" {
-
- static int memory_write_dummy(void *,size_t,size_t,void *)
- {
- return 0;
- }
-
- static void delete_CURL(void *pData)
- {
- // Otherwise response for QUIT will be sent to already destroyed
- // MemoryContainer via non-dummy memory_write function.
- (void)curl_easy_setopt(static_cast<CURL*>(pData),
- CURLOPT_HEADERFUNCTION,
- memory_write_dummy);
- curl_easy_cleanup(static_cast<CURL*>(pData));
- }
-
-}
-
-/********************************************************************************/
-/* */
-/* Member part of FTPLoaderThread */
-/* */
-/********************************************************************************/
-
-
-FTPLoaderThread::FTPLoaderThread()
- : m_threadKey(osl_createThreadKey(delete_CURL)) {
-}
-
-
-FTPLoaderThread::~FTPLoaderThread() {
- osl_destroyThreadKey(m_threadKey);
-}
-
-
-CURL* FTPLoaderThread::handle() {
- CURL* ret = static_cast<CURL*>(osl_getThreadKeyData(m_threadKey));
- if(!ret) {
- ret = curl_easy_init();
- if (ret != nullptr) {
- ::InitCurl_easy(ret);
-
- // Make sure curl is not internally using environment variables like
- // "ftp_proxy":
- if (curl_easy_setopt(ret, CURLOPT_PROXY, "") != CURLE_OK) {
- curl_easy_cleanup(ret);
- ret = nullptr;
- }
- }
- osl_setThreadKeyData(m_threadKey, ret);
- }
-
- return ret;
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftploaderthread.hxx b/ucb/source/ucp/ftp/ftploaderthread.hxx
deleted file mode 100644
index 79ba60d1d972..000000000000
--- a/ucb/source/ucp/ftp/ftploaderthread.hxx
+++ /dev/null
@@ -1,59 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-
-#pragma once
-
-#include <osl/thread.h>
-#include "curl.hxx"
-
-namespace ftp {
-
- /** A loaderthread acts as factory for CURL-handles,
- * the key being ( implicit ) the threadid.
- * Owner is a FTPContentProvider-instance
- */
-
- class FTPLoaderThread
- {
- public:
-
- FTPLoaderThread();
- ~FTPLoaderThread();
-
- CURL* handle();
-
-
- private:
- FTPLoaderThread(const FTPLoaderThread&) = delete;
- FTPLoaderThread& operator=(const FTPLoaderThread&) = delete;
-
- oslThreadKey m_threadKey;
-
- }; // end class FTPLoaderThread
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpresultsetI.cxx b/ucb/source/ucp/ftp/ftpresultsetI.cxx
deleted file mode 100644
index baef97284579..000000000000
--- a/ucb/source/ucp/ftp/ftpresultsetI.cxx
+++ /dev/null
@@ -1,90 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-#include <ucbhelper/propertyvalueset.hxx>
-#include <rtl/ref.hxx>
-#include <com/sun/star/ucb/Command.hpp>
-#include "ftpresultsetI.hxx"
-#include "ftpcontent.hxx"
-
-
-using namespace ftp;
-using namespace com::sun::star::ucb;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::uno;
-using namespace com::sun::star::beans;
-using namespace com::sun::star::sdbc;
-
-
-ResultSetI::ResultSetI(const Reference<XComponentContext>& rxContext,
- const Reference<XContentProvider>& xProvider,
- const Sequence<Property>& seqProp,
- const std::vector<FTPDirentry>& dirvec)
- : ResultSetBase(rxContext,xProvider,seqProp)
-{
- for(const auto & i : dirvec)
- m_aPath.push_back(i.m_aURL);
-
- // m_aIdents holds the content identifiers
-
- m_aItems.resize( m_aPath.size() );
- m_aIdents.resize( m_aPath.size() );
-
- for(size_t n = 0; n < m_aItems.size(); ++n) {
- rtl::Reference<ucbhelper::PropertyValueSet> xRow =
- new ucbhelper::PropertyValueSet(rxContext);
-
- for( const auto& rProp : seqProp) {
- const OUString& Name = rProp.Name;
- if(Name == "ContentType")
- xRow->appendString(rProp,
- OUString( "application/ftp" ));
- else if(Name == "Title")
- xRow->appendString(rProp,dirvec[n].m_aName);
- else if(Name == "IsReadOnly")
- xRow->appendBoolean(rProp,
- (dirvec[n].m_nMode &
- INETCOREFTP_FILEMODE_WRITE) == INETCOREFTP_FILEMODE_WRITE);
- else if(Name == "IsDocument")
- xRow->appendBoolean(rProp,
- (dirvec[n].m_nMode &
- INETCOREFTP_FILEMODE_ISDIR) != INETCOREFTP_FILEMODE_ISDIR);
- else if(Name == "IsFolder")
- xRow->appendBoolean(rProp,
- ( dirvec[n].m_nMode &
- INETCOREFTP_FILEMODE_ISDIR) == INETCOREFTP_FILEMODE_ISDIR);
- else if(Name == "Size")
- xRow->appendLong(rProp,
- dirvec[n].m_nSize);
- else if(Name == "DateCreated")
- xRow->appendTimestamp(rProp,
- dirvec[n].m_aDate);
- else if(Name == "CreatableContentsInfo")
- xRow->appendObject(
- rProp,
- Any(FTPContent::queryCreatableContentsInfo_Static()));
- else
- xRow->appendVoid(rProp);
- }
- m_aItems[n].set(xRow);
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpresultsetI.hxx b/ucb/source/ucp/ftp/ftpresultsetI.hxx
deleted file mode 100644
index 259469dd1788..000000000000
--- a/ucb/source/ucp/ftp/ftpresultsetI.hxx
+++ /dev/null
@@ -1,46 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#pragma once
-
-#include <com/sun/star/ucb/XContentProvider.hpp>
-#include <com/sun/star/beans/Property.hpp>
-#include "ftpresultsetbase.hxx"
-#include "ftpdirp.hxx"
-
-
-namespace ftp {
-
- class ResultSetI
- : public ResultSetBase
- {
- public:
-
- ResultSetI(
- const css::uno::Reference< css::uno::XComponentContext>& rxContext,
- const css::uno::Reference< css::ucb::XContentProvider>& xProvider,
- const css::uno::Sequence< css::beans::Property >& seq,
- const std::vector<FTPDirentry>& dirvec);
-
- private:
- };
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpresultsetbase.cxx b/ucb/source/ucp/ftp/ftpresultsetbase.cxx
deleted file mode 100644
index 84beb5c700ca..000000000000
--- a/ucb/source/ucp/ftp/ftpresultsetbase.cxx
+++ /dev/null
@@ -1,510 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <ucbhelper/contentidentifier.hxx>
-#include <com/sun/star/sdbc/SQLException.hpp>
-#include <com/sun/star/uno/Reference.h>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <ucbhelper/resultsetmetadata.hxx>
-#include <cppuhelper/queryinterface.hxx>
-#include <utility>
-#include "ftpresultsetbase.hxx"
-
-using namespace ftp;
-using namespace com::sun::star;
-
-ResultSetBase::ResultSetBase(
- uno::Reference< uno::XComponentContext > xContext,
- uno::Reference< ucb::XContentProvider > xProvider,
- const uno::Sequence< beans::Property >& seq )
- : m_xContext(std::move( xContext )),
- m_xProvider(std::move( xProvider )),
- m_nRow( -1 ),
- m_nWasNull( true ),
- m_sProperty( seq )
-{
-}
-
-ResultSetBase::~ResultSetBase()
-{
-}
-
-
-// XInterface
-
-void SAL_CALL
-ResultSetBase::acquire()
- noexcept
-{
- OWeakObject::acquire();
-}
-
-
-void SAL_CALL
-ResultSetBase::release()
- noexcept
-{
- OWeakObject::release();
-}
-
-
-uno::Any SAL_CALL
-ResultSetBase::queryInterface( const uno::Type& rType )
-{
- uno::Any aRet = cppu::queryInterface(
- rType,
- static_cast< lang::XComponent* >(this),
- static_cast< sdbc::XRow* >(this),
- static_cast< sdbc::XResultSet* >(this),
- static_cast< sdbc::XResultSetMetaDataSupplier* >(this),
- static_cast< beans::XPropertySet* >(this),
- static_cast< ucb::XContentAccess* >(this) );
- return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType );
-}
-
-
-// XComponent
-
-
-void SAL_CALL
-ResultSetBase::addEventListener(
- const uno::Reference< lang::XEventListener >& Listener )
-{
- osl::MutexGuard aGuard( m_aMutex );
-
- if ( ! m_pDisposeEventListeners )
- m_pDisposeEventListeners.reset(
- new comphelper::OInterfaceContainerHelper3<lang::XEventListener>( m_aMutex ) );
-
- m_pDisposeEventListeners->addInterface( Listener );
-}
-
-
-void SAL_CALL
-ResultSetBase::removeEventListener(
- const uno::Reference< lang::XEventListener >& Listener )
-{
- osl::MutexGuard aGuard( m_aMutex );
-
- if ( m_pDisposeEventListeners )
- m_pDisposeEventListeners->removeInterface( Listener );
-}
-
-
-void SAL_CALL
-ResultSetBase::dispose()
-{
- osl::MutexGuard aGuard( m_aMutex );
-
- lang::EventObject aEvt;
- aEvt.Source = static_cast< lang::XComponent * >( this );
-
- if ( m_pDisposeEventListeners && m_pDisposeEventListeners->getLength() )
- {
- m_pDisposeEventListeners->disposeAndClear( aEvt );
- }
- if( m_pRowCountListeners && m_pRowCountListeners->getLength() )
- {
- m_pRowCountListeners->disposeAndClear( aEvt );
- }
- if( m_pIsFinalListeners && m_pIsFinalListeners->getLength() )
- {
- m_pIsFinalListeners->disposeAndClear( aEvt );
- }
-}
-
-
-// XResultSet
-
-sal_Bool SAL_CALL
-ResultSetBase::next()
-{
- ++m_nRow;
- return m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
-}
-
-
-sal_Bool SAL_CALL
-ResultSetBase::isBeforeFirst()
-{
- return m_nRow == -1;
-}
-
-
-sal_Bool SAL_CALL
-ResultSetBase::isAfterLast()
-{
- return m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size()); // Cannot happen, if m_aFolder.isOpen()
-}
-
-
-sal_Bool SAL_CALL
-ResultSetBase::isFirst()
-{
- return m_nRow == 0;
-}
-
-
-sal_Bool SAL_CALL
-ResultSetBase::isLast()
-{
- if( m_nRow == sal::static_int_cast<sal_Int32>(m_aItems.size()) - 1 )
- return true;
- else
- return false;
-}
-
-
-void SAL_CALL
-ResultSetBase::beforeFirst()
-{
- m_nRow = -1;
-}
-
-
-void SAL_CALL
-ResultSetBase::afterLast()
-{
- m_nRow = m_aItems.size();
-}
-
-
-sal_Bool SAL_CALL
-ResultSetBase::first()
-{
- m_nRow = -1;
- return next();
-}
-
-
-sal_Bool SAL_CALL
-ResultSetBase::last()
-{
- m_nRow = m_aItems.size() - 1;
- return true;
-}
-
-
-sal_Int32 SAL_CALL
-ResultSetBase::getRow()
-{
- // Test, whether behind last row
- if( -1 == m_nRow || m_nRow >= sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return 0;
- else
- return m_nRow+1;
-}
-
-
-sal_Bool SAL_CALL ResultSetBase::absolute( sal_Int32 row )
-{
- if( row >= 0 )
- m_nRow = row - 1;
- else
- {
- last();
- m_nRow += ( row + 1 );
- if( m_nRow < -1 )
- m_nRow = -1;
- }
-
- return 0<= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
-}
-
-
-sal_Bool SAL_CALL
-ResultSetBase::relative( sal_Int32 row )
-{
- if( isAfterLast() || isBeforeFirst() )
- throw sdbc::SQLException();
-
- if( row > 0 )
- while( row-- )
- next();
- else if( row < 0 )
- while( row++ && m_nRow > - 1 )
- previous();
-
- return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
-}
-
-
-sal_Bool SAL_CALL
-ResultSetBase::previous()
-{
- if( m_nRow > sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- m_nRow = m_aItems.size(); // Correct Handling of afterLast
- if( 0 <= m_nRow ) -- m_nRow;
-
- return 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size());
-}
-
-
-void SAL_CALL
-ResultSetBase::refreshRow()
-{
-}
-
-
-sal_Bool SAL_CALL
-ResultSetBase::rowUpdated()
-{
- return false;
-}
-
-sal_Bool SAL_CALL
-ResultSetBase::rowInserted()
-{
- return false;
-}
-
-sal_Bool SAL_CALL
-ResultSetBase::rowDeleted()
-{
- return false;
-}
-
-
-uno::Reference< uno::XInterface > SAL_CALL
-ResultSetBase::getStatement()
-{
- return uno::Reference< uno::XInterface >();
-}
-
-
-// XCloseable
-
-void SAL_CALL
-ResultSetBase::close()
-{
-}
-
-
-OUString SAL_CALL
-ResultSetBase::queryContentIdentifierString()
-{
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aPath[m_nRow];
- else
- return OUString();
-}
-
-
-uno::Reference< ucb::XContentIdentifier > SAL_CALL
-ResultSetBase::queryContentIdentifier()
-{
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- {
- if(!m_aIdents[m_nRow].is()) {
- OUString url = queryContentIdentifierString();
- if(!url.isEmpty() )
- m_aIdents[m_nRow] =
- uno::Reference< ucb::XContentIdentifier >(
- new ::ucbhelper::ContentIdentifier(url) );
- }
- return m_aIdents[m_nRow];
- }
-
- return uno::Reference<ucb::XContentIdentifier>();
-}
-
-
-uno::Reference< ucb::XContent > SAL_CALL
-ResultSetBase::queryContent()
-{
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_xProvider->queryContent(queryContentIdentifier());
- else
- return uno::Reference< ucb::XContent >();
-}
-
-namespace {
-
-class XPropertySetInfoImpl
- : public cppu::OWeakObject,
- public beans::XPropertySetInfo
-{
-public:
-
- explicit XPropertySetInfoImpl( const uno::Sequence< beans::Property >& aSeq )
- : m_aSeq( aSeq )
- {
- }
-
- void SAL_CALL acquire()
- noexcept override
- {
- OWeakObject::acquire();
- }
-
-
- void SAL_CALL release()
- noexcept override
- {
- OWeakObject::release();
- }
-
- uno::Any SAL_CALL queryInterface( const uno::Type& rType ) override
- {
- uno::Any aRet = cppu::queryInterface(
- rType,
- static_cast< beans::XPropertySetInfo* >(this) );
- return aRet.hasValue() ? aRet : OWeakObject::queryInterface( rType );
- }
-
- uno::Sequence< beans::Property > SAL_CALL getProperties() override
- {
- return m_aSeq;
- }
-
- beans::Property SAL_CALL getPropertyByName( const OUString& aName ) override
- {
- auto pProp = std::find_if(std::cbegin(m_aSeq), std::cend(m_aSeq),
- [&aName](const beans::Property& rProp) { return aName == rProp.Name; });
- if (pProp != std::cend(m_aSeq))
- return *pProp;
- throw beans::UnknownPropertyException(aName);
- }
-
- sal_Bool SAL_CALL hasPropertyByName( const OUString& Name ) override
- {
- return std::any_of(std::cbegin(m_aSeq), std::cend(m_aSeq),
- [&Name](const beans::Property& rProp) { return Name == rProp.Name; });
- }
-
-private:
-
- uno::Sequence< beans::Property > m_aSeq;
-};
-
-}
-
-// XPropertySet
-uno::Reference< beans::XPropertySetInfo > SAL_CALL
-ResultSetBase::getPropertySetInfo()
-{
- uno::Sequence< beans::Property > seq
- {
- { "RowCount", -1, cppu::UnoType<sal_Int32>::get(), beans::PropertyAttribute::READONLY },
- { "IsRowCountFinal", -1, cppu::UnoType<sal_Bool>::get(), beans::PropertyAttribute::READONLY }
- };
-
- return uno::Reference< beans::XPropertySetInfo > (
- new XPropertySetInfoImpl( seq ) );
-}
-
-
-void SAL_CALL ResultSetBase::setPropertyValue(
- const OUString& aPropertyName, const uno::Any& /*aValue*/ )
-{
- if( aPropertyName == "IsRowCountFinal" ||
- aPropertyName == "RowCount" )
- return;
-
- throw beans::UnknownPropertyException(aPropertyName);
-}
-
-
-uno::Any SAL_CALL ResultSetBase::getPropertyValue(
- const OUString& PropertyName )
-{
- if( PropertyName == "IsRowCountFinal" )
- {
- return uno::Any(true);
- }
- else if ( PropertyName == "RowCount" )
- {
- sal_Int32 count = m_aItems.size();
- return uno::Any(count);
- }
- else
- throw beans::UnknownPropertyException(PropertyName);
-}
-
-
-void SAL_CALL ResultSetBase::addPropertyChangeListener(
- const OUString& aPropertyName,
- const uno::Reference< beans::XPropertyChangeListener >& xListener )
-{
- if( aPropertyName == "IsRowCountFinal" )
- {
- osl::MutexGuard aGuard( m_aMutex );
- if ( ! m_pIsFinalListeners )
- m_pIsFinalListeners.reset(
- new comphelper::OInterfaceContainerHelper3<beans::XPropertyChangeListener>( m_aMutex ) );
-
- m_pIsFinalListeners->addInterface( xListener );
- }
- else if ( aPropertyName == "RowCount" )
- {
- osl::MutexGuard aGuard( m_aMutex );
- if ( ! m_pRowCountListeners )
- m_pRowCountListeners.reset(
- new comphelper::OInterfaceContainerHelper3<beans::XPropertyChangeListener>( m_aMutex ) );
- m_pRowCountListeners->addInterface( xListener );
- }
- else
- throw beans::UnknownPropertyException(aPropertyName);
-}
-
-
-void SAL_CALL ResultSetBase::removePropertyChangeListener(
- const OUString& aPropertyName,
- const uno::Reference< beans::XPropertyChangeListener >& aListener )
-{
- if( aPropertyName == "IsRowCountFinal" &&
- m_pIsFinalListeners )
- {
- osl::MutexGuard aGuard( m_aMutex );
- m_pIsFinalListeners->removeInterface( aListener );
- }
- else if ( aPropertyName == "RowCount" &&
- m_pRowCountListeners )
- {
- osl::MutexGuard aGuard( m_aMutex );
- m_pRowCountListeners->removeInterface( aListener );
- }
- else
- throw beans::UnknownPropertyException(aPropertyName);
-}
-
-
-void SAL_CALL ResultSetBase::addVetoableChangeListener(
- const OUString& /*PropertyName*/,
- const uno::Reference< beans::XVetoableChangeListener >& /*aListener*/ )
-{
-}
-
-
-void SAL_CALL ResultSetBase::removeVetoableChangeListener(
- const OUString& /*PropertyName*/,
- const uno::Reference< beans::XVetoableChangeListener >& /*aListener*/ )
-{
-}
-
-
-// XResultSetMetaDataSupplier
-uno::Reference< sdbc::XResultSetMetaData > SAL_CALL
-ResultSetBase::getMetaData()
-{
- return new ::ucbhelper::ResultSetMetaData( m_xContext, m_sProperty );
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpresultsetbase.hxx b/ucb/source/ucp/ftp/ftpresultsetbase.hxx
deleted file mode 100644
index ee7fa463821f..000000000000
--- a/ucb/source/ucp/ftp/ftpresultsetbase.hxx
+++ /dev/null
@@ -1,410 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#pragma once
-
-#include <vector>
-#include <cppuhelper/weak.hxx>
-#include <comphelper/interfacecontainer3.hxx>
-#include <com/sun/star/lang/XComponent.hpp>
-#include <com/sun/star/ucb/XContentAccess.hpp>
-#include <com/sun/star/sdbc/XCloseable.hpp>
-#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/sdbc/XResultSet.hpp>
-#include <com/sun/star/sdbc/XRow.hpp>
-#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
-#include <com/sun/star/ucb/XContentProvider.hpp>
-#include <com/sun/star/ucb/XContentIdentifier.hpp>
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/beans/Property.hpp>
-
-
-namespace ftp {
-
- class ResultSetBase
- : public cppu::OWeakObject,
- public css::lang::XComponent,
- public css::sdbc::XRow,
- public css::sdbc::XResultSet,
- public css::sdbc::XCloseable,
- public css::sdbc::XResultSetMetaDataSupplier,
- public css::beans::XPropertySet,
- public css::ucb::XContentAccess
- {
- public:
-
- ResultSetBase(css::uno::Reference< css::uno::XComponentContext > xContext,
- css::uno::Reference< css::ucb::XContentProvider > xProvider,
- const css::uno::Sequence< css::beans::Property >& seq);
-
- virtual ~ResultSetBase() override;
-
- // XInterface
- virtual css::uno::Any SAL_CALL
- queryInterface( const css::uno::Type& aType ) override;
-
- virtual void SAL_CALL
- acquire()
- noexcept override;
-
- virtual void SAL_CALL
- release()
- noexcept override;
-
- // XComponent
- virtual void SAL_CALL
- dispose() override;
-
- virtual void SAL_CALL
- addEventListener(
- const css::uno::Reference< css::lang::XEventListener >& xListener ) override;
-
- virtual void SAL_CALL
- removeEventListener( const css::uno::Reference< css::lang::XEventListener >& aListener ) override;
-
-
- // XRow
- virtual sal_Bool SAL_CALL
- wasNull() override
- {
- if( 0<= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- m_nWasNull = m_aItems[m_nRow]->wasNull();
- else
- m_nWasNull = true;
- return m_nWasNull;
- }
-
- virtual OUString SAL_CALL
- getString( sal_Int32 columnIndex ) override
- {
- OUString ret;
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- ret = m_aItems[m_nRow]->getString( columnIndex );
-
- return ret;
- }
-
- virtual sal_Bool SAL_CALL
- getBoolean( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getBoolean( columnIndex );
- else
- return false;
- }
-
- virtual sal_Int8 SAL_CALL
- getByte( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getByte( columnIndex );
- else
- return sal_Int8( 0 );
- }
-
- virtual sal_Int16 SAL_CALL
- getShort( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getShort( columnIndex );
- else
- return sal_Int16( 0 );
- }
-
- virtual sal_Int32 SAL_CALL
- getInt( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getInt( columnIndex );
- else
- return 0;
- }
-
- virtual sal_Int64 SAL_CALL
- getLong( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getLong( columnIndex );
- else
- return sal_Int64( 0 );
- }
-
- virtual float SAL_CALL
- getFloat( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getFloat( columnIndex );
- else
- return float( 0 );
- }
-
- virtual double SAL_CALL
- getDouble( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getDouble( columnIndex );
- else
- return double( 0 );
- }
-
- virtual css::uno::Sequence< sal_Int8 > SAL_CALL
- getBytes( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getBytes( columnIndex );
- else
- return css::uno::Sequence< sal_Int8 >();
- }
-
- virtual css::util::Date SAL_CALL
- getDate( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getDate( columnIndex );
- else
- return css::util::Date();
- }
-
- virtual css::util::Time SAL_CALL
- getTime( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getTime( columnIndex );
- else
- return css::util::Time();
- }
-
- virtual css::util::DateTime SAL_CALL
- getTimestamp( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getTimestamp( columnIndex );
- else
- return css::util::DateTime();
- }
-
-
- virtual css::uno::Reference< css::io::XInputStream > SAL_CALL
- getBinaryStream( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getBinaryStream( columnIndex );
- else
- return css::uno::Reference< css::io::XInputStream >();
- }
-
- virtual css::uno::Reference< css::io::XInputStream > SAL_CALL
- getCharacterStream( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getCharacterStream( columnIndex );
- else
- return css::uno::Reference< css::io::XInputStream >();
- }
-
- virtual css::uno::Any SAL_CALL
- getObject( sal_Int32 columnIndex,
- const css::uno::Reference< css::container::XNameAccess >& typeMap ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getObject( columnIndex,typeMap );
- else
- return css::uno::Any();
- }
-
- virtual css::uno::Reference< css::sdbc::XRef > SAL_CALL
- getRef( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getRef( columnIndex );
- else
- return css::uno::Reference< css::sdbc::XRef >();
- }
-
- virtual css::uno::Reference< css::sdbc::XBlob > SAL_CALL
- getBlob( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getBlob( columnIndex );
- else
- return css::uno::Reference< css::sdbc::XBlob >();
- }
-
- virtual css::uno::Reference< css::sdbc::XClob > SAL_CALL
- getClob( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getClob( columnIndex );
- else
- return css::uno::Reference< css::sdbc::XClob >();
- }
-
- virtual css::uno::Reference< css::sdbc::XArray > SAL_CALL
- getArray( sal_Int32 columnIndex ) override
- {
- if( 0 <= m_nRow && m_nRow < sal::static_int_cast<sal_Int32>(m_aItems.size()) )
- return m_aItems[m_nRow]->getArray( columnIndex );
- else
- return css::uno::Reference<
- css::sdbc::XArray >();
- }
-
-
- // XResultSet
-
- virtual sal_Bool SAL_CALL
- next() override;
-
- virtual sal_Bool SAL_CALL
- isBeforeFirst() override;
-
- virtual sal_Bool SAL_CALL
- isAfterLast() override;
-
- virtual sal_Bool SAL_CALL
- isFirst() override;
-
- virtual sal_Bool SAL_CALL
- isLast() override;
-
- virtual void SAL_CALL
- beforeFirst() override;
-
- virtual void SAL_CALL
- afterLast() override;
-
- virtual sal_Bool SAL_CALL
- first() override;
-
- virtual sal_Bool SAL_CALL
- last() override;
-
- virtual sal_Int32 SAL_CALL
- getRow() override;
-
- virtual sal_Bool SAL_CALL
- absolute(
- sal_Int32 row ) override;
-
- virtual sal_Bool SAL_CALL
- relative(
- sal_Int32 rows ) override;
-
- virtual sal_Bool SAL_CALL
- previous() override;
-
- virtual void SAL_CALL
- refreshRow() override;
-
- virtual sal_Bool SAL_CALL
- rowUpdated() override;
-
- virtual sal_Bool SAL_CALL
- rowInserted() override;
-
- virtual sal_Bool SAL_CALL
- rowDeleted() override;
-
-
- virtual css::uno::Reference< css::uno::XInterface > SAL_CALL
- getStatement() override;
-
- // XCloseable
-
- virtual void SAL_CALL
- close() override;
-
- // XContentAccess
-
- virtual OUString SAL_CALL
- queryContentIdentifierString() override;
-
- virtual css::uno::Reference< css::ucb::XContentIdentifier > SAL_CALL
- queryContentIdentifier() override;
-
- virtual css::uno::Reference< css::ucb::XContent > SAL_CALL
- queryContent() override;
-
- // XResultSetMetaDataSupplier
- virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL
- getMetaData() override;
-
-
- // XPropertySet
- virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL
- getPropertySetInfo() override;
-
- virtual void SAL_CALL setPropertyValue(
- const OUString& aPropertyName,
- const css::uno::Any& aValue ) override;
-
- virtual css::uno::Any SAL_CALL
- getPropertyValue(
- const OUString& PropertyName ) override;
-
- virtual void SAL_CALL
- addPropertyChangeListener(
- const OUString& aPropertyName,
- const css::uno::Reference< css::beans::XPropertyChangeListener >& xListener ) override;
-
- virtual void SAL_CALL
- removePropertyChangeListener(
- const OUString& aPropertyName,
- const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener ) override;
-
- virtual void SAL_CALL
- addVetoableChangeListener(
- const OUString& PropertyName,
- const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
-
- virtual void SAL_CALL removeVetoableChangeListener(
- const OUString& PropertyName,
- const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener ) override;
-
- protected:
-
- css::uno::Reference< css::uno::XComponentContext >
- m_xContext;
- css::uno::Reference< css::ucb::XContentProvider >
- m_xProvider;
- sal_Int32 m_nRow;
- bool m_nWasNull;
-
- typedef std::vector< css::uno::Reference<css::ucb::XContentIdentifier > >
- IdentSet;
- typedef std::vector< css::uno::Reference< css::sdbc::XRow > >
- ItemSet;
-
- IdentSet m_aIdents;
- ItemSet m_aItems;
- std::vector<OUString> m_aPath;
-
- css::uno::Sequence< css::beans::Property >
- m_sProperty;
-
- osl::Mutex m_aMutex;
- std::unique_ptr<comphelper::OInterfaceContainerHelper3<css::lang::XEventListener>> m_pDisposeEventListeners;
- std::unique_ptr<comphelper::OInterfaceContainerHelper3<css::beans::XPropertyChangeListener>> m_pRowCountListeners;
- std::unique_ptr<comphelper::OInterfaceContainerHelper3<css::beans::XPropertyChangeListener>> m_pIsFinalListeners;
- };
-
-
-} // end namespace fileaccess
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpresultsetfactory.hxx b/ucb/source/ucp/ftp/ftpresultsetfactory.hxx
deleted file mode 100644
index d521c570dcc4..000000000000
--- a/ucb/source/ucp/ftp/ftpresultsetfactory.hxx
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-#pragma once
-
-#include "ftpresultsetbase.hxx"
-#include "ftpdirp.hxx"
-#include <com/sun/star/uno/XComponentContext.hpp>
-#include <com/sun/star/beans/Property.hpp>
-#include <rtl/ref.hxx>
-#include <vector>
-
-namespace ftp {
-
-class ResultSetBase;
-
-class ResultSetFactory
-{
-public:
- ResultSetFactory(const css::uno::Reference<css::uno::XComponentContext >& rxContext,
- const css::uno::Reference<css::ucb::XContentProvider >& xProvider,
- const css::uno::Sequence<css::beans::Property>& seq,
- std::vector<FTPDirentry>&& dirvec);
-
- rtl::Reference<ResultSetBase> createResultSet();
-private:
- css::uno::Reference< css::uno::XComponentContext > m_xContext;
- css::uno::Reference< css::ucb::XContentProvider > m_xProvider;
- css::uno::Sequence< css::beans::Property > m_seq;
- std::vector<FTPDirentry> m_dirvec;
-};
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpurl.cxx b/ucb/source/ucp/ftp/ftpurl.cxx
deleted file mode 100644
index 67ac4e6564bd..000000000000
--- a/ucb/source/ucp/ftp/ftpurl.cxx
+++ /dev/null
@@ -1,793 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-
-#include <sal/config.h>
-#include <sal/log.hxx>
-
-#include <rtl/ustrbuf.hxx>
-#include <com/sun/star/ucb/OpenMode.hpp>
-#include <string.h>
-#include <rtl/uri.hxx>
-#include <o3tl/safeint.hxx>
-
-#include "ftpurl.hxx"
-#include "ftpcontentprovider.hxx"
-#include "ftpcfunc.hxx"
-#include "ftpcontainer.hxx"
-#include <memory>
-
-using namespace ftp;
-using namespace com::sun::star::ucb;
-using namespace com::sun::star::uno;
-
-namespace {
-
-OUString encodePathSegment(OUString const & decoded) {
- return rtl::Uri::encode(
- decoded, rtl_UriCharClassPchar, rtl_UriEncodeIgnoreEscapes,
- RTL_TEXTENCODING_UTF8);
-}
-
-OUString decodePathSegment(OUString const & encoded) {
- return rtl::Uri::decode(
- encoded, rtl_UriDecodeWithCharset, RTL_TEXTENCODING_UTF8);
-}
-
-}
-
-MemoryContainer::MemoryContainer()
- : m_nLen(0),
- m_nWritePos(0),
- m_pBuffer(nullptr)
-{
-}
-
-MemoryContainer::~MemoryContainer()
-{
- std::free(m_pBuffer);
-}
-
-
-int MemoryContainer::append(
- const void* pBuffer,
- size_t size,
- size_t nmemb
-) noexcept
-{
- sal_uInt32 nLen = size*nmemb;
- sal_uInt32 tmp(nLen + m_nWritePos);
-
- if(m_nLen < tmp) { // enlarge in steps of multiples of 1K
- do {
- m_nLen+=1024;
- } while(m_nLen < tmp);
-
- if (auto p = std::realloc(m_pBuffer, m_nLen))
- m_pBuffer = p;
- else
- return 0;
- }
-
- memcpy(static_cast<sal_Int8*>(m_pBuffer)+m_nWritePos,
- pBuffer,nLen);
- m_nWritePos = tmp;
- return nLen;
-}
-
-
-extern "C" {
-
- int memory_write(void *buffer,size_t size,size_t nmemb,void *stream)
- {
- MemoryContainer *_stream =
- static_cast<MemoryContainer*>(stream);
-
- if(!_stream)
- return 0;
-
- return _stream->append(buffer,size,nmemb);
- }
-
-}
-
-
-FTPURL::FTPURL(const FTPURL& r)
- : m_pFCP(r.m_pFCP),
- m_aUsername(r.m_aUsername),
- m_bShowPassword(r.m_bShowPassword),
- m_aHost(r.m_aHost),
- m_aPort(r.m_aPort),
- m_aPathSegmentVec(r.m_aPathSegmentVec)
-
-{
-}
-
-
-FTPURL::FTPURL(const OUString& url,
- FTPContentProvider* pFCP)
- : m_pFCP(pFCP),
- m_aUsername("anonymous"),
- m_bShowPassword(false),
- m_aPort("21")
-{
- parse(url); // can reset m_bShowPassword
-}
-
-
-FTPURL::~FTPURL()
-{
-}
-
-
-void FTPURL::parse(const OUString& url)
-{
- OUString aPassword, urlRest;
-
- if(url.getLength() < 6 || !url.startsWithIgnoreAsciiCase("ftp://", &urlRest))
- throw malformed_exception();
-
- // determine "username:password@host:port"
- OUString aExpr;
- sal_Int32 nIdx = urlRest.indexOf('/');
- if (nIdx == -1)
- {
- aExpr = urlRest;
- urlRest = "";
- }
- else
- {
- aExpr = urlRest.copy(0, nIdx);
- urlRest = urlRest.copy(nIdx + 1);
- }
-
- sal_Int32 l = aExpr.indexOf('@');
- m_aHost = aExpr.copy(1+l);
-
- if(l != -1) {
- // Now username and password.
- aExpr = aExpr.copy(0,l);
- l = aExpr.indexOf(':');
- if(l != -1) {
- aPassword = aExpr.copy(1+l);
- if(!aPassword.isEmpty())
- m_bShowPassword = true;
- }
- if(l > 0)
- // Overwritten only if the username is not empty.
- m_aUsername = aExpr.copy(0,l);
- else if(!aExpr.isEmpty())
- m_aUsername = aExpr;
- }
-
- l = m_aHost.lastIndexOf(':');
- sal_Int32 ipv6Back = m_aHost.lastIndexOf(']');
- if((ipv6Back == -1 && l != -1) // not ipv6, but a port
- ||
- (ipv6Back != -1 && 1+ipv6Back == l) // ipv6, and a port
- )
- {
- if(1+l<m_aHost.getLength())
- m_aPort = m_aHost.copy(1+l);
- m_aHost = m_aHost.copy(0,l);
- }
-
- // now determine the pathsegments ...
- while(!urlRest.isEmpty())
- {
- nIdx = urlRest.indexOf('/');
- OUString segment;
- if(nIdx == -1)
- {
- segment = urlRest;
- urlRest = "";
- }
- else
- {
- segment = urlRest.copy(0, nIdx);
- urlRest = urlRest.copy(nIdx + 1);
- }
- if( segment == ".." && !m_aPathSegmentVec.empty() && m_aPathSegmentVec.back() != ".." )
- m_aPathSegmentVec.pop_back();
- else if( segment == "." )
- ; // Ignore
- else
- // This is a legal name.
- m_aPathSegmentVec.push_back( segment );
- }
-
- if(m_bShowPassword)
- m_pFCP->setHost(m_aHost,
- m_aPort,
- m_aUsername,
- aPassword,
- ""/*aAccount*/);
-
- // now check for something like ";type=i" at end of url
- if(!m_aPathSegmentVec.empty())
- {
- l = m_aPathSegmentVec.back().indexOf(';');
- if (l != -1)
- {
- m_aType = m_aPathSegmentVec.back().copy(l);
- m_aPathSegmentVec.back() = m_aPathSegmentVec.back().copy(0,l);
- }
- }
-}
-
-
-OUString FTPURL::ident(bool withslash,bool internal) const
-{
- // rebuild the url as one without ellipses,
- // and more important, as one without username and
- // password. ( These are set together with the command. )
-
- OUStringBuffer bff("ftp://");
-
- if( m_aUsername != "anonymous" ) {
- bff.append(m_aUsername);
-
- OUString aPassword,aAccount;
- m_pFCP->forHost(m_aHost,
- m_aPort,
- m_aUsername,
- aPassword,
- aAccount);
-
- if((m_bShowPassword || internal) &&
- !aPassword.isEmpty() )
- bff.append(":" + aPassword);
-
- bff.append('@');
- }
- bff.append(m_aHost);
-
- if( m_aPort != "21" )
- bff.append(":" + m_aPort + "/");
- else
- bff.append('/');
-
- for(size_t i = 0; i < m_aPathSegmentVec.size(); ++i)
- if(i == 0)
- bff.append(m_aPathSegmentVec[i]);
- else
- bff.append("/" + m_aPathSegmentVec[i]);
- if(withslash)
- if(!bff.isEmpty() && bff[bff.getLength()-1] != '/')
- bff.append('/');
-
- bff.append(m_aType);
- return bff.makeStringAndClear();
-}
-
-
-OUString FTPURL::parent(bool internal) const
-{
- OUStringBuffer bff("ftp://");
-
- if( m_aUsername != "anonymous" ) {
- bff.append(m_aUsername);
-
- OUString aPassword,aAccount;
- m_pFCP->forHost(m_aHost,
- m_aPort,
- m_aUsername,
- aPassword,
- aAccount);
-
- if((internal || m_bShowPassword) && !aPassword.isEmpty())
- bff.append(":" + aPassword);
-
- bff.append('@');
- }
-
- bff.append(m_aHost);
-
- if( m_aPort != "21" )
- bff.append(":" + m_aPort + "/");
- else
- bff.append('/');
-
- OUString last;
-
- for(size_t i = 0; i < m_aPathSegmentVec.size(); ++i)
- if(1+i == m_aPathSegmentVec.size())
- last = m_aPathSegmentVec[i];
- else if(i == 0)
- bff.append(m_aPathSegmentVec[i]);
- else
- bff.append("/" + m_aPathSegmentVec[i]);
-
- if(last.isEmpty())
- bff.append("..");
- else if ( last == ".." )
- bff.append(last + "/..");
-
- bff.append(m_aType);
- return bff.makeStringAndClear();
-}
-
-
-void FTPURL::child(const OUString& title)
-{
- m_aPathSegmentVec.push_back(encodePathSegment(title));
-}
-
-
-OUString FTPURL::child() const
-{
- return
- !m_aPathSegmentVec.empty() ?
- decodePathSegment(m_aPathSegmentVec.back()) : OUString();
-}
-
-
-/** Listing of a directory.
- */
-
-namespace ftp {
-
- namespace {
-
- enum OS {
- FTP_DOS,FTP_UNIX,FTP_VMS,FTP_UNKNOWN
- };
-
- }
-
-}
-
-
-#define SET_CONTROL_CONTAINER \
- MemoryContainer control; \
- (void)curl_easy_setopt(curl, \
- CURLOPT_HEADERFUNCTION, \
- memory_write); \
- (void)curl_easy_setopt(curl, \
- CURLOPT_WRITEHEADER, \
- &control)
-
-
-static void setCurlUrl(CURL* curl, OUString const & url)
-{
- OString urlParAscii(url.getStr(),
- url.getLength(),
- RTL_TEXTENCODING_UTF8);
- (void)curl_easy_setopt(curl,
- CURLOPT_URL,
- urlParAscii.getStr());
-};
-
-oslFileHandle FTPURL::open()
-{
- if(m_aPathSegmentVec.empty())
- throw curl_exception(CURLE_FTP_COULDNT_RETR_FILE);
-
- CURL *curl = m_pFCP->handle();
-
- SET_CONTROL_CONTAINER;
- OUString url(ident(false,true));
- setCurlUrl(curl, url);
-
- oslFileHandle res( nullptr );
- if ( osl_createTempFile( nullptr, &res, nullptr ) == osl_File_E_None )
- {
- (void)curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,file_write);
- (void)curl_easy_setopt(curl,CURLOPT_WRITEDATA,res);
-
- (void)curl_easy_setopt(curl,CURLOPT_POSTQUOTE,0);
- CURLcode err = curl_easy_perform(curl);
-
- if(err == CURLE_OK)
- {
- oslFileError rc = osl_setFilePos( res, osl_Pos_Absolut, 0 );
- SAL_WARN_IF(rc != osl_File_E_None, "ucb.ucp.ftp",
- "osl_setFilePos failed");
- }
- else {
- osl_closeFile(res);
- res = nullptr;
- throw curl_exception(err);
- }
- }
-
- return res;
-}
-
-
-std::vector<FTPDirentry> FTPURL::list(
- sal_Int16 nMode
-) const
-{
- CURL *curl = m_pFCP->handle();
-
- SET_CONTROL_CONTAINER;
- (void)curl_easy_setopt(curl,CURLOPT_NOBODY,false);
- MemoryContainer data;
- (void)curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,memory_write);
- (void)curl_easy_setopt(curl,CURLOPT_WRITEDATA,&data);
-
- OUString url(ident(true,true));
- setCurlUrl(curl, url);
- (void)curl_easy_setopt(curl,CURLOPT_POSTQUOTE,0);
-
- CURLcode err = curl_easy_perform(curl);
- if(err != CURLE_OK)
- throw curl_exception(err);
-
- // now evaluate the error messages
-
- sal_uInt32 len = data.m_nWritePos;
- char* fwd = static_cast<char*>(data.m_pBuffer);
- char *p1, *p2;
- p1 = p2 = fwd;
-
- OS osKind(FTP_UNKNOWN);
- std::vector<FTPDirentry> resvec;
- FTPDirentry aDirEntry;
- // ensure slash at the end
- OUString viewurl(ident(true,false));
-
- while(true) {
- while(o3tl::make_unsigned(p2-fwd) < len && *p2 != '\n') ++p2;
- if(o3tl::make_unsigned(p2-fwd) == len) break;
-
- *p2 = 0;
- switch(osKind) {
- // While FTP knows the 'system'-command,
- // which returns the operating system type,
- // this is not usable here: There are Windows-server
- // formatting the output like UNIX-ls command.
- case FTP_DOS:
- FTPDirectoryParser::parseDOS(aDirEntry,p1);
- break;
- case FTP_UNIX:
- FTPDirectoryParser::parseUNIX(aDirEntry,p1);
- break;
- case FTP_VMS:
- FTPDirectoryParser::parseVMS(aDirEntry,p1);
- break;
- default:
- if(FTPDirectoryParser::parseUNIX(aDirEntry,p1))
- osKind = FTP_UNIX;
- else if(FTPDirectoryParser::parseDOS(aDirEntry,p1))
- osKind = FTP_DOS;
- else if(FTPDirectoryParser::parseVMS(aDirEntry,p1))
- osKind = FTP_VMS;
- }
- aDirEntry.m_aName = aDirEntry.m_aName.trim();
- if( osKind != int(FTP_UNKNOWN) && aDirEntry.m_aName != ".." && aDirEntry.m_aName != "." ) {
- aDirEntry.m_aURL = viewurl + encodePathSegment(aDirEntry.m_aName);
-
- bool isDir = (aDirEntry.m_nMode & INETCOREFTP_FILEMODE_ISDIR) == INETCOREFTP_FILEMODE_ISDIR;
- switch(nMode) {
- case OpenMode::DOCUMENTS:
- if(!isDir)
- resvec.push_back(aDirEntry);
- break;
- case OpenMode::FOLDERS:
- if(isDir)
- resvec.push_back(aDirEntry);
- break;
- default:
- resvec.push_back(aDirEntry);
- };
- }
- aDirEntry.clear();
- p1 = p2 + 1;
- }
-
- return resvec;
-}
-
-
-OUString FTPURL::net_title() const
-{
- CURL *curl = m_pFCP->handle();
-
- SET_CONTROL_CONTAINER;
- (void)curl_easy_setopt(curl,CURLOPT_NOBODY,true); // no data => no transfer
- struct curl_slist *slist = nullptr;
- // post request
- slist = curl_slist_append(slist,"PWD");
- (void)curl_easy_setopt(curl,CURLOPT_POSTQUOTE,slist);
-
- bool try_more(true);
- CURLcode err;
- OUString aNetTitle;
-
- while(true) {
- OUString url(ident(false,true));
-
- if(try_more && !url.endsWith("/"))
- url += "/"; // add end-slash
- else if(!try_more && url.endsWith("/"))
- url = url.copy(0,url.getLength()-1); // remove end-slash
-
- setCurlUrl(curl, url);
- err = curl_easy_perform(curl);
-
- if(err == CURLE_OK) { // get the title from the server
- char* fwd = static_cast<char*>(control.m_pBuffer);
- sal_uInt32 len = control.m_nWritePos;
-
- aNetTitle = OUString(fwd,len,RTL_TEXTENCODING_UTF8);
- // the buffer now contains the name of the file;
- // analyze the output:
- // Format of current working directory:
- // 257 "/bla/bla" is current directory
- sal_Int32 index1 = aNetTitle.lastIndexOf("257");
- index1 = aNetTitle.indexOf('"', index1 + std::strlen("257")) + 1;
- sal_Int32 index2 = aNetTitle.indexOf('"', index1);
- aNetTitle = index2 > index1
- ? aNetTitle.copy(index1, index2 - index1) : OUString();
- if( aNetTitle != "/" ) {
- index1 = aNetTitle.lastIndexOf('/');
- aNetTitle = aNetTitle.copy(1+index1);
- }
- try_more = false;
- } else if(err == CURLE_BAD_PASSWORD_ENTERED)
- // the client should retry after getting the correct
- // username + password
- throw curl_exception(err);
-#if LIBCURL_VERSION_NUM>=0x070d01 /* 7.13.1 */
- else if(err == CURLE_LOGIN_DENIED)
- // the client should retry after getting the correct
- // username + password
- throw curl_exception(err);
-#endif
- else if(try_more && err == CURLE_FTP_ACCESS_DENIED) {
- // We were either denied access when trying to login to
- // an FTP server or when trying to change working directory
- // to the one given in the URL.
- if(!m_aPathSegmentVec.empty())
- // determine title from URL
- aNetTitle = decodePathSegment(m_aPathSegmentVec.back());
- else
- // must be root
- aNetTitle = "/";
- try_more = false;
- }
-
- if(try_more)
- try_more = false;
- else
- break;
- }
-
- curl_slist_free_all(slist);
- return aNetTitle;
-}
-
-
-FTPDirentry FTPURL::direntry() const
-{
- OUString nettitle = net_title();
- FTPDirentry aDirentry;
-
- aDirentry.m_aName = nettitle; // init aDirentry
- if( nettitle == "/" || nettitle == ".." )
- aDirentry.m_nMode = INETCOREFTP_FILEMODE_ISDIR;
- else
- aDirentry.m_nMode = INETCOREFTP_FILEMODE_UNKNOWN;
-
- aDirentry.m_nSize = 0;
-
- if( nettitle != "/" ) {
- // try to open the parent directory
- FTPURL aURL(parent(),m_pFCP);
-
- std::vector<FTPDirentry> aList = aURL.list(OpenMode::ALL);
-
- for(const FTPDirentry & d : aList) {
- if(d.m_aName == nettitle) { // the relevant file is found
- aDirentry = d;
- break;
- }
- }
- }
- return aDirentry;
-}
-
-
-extern "C" {
-
- static size_t memory_read(void *ptr,size_t size,size_t nmemb,void *stream)
- {
- sal_Int32 nRequested = sal_Int32(size*nmemb);
- CurlInput *curlInput = static_cast<CurlInput*>(stream);
- if(curlInput)
- return size_t(curlInput->read(static_cast<sal_Int8*>(ptr),nRequested));
- else
- return 0;
- }
-
-}
-
-
-void FTPURL::insert(bool replaceExisting,void* stream) const
-{
- if(!replaceExisting) {
-// FTPDirentry aDirentry(direntry());
-// if(aDirentry.m_nMode == INETCOREFTP_FILEMODE_UNKNOWN)
- // throw curl_exception(FILE_EXIST_DURING_INSERT);
- throw curl_exception(FILE_MIGHT_EXIST_DURING_INSERT);
- } // else
- // overwrite is default in libcurl
-
- CURL *curl = m_pFCP->handle();
-
- SET_CONTROL_CONTAINER;
- (void)curl_easy_setopt(curl,CURLOPT_NOBODY,false); // no data => no transfer
- (void)curl_easy_setopt(curl,CURLOPT_POSTQUOTE,0);
- (void)curl_easy_setopt(curl,CURLOPT_QUOTE,0);
- (void)curl_easy_setopt(curl,CURLOPT_READFUNCTION,memory_read);
- (void)curl_easy_setopt(curl,CURLOPT_READDATA,stream);
- (void)curl_easy_setopt(curl, CURLOPT_UPLOAD,1);
-
- OUString url(ident(false,true));
- setCurlUrl(curl, url);
-
- CURLcode err = curl_easy_perform(curl);
- (void)curl_easy_setopt(curl, CURLOPT_UPLOAD,false);
-
- if(err != CURLE_OK)
- throw curl_exception(err);
-}
-
-
-void FTPURL::mkdir(bool ReplaceExisting) const
-{
- OString title;
- if(!m_aPathSegmentVec.empty()) {
- OUString titleOU = m_aPathSegmentVec.back();
- titleOU = decodePathSegment(titleOU);
- title = OString(titleOU.getStr(),
- titleOU.getLength(),
- RTL_TEXTENCODING_UTF8);
- }
- else
- // will give an error
- title = OString("/");
-
- OString aDel = "del " + title;
- OString mkd = "mkd " + title;
-
- struct curl_slist *slist = nullptr;
-
- FTPDirentry aDirentry(direntry());
- if(!ReplaceExisting) {
-// if(aDirentry.m_nMode != INETCOREFTP_FILEMODE_UNKNOWN)
-// throw curl_exception(FOLDER_EXIST_DURING_INSERT);
- throw curl_exception(FOLDER_MIGHT_EXIST_DURING_INSERT);
- } else if(aDirentry.m_nMode != INETCOREFTP_FILEMODE_UNKNOWN)
- slist = curl_slist_append(slist,aDel.getStr());
-
- slist = curl_slist_append(slist,mkd.getStr());
-
- CURL *curl = m_pFCP->handle();
- SET_CONTROL_CONTAINER;
- (void)curl_easy_setopt(curl,CURLOPT_NOBODY,true); // no data => no transfer
- (void)curl_easy_setopt(curl,CURLOPT_QUOTE,0);
-
- // post request
- (void)curl_easy_setopt(curl,CURLOPT_POSTQUOTE,slist);
-
- OUString url(parent(true));
- if(!url.endsWith("/"))
- url += "/";
- setCurlUrl(curl, url);
-
- CURLcode err = curl_easy_perform(curl);
- curl_slist_free_all(slist);
- if(err != CURLE_OK)
- throw curl_exception(err);
-}
-
-
-OUString FTPURL::ren(const OUString& NewTitle)
-{
- CURL *curl = m_pFCP->handle();
-
- // post request
- OUString OldTitle = net_title();
- OString renamefrom = "RNFR " +
- OUStringToOString(OldTitle,
- RTL_TEXTENCODING_UTF8);
-
- OString renameto = "RNTO " +
- OUStringToOString(NewTitle,
- RTL_TEXTENCODING_UTF8);
-
- struct curl_slist *slist = nullptr;
- slist = curl_slist_append(slist,renamefrom.getStr());
- slist = curl_slist_append(slist,renameto.getStr());
- (void)curl_easy_setopt(curl,CURLOPT_POSTQUOTE,slist);
-
- SET_CONTROL_CONTAINER;
- (void)curl_easy_setopt(curl,CURLOPT_NOBODY,true); // no data => no transfer
- (void)curl_easy_setopt(curl,CURLOPT_QUOTE,0);
-
- OUString url(parent(true));
- if(!url.endsWith("/"))
- url += "/";
- setCurlUrl(curl, url);
-
- CURLcode err = curl_easy_perform(curl);
- curl_slist_free_all(slist);
- if(err != CURLE_OK)
- throw curl_exception(err);
- else if( !m_aPathSegmentVec.empty() && m_aPathSegmentVec.back() != ".." )
- m_aPathSegmentVec.back() = encodePathSegment(NewTitle);
- return OldTitle;
-}
-
-
-void FTPURL::del() const
-{
- FTPDirentry aDirentry(direntry());
-
- OString dele(aDirentry.m_aName.getStr(),
- aDirentry.m_aName.getLength(),
- RTL_TEXTENCODING_UTF8);
-
- if(aDirentry.m_nMode & INETCOREFTP_FILEMODE_ISDIR) {
- std::vector<FTPDirentry> vec = list(sal_Int16(OpenMode::ALL));
- for(const FTPDirentry & i : vec)
- {
- try {
- FTPURL url(i.m_aURL,m_pFCP);
- url.del();
- } catch(const curl_exception&) {
- }
- }
- dele = "RMD " + dele;
- }
- else if(aDirentry.m_nMode != INETCOREFTP_FILEMODE_UNKNOWN)
- dele = "DELE " + dele;
- else
- return;
-
- // post request
- CURL *curl = m_pFCP->handle();
- struct curl_slist *slist = nullptr;
- slist = curl_slist_append(slist,dele.getStr());
- (void)curl_easy_setopt(curl,CURLOPT_POSTQUOTE,slist);
-
- SET_CONTROL_CONTAINER;
- (void)curl_easy_setopt(curl,CURLOPT_NOBODY,true); // no data => no transfer
- (void)curl_easy_setopt(curl,CURLOPT_QUOTE,0);
-
- OUString url(parent(true));
- if(!url.endsWith("/"))
- url += "/";
- setCurlUrl(curl, url);
-
- CURLcode err = curl_easy_perform(curl);
- curl_slist_free_all(slist);
- if(err != CURLE_OK)
- throw curl_exception(err);
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ftpurl.hxx b/ucb/source/ucp/ftp/ftpurl.hxx
deleted file mode 100644
index b64eb6ecf454..000000000000
--- a/ucb/source/ucp/ftp/ftpurl.hxx
+++ /dev/null
@@ -1,161 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/**************************************************************************
- TODO
- **************************************************************************
-
- *************************************************************************/
-
-#pragma once
-
-#include "curl.hxx"
-
-#include <rtl/ustring.hxx>
-#include <osl/file.h>
-#include <vector>
-
-#include "ftpdirp.hxx"
-
-namespace ftp {
-
- /** Forward declarations.
- */
-
- class FTPContentProvider;
-
-
- enum FTPErrors { FOLDER_MIGHT_EXIST_DURING_INSERT = CURL_LAST,
- FILE_MIGHT_EXIST_DURING_INSERT };
-
- class malformed_exception : public std::exception { };
-
- class curl_exception : public std::exception
- {
- public:
-
- explicit curl_exception(sal_Int32 err)
- : n_err(err) { }
-
- sal_Int32 code() const { return n_err; }
-
-
- private:
-
- sal_Int32 n_err;
- };
-
- class CurlInput {
- public:
- // returns the number of bytes actually read
- virtual sal_Int32 read(sal_Int8 *dest,sal_Int32 nBytesRequested) = 0;
-
- protected:
- ~CurlInput() {}
- };
-
-
- class FTPURL
- {
- public:
- /// @throws malformed_exception
- FTPURL(
- const OUString& aIdent,
- FTPContentProvider* pFCP
- );
-
- FTPURL(const FTPURL& r);
-
- ~FTPURL();
-
- const OUString& host() const { return m_aHost; }
-
- const OUString& port() const { return m_aPort; }
-
- const OUString& username() const { return m_aUsername; }
-
- /** This returns the URL, but cleaned from
- * unnecessary ellipses.
- */
-
- OUString ident(bool withslash,bool internal) const;
-
- /** returns the parent url.
- */
-
- OUString parent(bool internal = false) const;
-
- /** sets the unencoded title */
- void child(const OUString& title);
-
- /** returns the unencoded title */
- OUString child() const;
-
- /// @throws curl_exception
- std::vector<FTPDirentry> list(sal_Int16 nMode) const;
-
- // returns a pointer to an open tempfile,
- // sought to the beginning of.
- /// @throws curl_exception
- oslFileHandle open();
-
- /// @throws curl_exception
- /// @throws malformed_exception
- FTPDirentry direntry() const;
-
- /// @throws curl_exception
- void insert(bool ReplaceExisting,void* stream) const;
-
- /// @throws curl_exception
- /// @throws malformed_exception
- void mkdir(bool ReplaceExisting) const;
-
- /// @throws curl_exception
- OUString ren(const OUString& NewTitle);
-
- /// @throws curl_exception
- /// @throws malformed_exception
- void del() const;
-
-
- private:
-
- FTPContentProvider *m_pFCP;
-
- mutable OUString m_aUsername;
- bool m_bShowPassword;
- mutable OUString m_aHost;
- mutable OUString m_aPort;
- mutable OUString m_aType;
-
- /** Contains the encoded pathsegments of the url.
- */
- std::vector<OUString> m_aPathSegmentVec;
-
- /// @throws malformed_exception
- void parse(const OUString& url);
-
- /// @throws curl_exception
- OUString net_title() const;
- };
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/ftp/ucpftp1.component b/ucb/source/ucp/ftp/ucpftp1.component
deleted file mode 100644
index e71a0837d472..000000000000
--- a/ucb/source/ucp/ftp/ucpftp1.component
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- -->
-
-<component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@"
- xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.FTPContentProvider"
- constructor="ucb_ftp_FTPContentProvider_get_implementation" single-instance="true">
- <service name="com.sun.star.ucb.FTPContentProvider"/>
- </implementation>
-</component>