OGR
cpl_vsil_plugin.h
1 /******************************************************************************
2  *
3  * Project: CPL - Common Portability Library
4  * Purpose: Declarations for vsi filesystem plugin handlers
5  * Author: Thomas Bonfort <thomas.bonfort@airbus.com>
6  *
7  ******************************************************************************
8  * Copyright (c) 2019, Thomas Bonfort <thomas.bonfort@airbus.com>
9  *
10  * Permission is hereby granted, free of charge, to any person obtaining a
11  * copy of this software and associated documentation files (the "Software"),
12  * to deal in the Software without restriction, including without limitation
13  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
14  * and/or sell copies of the Software, and to permit persons to whom the
15  * Software is furnished to do so, subject to the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be included
18  * in all copies or substantial portions of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26  * DEALINGS IN THE SOFTWARE.
27  ****************************************************************************/
28 
29 #ifndef CPL_VSIL_PLUGIN_H_INCLUDED
30 #define CPL_VSIL_PLUGIN_H_INCLUDED
31 
32 #include "cpl_port.h"
33 #include "cpl_string.h"
34 #include "cpl_vsi.h"
35 #include "cpl_vsi_virtual.h"
36 
38 
39 namespace cpl {
40 
41 /************************************************************************/
42 /* VSIPluginFilesystemHandler */
43 /************************************************************************/
44 
45 class VSIPluginHandle;
46 
47 class VSIPluginFilesystemHandler : public VSIFilesystemHandler
48 {
49  CPL_DISALLOW_COPY_ASSIGN(VSIPluginFilesystemHandler)
50 
51 private:
52  const char* m_Prefix;
54 
55 protected:
56  friend class VSIPluginHandle;
57  VSIPluginHandle* CreatePluginHandle(void *cbData);
58  const char* GetCallbackFilename(const char* pszFilename);
59  bool IsValidFilename(const char *pszFilename);
60 
61  vsi_l_offset Tell( void *pFile );
62  int Seek( void *pFile, vsi_l_offset nOffset, int nWhence );
63  size_t Read( void *pFile, void *pBuffer, size_t nSize, size_t nCount );
64  int ReadMultiRange( void *pFile, int nRanges, void ** ppData, const vsi_l_offset* panOffsets, const size_t* panSizes );
65  VSIRangeStatus GetRangeStatus( void *pFile, vsi_l_offset nOffset, vsi_l_offset nLength );
66  int Eof( void *pFile );
67  size_t Write( void *pFile, const void *pBuffer, size_t nSize,size_t nCount);
68  int Flush( void *pFile );
69  int Truncate( void *pFile, vsi_l_offset nNewSize );
70  int Close( void *pFile );
71 
72 public:
73  VSIPluginFilesystemHandler( const char *pszPrefix,
75  ~VSIPluginFilesystemHandler() override;
76 
77  VSIVirtualHandle *Open( const char *pszFilename,
78  const char *pszAccess,
79  bool bSetError ) override;
80 
81  int Stat ( const char *pszFilename, VSIStatBufL *pStatBuf, int nFlags ) override;
82  int Unlink ( const char * pszFilename ) override;
83  int Rename ( const char * oldpath, const char * /*newpath*/ ) override;
84  int Mkdir ( const char * pszDirname, long nMode ) override;
85  int Rmdir ( const char * pszDirname ) override;
86  char **ReadDir ( const char *pszDirname ) override
87  { return ReadDirEx(pszDirname, 0); }
88  char **ReadDirEx( const char * pszDirname, int nMaxFiles ) override;
89  int HasOptimizedReadMultiRange(const char* pszPath ) override;
90 
91 };
92 
93 /************************************************************************/
94 /* VSIPluginHandle */
95 /************************************************************************/
96 
97 class VSIPluginHandle : public VSIVirtualHandle
98 {
99  CPL_DISALLOW_COPY_ASSIGN(VSIPluginHandle)
100 
101  protected:
102  VSIPluginFilesystemHandler* poFS;
103  void *cbData;
104 
105  public:
106 
107  VSIPluginHandle( VSIPluginFilesystemHandler* poFS, void *cbData);
108  ~VSIPluginHandle() override;
109 
110  vsi_l_offset Tell() override;
111  int Seek( vsi_l_offset nOffset, int nWhence ) override;
112  size_t Read( void *pBuffer, size_t nSize, size_t nCount ) override;
113  int ReadMultiRange( int nRanges, void ** ppData, const vsi_l_offset* panOffsets, const size_t* panSizes ) override;
114  VSIRangeStatus GetRangeStatus( vsi_l_offset nOffset, vsi_l_offset nLength ) override;
115  int Eof() override;
116  size_t Write( const void *pBuffer, size_t nSize,size_t nCount) override;
117  int Flush() override;
118  int Truncate( vsi_l_offset nNewSize ) override;
119  int Close() override;
120 };
121 
122 } // namespace cpl
123 
125 
126 #endif // CPL_VSIL_PLUGIN_H_INCLUDED
CPL_LSBWORD32
#define CPL_LSBWORD32(x)
Definition: cpl_port.h:826
CPLReadLineL
const char * CPLReadLineL(VSILFILE *)
Definition: cpl_conv.cpp:630
CSLTokenizeString2
char ** CSLTokenizeString2(const char *pszString, const char *pszDelimiter, int nCSLTFlags)
Definition: cpl_string.cpp:836
GByte
unsigned char GByte
Definition: cpl_port.h:215
VSIFReadL
size_t VSIFReadL(void *, size_t, size_t, VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Read bytes from file.
Definition: cpl_vsil.cpp:1690
cpl_error.h
VSIFreeFilesystemPluginCallbacksStruct
void VSIFreeFilesystemPluginCallbacksStruct(VSIFilesystemPluginCallbacksStruct *poCb)
Definition: cpl_vsil_plugin.cpp:354
CPLZLibInflate
void * CPLZLibInflate(const void *ptr, size_t nBytes, void *outptr, size_t nOutAvailableBytes, size_t *pnOutBytes)
Uncompress a buffer compressed with ZLib DEFLATE compression.
Definition: cpl_conv.cpp:3116
CPLAssertAlwaysEval
#define CPLAssertAlwaysEval(expr)
Definition: cpl_error.h:189
CPLPrintUIntBig
int CPLPrintUIntBig(char *, GUIntBig, int)
Definition: cpl_conv.cpp:1350
cpl_hash_set.h
CPLStringList
String list class designed around our use of C "char**" string lists.
Definition: cpl_string.h:439
CPLCalloc
void * CPLCalloc(size_t, size_t)
Definition: cpl_conv.cpp:138
CPLCloseZip
CPLErr CPLCloseZip(void *hZip)
Definition: cpl_conv.cpp:3105
VSIInstallAzureStreamingFileHandler
void VSIInstallAzureStreamingFileHandler(void)
Install /vsiaz_streaming/ Microsoft Azure Blob file system handler (requires libcurl)
Definition: cpl_vsil_curl_streaming.cpp:2139
VSIRealloc
void * VSIRealloc(void *, size_t)
Definition: cpl_vsisimple.cpp:681
cpl_minixml.h
cpl_vsi.h
VSIInstallPluginHandler
int VSIInstallPluginHandler(const char *pszPrefix, const VSIFilesystemPluginCallbacksStruct *poCb)
Definition: cpl_vsil_plugin.cpp:344
VSIRangeStatus
VSIRangeStatus
Definition: cpl_vsi.h:176
cpl_worker_thread_pool.h
VSIVirtualHandle::Close
virtual int Close()=0
Close file.
CPLString
Convenient string class based on std::string.
Definition: cpl_string.h:330
VSIVirtualHandle::Flush
virtual int Flush()
Flush pending writes to disk.
Definition: cpl_vsi_virtual.h:66
EQUAL
#define EQUAL(a, b)
Definition: cpl_port.h:569
VSIFilesystemPluginCallbacksStruct
Definition: cpl_vsi.h:506
VSIFCloseL
int VSIFCloseL(VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Close file.
Definition: cpl_vsil.cpp:1472
VSIVirtualHandle::Tell
virtual vsi_l_offset Tell()=0
Tell current file offset.
CPLCloseFileInZip
CPLErr CPLCloseFileInZip(void *hZip)
Definition: cpl_conv.cpp:3103
cpl_http.h
CPLStringList::AddString
CPLStringList & AddString(const char *pszNewString)
Definition: cplstringlist.cpp:333
CPLAssert
#define CPLAssert(expr)
Definition: cpl_error.h:186
VSIGetFileSystemOptions
const char * VSIGetFileSystemOptions(const char *pszFilename)
Return the list of options associated with a virtual file system handler as a serialized XML string.
Definition: cpl_vsil.cpp:2360
VSI_RANGE_STATUS_UNKNOWN
@ VSI_RANGE_STATUS_UNKNOWN
Definition: cpl_vsi.h:177
VSIAllocFilesystemPluginCallbacksStruct
VSIFilesystemPluginCallbacksStruct * VSIAllocFilesystemPluginCallbacksStruct(void)
Definition: cpl_vsil_plugin.cpp:351
CPLTestBool
bool CPLTestBool(const char *pszValue)
Definition: cpl_string.cpp:1526
VSIInstallGZipFileHandler
void VSIInstallGZipFileHandler(void)
Install GZip file system handler.
Definition: cpl_vsil_gzip.cpp:2449
VSIVirtualHandle::Read
virtual size_t Read(void *pBuffer, size_t nSize, size_t nCount)=0
Read bytes from file.
CSLConstList
char ** CSLConstList
Definition: cpl_port.h:1194
CPL_FRMT_GUIB
#define CPL_FRMT_GUIB
Definition: cpl_port.h:318
VSIFTellL
vsi_l_offset VSIFTellL(VSILFILE *)
Tell current file offset.
Definition: cpl_vsil.cpp:1575
GUIntBig
unsigned long long GUIntBig
Definition: cpl_port.h:251
CPLCreateZip
void * CPLCreateZip(const char *pszZipFilename, char **papszOptions)
Definition: cpl_conv.cpp:3091
VSIInstallGSFileHandler
void VSIInstallGSFileHandler(void)
Install /vsigs/ Google Cloud Storage file system handler (requires libcurl)
Definition: cpl_vsil_gs.cpp:329
CPLDebug
void CPLDebug(const char *, const char *,...)
Definition: cpl_error.cpp:602
VSIInstallHdfsHandler
void VSIInstallHdfsHandler(void)
Install /vsihdfs/ file system handler (non-functional stub)
Definition: cpl_vsil_hdfs.cpp:431
STARTS_WITH
#define STARTS_WITH(a, b)
Definition: cpl_port.h:578
CPLMalloc
void * CPLMalloc(size_t)
Definition: cpl_conv.cpp:168
VSIInstallGSStreamingFileHandler
void VSIInstallGSStreamingFileHandler(void)
Install /vsigs_streaming/ Google Cloud Storage file system handler (requires libcurl)
Definition: cpl_vsil_curl_streaming.cpp:2121
VSIInstallCurlStreamingFileHandler
void VSIInstallCurlStreamingFileHandler(void)
Install /vsicurl_streaming/ HTTP/FTP file system handler (requires libcurl).
Definition: cpl_vsil_curl_streaming.cpp:2084
cpl_conv.h
cpl_string.h
VSI_CALLOC_VERBOSE
#define VSI_CALLOC_VERBOSE(nCount, nSize)
Definition: cpl_vsi.h:283
VSIFSeekL
int VSIFSeekL(VSILFILE *, vsi_l_offset, int) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Seek to requested offset.
Definition: cpl_vsil.cpp:1532
CPLSPrintf
const char * CPLSPrintf(const char *fmt,...)
Definition: cpl_string.cpp:977
VSIVirtualHandle::Write
virtual size_t Write(const void *pBuffer, size_t nSize, size_t nCount)=0
Write bytes to file.
CSLAddNameValue
char ** CSLAddNameValue(char **papszStrList, const char *pszName, const char *pszValue)
Definition: cpl_string.cpp:1838
CPLMutexHolder
Definition: cpl_multiproc.h:140
CPLError
void CPLError(CPLErr eErrClass, CPLErrorNum err_no, const char *fmt,...)
Definition: cpl_error.cpp:308
VSIInstallZipFileHandler
void VSIInstallZipFileHandler(void)
Install ZIP file system handler.
Definition: cpl_vsil_gzip.cpp:3320
vsi_l_offset
GUIntBig vsi_l_offset
Definition: cpl_vsi.h:140
VSIFree
void VSIFree(void *)
Definition: cpl_vsisimple.cpp:827
CPLE_NotSupported
#define CPLE_NotSupported
Definition: cpl_error.h:109
VSIInstallOSSFileHandler
void VSIInstallOSSFileHandler(void)
Install /vsioss/ Alibaba Cloud Object Storage Service (OSS) file system handler (requires libcurl)
Definition: cpl_vsil_oss.cpp:388
CPL_ARRAYSIZE
#define CPL_ARRAYSIZE(array)
Definition: cpl_port.h:1045
VSIVirtualHandle::Eof
virtual int Eof()=0
Test for end of file.
VSI_STAT_EXISTS_FLAG
#define VSI_STAT_EXISTS_FLAG
Definition: cpl_vsi.h:203
CPLWriteFileInZip
CPLErr CPLWriteFileInZip(void *hZip, const void *pBuffer, int nBufferSize)
Definition: cpl_conv.cpp:3101
VSIMalloc
void * VSIMalloc(size_t)
Definition: cpl_vsisimple.cpp:558
CSLDestroy
void CSLDestroy(char **papszStrList)
Definition: cpl_string.cpp:200
GIntBig
long long GIntBig
Definition: cpl_port.h:248
VSIStatExL
int VSIStatExL(const char *pszFilename, VSIStatBufL *psStatBuf, int nFlags)
Get filesystem object info.
Definition: cpl_vsil.cpp:776
CPLWorkerThreadPool
Definition: cpl_worker_thread_pool.h:76
CPL_UNUSED
#define CPL_UNUSED
Definition: cpl_port.h:948
VSIStatBufL
struct stat64 VSIStatBufL
Definition: cpl_vsi.h:194
cpl_port.h
VSIInstallOSSStreamingFileHandler
void VSIInstallOSSStreamingFileHandler(void)
Install /vsioss_streaming/ Alibaba Cloud Object Storage Service (OSS) file system handler (requires l...
Definition: cpl_vsil_curl_streaming.cpp:2158
VSIInstallSwiftStreamingFileHandler
void VSIInstallSwiftStreamingFileHandler(void)
Install /vsiswift_streamin/ OpenStack Swif Object Storage (Swift) file system handler (requires libcu...
Definition: cpl_vsil_curl_streaming.cpp:2177
CPLStringList::StealList
char ** StealList()
Definition: cplstringlist.cpp:489
VSIInstallS3StreamingFileHandler
void VSIInstallS3StreamingFileHandler(void)
Install /vsis3_streaming/ Amazon S3 file system handler (requires libcurl).
Definition: cpl_vsil_curl_streaming.cpp:2102
VSIVirtualHandle
Definition: cpl_vsi_virtual.h:56
VSIFOpenL
VSILFILE * VSIFOpenL(const char *, const char *)
Open file.
Definition: cpl_vsil.cpp:997
CPLStrdup
char * CPLStrdup(const char *)
Definition: cpl_conv.cpp:293
CPLScanUIntBig
GUIntBig CPLScanUIntBig(const char *, int)
Definition: cpl_conv.cpp:964
CPLCreateFileInZip
CPLErr CPLCreateFileInZip(void *hZip, const char *pszFilename, char **papszOptions)
Definition: cpl_conv.cpp:3099
CPLE_FileIO
#define CPLE_FileIO
Definition: cpl_error.h:103
CPLFree
#define CPLFree
Definition: cpl_conv.h:81
CPL_DISALLOW_COPY_ASSIGN
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Definition: cpl_port.h:997
VSI_STAT_SIZE_FLAG
#define VSI_STAT_SIZE_FLAG
Definition: cpl_vsi.h:207
VSIFPrintfL
int VSIFPrintfL(VSILFILE *, const char *,...) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Formatted write to file.
Definition: cpl_vsil.cpp:1918
CPLGetConfigOption
const char * CPLGetConfigOption(const char *, const char *)
Definition: cpl_conv.cpp:1692
VSILFILE
FILE VSILFILE
Definition: cpl_vsi.h:156
VSIVirtualHandle::Seek
virtual int Seek(vsi_l_offset nOffset, int nWhence)=0
Seek to requested offset.
STARTS_WITH_CI
#define STARTS_WITH_CI(a, b)
Definition: cpl_port.h:580
CPLE_AppDefined
#define CPLE_AppDefined
Definition: cpl_error.h:99
GUInt32
unsigned int GUInt32
Definition: cpl_port.h:207

Generated for GDAL by doxygen 1.8.20.