mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-12-27 08:49:16 +08:00
f6e25b695e
re: https://github.com/Unidata/netcdf-c/issues/2117 re: https://github.com/Unidata/netcdf-c/issues/2119 * Modify libsrc to allow byte-range reading of netcdf-3 files in private S3 buckets; this required using the aws sdk. Also add a test case. * The aws sdk can sometimes cause problems if the Awd::ShutdownAPI function is not called. So at optional atexit() support to ensure it is called. This is disabled for Windows. * Add documentation to nczarr.md on how to build and use the aws sdk under windows. Currently it builds, but testing fails. * Switch testing from stratus to the Unidata bucket on S3. * Improve support for the s3: url protocol. * Add a s3 specific utility code file: ds3util.c * Modify NC_infermodel to attempt to read the magic number of byte-ranged files in S3. ## Misc. * Move and rename the core S3 SDK wrapper code (libnczarr/zs3sdk.cpp) to libdispatch since it now used in libsrc as well as libnczarr. * Add calls to nc_finalize in the utilities in case atexit is disabled. * Add header only json parser to the distribution rather than as a built source.
50 lines
1.9 KiB
C
50 lines
1.9 KiB
C
/* Copyright 2018-2018 University Corporation for Atmospheric
|
|
Research/Unidata. */
|
|
/**
|
|
* Header file for dhttp.c
|
|
* @author Dennis Heimbigner
|
|
*/
|
|
|
|
#ifndef NCHTTP_H
|
|
#define NCHTTP_H
|
|
|
|
typedef enum HTTPMETHOD {
|
|
HTTPNONE=0, HTTPGET=1, HTTPPUT=2, HTTPPOST=3, HTTPHEAD=4, HTTPDELETE=5
|
|
} HTTPMETHOD;
|
|
|
|
struct CURL; /* Forward */
|
|
|
|
typedef struct NC_HTTP_STATE {
|
|
struct CURL* curl;
|
|
long httpcode;
|
|
struct Response {
|
|
NClist* headset; /* which headers to capture */
|
|
NClist* headers; /* Set of captured headers */
|
|
NCbytes* buf; /* response content; call owns; do not free */
|
|
} response;
|
|
struct Request {
|
|
HTTPMETHOD method;
|
|
size_t payloadsize;
|
|
void* payload; /* caller owns; do not free */
|
|
size_t payloadpos;
|
|
NClist* headers;
|
|
} request;
|
|
char errbuf[1024]; /* assert(CURL_ERROR_SIZE <= 1024) */
|
|
} NC_HTTP_STATE;
|
|
|
|
extern int nc_http_init(NC_HTTP_STATE** state);
|
|
extern int nc_http_init_verbose(NC_HTTP_STATE** state, int verbose);
|
|
extern int nc_http_size(NC_HTTP_STATE* state, const char* url, long long unsigned* sizep);
|
|
extern int nc_http_read(NC_HTTP_STATE* state, const char* url, size64_t start, size64_t count, NCbytes* buf);
|
|
extern int nc_http_write(NC_HTTP_STATE* state, const char* url, NCbytes* payload);
|
|
extern int nc_http_close(NC_HTTP_STATE* state);
|
|
extern int nc_http_reset(NC_HTTP_STATE* state);
|
|
extern int nc_http_set_method(NC_HTTP_STATE* state, HTTPMETHOD method);
|
|
extern int nc_http_set_response(NC_HTTP_STATE* state, NCbytes* buf);
|
|
extern int nc_http_set_payload(NC_HTTP_STATE* state, size_t len, void* payload);
|
|
extern int nc_http_response_headset(NC_HTTP_STATE* state, const NClist* headers); /* Set of headers to capture */
|
|
extern int nc_http_response_headers(NC_HTTP_STATE* state, NClist** headersp); /* set of captured headers */
|
|
extern int nc_http_request_setheaders(NC_HTTP_STATE* state, const NClist* headers); /* set of extra request headers */
|
|
|
|
#endif /*NCHTTP_H*/
|