diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:07:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:07:14 +0000 |
commit | a175314c3e5827eb193872241446f2f8f5c9d33c (patch) | |
tree | cd3d60ca99ae00829c52a6ca79150a5b6e62528b /storage/maria/libmarias3/docs/api/functions.rst | |
parent | Initial commit. (diff) | |
download | mariadb-10.5-upstream/1%10.5.12.tar.xz mariadb-10.5-upstream/1%10.5.12.zip |
Adding upstream version 1:10.5.12.upstream/1%10.5.12upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'storage/maria/libmarias3/docs/api/functions.rst')
-rw-r--r-- | storage/maria/libmarias3/docs/api/functions.rst | 393 |
1 files changed, 393 insertions, 0 deletions
diff --git a/storage/maria/libmarias3/docs/api/functions.rst b/storage/maria/libmarias3/docs/api/functions.rst new file mode 100644 index 00000000..b30fac92 --- /dev/null +++ b/storage/maria/libmarias3/docs/api/functions.rst @@ -0,0 +1,393 @@ +Functions +========= + +ms3_library_init() +------------------ + +.. c:function:: void ms3_library_init(void) + + Initializes the library for use. + Should be called before any threads are spawned. + +ms3_library_deinit() +-------------------- + +.. c:function:: void ms3_library_deinit(void) + + Cleans up the library, typically for the end of the application's execution. + +ms3_library_init_malloc() +------------------------- + +.. c:function:: uint8_t ms3_library_init_malloc(ms3_malloc_callback m, ms3_free_callback f, ms3_realloc_callback r, ms3_strdup_callback s, ms3_calloc_callback c) + + Initialize the library for use with custom allocator replacement functions. These functions are also fed into libcurl. The function prototypes should be as follows: + + .. c:function:: void *ms3_malloc_callback(size_t size) + + To replace ``malloc()``. + + .. c:function:: void ms3_free_callback(void *ptr) + + To replace ``free()``. + + .. c:function:: void *ms3_realloc_callback(void *ptr, size_t size) + + To replace ``realloc()``. + + .. c:function:: char *ms3_strdup_callback(const char *str) + + To replace ``strdup()``. + + .. c:function:: void *ms3_calloc_callback(size_t nmemb, size_t size) + + To replace ``calloc()``. + + Should be called before any threads are spawned. All parameters are required or the function *will* fail. + + Remember: With great power comes great responsibility. + + :param m: The malloc callback + :param f: The free callback + :param r: The realloc callback + :param s: The strdup callback + :param c: The calloc callback + :returns: ``0`` on success, ``MS3_ERR_PARAMETER`` if a parameter is ``NULL`` + +ms3_init() +---------- + +.. c:function:: ms3_st *ms3_init(const char *s3key, const char *s3secret, const char *region, const char *base_domain) + + Initializes a :c:type:`ms3_st` object. This object should only be used in + the thread that created it because it reuses connections. But it is safe to + have other :c:type:`ms3_st` objects running at the same time in other threads. + + .. note:: + You *MUST* call :c:func:`ms3_library_init` before + spawning threads when using this access method. + + :param s3key: The AWS access key + :param s3secret: The AWS secret key + :param region: The AWS region to use (such as ``us-east-1``) + :param base_domain: A domain name to use if AWS S3 is not the desired server (set to ``NULL`` for S3) + :returns: A newly allocated marias3 object + +ms3_deinit() +------------ + +.. c:function:: void ms3_deinit(ms3_st *ms3) + + Cleans up and frees a :c:type:`ms3_st` object. + + :param ms3: The marias3 object + +ms3_server_error() +------------------ + +.. c:function:: const char *ms3_server_error(ms3_st *ms3) + + Returns the last error message from the S3 server or underlying Curl library. + + :param ms3: The marias3 object + :returns: The error message string or ``NULL`` if there is no message. + +ms3_error() +----------- + +.. c:function:: const char *ms3_error(uint8_t errcode) + + Returns an error message for a given error code + + :param errcode: The error code to translate + :returns: The error message + +ms3_debug() +----------- + +.. c:function:: void ms3_debug() + + Enables and disables debugging output on stderr. Each call toggles enable / disable. + + Note:: + This enables/disables globally for the library + +ms3_list() +---------- + +.. c:function:: uint8_t ms3_list(ms3_st *ms3, const char *bucket, const char *prefix, ms3_list_st **list) + + Retrieves a list of files from a given S3 bucket and fills it into a :c:type:`ms3_list_st`. + + The list generated is the eqivilent of a recursive directory listing but only has files in it, no entries for directories. + + The list will automatically be freed on the next list/list_dir call or :c:func:`ms3_deinit` + + :param ms3: The marias3 object + :param bucket: The bucket name to use + :param prefix: An optional path/file prefix to use (``NULL`` for all files) + :param list: A pointer to a pointer that will contain the returned list + :returns: ``0`` on success, a positive integer on failure + +Example +^^^^^^^ + +.. code-block:: c + + char *s3key= getenv("S3KEY"); + char *s3secret= getenv("S3SECRET"); + char *s3region= getenv("S3REGION"); + char *s3bucket= getenv("S3BUCKET"); + ms3_list_st *list= NULL, *list_it= NULL; + uint8_t res; + + ms3_library_init(); + ms3_st *ms3= ms3_thread_init(s3key, s3secret, s3region, NULL); + + res= ms3_list(ms3, s3bucket, NULL, &list); + if (res) + { + printf("Error occured: %d\n", res); + return; + } + list_it= list; + while(list_it) + { + printf("File: %s, size: %ld, tstamp: %ld\n", list_it->key, list_it->length, list_it->created); + list_it= list_it->next; + } + ms3_deinit(ms3); + +ms3_list_dir() +-------------- + +.. c:function:: uint8_t ms3_list_dir(ms3_st *ms3, const char *bucket, const char *prefix, ms3_list_st **list) + + Retrieves a list of files from a given S3 bucket and fills it into a :c:type:`ms3_list_st`. + + The list generated will automatically add the delimiter ``/`` and therefore filter up to the first ``/`` after the prefix. Unlike :c:func:`ms3_list` it includes directory entries. This is the eqivilent of doing a regular directory listing in a current directory (as designated by ``prefix``). + + The list will automatically be freed on the next list/list_dir call or :c:func:`ms3_deinit` + + :param ms3: The marias3 object + :param bucket: The bucket name to use + :param prefix: An optional path/file prefix to use (``NULL`` for all files) + :param list: A pointer to a pointer that will contain the returned list + :returns: ``0`` on success, a positive integer on failure + + +ms3_list_free() +--------------- + +.. c:function:: void ms3_list_free(ms3_list_st *list) + + .. deprecated:: 3.1.1 + Now a NULL operation which be removed in 4.0 + + A NULL operation, previously free'd :c:func:`ms3_list`, but this is now done internally on :c:func:`ms3_deinit` or when a new list is requested. + + :param list: The list to free + +ms3_put() +--------- + +.. c:function:: uint8_t ms3_put(ms3_st *ms3, const char *bucket, const char *key, const uint8_t *data, size_t length) + + Puts a binary data from a given pointer into S3 at a given key/filename. If an existing key/file exists with the same name this will be overwritten. + + :param ms3: The marias3 object + :param bucket: The bucket name to use + :param key: The key/filename to create/overwrite + :param data: A pointer to the data to write + :param length: The length of the data to write + :returns: ``0`` on success, a positive integer on failure + +Example +^^^^^^^ + +.. code-block:: c + + char *s3key= getenv("S3KEY"); + char *s3secret= getenv("S3SECRET"); + char *s3region= getenv("S3REGION"); + char *s3bucket= getenv("S3BUCKET"); + uint8_t res; + const char *test_string= "Another one bites the dust"; + + ms3_library_init(); + ms3_st *ms3= ms3_thread_init(s3key, s3secret, s3region, NULL); + + res= ms3_put(ms3, s3bucket, "test/ms3.txt", (const uint8_t*)test_string, strlen(test_string)); + if (res) + { + printf("Error occured: %d\n", res); + return; + } + ms3_deinit(ms3); + + +ms3_copy() +---------- + +.. c:function:: uint8_t ms3_copy(ms3_st *ms3, const char *source_bucket, const char *source_key, const char *dest_bucket, const char *dest_key) + + S3 internally copies an object from a source bucket and key to a destination bucket and key. + + :param ms3: The marias3 object + :param source_bucket: The bucket where the source object is + :param source_key: The key/filename of the source object + :param dest_bucket: The destination bucket (can be the same as source) + :param dest_key: The destination key/filename + :returns: ``0`` on success, a positive integer on failure + +ms3_move() +---------- + +.. c:function:: uint8_t ms3_move(ms3_st *ms3, const char *source_bucket, const char *source_key, const char *dest_bucket, const char *dest_key) + + Moves an object from source to destination. Internally the library performs a copy and if successful performs a delete on the source object. + + :param ms3: The marias3 object + :param source_bucket: The bucket where the source object is + :param source_key: The key/filename of the source object + :param dest_bucket: The destination bucket (can be the same as source) + :param dest_key: The destination key/filename + :returns: ``0`` on success, a positive integer on failure + +ms3_get() +--------- + +.. c:function:: uint8_t ms3_get(ms3_st *ms3, const char *bucket, const char *key, uint8_t **data, size_t *length) + + Retrieves a given object from S3. + + .. Note:: + The application is expected to free the resulting data pointer after use + + :param ms3: The marias3 object + :param bucket: The bucket name to use + :param key: The key/filename to retrieve + :param data: A pointer to a pointer the data to be retrieved into + :param length: A pointer to the data length + :returns: ``0`` on success, a positive integer on failure + +Example +^^^^^^^ + +.. code-block:: c + + char *s3key= getenv("S3KEY"); + char *s3secret= getenv("S3SECRET"); + char *s3region= getenv("S3REGION"); + char *s3bucket= getenv("S3BUCKET"); + uint8_t res; + uint8_t *data= NULL; + size_t length; + + ms3_library_init(); + ms3_st *ms3= ms3_thread_init(s3key, s3secret, s3region, NULL); + + res= ms3_get(ms3, s3bucket, "test/ms3.txt", &data, &length); + if (res) + { + printf("Error occured: %d\n", res); + return; + } + printf("File contents: %s\n", data); + printf("File length: %ld\n", length); + ms3_free(data); + ms3_deinit(ms3); + +ms3_free() +---------- + +.. c:function:: void ms3_free(uint8_t *data) + + Used to free the data allocated by :c:func:`ms3_get`. + + :param data: The data to free + +ms3_set_option() +---------------- + +.. c:function:: uint8_t ms3_set_option(ms3_st *ms3, ms3_set_option_t option, void *value) + + Sets a given connection option. See :c:type:`ms3_set_option_t` for a list of options. + + :param ms3: The marias3 object + :param option: The option to set + :param value: A pointer to the value for the option (if required, ``NULL`` if not) + :returns: ``0`` on success, a positive integer on failure + +ms3_delete() +------------ + +.. c:function:: uint8_t ms3_delete(ms3_st *ms3, const char *bucket, const char *key) + + Deletes an object from an S3 bucket + + :param ms3: The marias3 object + :param bucket: The bucket name to use + :param key: The key/filename to delete + :returns: ``0`` on success, a positive integer on failure + +Example +^^^^^^^ + +.. code-block:: c + + char *s3key= getenv("S3KEY"); + char *s3secret= getenv("S3SECRET"); + char *s3region= getenv("S3REGION"); + char *s3bucket= getenv("S3BUCKET"); + uint8_t res; + + ms3_library_init(); + ms3_st *ms3= ms3_thread_init(s3key, s3secret, s3region, NULL); + + res = ms3_delete(ms3, s3bucket, "test/ms3.txt"); + if (res) + { + printf("Error occured: %d\n", res); + return; + } + ms3_deinit(ms3); + +ms3_status() +------------ + +.. c:function:: uint8_t ms3_status(ms3_st *ms3, const char *bucket, const char *key, ms3_status_st *status) + + Retreives the status of a given filename/key into a :c:type:`ms3_status_st` object. Will return an error if not found. + + :param ms3: The marias3 object + :param bucket: The bucket name to use + :param key: The key/filename to status check + :param status: A status object to fill + :returns: ``0`` on success, a positive integer on failure + +Example +^^^^^^^ + +.. code-block:: c + + char *s3key= getenv("S3KEY"); + char *s3secret= getenv("S3SECRET"); + char *s3region= getenv("S3REGION"); + char *s3bucket= getenv("S3BUCKET"); + uint8_t res; + ms3_status_st status; + + ms3_library_init(); + ms3_st *ms3= ms3_thread_init(s3key, s3secret, s3region, NULL); + + res= ms3_status(ms3, s3bucket, "test/ms3.txt", &status); + if (res) + { + printf("Error occured: %d\n", res); + return; + } + printf("File length: %ld\n", status.length); + printf("File timestamp: %ld\n", status.created); + ms3_deinit(ms3); + |