SDTS_AL
cpl_http.h
Go to the documentation of this file.
1/******************************************************************************
2 * $Id$
3 *
4 * Project: Common Portability Library
5 * Purpose: Function wrapper for libcurl HTTP access.
6 * Author: Frank Warmerdam, warmerdam@pobox.com
7 *
8 ******************************************************************************
9 * Copyright (c) 2006, Frank Warmerdam
10 * Copyright (c) 2009, Even Rouault <even dot rouault at mines-paris dot org>
11 *
12 * Permission is hereby granted, free of charge, to any person obtaining a
13 * copy of this software and associated documentation files (the "Software"),
14 * to deal in the Software without restriction, including without limitation
15 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16 * and/or sell copies of the Software, and to permit persons to whom the
17 * Software is furnished to do so, subject to the following conditions:
18 *
19 * The above copyright notice and this permission notice shall be included
20 * in all copies or substantial portions of the Software.
21 *
22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
25 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
28 * DEALINGS IN THE SOFTWARE.
29 ****************************************************************************/
30
31#ifndef CPL_HTTP_H_INCLUDED
32#define CPL_HTTP_H_INCLUDED
33
34#include "cpl_conv.h"
35#include "cpl_string.h"
36#include "cpl_progress.h"
37#include "cpl_vsi.h"
38
46#define CPL_HTTP_MAX_RETRY 0
47#define CPL_HTTP_RETRY_DELAY 30.0
50CPL_C_START
51
53typedef struct { char **papszHeaders;
55 GByte *pabyData; int nDataLen;
59
61typedef struct {
64
67
69 char *pszErrBuf;
70
75
78
81
84
87
89
91typedef size_t (*CPLHTTPFetchWriteFunc)(void *pBuffer, size_t nSize, size_t nMemb, void *pWriteArg);
94int CPL_DLL CPLHTTPEnabled( void );
95CPLHTTPResult CPL_DLL *CPLHTTPFetch( const char *pszURL, CSLConstList papszOptions);
96CPLHTTPResult CPL_DLL *CPLHTTPFetchEx( const char *pszURL,CSLConstList papszOptions,
97 GDALProgressFunc pfnProgress,
98 void *pProgressArg,
99 CPLHTTPFetchWriteFunc pfnWrite,
100 void *pWriteArg);
101CPLHTTPResult CPL_DLL **CPLHTTPMultiFetch( const char * const * papszURL,
102 int nURLCount,
103 int nMaxSimultaneous,
104 CSLConstList papszOptions);
105
106void CPL_DLL CPLHTTPCleanup( void );
107void CPL_DLL CPLHTTPDestroyResult( CPLHTTPResult *psResult );
108void CPL_DLL CPLHTTPDestroyMultiResult( CPLHTTPResult **papsResults, int nCount );
109int CPL_DLL CPLHTTPParseMultipartMime( CPLHTTPResult *psResult );
110
111/* -------------------------------------------------------------------- */
112/* The following is related to OAuth2 authorization around */
113/* google services like fusion tables, and potentially others */
114/* in the future. Code in cpl_google_oauth2.cpp. */
115/* */
116/* These services are built on CPL HTTP services. */
117/* -------------------------------------------------------------------- */
118
119char CPL_DLL *GOA2GetAuthorizationURL( const char *pszScope );
120char CPL_DLL *GOA2GetRefreshToken( const char *pszAuthToken,
121 const char *pszScope );
122char CPL_DLL *GOA2GetAccessToken( const char *pszRefreshToken,
123 const char *pszScope );
124
126 const char* pszPrivateKey,
127 const char* pszClientEmail,
128 const char* pszScope,
129 CSLConstList papszAdditionalClaims,
130 CSLConstList papszOptions);
131
132char CPL_DLL **GOA2GetAccessTokenFromCloudEngineVM( CSLConstList papszOptions );
133
134CPL_C_END
135
136#if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
138// Not sure if this belong here, used in cpl_http.cpp, cpl_vsil_curl.cpp and frmts/wms/gdalhttp.cpp
139void* CPLHTTPSetOptions(void *pcurl, const char * const* papszOptions);
140char** CPLHTTPGetOptionsFromEnv();
141double CPLHTTPGetNewRetryDelay(int response_code, double dfOldDelay);
142void* CPLHTTPIgnoreSigPipe();
143void CPLHTTPRestoreSigPipeHandler(void* old_handler);
144bool CPLMultiPerformWait(void* hCurlMultiHandle, int& repeats);
147bool CPLIsMachinePotentiallyGCEInstance();
148bool CPLIsMachineForSureGCEInstance();
149
157class GOA2Manager
158{
159 public:
160
161 GOA2Manager();
162
164 typedef enum
165 {
166 NONE,
167 GCE,
168 ACCESS_TOKEN_FROM_REFRESH,
169 SERVICE_ACCOUNT
170 } AuthMethod;
171
172 bool SetAuthFromGCE( CSLConstList papszOptions );
173 bool SetAuthFromRefreshToken( const char* pszRefreshToken,
174 const char* pszClientId,
175 const char* pszClientSecret,
176 CSLConstList papszOptions );
177 bool SetAuthFromServiceAccount(const char* pszPrivateKey,
178 const char* pszClientEmail,
179 const char* pszScope,
180 CSLConstList papszAdditionalClaims,
181 CSLConstList papszOptions );
182
184 AuthMethod GetAuthMethod() const { return m_eMethod; }
185
186 const char* GetBearer() const;
187
189 const CPLString& GetPrivateKey() const { return m_osPrivateKey; }
190
192 const CPLString& GetClientEmail() const { return m_osClientEmail; }
193
194 private:
195
196 mutable CPLString m_osCurrentBearer;
197 mutable time_t m_nExpirationTime;
198 AuthMethod m_eMethod;
199
200 // for ACCESS_TOKEN_FROM_REFRESH
201 CPLString m_osClientId;
202 CPLString m_osClientSecret;
203 CPLString m_osRefreshToken;
204
205 // for SERVICE_ACCOUNT
206 CPLString m_osPrivateKey;
207 CPLString m_osClientEmail;
208 CPLString m_osScope;
209 CPLStringList m_aosAdditionalClaims;
210
211 CPLStringList m_aosOptions;
212};
213
214
215#endif // __cplusplus
216
217#endif /* ndef CPL_HTTP_H_INCLUDED */
int CPL_DLL CPLHTTPEnabled(void)
Return if CPLHTTP services can be useful.
Definition: cpl_http.cpp:1853
char CPL_DLL ** GOA2GetAccessTokenFromServiceAccount(const char *pszPrivateKey, const char *pszClientEmail, const char *pszScope, CSLConstList papszAdditionalClaims, CSLConstList papszOptions)
Definition: cpl_google_oauth2.cpp:459
CPLHTTPResult CPL_DLL * CPLHTTPFetch(const char *pszURL, CSLConstList papszOptions)
Fetch a document from an url and return in a string.
Definition: cpl_http.cpp:620
void CPL_DLL CPLHTTPDestroyResult(CPLHTTPResult *psResult)
Clean the memory associated with the return value of CPLHTTPFetch()
Definition: cpl_http.cpp:1932
char CPL_DLL * GOA2GetAuthorizationURL(const char *pszScope)
Definition: cpl_google_oauth2.cpp:127
CPLHTTPResult CPL_DLL * CPLHTTPFetchEx(const char *pszURL, CSLConstList papszOptions, GDALProgressFunc pfnProgress, void *pProgressArg, CPLHTTPFetchWriteFunc pfnWrite, void *pWriteArg)
Definition: cpl_http.cpp:636
char CPL_DLL * GOA2GetRefreshToken(const char *pszAuthToken, const char *pszScope)
Definition: cpl_google_oauth2.cpp:164
CPLHTTPResult CPL_DLL ** CPLHTTPMultiFetch(const char *const *papszURL, int nURLCount, int nMaxSimultaneous, CSLConstList papszOptions)
Fetch several documents at once.
Definition: cpl_http.cpp:1102
int CPL_DLL CPLHTTPParseMultipartMime(CPLHTTPResult *psResult)
Parses a MIME multipart message.
Definition: cpl_http.cpp:1965
void CPL_DLL CPLHTTPCleanup(void)
Cleanup function to call at application termination.
Definition: cpl_http.cpp:1870
char CPL_DLL ** GOA2GetAccessTokenFromCloudEngineVM(CSLConstList papszOptions)
Definition: cpl_google_oauth2.cpp:418
void CPL_DLL CPLHTTPDestroyMultiResult(CPLHTTPResult **papsResults, int nCount)
Clean the memory associated with the return value of CPLHTTPMultiFetch()
Definition: cpl_http.cpp:1350
char ** CSLConstList
Definition: cpl_port.h:1184
unsigned char GByte
Definition: cpl_port.h:213
Definition: cpl_http.h:61
GByte * pabyData
Definition: cpl_http.h:77
int nStatus
Definition: cpl_http.h:63
CPLMimePart * pasMimePart
Definition: cpl_http.h:86
char * pszContentType
Definition: cpl_http.h:66
int nDataAlloc
Definition: cpl_http.h:74
char ** papszHeaders
Definition: cpl_http.h:80
char * pszErrBuf
Definition: cpl_http.h:69
int nMimePartCount
Definition: cpl_http.h:83
int nDataLen
Definition: cpl_http.h:72
Definition: cpl_http.h:53