postprocess/Rdb_services.mk                      |    3 
 ucb/Library_ucpdav1.mk                           |    1 
 ucb/source/ucp/webdav-curl/CurlSession.cxx       |  139 +++++++++++++++++++++++
 ucb/source/ucp/webdav-curl/CurlSession.hxx       |  112 ++++++++++++++++++
 ucb/source/ucp/webdav-curl/DAVSession.hxx        |    2 
 ucb/source/ucp/webdav-curl/DAVSessionFactory.cxx |    6 
 ucb/source/ucp/webdav-curl/SerfLockStore.cxx     |   10 -
 ucb/source/ucp/webdav-curl/SerfLockStore.hxx     |    8 -
 8 files changed, 268 insertions(+), 13 deletions(-)

New commits:
commit ba2ceafa145880002b43c1807fae48fb66e883c6
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Mon Sep 13 15:46:01 2021 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon Nov 1 18:16:44 2021 +0100

    ucb: webdav-curl: add CurlSession boilerplate
    
    Amazingly it even builds, with warnings.
    
    Change-Id: I1f89a8a7de0c37a8908f530d46e275282cdc33de
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122047
    Tested-by: Michael Stahl <michael.st...@allotropia.de>
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/postprocess/Rdb_services.mk b/postprocess/Rdb_services.mk
index 1faf14a374a0..aea72437c4f9 100644
--- a/postprocess/Rdb_services.mk
+++ b/postprocess/Rdb_services.mk
@@ -179,6 +179,9 @@ $(eval $(call gb_Rdb_add_components,services,\
        $(if $(filter serf,$(WITH_WEBDAV)), \
                ucb/source/ucp/webdav/ucpdav1 \
        ) \
+       $(if $(filter curl,$(WITH_WEBDAV)), \
+               ucb/source/ucp/webdav-curl/ucpdav1 \
+       ) \
        $(call gb_Helper_optional,SCRIPTING, \
                basctl/util/basctl \
                sc/util/vbaobj \
diff --git a/ucb/Library_ucpdav1.mk b/ucb/Library_ucpdav1.mk
index c4c739773d13..2809a49cac54 100644
--- a/ucb/Library_ucpdav1.mk
+++ b/ucb/Library_ucpdav1.mk
@@ -37,6 +37,7 @@ $(eval $(call gb_Library_use_externals,ucpdav1,\
 
 $(eval $(call gb_Library_add_exception_objects,ucpdav1,\
        ucb/source/ucp/webdav-curl/ContentProperties \
+       ucb/source/ucp/webdav-curl/CurlSession \
        ucb/source/ucp/webdav-curl/CurlUri \
        ucb/source/ucp/webdav-curl/DAVProperties \
        ucb/source/ucp/webdav-curl/DAVResourceAccess \
diff --git a/ucb/source/ucp/webdav-curl/CurlSession.cxx 
b/ucb/source/ucp/webdav-curl/CurlSession.cxx
new file mode 100644
index 000000000000..fcbf87a0ea75
--- /dev/null
+++ b/ucb/source/ucp/webdav-curl/CurlSession.cxx
@@ -0,0 +1,139 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; 
fill-column: 100 -*- */
+/*
+ * 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/.
+ */
+
+#include "CurlSession.hxx"
+
+namespace http_dav_ucp
+{
+CurlSession::CurlSession(::rtl::Reference<DAVSessionFactory> const& rpFactory, 
OUString const& rURI,
+                         ::ucbhelper::InternetProxyDecider const& 
rProxyDecider)
+    : DAVSession(rpFactory)
+    , m_URI(rURI)
+    , m_rProxyDecider(rProxyDecider)
+{
+}
+
+CurlSession::~CurlSession() {}
+
+auto CurlSession::CanUse(OUString const& rURI) -> bool {}
+
+auto CurlSession::UsesProxy() -> bool {}
+
+auto CurlSession::abort() -> void {}
+
+// DAV methods
+auto CurlSession::PROPFIND(OUString const& rURIReference, Depth const depth,
+                           ::std::vector<OUString> const& rPropertyNames,
+                           ::std::vector<DAVResource>& o_rResources,
+                           DAVRequestEnvironment const& rEnv) -> void
+{
+}
+
+auto CurlSession::PROPFIND(OUString const& rURIReference, Depth const depth,
+                           ::std::vector<DAVResourceInfo>& o_rResourceInfos,
+                           DAVRequestEnvironment const& rEnv) -> void
+{
+}
+
+auto CurlSession::PROPPATCH(OUString const& rURIReference,
+                            ::std::vector<ProppatchValue> const& rValues,
+                            DAVRequestEnvironment const& rEnv) -> void
+{
+}
+
+auto CurlSession::HEAD(OUString const& rURIReference, ::std::vector<OUString> 
const& rHeaderNames,
+                       DAVResource& io_rResource, DAVRequestEnvironment const& 
rEnv) -> void
+{
+}
+
+auto CurlSession::GET(OUString const& rURIReference, DAVRequestEnvironment 
const& rEnv)
+    -> uno::Reference<io::XInputStream>
+{
+}
+
+auto CurlSession::GET(OUString const& rURIReference, 
uno::Reference<io::XOutputStream>& rxOutStream,
+                      DAVRequestEnvironment const& rEnv) -> void
+{
+}
+
+auto CurlSession::GET(OUString const& rURIReference, ::std::vector<OUString> 
const& rHeaderNames,
+                      DAVResource& io_rResource, DAVRequestEnvironment const& 
rEnv)
+    -> uno::Reference<io::XInputStream>
+{
+}
+
+auto CurlSession::GET(OUString const& rURIReference, 
uno::Reference<io::XOutputStream>& rxOutStream,
+                      ::std::vector<OUString> const& rHeaderNames, 
DAVResource& io_rResource,
+                      DAVRequestEnvironment const& rEnv) -> void
+{
+}
+
+auto CurlSession::PUT(OUString const& rURIReference,
+                      uno::Reference<io::XInputStream> const& rxInStream,
+                      DAVRequestEnvironment const& rEnv) -> void
+{
+}
+
+auto CurlSession::POST(OUString const& rURIReference, OUString const& 
rContentType,
+                       OUString const& rReferer, 
uno::Reference<io::XInputStream> const& rxInStream,
+                       DAVRequestEnvironment const& rEnv) -> 
uno::Reference<io::XInputStream>
+{
+}
+
+auto CurlSession::POST(OUString const& rURIReference, OUString const& 
rContentType,
+                       OUString const& rReferer, 
uno::Reference<io::XInputStream> const& rxInStream,
+                       uno::Reference<io::XOutputStream>& rxOutStream,
+                       DAVRequestEnvironment const& rEnv) -> void
+{
+}
+
+auto CurlSession::MKCOL(OUString const& rURIReference, DAVRequestEnvironment 
const& rEnv) -> void {}
+
+auto CurlSession::COPY(OUString const& rSourceURIReference, OUString const& 
rDestinationURI,
+                       DAVRequestEnvironment const& rEnv, bool const 
isOverwrite) -> void
+{
+}
+
+auto CurlSession::MOVE(OUString const& rSourceURIReference, OUString const& 
rDestinationURI,
+                       DAVRequestEnvironment const& rEnv, bool const 
isOverwrite) -> void
+{
+}
+
+auto CurlSession::DESTROY(OUString const& rURIReference, DAVRequestEnvironment 
const& rEnv) -> void
+{
+}
+
+auto CurlSession::LOCK(OUString const& rURIReference, ucb::Lock /*const*/& 
rLock,
+                       DAVRequestEnvironment const& rEnv) -> void
+{
+}
+
+auto CurlSession::LOCK(OUString const& rURIReference, sal_Int64 const nTimeout,
+                       DAVRequestEnvironment const& rEnv) -> sal_Int64
+{
+}
+
+auto CurlSession::UNLOCK(OUString const& rURIReference, DAVRequestEnvironment 
const& rEnv) -> void
+{
+}
+
+auto CurlSession::NonInteractive_LOCK(::std::u16string_view const 
rURIReference,
+                                      sal_Int32& 
o_rLastChanceToSendRefreshRequest) -> bool
+{
+    (void)this;
+}
+
+auto CurlSession::NonInteractive_UNLOCK(::std::u16string_view const 
rURIReference) -> void
+{
+    (void)this;
+}
+
+} // namespace http_dav_ucp
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/webdav-curl/CurlSession.hxx 
b/ucb/source/ucp/webdav-curl/CurlSession.hxx
new file mode 100644
index 000000000000..22947c774420
--- /dev/null
+++ b/ucb/source/ucp/webdav-curl/CurlSession.hxx
@@ -0,0 +1,112 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; 
fill-column: 100 -*- */
+/*
+ * 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/.
+ */
+
+#pragma once
+
+#include "DAVSession.hxx"
+#include "CurlUri.hxx"
+
+namespace http_dav_ucp
+{
+class CurlSession : public DAVSession
+{
+private:
+    CurlUri m_URI;
+    ::ucbhelper::InternetProxyDecider const& m_rProxyDecider;
+
+public:
+    explicit CurlSession(::rtl::Reference<DAVSessionFactory> const& rpFactory, 
OUString const& rURI,
+                         ::ucbhelper::InternetProxyDecider const& 
rProxyDecider);
+    virtual ~CurlSession() override;
+
+    virtual auto CanUse(OUString const& rURI) -> bool override;
+
+    virtual auto UsesProxy() -> bool override;
+
+    // DAV methods
+    virtual auto PROPFIND(OUString const& rURIReference, Depth depth,
+                          ::std::vector<OUString> const& rPropertyNames,
+                          ::std::vector<DAVResource>& o_rResources,
+                          DAVRequestEnvironment const& rEnv) -> void override;
+
+    virtual auto PROPFIND(OUString const& rURIReference, Depth depth,
+                          ::std::vector<DAVResourceInfo>& o_rResourceInfos,
+                          DAVRequestEnvironment const& rEnv) -> void override;
+
+    virtual auto PROPPATCH(OUString const& rURIReference,
+                           ::std::vector<ProppatchValue> const& rValues,
+                           DAVRequestEnvironment const& rEnv) -> void override;
+
+    virtual auto HEAD(OUString const& rURIReference, ::std::vector<OUString> 
const& rHeaderNames,
+                      DAVResource& io_rResource, DAVRequestEnvironment const& 
rEnv)
+        -> void override;
+
+    virtual auto GET(OUString const& rURIReference, DAVRequestEnvironment 
const& rEnv)
+        -> css::uno::Reference<css::io::XInputStream> override;
+
+    virtual auto GET(OUString const& rURIReference,
+                     css::uno::Reference<css::io::XOutputStream>& rxOutStream,
+                     DAVRequestEnvironment const& rEnv) -> void override;
+
+    virtual auto GET(OUString const& rURIReference, ::std::vector<OUString> 
const& rHeaderNames,
+                     DAVResource& io_rResource, DAVRequestEnvironment const& 
rEnv)
+        -> css::uno::Reference<css::io::XInputStream> override;
+
+    virtual auto GET(OUString const& rURIReference,
+                     css::uno::Reference<css::io::XOutputStream>& rxOutStream,
+                     ::std::vector<OUString> const& rHeaderNames, DAVResource& 
io_rResource,
+                     DAVRequestEnvironment const& rEnv) -> void override;
+
+    virtual auto PUT(OUString const& rURIReference,
+                     css::uno::Reference<css::io::XInputStream> const& 
rxInStream,
+                     DAVRequestEnvironment const& rEnv) -> void override;
+
+    virtual auto POST(OUString const& rURIReference, OUString const& 
rContentType,
+                      OUString const& rReferer,
+                      css::uno::Reference<css::io::XInputStream> const& 
rxInStream,
+                      DAVRequestEnvironment const& rEnv)
+        -> css::uno::Reference<css::io::XInputStream> override;
+
+    virtual auto POST(OUString const& rURIReference, OUString const& 
rContentType,
+                      OUString const& rReferer,
+                      css::uno::Reference<css::io::XInputStream> const& 
rxInStream,
+                      css::uno::Reference<css::io::XOutputStream>& rxOutStream,
+                      DAVRequestEnvironment const& rEnv) -> void override;
+
+    virtual auto MKCOL(OUString const& rURIReference, DAVRequestEnvironment 
const& rEnv)
+        -> void override;
+
+    virtual auto COPY(OUString const& rSourceURIReference, OUString const& 
rDestinationURI,
+                      DAVRequestEnvironment const& rEnv, bool isOverwrite = 
false) -> void override;
+
+    virtual auto MOVE(OUString const& rSourceURIReference, OUString const& 
rDestinationURI,
+                      DAVRequestEnvironment const& rEnv, bool isOverwrite = 
false) -> void override;
+
+    virtual auto DESTROY(OUString const& rURIReference, DAVRequestEnvironment 
const& rEnv)
+        -> void override;
+
+    virtual auto LOCK(OUString const& rURIReference, css::ucb::Lock /*const*/& 
rLock,
+                      DAVRequestEnvironment const& rEnv) -> void override;
+
+    virtual auto LOCK(OUString const& rURIReference, sal_Int64 nTimeout,
+                      DAVRequestEnvironment const& rEnv) -> sal_Int64 override;
+
+    virtual auto UNLOCK(OUString const& rURIReference, DAVRequestEnvironment 
const& rEnv)
+        -> void override;
+
+    virtual auto abort() -> void override;
+
+    auto NonInteractive_LOCK(::std::u16string_view rURIReference,
+                             sal_Int32& o_rLastChanceToSendRefreshRequest) -> 
bool;
+    auto NonInteractive_UNLOCK(::std::u16string_view rURIReference) -> void;
+};
+
+} // namespace http_dav_ucp
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/ucb/source/ucp/webdav-curl/DAVSession.hxx 
b/ucb/source/ucp/webdav-curl/DAVSession.hxx
index 8289d052dc90..d5e8e4ad0a57 100644
--- a/ucb/source/ucp/webdav-curl/DAVSession.hxx
+++ b/ucb/source/ucp/webdav-curl/DAVSession.hxx
@@ -55,7 +55,7 @@ public:
         }
     }
 
-    virtual bool CanUse( const OUString & inPath ) = 0;
+    virtual bool CanUse( const OUString & rURI ) = 0;
 
     virtual bool UsesProxy() = 0;
 
diff --git a/ucb/source/ucp/webdav-curl/DAVSessionFactory.cxx 
b/ucb/source/ucp/webdav-curl/DAVSessionFactory.cxx
index 812d64d2e273..5de6edd198d4 100644
--- a/ucb/source/ucp/webdav-curl/DAVSessionFactory.cxx
+++ b/ucb/source/ucp/webdav-curl/DAVSessionFactory.cxx
@@ -19,7 +19,7 @@
 
 #include <memory>
 #include "DAVSessionFactory.hxx"
-#include "SerfSession.hxx"
+#include "CurlSession.hxx"
 #include "CurlUri.hxx"
 
 using namespace http_dav_ucp;
@@ -46,7 +46,7 @@ rtl::Reference< DAVSession > 
DAVSessionFactory::createDAVSession(
         CurlUri const aURI( inUri );
 
         std::unique_ptr< DAVSession > xElement(
-            new SerfSession( this, inUri, *m_xProxyDecider ) );
+            new CurlSession(this, inUri, *m_xProxyDecider) );
 
         aIt = m_aMap.emplace(  inUri, xElement.get() ).first;
         aIt->second->m_aContainerIt = aIt;
@@ -69,7 +69,7 @@ rtl::Reference< DAVSession > 
DAVSessionFactory::createDAVSession(
         // call a little:
         CurlUri const aURI( inUri );
 
-        aIt->second = new SerfSession( this, inUri, *m_xProxyDecider );
+        aIt->second = new CurlSession(this, inUri, *m_xProxyDecider);
         aIt->second->m_aContainerIt = aIt;
         return aIt->second;
     }
diff --git a/ucb/source/ucp/webdav-curl/SerfLockStore.cxx 
b/ucb/source/ucp/webdav-curl/SerfLockStore.cxx
index ec2f6ae1bea7..ff9eaac816df 100644
--- a/ucb/source/ucp/webdav-curl/SerfLockStore.cxx
+++ b/ucb/source/ucp/webdav-curl/SerfLockStore.cxx
@@ -21,7 +21,7 @@
 #include <sal/log.hxx>
 #include <osl/time.h>
 #include <osl/thread.hxx>
-#include "SerfSession.hxx"
+#include "CurlSession.hxx"
 #include "SerfLockStore.hxx"
 
 using namespace http_dav_ucp;
@@ -94,7 +94,7 @@ SerfLockStore::~SerfLockStore()
 
     for ( auto& rLockInfo : m_aLockInfoMap )
     {
-        rLockInfo.second.m_xSession->UNLOCK( rLockInfo.first );
+        rLockInfo.second.m_xSession->NonInteractive_UNLOCK(rLockInfo.first);
     }
 }
 
@@ -142,7 +142,7 @@ OUString SerfLockStore::getLockToken( const OUString& rLock 
)
 
 void SerfLockStore::addLock( const OUString& rLock,
                              const OUString& sToken,
-                             rtl::Reference< SerfSession > const & xSession,
+                             rtl::Reference<CurlSession> const & xSession,
                              sal_Int32 nLastChanceToSendRefreshRequest )
 {
     osl::MutexGuard aGuard( m_aMutex );
@@ -199,8 +199,8 @@ void SerfLockStore::refreshLocks()
             {
                 // refresh the lock.
                 sal_Int32 nlastChanceToSendRefreshRequest = -1;
-                if ( rInfo.m_xSession->LOCK(
-                         rLockInfo.first, &nlastChanceToSendRefreshRequest ) )
+                if (rInfo.m_xSession->NonInteractive_LOCK(
+                         rLockInfo.first, nlastChanceToSendRefreshRequest))
                 {
                     rInfo.m_nLastChanceToSendRefreshRequest
                         = nlastChanceToSendRefreshRequest;
diff --git a/ucb/source/ucp/webdav-curl/SerfLockStore.hxx 
b/ucb/source/ucp/webdav-curl/SerfLockStore.hxx
index 5449f049a3ec..5bfc8c952cca 100644
--- a/ucb/source/ucp/webdav-curl/SerfLockStore.hxx
+++ b/ucb/source/ucp/webdav-curl/SerfLockStore.hxx
@@ -24,7 +24,7 @@
 #include <osl/mutex.hxx>
 #include <rtl/ref.hxx>
 #include <rtl/ustring.hxx>
-#include "SerfSession.hxx"
+#include "CurlSession.hxx"
 
 namespace http_dav_ucp
 {
@@ -34,14 +34,14 @@ class TickerThread;
 struct LockInfo
 {
     OUString m_sToken;
-    rtl::Reference< SerfSession > m_xSession;
+    rtl::Reference<CurlSession> m_xSession;
     sal_Int32 m_nLastChanceToSendRefreshRequest;
 
     LockInfo()
         : m_nLastChanceToSendRefreshRequest( -1 ) {}
 
     LockInfo( const OUString& sToken,
-              rtl::Reference< SerfSession > const & xSession,
+              rtl::Reference<CurlSession> const & xSession,
               sal_Int32 nLastChanceToSendRefreshRequest )
     : m_sToken( sToken ),
       m_xSession( xSession ),
@@ -66,7 +66,7 @@ public:
 
     void addLock( const OUString& rLock,
                   const OUString& sToken,
-                  rtl::Reference< SerfSession > const & xSession,
+                  rtl::Reference<CurlSession> const & xSession,
                   // time in seconds since Jan 1 1970
                   // -1: infinite lock, no refresh
                   sal_Int32 nLastChanceToSendRefreshRequest );

Reply via email to