LCOV - code coverage report
Current view: top level - port - cpl_alibaba_oss.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 13 15 86.7 %
Date: 2025-01-18 12:42:00 Functions: 6 7 85.7 %

          Line data    Source code
       1             : /**********************************************************************
       2             :  *
       3             :  * Name:     cpl_alibaba_oss.h
       4             :  * Project:  CPL - Common Portability Library
       5             :  * Purpose:  Alibaba Cloud Object Storage Service
       6             :  * Author:   Even Rouault <even.rouault at spatialys.com>
       7             :  *
       8             :  **********************************************************************
       9             :  * Copyright (c) 2017, Even Rouault <even.rouault at spatialys.com>
      10             :  *
      11             :  * SPDX-License-Identifier: MIT
      12             :  ****************************************************************************/
      13             : 
      14             : #ifndef CPL_ALIBABA_OSS_INCLUDED_H
      15             : #define CPL_ALIBABA_OSS_INCLUDED_H
      16             : 
      17             : #ifndef DOXYGEN_SKIP
      18             : 
      19             : #include <cstddef>
      20             : 
      21             : #include "cpl_string.h"
      22             : 
      23             : #ifdef HAVE_CURL
      24             : 
      25             : #include <curl/curl.h>
      26             : #include <map>
      27             : #include "cpl_aws.h"
      28             : 
      29             : class VSIOSSHandleHelper final : public IVSIS3LikeHandleHelper
      30             : {
      31             :     CPL_DISALLOW_COPY_ASSIGN(VSIOSSHandleHelper)
      32             : 
      33             :     std::string m_osURL{};
      34             :     std::string m_osSecretAccessKey{};
      35             :     std::string m_osAccessKeyId{};
      36             :     std::string m_osEndpoint{};
      37             :     std::string m_osBucket{};
      38             :     std::string m_osObjectKey{};
      39             :     bool m_bUseHTTPS = false;
      40             :     bool m_bUseVirtualHosting = false;
      41             : 
      42             :     void RebuildURL() override;
      43             : 
      44             :     static bool GetConfiguration(const std::string &osPathForOption,
      45             :                                  CSLConstList papszOptions,
      46             :                                  std::string &osSecretAccessKey,
      47             :                                  std::string &osAccessKeyId);
      48             : 
      49             :   protected:
      50             :   public:
      51             :     VSIOSSHandleHelper(const std::string &osSecretAccessKey,
      52             :                        const std::string &osAccessKeyId,
      53             :                        const std::string &osEndpoint,
      54             :                        const std::string &osBucket,
      55             :                        const std::string &osObjectKey, bool bUseHTTPS,
      56             :                        bool bUseVirtualHosting);
      57             :     ~VSIOSSHandleHelper();
      58             : 
      59             :     static VSIOSSHandleHelper *
      60             :     BuildFromURI(const char *pszURI, const char *pszFSPrefix,
      61             :                  bool bAllowNoObject, CSLConstList papszOptions = nullptr);
      62             :     static std::string BuildURL(const std::string &osEndpoint,
      63             :                                 const std::string &osBucket,
      64             :                                 const std::string &osObjectKey, bool bUseHTTPS,
      65             :                                 bool bUseVirtualHosting);
      66             : 
      67             :     struct curl_slist *
      68             :     GetCurlHeaders(const std::string &osVerb,
      69             :                    const struct curl_slist *psExistingHeaders,
      70             :                    const void *pabyDataContent = nullptr,
      71             :                    size_t nBytesContent = 0) const override;
      72             : 
      73             :     bool CanRestartOnError(const char *, const char *pszHeaders,
      74             :                            bool bSetError) override;
      75             : 
      76         118 :     const std::string &GetURL() const override
      77             :     {
      78         118 :         return m_osURL;
      79             :     }
      80             : 
      81          88 :     const std::string &GetBucket() const
      82             :     {
      83          88 :         return m_osBucket;
      84             :     }
      85             : 
      86             :     const std::string &GetObjectKey() const
      87             :     {
      88             :         return m_osObjectKey;
      89             :     }
      90             : 
      91           1 :     const std::string &GetEndpoint() const
      92             :     {
      93           1 :         return m_osEndpoint;
      94             :     }
      95             : 
      96             :     bool GetVirtualHosting() const
      97             :     {
      98             :         return m_bUseVirtualHosting;
      99             :     }
     100             : 
     101           0 :     std::string GetCopySourceHeader() const override
     102             :     {
     103           0 :         return "x-oss-copy-source";
     104             :     }
     105             : 
     106             :     void SetEndpoint(const std::string &osStr);
     107             :     void SetVirtualHosting(bool b);
     108             : 
     109             :     std::string GetSignedURL(CSLConstList papszOptions);
     110             : };
     111             : 
     112             : class VSIOSSUpdateParams
     113             : {
     114             :   private:
     115             :     std::string m_osEndpoint{};
     116             : 
     117           1 :     explicit VSIOSSUpdateParams(const VSIOSSHandleHelper *poHelper)
     118           1 :         : m_osEndpoint(poHelper->GetEndpoint())
     119             :     {
     120           1 :     }
     121             : 
     122           7 :     void UpdateHandlerHelper(VSIOSSHandleHelper *poHelper)
     123             :     {
     124           7 :         poHelper->SetEndpoint(m_osEndpoint);
     125           7 :     }
     126             : 
     127             :     static std::mutex gsMutex;
     128             :     static std::map<std::string, VSIOSSUpdateParams> goMapBucketsToOSSParams;
     129             : 
     130             :   public:
     131           1 :     VSIOSSUpdateParams() = default;
     132             : 
     133             :     static void UpdateMapFromHandle(VSIOSSHandleHelper *poHandleHelper);
     134             :     static void UpdateHandleFromMap(VSIOSSHandleHelper *poHandleHelper);
     135             :     static void ClearCache();
     136             : };
     137             : 
     138             : #endif /* HAVE_CURL */
     139             : 
     140             : #endif /* #ifndef DOXYGEN_SKIP */
     141             : 
     142             : #endif /* CPL_ALIBABA_OSS_INCLUDED_H */

Generated by: LCOV version 1.14