31 #ifndef CPL_HTTP_H_INCLUDED
32 #define CPL_HTTP_H_INCLUDED
36 #include "cpl_progress.h"
46 #ifndef CPL_HTTP_MAX_RETRY
47 #define CPL_HTTP_MAX_RETRY 0
50 #ifndef CPL_HTTP_RETRY_DELAY
51 #define CPL_HTTP_RETRY_DELAY 30.0
59 {
char **papszHeaders;
61 GByte *pabyData;
int nDataLen;
98 typedef size_t (*CPLHTTPFetchWriteFunc)(
void *pBuffer,
size_t nSize,
99 size_t nMemb,
void *pWriteArg);
107 GDALProgressFunc pfnProgress,
void *pProgressArg,
108 CPLHTTPFetchWriteFunc pfnWrite,
void *pWriteArg);
110 int nURLCount,
int nMaxSimultaneous,
142 const char *pszURL,
CSLConstList papszOptions, GDALProgressFunc pfnProgress,
143 void *pProgressArg, CPLHTTPFetchWriteFunc pfnWrite,
void *pWriteArg,
163 const char *pszScope);
165 const char *pszScope);
168 const char *pszPrivateKey,
const char *pszClientEmail,
const char *pszScope,
175 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
179 void CPL_DLL *CPLHTTPSetOptions(
void *pcurl,
const char *pszURL,
180 const char *
const *papszOptions);
181 char **CPLHTTPGetOptionsFromEnv(
const char *pszFilename);
184 struct CPLHTTPRetryParameters
186 int nMaxRetry = CPL_HTTP_MAX_RETRY;
187 double dfInitialDelay = CPL_HTTP_RETRY_DELAY;
188 std::string osRetryCodes{};
190 CPLHTTPRetryParameters() =
default;
191 explicit CPLHTTPRetryParameters(
const CPLStringList &aosHTTPOptions);
195 class CPLHTTPRetryContext
198 explicit CPLHTTPRetryContext(
const CPLHTTPRetryParameters &oParams);
200 bool CanRetry(
int response_code,
const char *pszErrBuf,
201 const char *pszCurlError);
205 double GetCurrentDelay()
const;
214 CPLHTTPRetryParameters m_oParameters{};
215 int m_nRetryCount = 0;
216 double m_dfCurDelay = 0.0;
217 double m_dfNextDelay = 0.0;
220 void CPL_DLL *CPLHTTPIgnoreSigPipe();
221 void CPL_DLL CPLHTTPRestoreSigPipeHandler(
void *old_handler);
222 bool CPLMultiPerformWait(
void *hCurlMultiHandle,
int &repeats);
245 ACCESS_TOKEN_FROM_REFRESH,
251 const char *pszClientId,
252 const char *pszClientSecret,
255 const char *pszClientEmail,
256 const char *pszScope,
271 return m_osPrivateKey;
277 return m_osClientEmail;
282 mutable time_t m_nExpirationTime = 0;
String list class designed around our use of C "char**" string lists.
Definition: cpl_string.h:449
Convenient string class based on std::string.
Definition: cpl_string.h:320
Manager of Google OAuth2 authentication.
Definition: cpl_http.h:236
GOA2Manager()
Constructor.
AuthMethod GetAuthMethod() const
Returns the authentication method.
Definition: cpl_http.h:261
bool SetAuthFromRefreshToken(const char *pszRefreshToken, const char *pszClientId, const char *pszClientSecret, CSLConstList papszOptions)
Specifies that the authentication will be done using the OAuth2 client id method.
Definition: cpl_google_oauth2.cpp:564
const CPLString & GetClientEmail() const
Returns client email for SERVICE_ACCOUNT method.
Definition: cpl_http.h:275
bool SetAuthFromServiceAccount(const char *pszPrivateKey, const char *pszClientEmail, const char *pszScope, CSLConstList papszAdditionalClaims, CSLConstList papszOptions)
Specifies that the authentication will be done using the OAuth2 service account method.
Definition: cpl_google_oauth2.cpp:599
const CPLString & GetPrivateKey() const
Returns private key for SERVICE_ACCOUNT method.
Definition: cpl_http.h:269
const char * GetBearer() const
Return the access token.
Definition: cpl_google_oauth2.cpp:642
bool SetAuthFromGCE(CSLConstList papszOptions)
Specifies that the authentication will be done using the local credentials of the current Google Comp...
Definition: cpl_google_oauth2.cpp:540
AuthMethod
Authentication method.
Definition: cpl_http.h:242
Various convenience functions for CPL.
int CPLHTTPPopFetchCallback(void)
Uninstalls a callback set by CPLHTTPPushFetchCallback().
Definition: cpl_http.cpp:992
char ** GOA2GetAccessTokenFromServiceAccount(const char *pszPrivateKey, const char *pszClientEmail, const char *pszScope, CSLConstList papszAdditionalClaims, CSLConstList papszOptions)
Fetch access token using Service Account OAuth2.
Definition: cpl_google_oauth2.cpp:426
int CPLHTTPPushFetchCallback(CPLHTTPFetchCallbackFunc pFunc, void *pUserData)
Installs an alternate callback to the default implementation of CPLHTTPFetchEx().
Definition: cpl_http.cpp:972
void CPLHTTPCleanup(void)
Cleanup function to call at application termination.
Definition: cpl_http.cpp:2728
bool CPLIsMachinePotentiallyGCEInstance()
Returns whether the current machine is potentially a Google Compute Engine instance.
Definition: cpl_google_cloud.cpp:111
CPLHTTPResult * CPLHTTPFetch(const char *pszURL, CSLConstList papszOptions)
Fetch a document from an url and return in a string.
Definition: cpl_http.cpp:1227
bool CPLIsMachineForSureGCEInstance()
Returns whether the current machine is surely a Google Compute Engine instance.
Definition: cpl_google_cloud.cpp:57
void CPLHTTPSetFetchCallback(CPLHTTPFetchCallbackFunc pFunc, void *pUserData)
Installs an alternate callback to the default implementation of CPLHTTPFetchEx().
Definition: cpl_http.cpp:949
CPLHTTPResult * CPLHTTPFetchEx(const char *pszURL, CSLConstList papszOptions, GDALProgressFunc pfnProgress, void *pProgressArg, CPLHTTPFetchWriteFunc pfnWrite, void *pWriteArg)
Fetch a document from an url and return in a string.
Definition: cpl_http.cpp:1247
char ** GOA2GetAccessTokenFromCloudEngineVM(CSLConstList papszOptions)
Fetch access token using Cloud Engine internal REST API.
Definition: cpl_google_oauth2.cpp:386
CPLHTTPResult ** CPLHTTPMultiFetch(const char *const *papszURL, int nURLCount, int nMaxSimultaneous, CSLConstList papszOptions)
Fetch several documents at once.
Definition: cpl_http.cpp:1753
char * GOA2GetAuthorizationURL(const char *pszScope)
Return authorization url for a given scope.
Definition: cpl_google_oauth2.cpp:88
int CPLHTTPEnabled(void)
Return if CPLHTTP services can be useful.
Definition: cpl_http.cpp:2711
char * GOA2GetRefreshToken(const char *pszAuthToken, const char *pszScope)
Turn Auth Token into a Refresh Token.
Definition: cpl_google_oauth2.cpp:123
char * GOA2GetAccessToken(const char *pszRefreshToken, const char *pszScope)
Fetch access token using refresh token.
Definition: cpl_google_oauth2.cpp:355
void CPLHTTPDestroyResult(CPLHTTPResult *psResult)
Clean the memory associated with the return value of CPLHTTPFetch()
Definition: cpl_http.cpp:2784
CPLHTTPResult *(* CPLHTTPFetchCallbackFunc)(const char *pszURL, CSLConstList papszOptions, GDALProgressFunc pfnProgress, void *pProgressArg, CPLHTTPFetchWriteFunc pfnWrite, void *pWriteArg, void *pUserData)
Callback function to process network requests.
Definition: cpl_http.h:141
void CPLHTTPDestroyMultiResult(CPLHTTPResult **papsResults, int nCount)
Clean the memory associated with the return value of CPLHTTPMultiFetch()
Definition: cpl_http.cpp:2008
void CPLHTTPSetDefaultUserAgent(const char *pszUserAgent)
Set the default user agent.
Definition: cpl_http.cpp:501
int CPLHTTPParseMultipartMime(CPLHTTPResult *psResult)
Parses a MIME multipart message.
Definition: cpl_http.cpp:2817
#define CPL_C_END
Macro to end a block of C symbols.
Definition: cpl_port.h:299
#define CPL_C_START
Macro to start a block of C symbols.
Definition: cpl_port.h:295
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition: cpl_port.h:1183
unsigned char GByte
Unsigned byte type.
Definition: cpl_port.h:185
Various convenience functions for working with strings and string lists.
Definition: cpl_http.h:68
GByte * pabyData
Definition: cpl_http.h:84
int nStatus
Definition: cpl_http.h:70
CPLMimePart * pasMimePart
Definition: cpl_http.h:93
char * pszContentType
Definition: cpl_http.h:73
int nDataAlloc
Definition: cpl_http.h:81
char ** papszHeaders
Definition: cpl_http.h:87
char * pszErrBuf
Definition: cpl_http.h:76
int nMimePartCount
Definition: cpl_http.h:90
int nDataLen
Definition: cpl_http.h:79
Definition: cpl_http.h:59