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: 2024-11-21 22:18:42 Functions: 6 7 85.7 %

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

Generated by: LCOV version 1.14