mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-12-03 08:01:25 +08:00
49737888ca
## Improvements to S3 Documentation * Create a new document *quickstart_paths.md* that give a summary of the legal path formats used by netcdf-c. This includes both file paths and URL paths. * Modify *nczarr.md* to remove most of the S3 related text. * Move the S3 text from *nczarr.md* to a new document *cloud.md*. * Add some S3-related text to the *byterange.md* document. Hopefully, this will make it easier for users to find the information they want. ## Rebuild NCZarr Testing In order to avoid problems with running make check in parallel, two changes were made: 1. The *nczarr_test* test system was rebuilt. Now, for each test. any generated files are kept in a test-specific directory, isolated from all other test executions. 2. Similarly, since the S3 test bucket is shared, any generated S3 objects are isolated using a test-specific key path. ## Other S3 Related Changes * Add code to ensure that files created on S3 are reclaimed at end of testing. * Used the bash "trap" command to ensure S3 cleanup even if the test fails. * Cleanup the S3 related configure.ac flag set since S3 is used in several places. So now one should use the option *--enable-s3* instead of *--enable-nczarr-s3*, although the latter is still kept as a deprecated alias for the former. * Get some of the github actions yml to work with S3; required fixing various test scripts adding a secret to access the Unidata S3 bucket. * Cleanup S3 portion of libnetcdf.settings.in and netcdf_meta.h.in and test_common.in. * Merge partial S3 support into dhttp.c. * Create an experimental s3 access library especially for use with Windows. It is enabled by using the options *--enable-s3-internal* (automake) or *-DENABLE_S3_INTERNAL=ON* (CMake). Also add a unit-test for it. * Move some definitions from ncrc.h to ncs3sdk.h ## Other Changes * Provide a default implementation of strlcpy and move this and similar defaults into *dmissing.c*.
131 lines
4.2 KiB
C
131 lines
4.2 KiB
C
/*
|
|
* Copyright 2018, University Corporation for Atmospheric Research
|
|
* See netcdf/COPYRIGHT file for copying and redistribution conditions.
|
|
*/
|
|
|
|
#ifndef NCURI_H
|
|
#define NCURI_H
|
|
|
|
#include "ncexternl.h"
|
|
|
|
/* Define flags to control what is included by ncuribuild;
|
|
protocol+host+port always included
|
|
*/
|
|
#define NCURIPATH 1
|
|
#define NCURIPWD 2
|
|
#define NCURIQUERY 4
|
|
#define NCURIFRAG 8
|
|
#define NCURIENCODEPATH 16 /* If output url path should be encoded */
|
|
#define NCURIENCODEQUERY 32 /* If output url query should be encoded */
|
|
#define NCURIENCODE (NCURIENCODEPATH|NCURIENCODEQUERY)
|
|
#define NCURIBASE (NCURIPWD|NCURIPATH)
|
|
#define NCURISVC (NCURIBASE|NCURIQUERY) /* for sending to server */
|
|
#define NCURIALL (NCURIBASE|NCURIQUERY|NCURIFRAG) /* for rebuilding after changes */
|
|
|
|
/*! This is an open structure meaning
|
|
it is ok to directly access its fields
|
|
*/
|
|
typedef struct NCURI {
|
|
char* uri; /* copy of url as passed by the caller */
|
|
char* protocol;
|
|
char* user; /* from user:password@ */
|
|
char* password; /* from user:password@ */
|
|
char* host; /*!< host*/
|
|
char* port; /*!< port */
|
|
char* path; /*!< path */
|
|
char* query; /*!< query */
|
|
char* fragment; /*!< fragment */
|
|
char** fraglist; /* envv style list of decomposed fragment*/
|
|
char** querylist; /* envv style list of decomposed query*/
|
|
#if 0
|
|
char* projection; /*!< without leading '?'*/
|
|
char* selection; /*!< with leading '&'*/
|
|
#endif
|
|
} NCURI;
|
|
|
|
#if 0
|
|
/* Declaration modifiers for DLL support (MSC et al) */
|
|
#if defined(DLL_NETCDF) /* define when library is a DLL */
|
|
# if defined(DLL_EXPORT) /* define when building the library */
|
|
# define MSC_EXTRA __declspec(dllexport)
|
|
# else
|
|
# define MSC_EXTRA __declspec(dllimport)
|
|
# endif
|
|
# include <io.h>
|
|
#else
|
|
#define MSC_EXTRA /**< Needed for DLL build. */
|
|
#endif /* defined(DLL_NETCDF) */
|
|
|
|
#define EXTERNL MSC_EXTRA extern /**< Needed for DLL build. */
|
|
#endif
|
|
|
|
#if defined(_CPLUSPLUS_) || defined(__CPLUSPLUS__) || defined(__CPLUSPLUS)
|
|
extern "C" {
|
|
#endif
|
|
|
|
EXTERNL int ncuriparse(const char* s, NCURI** ncuri);
|
|
EXTERNL void ncurifree(NCURI* ncuri);
|
|
|
|
/* Replace the protocol */
|
|
EXTERNL int ncurisetprotocol(NCURI*,const char* newprotocol);
|
|
|
|
/* Replace the host */
|
|
EXTERNL int ncurisethost(NCURI*,const char* newhost);
|
|
|
|
/* Replace the path */
|
|
EXTERNL int ncurisetpath(NCURI*,const char* newpath);
|
|
|
|
/* Replace the constraints */
|
|
EXTERNL int ncurisetquery(NCURI*,const char* query);
|
|
|
|
/* Replace the fragment list */
|
|
EXTERNL int ncurisetfragments(NCURI*, const char* fragments);
|
|
|
|
/* Rebuild the uri */
|
|
EXTERNL int ncurirebuild(NCURI*);
|
|
|
|
/* Replace a specific &key=...& in uri fragment */
|
|
EXTERNL int ncurisetfragmentkey(NCURI* duri,const char* key, const char* value);
|
|
|
|
/* append a specific &key=...& in uri fragment */
|
|
EXTERNL int ncuriappendfragmentkey(NCURI* duri,const char* key, const char* value);
|
|
|
|
/* Construct a complete NC URI; caller frees returned string */
|
|
EXTERNL char* ncuribuild(NCURI*,const char* prefix, const char* suffix, int flags);
|
|
|
|
/*! Search the fragment for a given parameter
|
|
Null result => entry not found; !NULL=>found;
|
|
In any case, the result is imutable and should not be free'd.
|
|
*/
|
|
EXTERNL const char* ncurifragmentlookup(NCURI*, const char* param);
|
|
|
|
/*! Search the query for a given parameter
|
|
Null result => entry not found; !NULL=>found;
|
|
In any case, the result is imutable and should not be free'd.
|
|
*/
|
|
EXTERNL const char* ncuriquerylookup(NCURI*, const char* param);
|
|
|
|
/* Obtain the complete list of fragment pairs in envv format */
|
|
EXTERNL const char** ncurifragmentparams(NCURI*);
|
|
|
|
/* Obtain the complete list of query pairs in envv format */
|
|
EXTERNL const char** ncuriqueryparams(NCURI*);
|
|
|
|
/* URL Encode/Decode */
|
|
EXTERNL char* ncuridecode(const char* s);
|
|
/* Partial decode */
|
|
EXTERNL char* ncuridecodepartial(const char* s, const char* decodeset);
|
|
/* Encode using specified character set */
|
|
EXTERNL char* ncuriencodeonly(const char* s, const char* allowable);
|
|
/* Encode user or pwd */
|
|
EXTERNL char* ncuriencodeuserpwd(const char* s);
|
|
|
|
/* Deep clone a uri */
|
|
EXTERNL NCURI* ncuriclone(NCURI*);
|
|
|
|
#if defined(_CPLUSPLUS_) || defined(__CPLUSPLUS__) || defined(__CPLUSPLUS)
|
|
}
|
|
#endif
|
|
|
|
#endif /*NCURI_H*/
|