29 #ifndef CPL_VSIL_CURL_CLASS_H_INCLUDED
30 #define CPL_VSIL_CURL_CLASS_H_INCLUDED
37 #include "cpl_vsil_curl_priv.h"
38 #include "cpl_mem_cache.h"
40 #include <curl/curl.h>
49 #if LIBCURL_VERSION_NUM >= 0x071201
50 #define HAVE_CURLINFO_REDIRECT_URL
53 void VSICurlStreamingClearCache(
void );
55 struct curl_slist* VSICurlSetOptions(CURL* hCurlHandle,
const char* pszURL,
56 const char *
const* papszOptions);
57 struct curl_slist* VSICurlMergeHeaders(
struct curl_slist* poDest,
58 struct curl_slist* poSrcToDestroy );
72 ExistStatus eExists = EXIST_UNKNOWN;
75 time_t nExpireTimestampLocal = 0;
77 bool bHasComputedFileSize =
false;
78 bool bIsDirectory =
false;
79 bool bS3LikeRedirect =
false;
85 bool bGotFileList =
false;
91 char* pBuffer =
nullptr;
94 bool bIsInHeader =
false;
95 bool bMultiRange =
false;
100 bool bFoundContentRange =
false;
102 bool bDownloadHeaderOnly =
false;
103 bool bDetectRangeDownloadingError =
false;
107 VSICurlReadCbkFunc pfnReadCbk =
nullptr;
108 void *pReadCbkUserData =
nullptr;
109 bool bInterrupted =
false;
111 #if LIBCURL_VERSION_NUM < 0x073600
115 bool bIsProxyConnectHeader =
false;
125 class VSICurlFilesystemHandler :
public VSIFilesystemHandler
129 struct FilenameOffsetPair
131 std::string filename_;
134 FilenameOffsetPair(
const std::string& filename,
136 filename_(filename), offset_(offset) {}
138 bool operator==(
const FilenameOffsetPair& other)
const
140 return filename_ == other.filename_ &&
141 offset_ == other.offset_;
144 struct FilenameOffsetPairHasher
146 std::size_t operator()(
const FilenameOffsetPair& k)
const
148 return std::hash<std::string>()(k.filename_) ^
149 std::hash<vsi_l_offset>()(k.offset_);
153 using RegionCacheType =
154 lru11::Cache<FilenameOffsetPair, std::shared_ptr<std::string>,
158 typename std::list<lru11::KeyValuePair<FilenameOffsetPair,
159 std::shared_ptr<std::string>>>::iterator,
160 FilenameOffsetPairHasher>>;
162 RegionCacheType oRegionCache;
164 lru11::Cache<std::string, FileProp> oCacheFileProp;
166 int nCachedFilesInDirList = 0;
167 lru11::Cache<std::string, CachedDirList> oCacheDirList;
169 char** ParseHTMLFileList(
const char* pszFilename,
172 bool* pbGotFileList);
175 CPLMutex *hMutex =
nullptr;
177 virtual VSICurlHandle* CreateFileHandle(
const char* pszFilename);
178 virtual char** GetFileList(
const char *pszFilename,
180 bool* pbGotFileList);
182 void RegisterEmptyDir(
const CPLString& osDirname );
184 bool AnalyseS3FileList(
const CPLString& osBaseURL,
188 bool bIgnoreGlacierStorageClass,
189 bool& bIsTruncated );
191 void AnalyseSwiftFileList(
const CPLString& osBaseURL,
195 int nMaxFilesThisQuery,
200 static const char* GetOptionsStatic();
202 static bool IsAllowedFilename(
const char* pszFilename );
205 VSICurlFilesystemHandler();
206 ~VSICurlFilesystemHandler()
override;
209 const char *pszAccess,
210 bool bSetError )
override;
212 int Stat(
const char *pszFilename,
VSIStatBufL *pStatBuf,
213 int nFlags )
override;
214 int Unlink(
const char *pszFilename )
override;
215 int Rename(
const char *oldpath,
const char *newpath )
override;
216 int Mkdir(
const char *pszDirname,
long nMode )
override;
217 int Rmdir(
const char *pszDirname )
override;
218 char **ReadDir(
const char *pszDirname )
override
219 {
return ReadDirEx(pszDirname, 0); }
220 char **ReadDirEx(
const char *pszDirname,
int nMaxFiles )
override;
222 int HasOptimizedReadMultiRange(
const char* )
223 override {
return true; }
225 const char* GetActualURL(
const char* pszFilename)
override;
227 const char* GetOptions()
override;
229 char **ReadDirInternal(
const char *pszDirname,
int nMaxFiles,
230 bool* pbGotFileList );
231 void InvalidateDirContent(
const char *pszDirname );
233 virtual CPLString GetFSPrefix() {
return "/vsicurl/"; }
234 virtual bool AllowCachedDataFor(
const char* pszFilename);
236 std::shared_ptr<std::string> GetRegion(
const char* pszURL,
239 void AddRegion(
const char* pszURL,
244 bool GetCachedFileProp(
const char* pszURL,
245 FileProp& oFileProp );
246 void SetCachedFileProp(
const char* pszURL,
247 const FileProp& oFileProp );
248 void InvalidateCachedData(
const char* pszURL );
250 CURLM *GetCurlMultiHandleFor(
const CPLString& osURL );
252 virtual void ClearCache();
253 virtual void PartialClearCache(
const char* pszFilename);
256 bool GetCachedDirList(
const char* pszURL,
257 CachedDirList& oCachedDirList );
258 void SetCachedDirList(
const char* pszURL,
259 const CachedDirList& oCachedDirList );
260 bool ExistsInCacheDirList(
const CPLString& osDirname,
bool *pbIsDir );
274 VSICurlFilesystemHandler* poFS =
nullptr;
276 bool m_bCached =
true;
278 FileProp oFileProp{};
281 char* m_pszURL =
nullptr;
283 char **m_papszHTTPOptions =
nullptr;
286 int nBlocksToDownload = 1;
288 bool bStopOnInterruptUntilUninstall =
false;
289 bool bInterrupted =
false;
290 VSICurlReadCbkFunc pfnReadCbk =
nullptr;
291 void *pReadCbkUserData =
nullptr;
294 double m_dfRetryDelay = 0.0;
296 void DownloadRegionPostProcess(
const vsi_l_offset startOffset,
307 virtual std::string DownloadRegion(
vsi_l_offset startOffset,
int nBlocks);
309 bool m_bUseHead =
false;
311 int ReadMultiRangeSingleGet(
int nRanges,
void ** ppData,
313 const size_t* panSizes );
314 CPLString GetRedirectURLIfValid(
bool& bHasExpired);
317 virtual struct curl_slist* GetCurlHeaders(
const CPLString& ,
318 const struct curl_slist* )
320 virtual bool AllowAutomaticRedirection() {
return true; }
321 virtual bool CanRestartOnError(
const char*,
const char*,
bool ) {
return false; }
322 virtual bool UseLimitRangeGetInsteadOfHead() {
return false; }
323 virtual bool IsDirectoryFromExists(
const char* ,
int ) {
return false; }
324 virtual void ProcessGetFileSizeResult(
const char* ) {}
325 void SetURL(
const char* pszURL);
329 VSICurlHandle( VSICurlFilesystemHandler* poFS,
330 const char* pszFilename,
331 const char* pszURLIn =
nullptr );
332 ~VSICurlHandle()
override;
336 size_t Read(
void *pBuffer,
size_t nSize,
size_t nMemb )
override;
337 int ReadMultiRange(
int nRanges,
void ** ppData,
339 const size_t* panSizes )
override;
340 size_t Write(
const void *pBuffer,
size_t nSize,
size_t nMemb )
override;
342 int Flush()
override;
343 int Close()
override;
345 bool IsKnownFileSize()
const {
return oFileProp.bHasComputedFileSize; }
346 vsi_l_offset GetFileSize() {
return GetFileSize(
false); }
348 bool Exists(
bool bSetError );
349 bool IsDirectory()
const {
return oFileProp.bIsDirectory; }
350 time_t GetMTime()
const {
return oFileProp.mTime; }
352 int InstallReadCbk( VSICurlReadCbkFunc pfnReadCbk,
354 int bStopOnInterruptUntilUninstall );
355 int UninstallReadCbk();
357 const char *GetURL()
const {
return m_pszURL; }
364 class IVSIS3LikeFSHandler:
public VSICurlFilesystemHandler
369 char** GetFileList(
const char *pszFilename,
371 bool* pbGotFileList )
override;
373 virtual IVSIS3LikeHandleHelper* CreateHandleHelper(
374 const char* pszURI,
bool bAllowNoObject) = 0;
376 IVSIS3LikeFSHandler() =
default;
379 int Unlink(
const char *pszFilename )
override;
380 int Mkdir(
const char *pszDirname,
long nMode )
override;
381 int Rmdir(
const char *pszDirname )
override;
382 int Stat(
const char *pszFilename,
VSIStatBufL *pStatBuf,
383 int nFlags )
override;
385 virtual int DeleteObject(
const char *pszFilename );
387 virtual const char* GetDebugKey()
const = 0;
389 virtual void UpdateMapFromHandle(IVSIS3LikeHandleHelper*) {}
390 virtual void UpdateHandleFromMap( IVSIS3LikeHandleHelper * ) {}
392 bool Sync(
const char* pszSource,
const char* pszTarget,
393 const char*
const * papszOptions,
394 GDALProgressFunc pProgressFunc,
396 char*** ppapszOutputs )
override;
398 VSIDIR* OpenDir(
const char *pszPath,
int nRecurseDepth,
399 const char*
const *papszOptions)
override;
406 class IVSIS3LikeHandle:
public VSICurlHandle
411 bool UseLimitRangeGetInsteadOfHead()
override {
return true; }
412 bool IsDirectoryFromExists(
const char* pszVerb,
413 int response_code )
override
416 return response_code == 416 &&
EQUAL(pszVerb,
"GET") &&
419 void ProcessGetFileSizeResult(
const char* pszContent )
override
421 oFileProp.bIsDirectory = strstr(pszContent,
"ListBucketResult") !=
nullptr;
425 IVSIS3LikeHandle( VSICurlFilesystemHandler* poFSIn,
426 const char* pszFilename,
427 const char* pszURLIn =
nullptr ) :
428 VSICurlHandle(poFSIn, pszFilename, pszURLIn) {}
429 ~IVSIS3LikeHandle()
override {}
440 IVSIS3LikeFSHandler *m_poFS =
nullptr;
442 IVSIS3LikeHandleHelper *m_poS3HandleHelper =
nullptr;
443 bool m_bUseChunked =
false;
446 int m_nBufferOff = 0;
447 int m_nBufferSize = 0;
448 int m_nBufferOffReadCallback = 0;
449 bool m_bClosed =
false;
450 GByte *m_pabyBuffer =
nullptr;
452 int m_nPartNumber = 0;
453 std::vector<CPLString> m_aosEtags{};
455 int m_nOffsetInXML = 0;
456 bool m_bError =
false;
458 CURLM *m_hCurlMulti =
nullptr;
459 CURL *m_hCurl =
nullptr;
460 const void *m_pBuffer =
nullptr;
462 size_t m_nChunkedBufferOff = 0;
463 size_t m_nChunkedBufferSize = 0;
466 double m_dfRetryDelay = 0.0;
467 WriteFuncStruct m_sWriteFuncHeaderData{};
469 static size_t ReadCallBackBuffer(
char *buffer,
size_t size,
470 size_t nitems,
void *instream );
471 bool InitiateMultipartUpload();
473 static size_t ReadCallBackXML(
char *buffer,
size_t size,
474 size_t nitems,
void *instream );
475 bool CompleteMultipart();
476 bool AbortMultipart();
477 bool DoSinglePartPUT();
479 static size_t ReadCallBackBufferChunked(
char *buffer,
size_t size,
480 size_t nitems,
void *instream );
481 size_t WriteChunked(
const void *pBuffer,
482 size_t nSize,
size_t nMemb );
483 int FinishChunkedTransfer();
485 void InvalidateParentDirectory();
488 VSIS3WriteHandle( IVSIS3LikeFSHandler* poFS,
489 const char* pszFilename,
490 IVSIS3LikeHandleHelper* poS3HandleHelper,
492 ~VSIS3WriteHandle()
override;
496 size_t Read(
void *pBuffer,
size_t nSize,
size_t nMemb )
override;
497 size_t Write(
const void *pBuffer,
size_t nSize,
size_t nMemb )
override;
499 int Close()
override;
501 bool IsOK() {
return m_bUseChunked || m_pabyBuffer !=
nullptr; }
514 VSICurlFilesystemHandler* m_poFS =
nullptr;
519 int m_nBufferOff = 0;
520 int m_nBufferSize = 0;
521 int m_nBufferOffReadCallback = 0;
522 bool m_bClosed =
false;
523 GByte *m_pabyBuffer =
nullptr;
524 bool m_bError =
false;
526 static size_t ReadCallBackBuffer(
char *buffer,
size_t size,
527 size_t nitems,
void *instream );
528 virtual bool Send(
bool bIsLastBlock) = 0;
531 VSIAppendWriteHandle( VSICurlFilesystemHandler* poFS,
532 const char* pszFSPrefix,
533 const char* pszFilename,
535 virtual ~VSIAppendWriteHandle();
539 size_t Read(
void *pBuffer,
size_t nSize,
size_t nMemb )
override;
540 size_t Write(
const void *pBuffer,
size_t nSize,
size_t nMemb )
override;
542 int Close()
override;
544 bool IsOK() {
return m_pabyBuffer !=
nullptr; }
547 int VSICURLGetDownloadChunkSize();
549 void VSICURLInitWriteFuncStruct( WriteFuncStruct *psStruct,
551 VSICurlReadCbkFunc pfnReadCbk,
552 void *pReadCbkUserData );
553 size_t VSICurlHandleWriteFunc(
void *buffer,
size_t count,
554 size_t nmemb,
void *req );
555 void MultiPerform(CURLM* hCurlMultiHandle,
556 CURL* hEasyHandle =
nullptr);
557 void VSICURLResetHeaderAndWriterFunctions(CURL* hCurlHandle);
565 #endif // CPL_VSIL_CURL_CLASS_H_INCLUDED
int VSIFPutcL(int, VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Write a single byte to the file.
Definition: cpl_vsil.cpp:1955
const VSIDIREntry * VSIGetNextDirEntry(VSIDIR *dir)
Return the next entry of the directory.
Definition: cpl_vsil.cpp:379
VSIDIR * VSIOpenDir(const char *pszPath, int nRecurseDepth, const char *const *papszOptions)
Open a directory to read its entries.
Definition: cpl_vsil.cpp:342
int VSIOverwriteFile(VSILFILE *fpTarget, const char *pszSourceFilename)
Overwrite an existing file with content from another one.
Definition: cpl_vsil.cpp:2225
void VSIInstallSwiftFileHandler(void)
Install /vsiswift/ OpenStack Swif Object Storage (Swift) file system handler (requires libcurl)
Definition: cpl_vsil_swift.cpp:706
int VSIRmdirRecursive(const char *pszDirname)
Delete a directory recursively.
Definition: cpl_vsil.cpp:669
@ CXT_Element
Definition: cpl_minixml.h:46
void VSIInstallAzureFileHandler(void)
Install /vsiaz/ Microsoft Azure Blob file system handler (requires libcurl)
Definition: cpl_vsil_az.cpp:1219
char ** CSLTokenizeString2(const char *pszString, const char *pszDelimiter, int nCSLTFlags)
Definition: cpl_string.cpp:836
const char * CPLGetLastErrorMsg(void)
Definition: cpl_error.cpp:866
unsigned char GByte
Definition: cpl_port.h:215
size_t VSIFReadL(void *, size_t, size_t, VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Read bytes from file.
Definition: cpl_vsil.cpp:1690
int VSIRmdir(const char *pszDirname)
Delete a directory.
Definition: cpl_vsil.cpp:647
#define CPL_LSBWORD16(x)
Definition: cpl_port.h:822
char * CPLEscapeString(const char *pszString, int nLength, int nScheme)
Definition: cpl_string.cpp:2036
void VSIInstallWebHdfsHandler(void)
Install /vsiwebhdfs/ WebHDFS (Hadoop File System) REST API file system handler (requires libcurl)
Definition: cpl_vsil_webhdfs.cpp:1188
virtual int Truncate(vsi_l_offset nNewSize)
Truncate/expand the file to the specified size.
CPLSTRING_METHOD_DLL CPLString & Printf(const char *pszFormat,...)
Definition: cplstring.cpp:59
void VSIInstallStdoutHandler(void)
Install /vsistdout/ file system handler.
Definition: cpl_vsil_stdout.cpp:444
char * VSIGetSignedURL(const char *pszFilename, CSLConstList papszOptions)
Returns a signed URL of a supplied filename.
Definition: cpl_vsil.cpp:959
String list class designed around our use of C "char**" string lists.
Definition: cpl_string.h:439
void * CPLCalloc(size_t, size_t)
Definition: cpl_conv.cpp:138
void VSICloseDir(VSIDIR *dir)
Close a directory.
Definition: cpl_vsil.cpp:398
void VSIInstallAzureStreamingFileHandler(void)
Install /vsiaz_streaming/ Microsoft Azure Blob file system handler (requires libcurl)
Definition: cpl_vsil_curl_streaming.cpp:2139
void * VSIRealloc(void *, size_t)
Definition: cpl_vsisimple.cpp:681
void CPLPopErrorHandler(void)
Definition: cpl_error.cpp:1242
void VSIInstallSubFileHandler(void)
Definition: cpl_vsil_subfile.cpp:492
const char * CSLFetchNameValueDef(CSLConstList papszStrList, const char *pszName, const char *pszDefault)
Definition: cpl_string.cpp:1646
char ** CSLSetNameValue(char **papszStrList, const char *pszName, const char *pszValue)
Definition: cpl_string.cpp:1877
char * pszName
Definition: cpl_vsi.h:319
struct VSIDIREntry VSIDIREntry
GIntBig CPLAtoGIntBig(const char *pszString)
Definition: cpl_conv.cpp:998
VSIRangeStatus
Definition: cpl_vsi.h:176
int CSLCount(CSLConstList papszStrList)
Definition: cpl_string.cpp:147
#define VSI_ISREG(x)
Definition: cpl_vsi.h:124
int VSIMkdir(const char *pszPathname, long mode)
Create a directory.
Definition: cpl_vsil.cpp:423
virtual int Close()=0
Close file.
Convenient string class based on std::string.
Definition: cpl_string.h:330
int size() const
Definition: cpl_string.h:460
int VSIRename(const char *oldpath, const char *newpath)
Rename a file.
Definition: cpl_vsil.cpp:529
int VSIMkdirRecursive(const char *pszPathname, long mode)
Create a directory and all its ancestors.
Definition: cpl_vsil.cpp:446
VSILFILE * VSIFOpenExL(const char *, const char *, int)
Open file.
Definition: cpl_vsil.cpp:1416
int VSISync(const char *pszSource, const char *pszTarget, const char *const *papszOptions, GDALProgressFunc pProgressFunc, void *pProgressData, char ***ppapszOutputs)
Synchronize a source file/directory with a target file/directory.
Definition: cpl_vsil.cpp:595
void VSIRewindL(VSILFILE *)
Rewind the file pointer to the beginning of the file.
Definition: cpl_vsil.cpp:1597
#define VSI_STAT_NATURE_FLAG
Definition: cpl_vsi.h:205
CPLXMLNode * CPLParseXMLString(const char *)
Parse an XML string into tree form.
Definition: cpl_minixml.cpp:614
#define CPL_LSBPTR64(x)
Definition: cpl_port.h:838
bool CPLFetchBool(CSLConstList papszStrList, const char *pszKey, bool bDefault)
Definition: cpl_string.cpp:1600
int VSIIsCaseSensitiveFS(const char *pszFilename)
Returns if the filenames of the filesystem are case sensitive.
Definition: cpl_vsil.cpp:826
size_t VSIFWriteL(const void *, size_t, size_t, VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Write bytes to file.
Definition: cpl_vsil.cpp:1804
virtual int Flush()
Flush pending writes to disk.
Definition: cpl_vsi_virtual.h:66
void * CPLRealloc(void *, size_t)
Definition: cpl_conv.cpp:225
virtual int ReadMultiRange(int nRanges, void **ppData, const vsi_l_offset *panOffsets, const size_t *panSizes)
Read several ranges of bytes from file.
int VSIHasOptimizedReadMultiRange(const char *pszPath)
Returns if the filesystem supports efficient multi-range reading.
Definition: cpl_vsil.cpp:882
#define VSI_ISDIR(x)
Definition: cpl_vsi.h:126
Definition: cpl_minixml.h:67
#define CPL_FRMT_GIB
Definition: cpl_port.h:316
#define EQUAL(a, b)
Definition: cpl_port.h:569
const char * CPLGetPath(const char *)
Definition: cpl_path.cpp:153
int VSIFCloseL(VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Close file.
Definition: cpl_vsil.cpp:1472
virtual vsi_l_offset Tell()=0
Tell current file offset.
void VSIInstallSparseFileHandler(void)
Definition: cpl_vsil_sparsefile.cpp:547
CPLStringList & AddString(const char *pszNewString)
Definition: cplstringlist.cpp:333
void CPLPushErrorHandler(CPLErrorHandler)
Definition: cpl_error.cpp:1185
#define CPLAssert(expr)
Definition: cpl_error.h:186
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
#define CPL_C_START
Definition: cpl_port.h:337
VSIRangeStatus VSIFGetRangeStatusL(VSILFILE *fp, vsi_l_offset nStart, vsi_l_offset nLength)
Return if a given file range contains data or holes filled with zeroes.
Definition: cpl_vsil.cpp:2007
int VSIFEofL(VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Test for end of file.
Definition: cpl_vsil.cpp:1850
char ** papszExtra
Definition: cpl_vsi.h:333
#define CPLE_OutOfMemory
Definition: cpl_error.h:101
void VSIInstallS3FileHandler(void)
Install /vsis3/ Amazon S3 file system handler (requires libcurl)
Definition: cpl_vsil_s3.cpp:2750
bool CPLTestBool(const char *pszValue)
Definition: cpl_string.cpp:1526
void VSIInstallGZipFileHandler(void)
Install GZip file system handler.
Definition: cpl_vsil_gzip.cpp:2449
CPLXMLNode * CPLGetXMLNode(CPLXMLNode *poRoot, const char *pszPath)
Find node by path.
Definition: cpl_minixml.cpp:1550
char ** VSIReadDirEx(const char *pszPath, int nMaxFiles)
Read names in a directory.
Definition: cpl_vsil.cpp:117
virtual size_t Read(void *pBuffer, size_t nSize, size_t nCount)=0
Read bytes from file.
char ** CSLConstList
Definition: cpl_port.h:1194
#define CPL_FRMT_GUIB
Definition: cpl_port.h:318
vsi_l_offset VSIFTellL(VSILFILE *)
Tell current file offset.
Definition: cpl_vsil.cpp:1575
#define CPLES_URL
Definition: cpl_string.h:171
const char * CPLGetDirname(const char *)
Definition: cpl_path.cpp:208
unsigned long long GUIntBig
Definition: cpl_port.h:251
#define CPLReadDir
Definition: cpl_vsi.h:303
char * CPLBase64Encode(int nBytes, const GByte *pabyData)
Definition: cpl_base64.cpp:199
bool empty() const
Definition: cpl_string.h:464
int VSIFFlushL(VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Flush pending writes to disk.
Definition: cpl_vsil.cpp:1638
void CPLDestroyXMLNode(CPLXMLNode *)
Destroy a tree.
Definition: cpl_minixml.cpp:1405
void VSIInstallGSFileHandler(void)
Install /vsigs/ Google Cloud Storage file system handler (requires libcurl)
Definition: cpl_vsil_gs.cpp:329
#define CPL_C_END
Definition: cpl_port.h:339
void CPLDebug(const char *, const char *,...)
Definition: cpl_error.cpp:602
void VSIInstallStdinHandler(void)
Install /vsistdin/ file system handler.
Definition: cpl_vsil_stdin.cpp:421
virtual VSIRangeStatus GetRangeStatus(vsi_l_offset nOffset, vsi_l_offset nLength)
Return if a given file range contains data or holes filled with zeroes.
Definition: cpl_vsi_virtual.h:71
void VSIInstallHdfsHandler(void)
Install /vsihdfs/ file system handler (non-functional stub)
Definition: cpl_vsil_hdfs.cpp:431
const char * CPLFormFilename(const char *pszPath, const char *pszBasename, const char *pszExtension)
Definition: cpl_path.cpp:537
Definition: cpl_vsi.h:317
int VSIStatL(const char *, VSIStatBufL *)
Get filesystem object info.
Definition: cpl_vsil.cpp:737
int VSIUnlink(const char *pszFilename)
Delete a file.
Definition: cpl_vsil.cpp:498
#define STARTS_WITH(a, b)
Definition: cpl_port.h:578
void * CPLMalloc(size_t)
Definition: cpl_conv.cpp:168
void VSIInstallCryptFileHandler(void)
Install /vsicrypt/ encrypted file system handler (requires libcrypto++)
Definition: cpl_vsil_crypt.cpp:2024
void VSIInstallGSStreamingFileHandler(void)
Install /vsigs_streaming/ Google Cloud Storage file system handler (requires libcurl)
Definition: cpl_vsil_curl_streaming.cpp:2121
int VSISupportsSparseFiles(const char *pszPath)
Returns if the filesystem supports sparse files.
Definition: cpl_vsil.cpp:856
int VSIFTruncateL(VSILFILE *, vsi_l_offset) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Truncate/expand the file to the specified size.
Definition: cpl_vsil.cpp:1892
char ** VSIGetFileSystemsPrefixes(void)
Return the list of prefixes for virtual file system handlers currently registered.
Definition: cpl_vsil.cpp:2340
int CSLFindString(CSLConstList papszList, const char *pszTarget)
Definition: cpl_string.cpp:670
void VSIInstallCurlStreamingFileHandler(void)
Install /vsicurl_streaming/ HTTP/FTP file system handler (requires libcurl).
Definition: cpl_vsil_curl_streaming.cpp:2084
void VSIInstallCurlFileHandler(void)
Install /vsicurl/ HTTP/FTP file system handler (requires libcurl)
Definition: cpl_vsil_curl.cpp:4300
void VSIInstallTarFileHandler(void)
Install /vsitar/ file system handler.
Definition: cpl_vsil_tar.cpp:619
void CPLErrorReset(void)
Definition: cpl_error.cpp:729
int VSIFSeekL(VSILFILE *, vsi_l_offset, int) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Seek to requested offset.
Definition: cpl_vsil.cpp:1532
const char * CPLSPrintf(const char *fmt,...)
Definition: cpl_string.cpp:977
virtual size_t Write(const void *pBuffer, size_t nSize, size_t nCount)=0
Write bytes to file.
const char * CPLGetXMLValue(const CPLXMLNode *poRoot, const char *pszPath, const char *pszDefault)
Fetch element/attribute value.
Definition: cpl_minixml.cpp:1638
Definition: cpl_multiproc.h:140
void CPLError(CPLErr eErrClass, CPLErrorNum err_no, const char *fmt,...)
Definition: cpl_error.cpp:308
const char * CPLParseNameValue(const char *pszNameValue, char **ppszKey)
Definition: cpl_string.cpp:1754
void VSIInstallMemFileHandler(void)
Install "memory" file system handler.
Definition: cpl_vsi_mem.cpp:868
void VSIInstallZipFileHandler(void)
Install ZIP file system handler.
Definition: cpl_vsil_gzip.cpp:3320
GUIntBig vsi_l_offset
Definition: cpl_vsi.h:140
void VSIFree(void *)
Definition: cpl_vsisimple.cpp:827
#define CPLE_NotSupported
Definition: cpl_error.h:109
void VSIInstallOSSFileHandler(void)
Install /vsioss/ Alibaba Cloud Object Storage Service (OSS) file system handler (requires libcurl)
Definition: cpl_vsil_oss.cpp:388
char * CPLUnescapeString(const char *pszString, int *pnLength, int nScheme)
Definition: cpl_string.cpp:2248
int VSIFReadMultiRangeL(int nRanges, void **ppData, const vsi_l_offset *panOffsets, const size_t *panSizes, VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Read several ranges of bytes from file.
Definition: cpl_vsil.cpp:1750
void CPLSetConfigOption(const char *, const char *)
Definition: cpl_conv.cpp:1832
#define CPL_ARRAYSIZE(array)
Definition: cpl_port.h:1045
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Definition: ogrsf_frmts.h:292
size_t CPLStrnlen(const char *pszStr, size_t nMaxLen)
Definition: cpl_string.cpp:2796
virtual int Eof()=0
Test for end of file.
char ** CSLDuplicate(CSLConstList papszStrList)
Definition: cpl_string.cpp:228
CPLSTRING_METHOD_DLL CPLString & Trim()
Definition: cplstring.cpp:203
#define VSI_STAT_EXISTS_FLAG
Definition: cpl_vsi.h:203
void * VSIMalloc(size_t)
Definition: cpl_vsisimple.cpp:558
void CSLDestroy(char **papszStrList)
Definition: cpl_string.cpp:200
char ** VSIReadDirRecursive(const char *pszPath)
Read names in a directory recursively.
Definition: cpl_vsil.cpp:160
long long GIntBig
Definition: cpl_port.h:248
int VSIStatExL(const char *pszFilename, VSIStatBufL *psStatBuf, int nFlags)
Get filesystem object info.
Definition: cpl_vsil.cpp:776
CPLSTRING_METHOD_DLL CPLString & vPrintf(const char *pszFormat, va_list args)
Definition: cplstring.cpp:76
#define VSI_STAT_SET_ERROR_FLAG
Definition: cpl_vsi.h:209
struct VSIDIR VSIDIR
Definition: cpl_vsi.h:309
int Count() const
Definition: cplstringlist.cpp:218
void VSISetCryptKey(const GByte *pabyKey, int nKeySize)
Definition: cpl_vsil_crypt.cpp:205
struct CPLXMLNode * psNext
Next sibling.
Definition: cpl_minixml.h:106
GIntBig VSIGetDiskFreeSpace(const char *pszDirname)
Return free disk space available on the filesystem.
Definition: cpl_vsil.cpp:2318
#define CPL_FORMAT_STRING(arg)
Definition: cpl_port.h:929
struct stat64 VSIStatBufL
Definition: cpl_vsi.h:194
void VSIInstallOSSStreamingFileHandler(void)
Install /vsioss_streaming/ Alibaba Cloud Object Storage Service (OSS) file system handler (requires l...
Definition: cpl_vsil_curl_streaming.cpp:2158
void VSIInstallSwiftStreamingFileHandler(void)
Install /vsiswift_streamin/ OpenStack Swif Object Storage (Swift) file system handler (requires libcu...
Definition: cpl_vsil_curl_streaming.cpp:2177
#define EQUALN(a, b, n)
Definition: cpl_port.h:567
char ** StealList()
Definition: cplstringlist.cpp:489
void VSICurlPartialClearCache(const char *pszFilenamePrefix)
Clean local cache associated with /vsicurl/ (and related file systems) for a given filename (and its ...
Definition: cpl_vsil_curl.cpp:4378
void VSIInstallS3StreamingFileHandler(void)
Install /vsis3_streaming/ Amazon S3 file system handler (requires libcurl).
Definition: cpl_vsil_curl_streaming.cpp:2102
Definition: cpl_vsi_virtual.h:56
VSILFILE * VSIFOpenL(const char *, const char *)
Open file.
Definition: cpl_vsil.cpp:997
#define CPLE_None
Definition: cpl_error.h:97
char ** CSLAddString(char **papszStrList, const char *pszNewString)
Definition: cpl_string.cpp:83
char ** VSIReadDir(const char *)
Read names in a directory.
Definition: cpl_vsil.cpp:83
#define VSI_L_OFFSET_MAX
Definition: cpl_vsi.h:142
virtual void * GetNativeFileDescriptor()
Returns the "native" file descriptor for the virtual handle.
Definition: cpl_vsi_virtual.h:70
char * CPLStrdup(const char *)
Definition: cpl_conv.cpp:293
double CPLAtof(const char *)
Definition: cpl_strtod.cpp:117
CPLErr CPLGetLastErrorType(void)
Definition: cpl_error.cpp:842
void VSICurlClearCache(void)
Clean local cache associated with /vsicurl/ (and related file systems)
Definition: cpl_vsil_curl.cpp:4338
#define CPLE_IllegalArg
Definition: cpl_error.h:107
GUIntBig CPLScanUIntBig(const char *, int)
Definition: cpl_conv.cpp:964
struct CPLXMLNode * psChild
Child node.
Definition: cpl_minixml.h:118
int VSIIngestFile(VSILFILE *fp, const char *pszFilename, GByte **ppabyRet, vsi_l_offset *pnSize, GIntBig nMaxSize)
Ingest a file into memory.
Definition: cpl_vsil.cpp:2044
Definition: cpl_vsil.cpp:130
void CPLQuietErrorHandler(CPLErr, CPLErrorNum, const char *)
Definition: cpl_error.cpp:967
const char * VSIGetActualURL(const char *pszFilename)
Returns the actual URL of a supplied filename.
Definition: cpl_vsil.cpp:912
#define CPLE_FileIO
Definition: cpl_error.h:103
int CPLBase64DecodeInPlace(GByte *pszBase64)
Definition: cpl_base64.cpp:93
unsigned short GUInt16
Definition: cpl_port.h:213
#define CPLFree
Definition: cpl_conv.h:81
const char * CPLGetExtension(const char *)
Definition: cpl_path.cpp:345
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Definition: cpl_port.h:997
const char * CPLGetFilename(const char *)
Definition: cpl_path.cpp:260
#define VSI_STAT_SIZE_FLAG
Definition: cpl_vsi.h:207
void * VSIFGetNativeFileDescriptorL(VSILFILE *)
Returns the "native" file descriptor for the virtual handle.
Definition: cpl_vsil.cpp:2297
int VSIFPrintfL(VSILFILE *, const char *,...) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT
Formatted write to file.
Definition: cpl_vsil.cpp:1918
const char * CPLGetConfigOption(const char *, const char *)
Definition: cpl_conv.cpp:1692
FILE VSILFILE
Definition: cpl_vsi.h:156
virtual int Seek(vsi_l_offset nOffset, int nWhence)=0
Seek to requested offset.
#define STARTS_WITH_CI(a, b)
Definition: cpl_port.h:580
#define CPLE_AppDefined
Definition: cpl_error.h:99
Generated for GDAL by
1.8.20.