VirtualBox

source: vbox/trunk/include/iprt/s3.h@ 98110

Last change on this file since 98110 was 98103, checked in by vboxsync, 23 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.9 KB
Line 
1/* $Id: s3.h 98103 2023-01-17 14:15:46Z vboxsync $ */
2/** @file
3 * IPRT - Simple Storage Service (S3) Communication API.
4 */
5
6/*
7 * Copyright (C) 2009-2023 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * The contents of this file may alternatively be used under the terms
26 * of the Common Development and Distribution License Version 1.0
27 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
28 * in the VirtualBox distribution, in which case the provisions of the
29 * CDDL are applicable instead of those of the GPL.
30 *
31 * You may elect to license modified versions of this file under the
32 * terms and conditions of either the GPL or the CDDL or both.
33 *
34 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
35 */
36
37#ifndef IPRT_INCLUDED_s3_h
38#define IPRT_INCLUDED_s3_h
39#ifndef RT_WITHOUT_PRAGMA_ONCE
40# pragma once
41#endif
42
43#include <iprt/types.h>
44
45RT_C_DECLS_BEGIN
46
47/** @defgroup grp_rt_s3 RTS3 - Simple Storage Service (S3) Communication API
48 * @ingroup grp_rt
49 * @{
50 */
51
52/** @todo the following three definitions may move the iprt/types.h later. */
53/** RTS3 interface handle. */
54typedef R3PTRTYPE(struct RTS3INTERNAL *) RTS3;
55/** Pointer to a RTS3 interface handle. */
56typedef RTS3 *PRTS3;
57/** Nil RTS3 interface handle. */
58#define NIL_RTS3 ((RTS3)0)
59
60
61/**
62 * S3 progress callback.
63 *
64 * @returns Reserved, must be 0.
65 *
66 * @param uPercent The process completion percentage.
67 * @param pvUser The user parameter given to RTS3SetProgressCallback.
68 */
69typedef DECLCALLBACKTYPE(int, FNRTS3PROGRESS,(unsigned uPercent, void *pvUser));
70/** Pointer to a S3 progress callback. */
71typedef FNRTS3PROGRESS *PFNRTS3PROGRESS;
72
73
74/** Pointer to an S3 bucket entry. */
75typedef struct RTS3BUCKETENTRY *PRTS3BUCKETENTRY;
76/** Pointer to a const S3 bucket entry. */
77typedef struct RTS3BUCKETENTRY const *PCRTS3BUCKETENTRY;
78/**
79 * RTS3 bucket entry.
80 *
81 * Represent a bucket of the S3 storage server. Bucket entries are chained as a
82 * doubly linked list using the pPrev & pNext member.
83 *
84 * @todo Consider making the entire list const unless there are plans for
85 * more APIs using this structure which requires the caller to create
86 * or modify it.
87 */
88typedef struct RTS3BUCKETENTRY
89{
90 /** The previous element. */
91 PRTS3BUCKETENTRY pPrev;
92 /** The next element. */
93 PRTS3BUCKETENTRY pNext;
94
95 /** The name of the bucket. */
96 char const *pszName;
97 /** The creation date of the bucket as string. */
98 char const *pszCreationDate;
99} RTS3BUCKETENTRY;
100
101
102/** Pointer to an S3 key entry. */
103typedef struct RTS3KEYENTRY *PRTS3KEYENTRY;
104/** Pointer to a const S3 key entry. */
105typedef struct RTS3KEYENTRY const *PCRTS3KEYENTRY;
106/**
107 * RTS3 key entry.
108 *
109 * Represent a key of the S3 storage server. Key entries are chained as a doubly
110 * linked list using the pPrev & pNext member.
111 *
112 * @todo Consider making the entire list const unless there are plans for
113 * more APIs using this structure which requires the caller to create
114 * or modify it.
115 */
116typedef struct RTS3KEYENTRY
117{
118 /** The previous element. */
119 PRTS3KEYENTRY pPrev;
120 /** The next element. */
121 PRTS3KEYENTRY pNext;
122
123 /** The name of the key. */
124 char const *pszName;
125 /** The date this key was last modified as string. */
126 char const *pszLastModified;
127 /** The size of the file behind this key in bytes. */
128 uint64_t cbFile;
129} RTS3KEYENTRY;
130
131
132/**
133 * Creates a RTS3 interface handle.
134 *
135 * @returns iprt status code.
136 *
137 * @param phS3 Where to store the RTS3 handle.
138 * @param pszAccessKey The access key for the S3 storage server.
139 * @param pszSecretKey The secret access key for the S3 storage server.
140 * @param pszBaseUrl The base URL of the S3 storage server.
141 * @param pszUserAgent An optional user agent string used in the HTTP
142 * communication.
143 */
144RTR3DECL(int) RTS3Create(PRTS3 phS3, const char *pszAccessKey, const char *pszSecretKey, const char *pszBaseUrl, const char *pszUserAgent);
145
146/**
147 * Destroys a RTS3 interface handle.
148 *
149 * @returns iprt status code.
150 *
151 * @param hS3 Handle to the RTS3 interface.
152 */
153RTR3DECL(void) RTS3Destroy(RTS3 hS3);
154
155/**
156 * Sets an optional progress callback.
157 *
158 * This callback function will be called when the completion percentage of an S3
159 * operation changes.
160 *
161 * @returns iprt status code.
162 *
163 * @param hS3 Handle to the RTS3 interface.
164 * @param pfnProgressCB The pointer to the progress function.
165 * @param pvUser The pvUser arg of FNRTS3PROGRESS.
166 */
167RTR3DECL(void) RTS3SetProgressCallback(RTS3 hS3, PFNRTS3PROGRESS pfnProgressCB, void *pvUser);
168
169/**
170 * Gets a list of all available buckets on the S3 storage server.
171 *
172 * You have to delete ppBuckets after usage with RTS3BucketsDestroy.
173 *
174 * @returns iprt status code.
175 *
176 * @param hS3 Handle to the RTS3 interface.
177 * @param ppBuckets Where to store the pointer to the head of the
178 * returned bucket list. Consider the entire list
179 * read-only.
180 */
181RTR3DECL(int) RTS3GetBuckets(RTS3 hS3, PCRTS3BUCKETENTRY *ppBuckets);
182
183/**
184 * Destroys the bucket list returned by RTS3GetBuckets.
185 *
186 * @returns iprt status code.
187 *
188 * @param pBuckets Pointer to the first bucket entry.
189 */
190RTR3DECL(int) RTS3BucketsDestroy(PCRTS3BUCKETENTRY pBuckets);
191
192/**
193 * Creates a new bucket on the S3 storage server.
194 *
195 * This name have to be unique over all accounts on the S3 storage server.
196 *
197 * @returns iprt status code.
198 *
199 * @param hS3 Handle to the RTS3 interface.
200 * @param pszBucketName Name of the new bucket.
201 */
202RTR3DECL(int) RTS3CreateBucket(RTS3 hS3, const char *pszBucketName);
203
204/**
205 * Deletes a bucket on the S3 storage server.
206 *
207 * The bucket must be empty.
208 *
209 * @returns iprt status code.
210 *
211 * @param hS3 Handle to the RTS3 interface.
212 * @param pszBucketName Name of the bucket to delete.
213 */
214RTR3DECL(int) RTS3DeleteBucket(RTS3 hS3, const char *pszBucketName);
215
216/**
217 * Gets a list of all available keys in a bucket on the S3 storage server.
218 *
219 * You have to delete ppKeys after usage with RTS3KeysDestroy.
220 *
221 * @returns iprt status code.
222 *
223 * @param hS3 Handle to the RTS3 interface.
224 * @param pszBucketName Name of the bucket to delete.
225 * @param ppKeys Where to store the pointer to the head of the
226 * returned key list. Consider the entire list
227 * read-only.
228 */
229RTR3DECL(int) RTS3GetBucketKeys(RTS3 hS3, const char *pszBucketName, PCRTS3KEYENTRY *ppKeys);
230
231/**
232 * Delete the key list returned by RTS3GetBucketKeys.
233 *
234 * @returns iprt status code.
235 *
236 * @param pKeys Pointer to the first key entry.
237 */
238RTR3DECL(int) RTS3KeysDestroy(PCRTS3KEYENTRY pKeys);
239
240/**
241 * Deletes a key in a bucket on the S3 storage server.
242 *
243 * @returns iprt status code.
244 *
245 * @param hS3 Handle to the RTS3 interface.
246 * @param pszBucketName Name of the bucket contains pszKeyName.
247 * @param pszKeyName Name of the key to delete.
248 */
249RTR3DECL(int) RTS3DeleteKey(RTS3 hS3, const char *pszBucketName, const char *pszKeyName);
250
251/**
252 * Downloads a key from a bucket into a file.
253 *
254 * The file must not exists.
255 *
256 * @returns iprt status code.
257 *
258 * @param hS3 Handle to the RTS3 interface.
259 * @param pszBucketName Name of the bucket that contains pszKeyName.
260 * @param pszKeyName Name of the key to download.
261 * @param pszFilename Name of the file to store the downloaded key as.
262 */
263RTR3DECL(int) RTS3GetKey(RTS3 hS3, const char *pszBucketName, const char *pszKeyName, const char *pszFilename);
264
265/**
266 * Uploads the content of a file into a key in the specified bucked.
267 *
268 * @returns iprt status code.
269 *
270 * @param hS3 Handle to the RTS3 interface.
271 * @param pszBucketName Name of the bucket where the new key should be
272 * created.
273 * @param pszKeyName Name of the new key.
274 * @param pszFilename Name of the file to upload the content of.
275 */
276RTR3DECL(int) RTS3PutKey(RTS3 hS3, const char *pszBucketName, const char *pszKeyName, const char *pszFilename);
277
278/** @} */
279
280RT_C_DECLS_END
281
282#endif /* !IPRT_INCLUDED_s3_h */
283
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette