GDAL

- Main Page
- Related Pages
- Classes
- Files
- Download
- Issue Tracker

- File List
- File Members

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 #ifndef CPL_HTTP_MAX_RETRY
47 #define CPL_HTTP_MAX_RETRY 0
48 #endif
49
50 #ifndef CPL_HTTP_RETRY_DELAY
51 #define CPL_HTTP_RETRY_DELAY 30.0
52 #endif
53
55 CPL_C_START
56
58 typedef struct { char **papszHeaders;
60 GByte *pabyData; int nDataLen;
63 } CPLMimePart;
64
66 typedef struct {
68 int nStatus;
69
71 char *pszContentType;
72
74 char *pszErrBuf;
75
77 int nDataLen;
79 int nDataAlloc;
80
82 GByte *pabyData;
83
85 char **papszHeaders;
86
88 int nMimePartCount;
89
91 CPLMimePart *pasMimePart;
92
93 } CPLHTTPResult;
94
96 typedef size_t (*CPLHTTPFetchWriteFunc)(void *pBuffer, size_t nSize, size_t nMemb, void *pWriteArg);
99 int CPL_DLL CPLHTTPEnabled( void );
100 CPLHTTPResult CPL_DLL *CPLHTTPFetch( const char *pszURL, CSLConstList papszOptions);
101 CPLHTTPResult CPL_DLL *CPLHTTPFetchEx( const char *pszURL,CSLConstList papszOptions,
102 GDALProgressFunc pfnProgress,
103 void *pProgressArg,
104 CPLHTTPFetchWriteFunc pfnWrite,
105 void *pWriteArg);
106 CPLHTTPResult CPL_DLL **CPLHTTPMultiFetch( const char * const * papszURL,
107 int nURLCount,
108 int nMaxSimultaneous,
109 CSLConstList papszOptions);
110
111 void CPL_DLL CPLHTTPCleanup( void );
112 void CPL_DLL CPLHTTPDestroyResult( CPLHTTPResult *psResult );
113 void CPL_DLL CPLHTTPDestroyMultiResult( CPLHTTPResult **papsResults, int nCount );
114 int CPL_DLL CPLHTTPParseMultipartMime( CPLHTTPResult *psResult );
115
116 /* -------------------------------------------------------------------- */
117 /* The following is related to OAuth2 authorization around */
118 /* google services like fusion tables, and potentially others */
119 /* in the future. Code in cpl_google_oauth2.cpp. */
120 /* */
121 /* These services are built on CPL HTTP services. */
122 /* -------------------------------------------------------------------- */
123
124 char CPL_DLL *GOA2GetAuthorizationURL( const char *pszScope );
125 char CPL_DLL *GOA2GetRefreshToken( const char *pszAuthToken,
126 const char *pszScope );
127 char CPL_DLL *GOA2GetAccessToken( const char *pszRefreshToken,
128 const char *pszScope );
129
130 char CPL_DLL **GOA2GetAccessTokenFromServiceAccount(
131 const char* pszPrivateKey,
132 const char* pszClientEmail,
133 const char* pszScope,
134 CSLConstList papszAdditionalClaims,
135 CSLConstList papszOptions);
136
137 char CPL_DLL **GOA2GetAccessTokenFromCloudEngineVM( CSLConstList papszOptions );
138
139 CPL_C_END
140
141 #if defined(__cplusplus) && !defined(CPL_SUPRESS_CPLUSPLUS)
142
143 // Not sure if this belong here, used in cpl_http.cpp, cpl_vsil_curl.cpp and frmts/wms/gdalhttp.cpp
144 void* CPLHTTPSetOptions(void *pcurl, const char *pszURL, const char * const* papszOptions);
145 char** CPLHTTPGetOptionsFromEnv();
146 double CPLHTTPGetNewRetryDelay(int response_code, double dfOldDelay, const char* pszErrBuf);
147 void* CPLHTTPIgnoreSigPipe();
148 void CPLHTTPRestoreSigPipeHandler(void* old_handler);
149 bool CPLMultiPerformWait(void* hCurlMultiHandle, int& repeats);
152 bool CPLIsMachinePotentiallyGCEInstance();
153 bool CPLIsMachineForSureGCEInstance();
154
162 class GOA2Manager
163 {
164 public:
165
166 GOA2Manager();
167
169 typedef enum
170 {
171 NONE,
172 GCE,
173 ACCESS_TOKEN_FROM_REFRESH,
174 SERVICE_ACCOUNT
175 } AuthMethod;
176
177 bool SetAuthFromGCE( CSLConstList papszOptions );
178 bool SetAuthFromRefreshToken( const char* pszRefreshToken,
179 const char* pszClientId,
180 const char* pszClientSecret,
181 CSLConstList papszOptions );
182 bool SetAuthFromServiceAccount(const char* pszPrivateKey,
183 const char* pszClientEmail,
184 const char* pszScope,
185 CSLConstList papszAdditionalClaims,
186 CSLConstList papszOptions );
187
189 AuthMethod GetAuthMethod() const { return m_eMethod; }
190
191 const char* GetBearer() const;
192
194 const CPLString& GetPrivateKey() const { return m_osPrivateKey; }
195
197 const CPLString& GetClientEmail() const { return m_osClientEmail; }
198
199 private:
200
201 mutable CPLString m_osCurrentBearer{};
202 mutable time_t m_nExpirationTime = 0;
203 AuthMethod m_eMethod = NONE;
204
205 // for ACCESS_TOKEN_FROM_REFRESH
206 CPLString m_osClientId{};
207 CPLString m_osClientSecret{};
208 CPLString m_osRefreshToken{};
209
210 // for SERVICE_ACCOUNT
211 CPLString m_osPrivateKey{};
212 CPLString m_osClientEmail{};
213 CPLString m_osScope{};
214 CPLStringList m_aosAdditionalClaims{};
215
216 CPLStringList m_aosOptions{};
217 };
218
219
220 #endif // __cplusplus
221
222 #endif /* ndef CPL_HTTP_H_INCLUDED */
CPLHTTPResult::pasMimePart
CPLMimePart * pasMimePart
Definition: cpl_http.h:91
GOA2Manager::GetClientEmail
const CPLString & GetClientEmail() const
Returns client email for SERVICE_ACCOUNT method.
Definition: cpl_http.h:197
cpl_vsi.h
Standard C Covers.
CPLHTTPFetch
CPLHTTPResult * CPLHTTPFetch(const char *pszURL, CSLConstList papszOptions)
Fetch a document from an url and return in a string.
Definition: cpl_http.cpp:646
CPL_C_START
#define CPL_C_START
Macro to start a block of C symbols.
Definition: cpl_port.h:337
CPLIsMachineForSureGCEInstance
bool CPLIsMachineForSureGCEInstance()
Returns whether the current machine is surely a Google Compute Engine instance.
Definition: cpl_google_cloud.cpp:58
CPLHTTPCleanup
void CPLHTTPCleanup(void)
Cleanup function to call at application termination.
Definition: cpl_http.cpp:2020
CPLHTTPResult::pszContentType
char * pszContentType
Definition: cpl_http.h:71
GOA2Manager::GetPrivateKey
const CPLString & GetPrivateKey() const
Returns private key for SERVICE_ACCOUNT method.
Definition: cpl_http.h:194
CPLHTTPParseMultipartMime
int CPLHTTPParseMultipartMime(CPLHTTPResult *psResult)
Parses a MIME multipart message.
Definition: cpl_http.cpp:2115
CPLHTTPDestroyResult
void CPLHTTPDestroyResult(CPLHTTPResult *psResult)
Clean the memory associated with the return value of CPLHTTPFetch()
Definition: cpl_http.cpp:2082
CPLHTTPFetchEx
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:662
GByte
unsigned char GByte
Unsigned byte type.
Definition: cpl_port.h:215
CPLHTTPResult::papszHeaders
char ** papszHeaders
Definition: cpl_http.h:85
GOA2Manager::GetBearer
const char * GetBearer() const
Return the access token.
Definition: cpl_google_oauth2.cpp:677
CPLString
Convenient string class based on std::string.
Definition: cpl_string.h:329
GOA2GetAccessTokenFromCloudEngineVM
char ** GOA2GetAccessTokenFromCloudEngineVM(CSLConstList papszOptions)
Fetch access token using Cloud Engine internal REST API.
Definition: cpl_google_oauth2.cpp:418
CPLHTTPMultiFetch
CPLHTTPResult ** CPLHTTPMultiFetch(const char *const *papszURL, int nURLCount, int nMaxSimultaneous, CSLConstList papszOptions)
Fetch several documents at once.
Definition: cpl_http.cpp:1221
GOA2GetAccessToken
char * GOA2GetAccessToken(const char *pszRefreshToken, const char *pszScope)
Fetch access token using refresh token.
Definition: cpl_google_oauth2.cpp:387
cpl_string.h
Various convenience functions for working with strings and string lists.
GOA2Manager::SetAuthFromRefreshToken
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:595
GOA2Manager::GetAuthMethod
AuthMethod GetAuthMethod() const
Returns the authentication method.
Definition: cpl_http.h:189
CPLHTTPEnabled
int CPLHTTPEnabled(void)
Return if CPLHTTP services can be useful.
Definition: cpl_http.cpp:2003
GOA2Manager::SetAuthFromGCE
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:570
CSLConstList
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition: cpl_port.h:1194
CPLHTTPResult::nMimePartCount
int nMimePartCount
Definition: cpl_http.h:88
GOA2Manager::SetAuthFromServiceAccount
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:631
CPLHTTPDestroyMultiResult
void CPLHTTPDestroyMultiResult(CPLHTTPResult **papsResults, int nCount)
Clean the memory associated with the return value of CPLHTTPMultiFetch()
Definition: cpl_http.cpp:1468
CPLStringList
String list class designed around our use of C "char**" string lists.
Definition: cpl_string.h:438
CPLHTTPResult::nDataAlloc
int nDataAlloc
Definition: cpl_http.h:79
CPLHTTPResult::nDataLen
int nDataLen
Definition: cpl_http.h:77
cpl_conv.h
Various convenience functions for CPL.
GOA2Manager::AuthMethod
AuthMethod
Authentication method.
Definition: cpl_http.h:169
CPLIsMachinePotentiallyGCEInstance
bool CPLIsMachinePotentiallyGCEInstance()
Returns whether the current machine is potentially a Google Compute Engine instance.
Definition: cpl_google_cloud.cpp:110
CPLHTTPResult
Definition: cpl_http.h:66
CPLHTTPResult::nStatus
int nStatus
Definition: cpl_http.h:68
GOA2Manager
Manager of Google OAuth2 authentication.
Definition: cpl_http.h:162
GOA2GetAccessTokenFromServiceAccount
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:459
CPLHTTPResult::pabyData
GByte * pabyData
Definition: cpl_http.h:82
CPLMimePart
Definition: cpl_http.h:58
CPL_C_END
#define CPL_C_END
Macro to end a block of C symbols.
Definition: cpl_port.h:339
CPLHTTPResult::pszErrBuf
char * pszErrBuf
Definition: cpl_http.h:74
GOA2GetRefreshToken
char * GOA2GetRefreshToken(const char *pszAuthToken, const char *pszScope)
Turn Auth Token into a Refresh Token.
Definition: cpl_google_oauth2.cpp:164
GOA2GetAuthorizationURL
char * GOA2GetAuthorizationURL(const char *pszScope)
Return authorization url for a given scope.
Definition: cpl_google_oauth2.cpp:127
GOA2Manager::GOA2Manager
GOA2Manager()
Constructor.

Generated for GDAL by 1.8.8.